Safe Haskell | Safe-Inferred |
---|
Common music notation intervals.
- data Interval_T
- data Interval_Q
- = Diminished
- | Minor
- | Perfect
- | Major
- | Augmented
- data Interval = Interval {}
- interval_ty :: Note_T -> Note_T -> Interval_T
- interval_q_tbl :: Integral n => [(Interval_T, [(n, Interval_Q)])]
- interval_q :: Interval_T -> Int -> Maybe Interval_Q
- interval_q_reverse :: Interval_T -> Interval_Q -> Maybe Integer
- interval_semitones :: Interval -> Integer
- note_span :: Note_T -> Note_T -> [Note_T]
- invert_ordering :: Ordering -> Ordering
- interval :: Pitch -> Pitch -> Interval
- invert_interval :: Interval -> Interval
- quality_difference_m :: Interval_Q -> Interval_Q -> Maybe Int
- quality_difference :: Interval_Q -> Interval_Q -> Int
- transpose :: Interval -> Pitch -> Pitch
- circle_of_fifths :: Pitch -> ([Pitch], [Pitch])
Documentation
data Interval_T Source
Interval type or degree.
data Interval_Q Source
Interval quality.
Common music notation interval. An Ordering
of LT
indicates
an ascending interval, GT
a descending interval, and EQ
a
unison.
interval_ty :: Note_T -> Note_T -> Interval_TSource
Interval type between Note_T
values.
map (interval_ty C) [E,B] == [Third,Seventh]
interval_q_tbl :: Integral n => [(Interval_T, [(n, Interval_Q)])]Source
Table of interval qualities. For each Interval_T
gives
directed semitone interval counts for each allowable Interval_Q
.
For lookup function see interval_q
, for reverse lookup see
interval_q_reverse
.
interval_q :: Interval_T -> Int -> Maybe Interval_QSource
Lookup Interval_Q
for given Interval_T
and semitone count.
interval_q Unison 11 == Just Diminished interval_q Third 5 == Just Augmented interval_q Fourth 5 == Just Perfect interval_q Unison 3 == Nothing
interval_q_reverse :: Interval_T -> Interval_Q -> Maybe IntegerSource
Lookup semitone difference of Interval_T
with Interval_Q
.
interval_q_reverse Third Minor == Just 3 interval_q_reverse Unison Diminished == Just 11
interval_semitones :: Interval -> IntegerSource
Semitone difference of Interval
.
interval_semitones (interval (Pitch C Sharp 4) (Pitch E Sharp 5)) == 16 interval_semitones (interval (Pitch C Natural 4) (Pitch D Sharp 3)) == -9
note_span :: Note_T -> Note_T -> [Note_T]Source
Inclusive set of Note_T
within indicated interval. This is not
equal to enumFromTo
which is not circular.
note_span E B == [E,F,G,A,B] note_span B D == [B,C,D] enumFromTo B D == []
invert_interval :: Interval -> IntervalSource
Apply invert_ordering
to interval_direction
of Interval
.
invert_interval (Interval Third Major LT 1) == Interval Third Major GT 1
quality_difference_m :: Interval_Q -> Interval_Q -> Maybe IntSource
The signed difference in semitones between two Interval_Q
values when applied to the same Interval_T
. Can this be written
correctly without knowing the Interval_T?
quality_difference_m Minor Augmented == Just 2 quality_difference_m Augmented Diminished == Just (-3) quality_difference_m Major Perfect == Nothing
quality_difference :: Interval_Q -> Interval_Q -> IntSource
Erroring variant of quality_difference_m
.