import Haskore.Basic.Duration((%+)) import Haskore.Music import Haskore.Melody.Standard import Haskore.Music.GeneralMIDI as MidiMusic import Haskore.Interface.MIDI.Render as Render main :: IO () main = Render.fileFromGeneralMIDIMusic "Katyusha3.midi" song listTimes :: [a] -> Int -> [a] listTimes xs i |i <= 1 = xs |otherwise = xs ++ (listTimes xs (i - 1)) song :: MidiMusic.T song = chord [songA , songB] songA :: MidiMusic.T songA = MidiMusic.fromStdMelody MidiMusic.Clarinet $mySongA songB :: MidiMusic.T songB = MidiMusic.fromStdMelody MidiMusic.Violin $mySongB mySongA :: Haskore.Melody.Standard.T mySongA = changeTempo (2 %+ 1) (line mySongListA) mySongB :: Haskore.Melody.Standard.T mySongB = changeTempo (2 %+ 1) (line mySongListB) mySongListA :: [Haskore.Melody.Standard.T] mySongListA = (mySongListA01 ++ mySongListA02 ++ (mySongListA03 ++ mySongListA04) `listTimes` 2 ) `listTimes` 3 mySongListA01 :: [Haskore.Melody.Standard.T] mySongListA01 = mySongListA0101 ++ mySongListA0102 ++ mySongListA0103 ++ mySongListA0104 mySongListA0101 ::[Haskore.Melody.Standard.T] mySongListA0101 = [(e 1 (qn+en) na) , (fs 1 en na) ] mySongListA0102 ::[Haskore.Melody.Standard.T] mySongListA0102 = [(g 1 (qn+en) na) , (e 1 en na) ] mySongListA0103 ::[Haskore.Melody.Standard.T] mySongListA0103 = [(g 1 en na) , (g 1 en na) , (fs 1 en na) , (e 1 en na) ] mySongListA0104 ::[Haskore.Melody.Standard.T] mySongListA0104 = [(fs 1 qn na) , (b 0 qn na) ] mySongListA02 ::[Haskore.Melody.Standard.T] mySongListA02 = mySongListA0201 ++ mySongListA0202 ++ mySongListA0203 ++ mySongListA0204 mySongListA0201 ::[Haskore.Melody.Standard.T] mySongListA0201 = [(fs 1 (qn+en) na) , (g 1 en na) ] mySongListA0202 ::[Haskore.Melody.Standard.T] mySongListA0202 = [(a 1 (qn+en) na) , (fs 1 en na) ] mySongListA0203 ::[Haskore.Melody.Standard.T] mySongListA0203 = [(a 1 en na) , (a 1 en na) , (g 1 en na) , (fs 1 en na) ] mySongListA0204 ::[Haskore.Melody.Standard.T] mySongListA0204 = [(e 1 hn na) ] mySongListA03 ::[Haskore.Melody.Standard.T] mySongListA03 = mySongListA0301 ++ mySongListA0302 ++ mySongListA0303 ++ mySongListA0304 mySongListA0301 ::[Haskore.Melody.Standard.T] mySongListA0301 = [(b 1 qn na) , (e 2 qn na) ] mySongListA0302 ::[Haskore.Melody.Standard.T] mySongListA0302 = [(d 2 qn na) , (e 2 en na) ,(d 2 en na)] mySongListA0303 ::[Haskore.Melody.Standard.T] mySongListA0303 = [(c 2 en na) , (c 2 en na) ,(b 1 en na) , (a 1 en na)] mySongListA0304 ::[Haskore.Melody.Standard.T] mySongListA0304 = [(b 1 qn na) , (e 1 qn na)] mySongListA04 ::[Haskore.Melody.Standard.T] mySongListA04 = mySongListA0401 ++ mySongListA0402 ++ mySongListA0403 ++ mySongListA0404 mySongListA0401 ::[Haskore.Melody.Standard.T] mySongListA0401 = [(rest en) , (c 2 qn na) , (a 1 en na) ] mySongListA0402 ::[Haskore.Melody.Standard.T] mySongListA0402 = [(b 1 (qn + en) na) , (g 1 en na)] mySongListA0403 ::[Haskore.Melody.Standard.T] mySongListA0403 = [(a 1 en na) , (a 1 en na) ,(g 1 en na) , (fs 1 en na)] mySongListA0404 ::[Haskore.Melody.Standard.T] mySongListA0404 = [(e 1 hn na) ] mySongListB :: [Haskore.Melody.Standard.T] mySongListB = (mySongListB01 ++ mySongListB02 ++ (mySongListA03 ++ mySongListA04) `listTimes` 2 ) `listTimes` 3 mySongListB01 :: [Haskore.Melody.Standard.T] mySongListB01 = [(rest 2)] mySongListB02 :: [Haskore.Melody.Standard.T] mySongListB02 = [(rest 2)]