Safe Haskell | Safe-Inferred |
---|---|
Language | Haskell98 |
Common music notation note and alteration values.
- data Note_T
- note_to_pc :: Integral i => Note_T -> i
- note_t_transpose :: Note_T -> Int -> Note_T
- data Alteration_T
- generic_alteration_to_diff :: Integral i => Alteration_T -> Maybe i
- alteration_to_diff :: Alteration_T -> Maybe Int
- alteration_is_12et :: Alteration_T -> Bool
- alteration_to_diff_err :: Integral i => Alteration_T -> i
- alteration_to_fdiff :: Fractional n => Alteration_T -> n
- fdiff_to_alteration :: (Fractional n, Eq n) => n -> Maybe Alteration_T
- alteration_raise_quarter_tone :: Alteration_T -> Maybe Alteration_T
- alteration_lower_quarter_tone :: Alteration_T -> Maybe Alteration_T
- alteration_edit_quarter_tone :: (Fractional n, Eq n) => n -> Alteration_T -> Maybe Alteration_T
- alteration_clear_quarter_tone :: Alteration_T -> Alteration_T
- alteration_symbol :: Alteration_T -> Char
- alteration_iso_m :: Alteration_T -> Maybe String
- alteration_iso :: Alteration_T -> String
- alteration_tonh :: Alteration_T -> String
- type Alteration_T' = (Rational, String)
- alteration_t' :: Alteration_T -> Alteration_T'
- type Spelling n = n -> (Note_T, Alteration_T)
Note
Enumeration of common music notation note names (C
to B
).
note_to_pc :: Integral i => Note_T -> i Source
Transform Note_T
to pitch-class number.
map note_to_pc [C,E,G] == [0,4,7]
note_t_transpose :: Note_T -> Int -> Note_T Source
Modal transposition of Note_T
value.
note_t_transpose C 2 == E
Alteration
data Alteration_T Source
Enumeration of common music notation note alterations.
generic_alteration_to_diff :: Integral i => Alteration_T -> Maybe i Source
Generic form.
alteration_to_diff :: Alteration_T -> Maybe Int Source
Transform Alteration_T
to semitone alteration. Returns
Nothing
for non-semitone alterations.
map alteration_to_diff [Flat,QuarterToneSharp] == [Just (-1),Nothing]
alteration_is_12et :: Alteration_T -> Bool Source
Is Alteration_T
12-ET.
alteration_to_diff_err :: Integral i => Alteration_T -> i Source
Transform Alteration_T
to semitone alteration.
map alteration_to_diff_err [Flat,Sharp] == [-1,1]
alteration_to_fdiff :: Fractional n => Alteration_T -> n Source
Transform Alteration_T
to fractional semitone alteration,
ie. allow quarter tones.
alteration_to_fdiff QuarterToneSharp == 0.5
fdiff_to_alteration :: (Fractional n, Eq n) => n -> Maybe Alteration_T Source
Transform fractional semitone alteration to Alteration_T
,
ie. allow quarter tones.
map fdiff_to_alteration [-0.5,0.5] == [Just QuarterToneFlat ,Just QuarterToneSharp]
alteration_raise_quarter_tone :: Alteration_T -> Maybe Alteration_T Source
Raise Alteration_T
by a quarter tone where possible.
alteration_raise_quarter_tone Flat == Just QuarterToneFlat alteration_raise_quarter_tone DoubleSharp == Nothing
alteration_lower_quarter_tone :: Alteration_T -> Maybe Alteration_T Source
Lower Alteration_T
by a quarter tone where possible.
alteration_lower_quarter_tone Sharp == Just QuarterToneSharp alteration_lower_quarter_tone DoubleFlat == Nothing
alteration_edit_quarter_tone :: (Fractional n, Eq n) => n -> Alteration_T -> Maybe Alteration_T Source
Edit Alteration_T
by a quarter tone where possible, -0.5
lowers, 0
retains, 0.5
raises.
import Data.Ratio alteration_edit_quarter_tone (-1 % 2) Flat == Just ThreeQuarterToneFlat
alteration_clear_quarter_tone :: Alteration_T -> Alteration_T Source
Simplify Alteration_T
to standard 12ET by deleting quarter tones.
Data.List.nub (map alteration_clear_quarter_tone [minBound..maxBound])
alteration_symbol :: Alteration_T -> Char Source
Unicode has entries for Musical Symbols in the range U+1D100
through U+1D1FF
. The 3/4
symbols are non-standard, here they
correspond to MUSICAL SYMBOL FLAT DOWN
and MUSICAL SYMBOL SHARP
UP
.
map alteration_symbol [minBound .. maxBound] == "𝄫𝄭♭𝄳♮𝄲♯𝄰𝄪"
alteration_iso_m :: Alteration_T -> Maybe String Source
The ISO
ASCII spellings for alterations. Naturals as written
as the empty string.
mapMaybe alteration_iso_m [Flat .. Sharp] == ["b","","#"]
alteration_iso :: Alteration_T -> String Source
The ISO
ASCII spellings for alterations.
alteration_tonh :: Alteration_T -> String Source
The Tonhöhe ASCII spellings for alterations.
See http://www.musiccog.ohio-state.edu/Humdrum/guide04.html and http://lilypond.org/doc/v2.16/Documentation/notation/writing-pitches
map alteration_tonh [Flat .. Sharp] == ["es","eh","","ih","is"]
Generalised Alteration
type Alteration_T' = (Rational, String) Source
Generalised alteration, given as a rational semitone difference and a string representation of the alteration.
alteration_t' :: Alteration_T -> Alteration_T' Source
Transform Alteration_T
to Alteration_T'
.
let r = [(-1,"♭"),(0,"♮"),(1,"♯")] in map alteration_t' [Flat,Natural,Sharp] == r
type Spelling n = n -> (Note_T, Alteration_T) Source
Function to spell a PitchClass
.