music-pitch-1.6.2: Abstract representation of musical pitch.

Portabilitynon-portable (TF,GNTD)
Stabilityexperimental
Maintainerhans@hanshoglund.se
Safe HaskellNone

Music.Pitch.Common.Pitch

Contents

Description

Provides a standard pitch representation.

Synopsis

Accidentals

data Accidental Source

An accidental is either flat, natural or sharp.

This representation allows for an arbitrary number of flats or sharps rather than just single and double.

The Num and Enum instances treat Accidental as the number of altered semitones, i.e. a double flat is -2, natural 0 and so on.

Instances

Enum Accidental 
Eq Accidental 
Integral Accidental 
Num Accidental 
Ord Accidental 
Real Accidental 
Show Accidental 
Alterable Accidental 
(IsPitch a, Alterable a) => IsPitch (Accidental -> a)

  Magic instance that allow us to write c sharp instead of sharpen c.

natural :: AccidentalSource

The natural accidental.

flat :: AccidentalSource

The flat accidental.

sharp :: AccidentalSource

The sharp accidental.

doubleFlat :: AccidentalSource

The double flat accidental.

doubleSharp :: AccidentalSource

The double sharp accidental.

Inspecting accidentals

isNatural :: Accidental -> BoolSource

 Returns whether this is a natural accidental.

isFlattened :: Accidental -> BoolSource

 Returns whether this is a flat, double flat etc.

isSharpened :: Accidental -> BoolSource

 Returns whether this is a sharp, double sharp etc.

isStandard :: Accidental -> BoolSource

 Returns whether this is a standard accidental, i.e. either a double flat, flat, natural, sharp or double sharp.

Name

data Name Source

A pitch name.

Constructors

C 
D 
E 
F 
G 
A 
B 

Instances

Pitch

data Pitch Source

Common pitch representation.

Intervals and pitches can be added using .+^. To get the interval between two pitches, use .-..

Pitches are normally entered using the following literals.

 c d e f g a b

Notes with accidentals can be written by adding the s or b suffices (or two for double sharps and flats).

 cs, ds, es ...    -- sharp
 cb, db, eb ...    -- flat
 css, dss, ess ... -- double sharp
 cbb, dbb, ebb ... -- double flat

There is also a convenience syntax for entering pitches one octave up or down, using ' and _ respectively.

 g a b c'
 d c b_ c

Because of some overloading magic, we can actually write sharp and flat as postfix functions. This gives a better read:

 cs == c sharp
 db == c flat

You can of course use typical functional transformation of pitch as well. For example sharpen and flatten are the ordinary (prefix) versions of sharp and flat

 sharpen c             == c sharp       == cs
 flatten d             == d flat        == ds
 (sharpen . sharpen) c == c doubleSharp == css
 (flatten . flatten) d == d doubleFlat  == dss

Note that there is no guarantee that your pitch representation use enharmonic equivalence, so cs == db may or may not hold.

 c .+^ minor third == eb
 f .-. c           == perfect fourth

Pitches are described by name, accidental and octave number.

 c   == fromIntegral 0
 _P4 == perfect fourth   == interval Perfect 5
 d5  == diminished fifth == diminish (perfect fifth)

mkPitch :: Name -> Accidental -> PitchSource

Creates a pitch from name accidental.

name :: Pitch -> NameSource

Returns the name of a pitch.

To convert a pitch to a numeric type, use octaves, steps or semitones on the relevant interval type, for example:

 semitones ('a\'' .-. c)

accidental :: Pitch -> AccidentalSource

Returns the accidental of a pitch.

See also octaves, and steps and semitones.

asPitch :: Pitch -> PitchSource

This is just the identity function, but is useful to fix the type of Pitch.