module Temporal.Music.Western(
module Temporal.Music,
pppiano, ppiano, piano, mpiano, mforte, forte, fforte, ffforte,
ppp', pp', p', mp', mf', f', ff', fff',
dim, cresc,
rondo, reprise,
Tempo,
lento, largo, larghetto, grave, adagio, adagietto,
andante, andantino, moderato, allegretto,
allegro, vivace, presto, prestissimo
) where
import Temporal.Music
pppiano, ppiano, piano, mpiano, mforte, forte, fforte, ffforte ::
(VolumeLike a) => Score a -> Score a
pppiano = quieter 4; ppiano = quieter 3; piano = quieter 2
mpiano = quieter 1; mforte = louder 1; forte = louder 2;
fforte = louder 3; ffforte = louder 4;
ppp', pp', p', mp', mf', f', ff', fff' ::
(VolumeLike a) => Score a -> Score a
ppp' = pppiano; pp' = ppiano; p' = piano;
mp' = mpiano; mf' = mforte; f' = forte;
ff' = fforte; fff' = ffforte;
dim :: VolumeLike a => Accent -> Score a -> Score a
dim = withAccent . (*) . negate
cresc :: VolumeLike a => Accent -> Score a -> Score a
cresc = withAccent . (*)
rondo :: Score a -> Score a -> Score a -> Score a
rondo a b c = line [a, b, a, c, a]
reprise :: Score a -> Score a -> Score a -> Score a
reprise a b c = line [a, b, a, c]
type Tempo = Double
largoRange, larghettoRange,
adagioRange, adagiettoRange,
andanteRange, andantinoRange,
moderatoRange, allegroRange,
allegrettoRange, vivaceRange,
prestoRange, prestissimoRange :: (Double, Double)
largoRange = ( 40, 60)
larghettoRange = ( 60, 66)
adagioRange = ( 66, 76)
adagiettoRange = ( 70, 80)
andanteRange = ( 76, 80)
andantinoRange = ( 80,100)
moderatoRange = (101,110)
allegrettoRange = (115,125)
allegroRange = (120,139)
vivaceRange = (135,160)
prestoRange = (168,200)
prestissimoRange = (200,230)
getTempo :: (Tempo, Tempo) -> Double -> Tempo
getTempo (a, b) x = a + (b a) * x
lento :: Double -> Tempo
lento = largo
largo :: Double -> Tempo
largo = getTempo largoRange
larghetto :: Double -> Tempo
larghetto = getTempo larghettoRange
grave :: Double -> Tempo
grave = larghetto
adagio :: Double -> Tempo
adagio = getTempo adagioRange
adagietto :: Double -> Tempo
adagietto = getTempo adagiettoRange
andante :: Double -> Tempo
andante = getTempo andanteRange
andantino :: Double -> Tempo
andantino = getTempo andantinoRange
moderato :: Double -> Tempo
moderato = getTempo moderatoRange
allegretto :: Double -> Tempo
allegretto = getTempo allegrettoRange
allegro :: Double -> Tempo
allegro = getTempo allegroRange
vivace :: Double -> Tempo
vivace = getTempo vivaceRange
presto :: Double -> Tempo
presto = getTempo prestoRange
prestissimo :: Double -> Tempo
prestissimo = getTempo prestissimoRange