A pitch represents a specific frequency of sound with a letter name, octave, and accidental. E.g. the pitch "B♭4".
Music.Internal.Pitch.Pitch
transposeUp : Music.Internal.Interval.Interval -> Pitch -> Pitch
Transpose a pitch upward by an interval.
transposeUp Interval.perfectFifth c4 == g4
transposeDown : Music.Internal.Interval.Interval -> Pitch -> Pitch
Transpose a pitch downward by an interval.
transposeDown Interval.perfectFifth c4 == f3
intervalBetween : Pitch -> Pitch -> Music.Internal.Interval.Interval
Get the interval between two pitches:
intervalBetween c4 g4 == Interval.perfectFifth
areEnharmonicEquivalents : Pitch -> Pitch -> Basics.Bool
Check whether two pitches are enharmonic equivalents of each other. Enharmonic equivalents are two pitches with different names but the same sound:
areEnharmonicEquivalents cSharp4 dFlat4 == True
octave : Pitch -> Basics.Int
Get the octave of a pitch:
octave c4 == 4
chromaticRun : Pitch -> Pitch -> List Pitch
Generate a section of the ascending or descending chromatic scale between two pitches:
chromaticRun a4 d5
== [ a4
, aSharp4
, b4
, c5
, cSharp5
, d5
]
Ascending runs use sharps; descending runs use flats:
chromaticRun d5 a4
== [ d5
, dFlat5
, c5
, b4
, bFlat4
, a4
]
semitones : Pitch -> Basics.Int
Distance in semitones from C0. Useful for sorting.
semitones c4 == 48
toMIDINoteNumber : Pitch -> Basics.Int
Convert a pitch to a MIDI number:
toMIDINoteNumber c4 == 60
toFrequency : Pitch -> Basics.Float
Convert a pitch to a frequency in Hertz:
toFrequency c4 == 261.6255653005986
toString : Pitch -> String
A pitch's letter name, accidental, and octave number:
toString cSharp4 == "C♯4"
fromPitchClassInOctave : Basics.Int -> Music.Internal.PitchClass.PitchClass -> Pitch
Create a pitch from a pitch class and octave number:
fromPitchClassInOctave 4 c == c4
Equivalent pitches can be spelled multiple ways. These functions help with respelling pitches for certain circumstances.
normalize : Pitch -> Pitch
Respell a pitch with at most two accidentals:
bTripleSharp4 =
bSharp4
|> transposeUp Interval.augmentedUnison
|> transposeUp Interval.augmentedUnison
normalize bTripleSharp4
== d5
Pitches with three or more accidentals are theoretically possible, but extremely unlikely in practice; most notation software will not support them. This function is a helpful pre-export step if you plan to use pitch data with software in which three or more accidentals are not representable.
simplify : Pitch -> Pitch
Respell a pitch with as few accidentals as possible:
simplify fFlat4
== e4
This is helpful in musical idioms like jazz, where simple spellings are preferred.
c0 : Music.Internal.Pitch.Pitch
c1 : Music.Internal.Pitch.Pitch
c2 : Music.Internal.Pitch.Pitch
c3 : Music.Internal.Pitch.Pitch
c4 : Music.Internal.Pitch.Pitch
c5 : Music.Internal.Pitch.Pitch
c6 : Music.Internal.Pitch.Pitch
c7 : Music.Internal.Pitch.Pitch
c8 : Music.Internal.Pitch.Pitch
cSharp0 : Music.Internal.Pitch.Pitch
cSharp1 : Music.Internal.Pitch.Pitch
cSharp2 : Music.Internal.Pitch.Pitch
cSharp3 : Music.Internal.Pitch.Pitch
cSharp4 : Music.Internal.Pitch.Pitch
cSharp5 : Music.Internal.Pitch.Pitch
cSharp6 : Music.Internal.Pitch.Pitch
cSharp7 : Music.Internal.Pitch.Pitch
cSharp8 : Music.Internal.Pitch.Pitch
d0 : Music.Internal.Pitch.Pitch
d1 : Music.Internal.Pitch.Pitch
d2 : Music.Internal.Pitch.Pitch
d3 : Music.Internal.Pitch.Pitch
d4 : Music.Internal.Pitch.Pitch
d5 : Music.Internal.Pitch.Pitch
d6 : Music.Internal.Pitch.Pitch
d7 : Music.Internal.Pitch.Pitch
d8 : Music.Internal.Pitch.Pitch
dFlat0 : Music.Internal.Pitch.Pitch
dFlat1 : Music.Internal.Pitch.Pitch
dFlat2 : Music.Internal.Pitch.Pitch
dFlat3 : Music.Internal.Pitch.Pitch
dFlat4 : Music.Internal.Pitch.Pitch
dFlat5 : Music.Internal.Pitch.Pitch
dFlat6 : Music.Internal.Pitch.Pitch
dFlat7 : Music.Internal.Pitch.Pitch
dFlat8 : Music.Internal.Pitch.Pitch
dSharp0 : Music.Internal.Pitch.Pitch
dSharp1 : Music.Internal.Pitch.Pitch
dSharp2 : Music.Internal.Pitch.Pitch
dSharp3 : Music.Internal.Pitch.Pitch
dSharp4 : Music.Internal.Pitch.Pitch
dSharp5 : Music.Internal.Pitch.Pitch
dSharp6 : Music.Internal.Pitch.Pitch
dSharp7 : Music.Internal.Pitch.Pitch
dSharp8 : Music.Internal.Pitch.Pitch
e0 : Music.Internal.Pitch.Pitch
e1 : Music.Internal.Pitch.Pitch
e2 : Music.Internal.Pitch.Pitch
e3 : Music.Internal.Pitch.Pitch
e4 : Music.Internal.Pitch.Pitch
e5 : Music.Internal.Pitch.Pitch
e6 : Music.Internal.Pitch.Pitch
e7 : Music.Internal.Pitch.Pitch
e8 : Music.Internal.Pitch.Pitch
eFlat0 : Music.Internal.Pitch.Pitch
eFlat1 : Music.Internal.Pitch.Pitch
eFlat2 : Music.Internal.Pitch.Pitch
eFlat3 : Music.Internal.Pitch.Pitch
eFlat4 : Music.Internal.Pitch.Pitch
eFlat5 : Music.Internal.Pitch.Pitch
eFlat6 : Music.Internal.Pitch.Pitch
eFlat7 : Music.Internal.Pitch.Pitch
eFlat8 : Music.Internal.Pitch.Pitch
f0 : Music.Internal.Pitch.Pitch
f1 : Music.Internal.Pitch.Pitch
f2 : Music.Internal.Pitch.Pitch
f3 : Music.Internal.Pitch.Pitch
f4 : Music.Internal.Pitch.Pitch
f5 : Music.Internal.Pitch.Pitch
f6 : Music.Internal.Pitch.Pitch
f7 : Music.Internal.Pitch.Pitch
f8 : Music.Internal.Pitch.Pitch
fSharp0 : Music.Internal.Pitch.Pitch
fSharp1 : Music.Internal.Pitch.Pitch
fSharp2 : Music.Internal.Pitch.Pitch
fSharp3 : Music.Internal.Pitch.Pitch
fSharp4 : Music.Internal.Pitch.Pitch
fSharp5 : Music.Internal.Pitch.Pitch
fSharp6 : Music.Internal.Pitch.Pitch
fSharp7 : Music.Internal.Pitch.Pitch
fSharp8 : Music.Internal.Pitch.Pitch
g0 : Music.Internal.Pitch.Pitch
g1 : Music.Internal.Pitch.Pitch
g2 : Music.Internal.Pitch.Pitch
g3 : Music.Internal.Pitch.Pitch
g4 : Music.Internal.Pitch.Pitch
g5 : Music.Internal.Pitch.Pitch
g6 : Music.Internal.Pitch.Pitch
g7 : Music.Internal.Pitch.Pitch
g8 : Music.Internal.Pitch.Pitch
gFlat0 : Music.Internal.Pitch.Pitch
gFlat1 : Music.Internal.Pitch.Pitch
gFlat2 : Music.Internal.Pitch.Pitch
gFlat3 : Music.Internal.Pitch.Pitch
gFlat4 : Music.Internal.Pitch.Pitch
gFlat5 : Music.Internal.Pitch.Pitch
gFlat6 : Music.Internal.Pitch.Pitch
gFlat7 : Music.Internal.Pitch.Pitch
gFlat8 : Music.Internal.Pitch.Pitch
gSharp0 : Music.Internal.Pitch.Pitch
gSharp1 : Music.Internal.Pitch.Pitch
gSharp2 : Music.Internal.Pitch.Pitch
gSharp3 : Music.Internal.Pitch.Pitch
gSharp4 : Music.Internal.Pitch.Pitch
gSharp5 : Music.Internal.Pitch.Pitch
gSharp6 : Music.Internal.Pitch.Pitch
gSharp7 : Music.Internal.Pitch.Pitch
gSharp8 : Music.Internal.Pitch.Pitch
a0 : Music.Internal.Pitch.Pitch
a1 : Music.Internal.Pitch.Pitch
a2 : Music.Internal.Pitch.Pitch
a3 : Music.Internal.Pitch.Pitch
a4 : Music.Internal.Pitch.Pitch
a5 : Music.Internal.Pitch.Pitch
a6 : Music.Internal.Pitch.Pitch
a7 : Music.Internal.Pitch.Pitch
a8 : Music.Internal.Pitch.Pitch
aFlat0 : Music.Internal.Pitch.Pitch
aFlat1 : Music.Internal.Pitch.Pitch
aFlat2 : Music.Internal.Pitch.Pitch
aFlat3 : Music.Internal.Pitch.Pitch
aFlat4 : Music.Internal.Pitch.Pitch
aFlat5 : Music.Internal.Pitch.Pitch
aFlat6 : Music.Internal.Pitch.Pitch
aFlat7 : Music.Internal.Pitch.Pitch
aFlat8 : Music.Internal.Pitch.Pitch
aSharp0 : Music.Internal.Pitch.Pitch
aSharp1 : Music.Internal.Pitch.Pitch
aSharp2 : Music.Internal.Pitch.Pitch
aSharp3 : Music.Internal.Pitch.Pitch
aSharp4 : Music.Internal.Pitch.Pitch
aSharp5 : Music.Internal.Pitch.Pitch
aSharp6 : Music.Internal.Pitch.Pitch
aSharp7 : Music.Internal.Pitch.Pitch
aSharp8 : Music.Internal.Pitch.Pitch
b0 : Music.Internal.Pitch.Pitch
b1 : Music.Internal.Pitch.Pitch
b2 : Music.Internal.Pitch.Pitch
b3 : Music.Internal.Pitch.Pitch
b4 : Music.Internal.Pitch.Pitch
b5 : Music.Internal.Pitch.Pitch
b6 : Music.Internal.Pitch.Pitch
b7 : Music.Internal.Pitch.Pitch
b8 : Music.Internal.Pitch.Pitch
bFlat0 : Music.Internal.Pitch.Pitch
bFlat1 : Music.Internal.Pitch.Pitch
bFlat2 : Music.Internal.Pitch.Pitch
bFlat3 : Music.Internal.Pitch.Pitch
bFlat4 : Music.Internal.Pitch.Pitch
bFlat5 : Music.Internal.Pitch.Pitch
bFlat6 : Music.Internal.Pitch.Pitch
bFlat7 : Music.Internal.Pitch.Pitch
bFlat8 : Music.Internal.Pitch.Pitch
These are used less frequently in music. Most likely you want a pitch from the previous section.
cFlat1 : Music.Internal.Pitch.Pitch
cFlat2 : Music.Internal.Pitch.Pitch
cFlat3 : Music.Internal.Pitch.Pitch
cFlat4 : Music.Internal.Pitch.Pitch
cFlat5 : Music.Internal.Pitch.Pitch
cFlat6 : Music.Internal.Pitch.Pitch
cFlat7 : Music.Internal.Pitch.Pitch
cFlat8 : Music.Internal.Pitch.Pitch
eSharp0 : Music.Internal.Pitch.Pitch
eSharp1 : Music.Internal.Pitch.Pitch
eSharp2 : Music.Internal.Pitch.Pitch
eSharp3 : Music.Internal.Pitch.Pitch
eSharp4 : Music.Internal.Pitch.Pitch
eSharp5 : Music.Internal.Pitch.Pitch
eSharp6 : Music.Internal.Pitch.Pitch
eSharp7 : Music.Internal.Pitch.Pitch
eSharp8 : Music.Internal.Pitch.Pitch
fFlat0 : Music.Internal.Pitch.Pitch
fFlat1 : Music.Internal.Pitch.Pitch
fFlat2 : Music.Internal.Pitch.Pitch
fFlat3 : Music.Internal.Pitch.Pitch
fFlat4 : Music.Internal.Pitch.Pitch
fFlat5 : Music.Internal.Pitch.Pitch
fFlat6 : Music.Internal.Pitch.Pitch
fFlat7 : Music.Internal.Pitch.Pitch
fFlat8 : Music.Internal.Pitch.Pitch
bSharp0 : Music.Internal.Pitch.Pitch
bSharp1 : Music.Internal.Pitch.Pitch
bSharp2 : Music.Internal.Pitch.Pitch
bSharp3 : Music.Internal.Pitch.Pitch
bSharp4 : Music.Internal.Pitch.Pitch
bSharp5 : Music.Internal.Pitch.Pitch
bSharp6 : Music.Internal.Pitch.Pitch
bSharp7 : Music.Internal.Pitch.Pitch
bSharp8 : Music.Internal.Pitch.Pitch