Copyright | (c) Hans Hoglund, Edward Lilley 2012–2014 |
---|---|
License | BSD-style |
Maintainer | hans@hanshoglund.se |
Stability | experimental |
Portability | non-portable (TF,GNTD) |
Safe Haskell | None |
Language | Haskell2010 |
Provides semitone, octave and step representation of intervals.
- data Octaves
- data Steps
- data Semitones
- class HasSemitones a where
- semitone :: Semitones
- tone :: Semitones
- ditone :: Semitones
- tritone :: Semitones
- isSemitone :: HasSemitones a => a -> Bool
- isTone :: HasSemitones a => a -> Bool
- isTritone :: HasSemitones a => a -> Bool
- (=:=) :: HasSemitones a => a -> a -> Bool
- (/:=) :: HasSemitones a => a -> a -> Bool
Types
Octaves
An interval represented as a number of octaves, including negative intervals.
octaves a = semitones a `div` 12 steps a = semitones a `mod` 12
Steps
An interval represented as a number of steps in the range 0 ≤ x < 12.
octaves a = semitones a `div` 12 steps a = semitones a `mod` 12
Semitones
An interval represented as a number of semitones, including negative intervals, as well as intervals larger than one octave. This representation does not take spelling into account, so for example a major third and a diminished fourth can not be distinguished.
Intervals that name a number of semitones (i.e. semitone
, tritone
) does
not have an unequivocal spelling. To convert these to an interval, a
Spelling
must be provided:
>>>
spell usingSharps tritone
_A4
>>>
spell usingFlats tritone
d5
class HasSemitones a where Source
Class of intervals that can be converted to a number of Semitones
.
isSemitone :: HasSemitones a => a -> Bool Source
Returns true iff the given interval spans one semitone.
isTone :: HasSemitones a => a -> Bool Source
Returns true iff the given interval spans one whole tone (two semitones).
isTritone :: HasSemitones a => a -> Bool Source
Returns true iff the given interval spans three whole tones (six semitones).
Enharmonic equivalence
(=:=) :: HasSemitones a => a -> a -> Bool infix 4 Source
Enharmonic equivalence.
>>>
asInterval _A2 == m3
False>>>
asInterval _A2 =:= m3
True
(/:=) :: HasSemitones a => a -> a -> Bool infix 4 Source
Enharmonic non-equivalence.
>>>
asInterval _A2 /= m3
True>>>
asInterval _A2 /:= m3
False