hmt-0.15: Haskell Music Theory

Safe HaskellSafe-Inferred
LanguageHaskell98

Music.Theory.Pitch.Note

Contents

Description

Common music notation note and alteration values.

Synopsis

Note

data Note_T Source

Enumeration of common music notation note names (C to B).

Constructors

C 
D 
E 
F 
G 
A 
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

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_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.