temporal-music-notation-western (empty) → 0.1
raw patch · 4 files changed
+423/−0 lines, 4 filesdep +basedep +temporal-music-notationsetup-changed
Dependencies added: base, temporal-music-notation
Files
- LICENSE +30/−0
- Setup.hs +3/−0
- src/Temporal/Music/Notation/Local/Western.hs +367/−0
- temporal-music-notation-western.cabal +23/−0
+ LICENSE view
@@ -0,0 +1,30 @@+Copyright Anton Kholomiov 2011++All rights reserved.++Redistribution and use in source and binary forms, with or without+modification, are permitted provided that the following conditions are met:++ * Redistributions of source code must retain the above copyright+ notice, this list of conditions and the following disclaimer.++ * Redistributions in binary form must reproduce the above+ copyright notice, this list of conditions and the following+ disclaimer in the documentation and/or other materials provided+ with the distribution.++ * Neither the name of Anton Kholomiov nor the names of other+ contributors may be used to endorse or promote products derived+ from this software without specific prior written permission.++THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS+"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR+A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT+OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT+LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY+THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ Setup.hs view
@@ -0,0 +1,3 @@+#!/usr/bin/env runhaskell+import Distribution.Simple+main = defaultMain
+ src/Temporal/Music/Notation/Local/Western.hs view
@@ -0,0 +1,367 @@+-- | Names specific to western music tradition+module Temporal.Music.Notation.Local.Western(+ + -- * Pitch+ + -- ** Scales+ eqt, pyth, + hind, hindFs, hindGb,+ major, minor,+ + -- ** Tone constants+ -- | 'c' corresponds to 0, 'db' and 'cs' to 1 etc.+ c, d, e, f, g, a, b,+ cs, ds, es, fs, gs, as, bs,+ cb, db, eb, fb, gb, ab, bb,+ + -- ** Intervals+ + -- *** pure intervals as factors+ pureOctave, pureFifth, pureForth, pureMajorThird,+ pureMinorThird, pureWholeTone, pureHalfTone, pureMajorSixth,+ pureMinorSixth, pureMajorSeventh, pureMinorSeventh, ++ -- *** in steps for 12 tone scale+ + majorSeventh, minorSeventh, majorSixth, minorSixth,+ fifth, tritone, forth, majorThird, + minorThird, wholeTone, halfTone, + + -- * Volume+ -- ** Levels+ -- | Dynamics values form 8-level equally spaced grid. + -- They are from quietest+ -- to loudest: piano pianissimo (ppp), pianissimo (pp), piano (p),+ -- mezzo piano (mp), mezzo forte (mf), forte (f), fortissimo (ff),+ -- forte fortissimo (fff).+ Dynamics,+ pianoPianissimo, pianissimo, piano, mezzoPiano,+ mezzoForte, forte, fortissimo, forteFortissimo,++ -- ** short-cuts+ pppl, ppl, pl, mpl, mfl, fl, ffl, fffl,++ -- ** Envelops+ dim, cresc, ++ -- ** Volume level constants+ + -- * Score + -- ** Forms + rondo, reprise, + + -- ** Tempo+ -- | Tempo terms specify not a rigid value but tempo range. So all+ -- terms are functions from relative power of term (it's value+ -- of type Double from 0 to 1) to some tempo value. Zero means+ -- lowest value from tempo range and one means highest value.+ Tempo, + lento, largo, larghetto, grave, adagio, adagietto,+ andante, andantino, moderato, allegretto,+ allegro, vivace, presto, prestissimo,++ -- * Note+ NoteW, DrumW,+ Note(..), Drum, + absNote, absDrum,+ + -- ** Rests + bnr, wnr, qnr, hnr, enr, snr, tnr, + dbnr, dwnr, dqnr, dhnr, denr, dsnr, dtnr,+ + -- ** Notes+ + bn, wn, hn, qn, en, sn, tn, + dbn, dwn, dhn, dqn, den, dsn, dtn,+ + -- ** Drums+ bd, wd, hd, qd, ed, sd, td, + dbd, dwd, dhd, dqd, ded, dsd, dtd+) where++import Temporal.Music.Notation++import Temporal.Music.Notation.Local.Scales(+ eqt, pyth, hind, hindFs, hindGb,+ major, minor)++import Temporal.Music.Notation.Note(Note(..), Drum,+ absNote, absDrum,+ bnr, wnr, qnr, hnr, enr, snr, tnr, + dbnr, dwnr, dqnr, dhnr, denr, dsnr, dtnr) ++import qualified Temporal.Music.Notation.Note as N++-------------------------------------------+-- tones++c, d, e, f, g, a, b, + cs, ds, es, fs, gs, as, bs,+ cb, db, eb, fb, gb, ab, bb :: Tone N12++c = 0+cs = 1+d = 2+ds = 3+e = 4+f = 5+fs = 6+g = 7+gs = 8+a = 9+as = 10+b = 11++bs = c+es = f++cb = b+db = cs+eb = ds+fb = e+gb = fs+ab = gs+bb = as++---------------------------------------------------------+-- intervals++pureOctave, pureFifth, pureForth, pureMajorThird,+ pureMinorThird, pureWholeTone, pureHalfTone, pureMajorSixth,+ pureMinorSixth, pureMajorSeventh, pureMinorSeventh :: Fractional a => a++pureOctave = 2+pureFifth = 3/2+pureForth = 4/3+pureMajorThird = 5/4+pureMinorThird = 6/5+pureWholeTone = 9/8+pureHalfTone = 25/24+pureMajorSixth = 5/3+pureMinorSixth = 8/5+pureMajorSeventh = 48/25+pureMinorSeventh = 16/9+++majorSeventh, minorSeventh, majorSixth, minorSixth,+ fifth, tritone, forth, majorThird, + minorThird, wholeTone, halfTone :: Step+++majorSeventh = 11+minorSeventh = 10+majorSixth = 9+minorSixth = 8+fifth = 7+tritone = 6+forth = 5+majorThird = 4+minorThird = 3+wholeTone = 2+halfTone = 1+++---------------------------------------+-- volume levels+++type Dynamics = Int++pianoPianissimo :: Dynamics+pianoPianissimo = 0++pianissimo :: Dynamics+pianissimo = 1++piano :: Dynamics+piano = 2++mezzoPiano :: Dynamics+mezzoPiano = 3++mezzoForte :: Dynamics+mezzoForte = 4++forte :: Dynamics+forte = 5++fortissimo :: Dynamics+fortissimo = 6++forteFortissimo :: Dynamics+forteFortissimo = 7+++-- short-cuts++pppl, ppl, pl, mpl, mfl, fl, ffl, fffl :: LevelFunctor a => a -> a++pppl = setLevel pianoPianissimo+ppl = setLevel pianissimo+pl = setLevel piano+mpl = setLevel mezzoPiano+mfl = setLevel mezzoForte+fl = setLevel forte+ffl = setLevel fortissimo+fffl = setLevel forteFortissimo++-- | diminuendo+dim :: LevelFunctor a => Accent -> Score a -> Score a+dim v = dynamic ((-v) *)++-- | crescendo+cresc :: LevelFunctor a => Accent -> Score a -> Score a+cresc v = dynamic (v * )++---------------------------------------+-- forms++-- | rondo form+--+-- >rondo a b c = line [a, b, a, c, a]+rondo :: Score a -> Score a -> Score a -> Score a+rondo a b c = line [a, b, a, c, a]++-- | reprise form+--+-- >reprise a b1 b2 = line [a, b1, a, b2]+reprise :: Score a -> Score a -> Score a -> Score a+reprise a b c = line [a, b, a, c]++---------------------------------------+-- tempo++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++-- | very slow (40-60 bpm), like largo+lento :: Double -> Tempo+lento = largo++-- | very slow (40-60 bpm)+largo :: Double -> Tempo+largo = getTempo largoRange++-- | rather broadly (60-66 bpm)+larghetto :: Double -> Tempo+larghetto = getTempo larghettoRange++-- | slow and sloemn (60 - 66 bpm)+grave :: Double -> Tempo+grave = larghetto++-- | slow and stately (literally "at ease") (66-76 bpm)+adagio :: Double -> Tempo+adagio = getTempo adagioRange++-- | rather slow (70-80 bpm)+adagietto :: Double -> Tempo +adagietto = getTempo adagiettoRange++-- | at awalking pace (76-80 bpm)+andante :: Double -> Tempo +andante = getTempo andanteRange++-- | slightly faster then andante (80-100 bpm)+andantino :: Double -> Tempo +andantino = getTempo andantinoRange++-- | moderately (101-110 bpm)+moderato :: Double -> Tempo+moderato = getTempo moderatoRange++-- | moderately fast (115-125 bpm)+allegretto :: Double -> Tempo+allegretto = getTempo allegrettoRange++-- | fast, at 'march tempo' (120-139 bpm)+allegro :: Double -> Tempo+allegro = getTempo allegroRange++-- | lively and fast (135-160 bpm)+vivace :: Double -> Tempo+vivace = getTempo vivaceRange++-- | very fast (168-200 bpm)+presto :: Double -> Tempo+presto = getTempo prestoRange++-- | extremely fast (200 - 230 bpm)+prestissimo :: Double -> Tempo+prestissimo = getTempo prestissimoRange++-- Note++-- | Western 'Note' (eight volume levels and twelve tones)+type NoteW = Note N8 N12++-- | Western 'Drum' note (eight volume levels)+type DrumW = Drum N8++-- shortcuts++-- notes+bn, wn, hn, qn, en, sn, tn, + dbn, dwn, dhn, dqn, den, dsn, dtn :: + Tone N12 -> Score NoteW++bn = N.bn+wn = N.wn+hn = N.hn+qn = N.qn+en = N.en+sn = N.sn+tn = N.tn+dbn = N.dbn+dwn = N.dwn+dhn = N.dhn+dqn = N.dqn+den = N.den+dsn = N.dsn+dtn = N.dtn++-- drums++bd, wd, hd, qd, ed, sd, td, + dbd, dwd, dhd, dqd, ded, dsd, dtd :: + Accent -> Score DrumW++bd = N.bd+wd = N.wd+hd = N.hd+qd = N.qd+ed = N.ed+sd = N.sd+td = N.td+dbd = N.dbd+dwd = N.dwd+dhd = N.dhd+dqd = N.dqd+ded = N.ded+dsd = N.dsd+dtd = N.dtd+++
+ temporal-music-notation-western.cabal view
@@ -0,0 +1,23 @@+Name: temporal-music-notation-western+Version: 0.1+Cabal-Version: >= 1.2+License: BSD3+License-file: LICENSE+Author: Anton Kholomiov+Maintainer: Anton Kholomiov+Synopsis: music notation+Description: Localization of 'temporal-music-notation' library for + Western music tradition.+Category: Music+Stability: Experimental+Tested-With: GHC==6.12.1+Build-Type: Simple+++Library+ Build-Depends:+ base >= 4, base < 5,+ temporal-music-notation+ Hs-Source-Dirs: src/+ Exposed-Modules:+ Temporal.Music.Notation.Local.Western