music-pitch-1.7.2: Musical pitch representation.

Copyright(c) Hans Hoglund, Edward Lilley 2012–2014
LicenseBSD-style
Maintainerhans@hanshoglund.se
Stabilityexperimental
Portabilitynon-portable (TF,GNTD)
Safe HaskellNone
LanguageHaskell2010

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 :: Accidental Source

The natural accidental.

flat :: Accidental Source

The flat accidental.

sharp :: Accidental Source

The sharp accidental.

doubleFlat :: Accidental Source

The double flat accidental.

doubleSharp :: Accidental Source

The double sharp accidental.

Inspecting accidentals

isNatural :: Accidental -> Bool Source

 Returns whether this is a natural accidental.

isFlattened :: Accidental -> Bool Source

 Returns whether this is a flat, double flat etc.

isSharpened :: Accidental -> Bool Source

 Returns whether this is a sharp, double sharp etc.

isStandard :: Accidental -> Bool Source

 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

newtype 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)

Constructors

Pitch 

Fields

getPitch :: Interval
 

newtype 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)

Constructors

Pitch 

Fields

getPitch :: Interval
 

mkPitch :: Name -> Accidental -> Pitch Source

Creates a pitch from name accidental.

name :: Pitch -> Name Source

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 -> Accidental Source

Returns the accidental of a pitch.

See also octaves, and steps and semitones.

asPitch :: Pitch -> Pitch Source

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