packages feed

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