Skip to content

Instantly share code, notes, and snippets.

@jsoffer
Created June 8, 2010 18:54
Show Gist options
  • Save jsoffer/430472 to your computer and use it in GitHub Desktop.
Save jsoffer/430472 to your computer and use it in GitHub Desktop.
-- para construir: "ghci yidl.hs" seguido de "render todo" crea "yidl.mid"
import Haskore.Basic.Duration
import Haskore.Interface.MIDI.Render
import Haskore.Melody
import Haskore.Basic.Interval
import Haskore.Music.GeneralMIDI as GM
import Haskore.Basic.Scale
import Haskore.Basic.Tempo
import Haskore.Basic.Pitch as BP
import qualified Haskore.Music as Music
tr = Music.transpose
test m = fileFromGeneralMIDIMusic "yidl.mid" $ GM.fromMelodyNullAttr AcousticBass m
-- xs es la lista de intervalos respecto a la base
secuencia base xs = line $ map ((flip tr) base) xs
-- ys es la lista de duraciones de cada nota relativas a la duración de la base
sec2 base xs ys = line $ zipWith changeTempo (map (1/) ys) $ map ((flip tr) base) xs
render xs = test $ changeTempo (allegro/60)
$ xs
-- yidl midl fidl: nigun
s11 = secuencia (b 0 en ()) [0,-2,-4,0,-2,-4,-5,0]
s12 = secuencia (g 0 qn ()) [0,-3]
s13 = secuencia (e 0 en ()) [0,2,3,7]
s14 = sec2 (d 1 en ()) [0,0,2,0,-2,-3,-5] [2,1,1,1,1,1,1]
s15 = (b 0 hn ()) +:+ hnr
m11 = wnr +:+ wnr +:+ wnr +:+ enr
m12 = secuencia (b 0 en ()) [0,-2,-4,-2,-4,-5,-12]
s21 = enr +:+ secuencia (e 0 en ()) [0,3,7,10,8,7,10]
s22 = sec2 (c 1 en ()) [0,-1,-3,-3,4,2,0] [1,1,2,1,1,1,1]
-- legato entre s22 y s23 (falta)
s23 = secuencia (b 0 en ()) [0,-2,-4,0,-2,-4,-5,-4]
s24 = (e 0 qn ()) +:+ qnr +:+ hnr
m21 = sec2 (e 0 qn ()) [0,3,3,0] [3/2, 1/2, 1, 1]
m22 = qnr +:+ sec2 (c 0 en ()) [0,2,4,9] [1,1,2,2]
m23 = secuencia (g 0 en ()) [0,-1,-3,-5,-7,-8,-10,-8]
m24 = s24
t21 = wnr +:+ wnr +:+ wnr +:+ wnr +:+ wnr +:+ wnr +:+ wnr
t22 = enr +:+ secuencia (e 0 en ()) [0,2,3,5,3,2,7]
t31 = (e 0 qn ()) +:+ qnr +:+ sec2 (fs 0 en ()) [0,-2,-3,0,-2,1,3,1,-2] [1,1,1,1,2,1,1,2,2]
t32 = qnr +:+ secuencia (d 0 qn ()) [0,2,4,5]
t33 = qnr +:+ secuencia (fs 0 en ()) [0,1,3,5]
t41 = sec2 (e 1 en ()) [0,-5,-5,-7,-8,-7,-5,-4,-5,-4,-5,-7] [2,2,1,1,2,1,1,1,1,2,1,1]
t42 = sec2 (g 0 en ()) [0,-1,-3,-1,-8,-3] [1,1,2,2,2,2]
ydl = (line [s11, s12, s13, s14, s15, s21, s22, s23]) =:=
(line [m11, m12, m21, m22, m23])
tenor = (line [t22, t31, t32, t33, t41, t42])
todo =
ydl +:+
(tenor =:= (Music.transpose (-12) tenor) =:= (s24 +:+ ydl)) +:+
qnr +:+ hnr +:+
ydl +:+
(tenor =:= (Music.transpose (-12) tenor) =:= (s24 +:+ ydl))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment