Music.Theory.Duration

Description

Common music notation duration model.

Synopsis

# Documentation

data Duration Source

Common music notation durational model

Constructors

 Duration Fieldsdivision :: Integerdivision of whole note dots :: Integernumber of dots multiplier :: Rationaltuplet modifier

Instances

 Eq Duration Ord Duration `Ord` instance in terms of `duration_compare_meq_err`. Show Duration

Are multipliers equal?

Compare durations with equal multipliers.

Erroring variant of `duration_compare_meq`.

order_pair :: Ordering -> (t, t) -> (t, t)Source

sort_pair :: (t -> t -> Ordering) -> (t, t) -> (t, t)Source

Sort a pair of equal type values using given comparison function.

``` sort_pair compare ('b','a') == ('a','b')
```

sort_pair_m :: (t -> t -> Maybe Ordering) -> (t, t) -> Maybe (t, t)Source

no_dots :: (Duration, Duration) -> BoolSource

True if neither duration is dotted.

Sum undotted divisions, input is required to be sorted.

Sum dotted divisions, input is required to be sorted.

``` sum_dur_dotted (4,1,4,1) == Just (Duration 2 1 1)
sum_dur_dotted (4,0,2,1) == Just (Duration 1 0 1)
sum_dur_dotted (8,1,4,0) == Just (Duration 4 2 1)
sum_dur_dotted (16,0,4,2) == Just (Duration 2 0 1)
```

Sum durations. Not all durations can be summed, and the present algorithm is not exhaustive.

``` import Music.Theory.Duration.Name
sum_dur quarter_note eighth_note == Just dotted_quarter_note
sum_dur dotted_quarter_note eighth_note == Just half_note
sum_dur quarter_note dotted_eighth_note == Just double_dotted_quarter_note
```

Erroring variant of `sum_dur`.

Give `MusicXML` type for division.

``` map whole_note_division_to_musicxml_type [2,4] == ["half","quarter"]
```

Variant of `whole_note_division_to_musicxml_type` extracting `division` from `Duration`.

``` duration_to_musicxml_type quarter_note == "quarter"
```

Give Lilypond notation for `Duration`. Note that the duration multiplier is not written.

``` import Music.Theory.Duration.Name
map duration_to_lilypond_type [half_note,dotted_quarter_note] == ["2","4."]
```

Calculate number of beams at notated division.

``` whole_note_division_to_beam_count 32 == Just 3
```

Calculate number of beams at `Duration`.

``` map duration_beam_count [half_note,sixteenth_note] == [0,2]
```