packages feed

zmidi-core-0.3.0: demo/MidiTune.hs

{-# OPTIONS -Wall #-}

--
-- Write a MIDI \"tune\".
--
-- The MIDI AST should be considered too low level to work with 
-- directly...
--

module Main where

import ZMidi.Core

import System.Directory



main :: IO ()
main = do 
    createDirectoryIfMissing True "./out/"
    writeMidi "./out/midi_tune.mid" midi_tune01
    

midi_tune01 :: MidiFile
midi_tune01 = MidiFile
    { mf_header = MidiHeader { hdr_format    = MF1
                             , num_tracks    = 2
                             , time_division = TPB 480
                             }
    , mf_tracks = [ meta_track, sound_track ]
    }
  where
    meta_track  = MidiTrack [ (0, MetaEvent $ TextEvent SEQUENCE_NAME "Track 0")
                            , (0, MetaEvent $ EndOfTrack) 
                            ]

    sound_track = MidiTrack [ (0, MetaEvent $ TextEvent SEQUENCE_NAME "Track 1")
                            , (0, MetaEvent $ SetTempo 500000)
                            , (0,   VoiceEvent $ NoteOn  0 60 127)
                            , (480, VoiceEvent $ NoteOff 0 60 15)
                            , (0,   VoiceEvent $ NoteOn  0 62 127)
                            , (480, VoiceEvent $ NoteOff 0 62 15)
                            , (0,   VoiceEvent $ NoteOn  0 64 127)
                            , (480, VoiceEvent $ NoteOff 0 64 15)
                            , (0,   VoiceEvent $ NoteOn  0 66 127)
                            , (480, VoiceEvent $ NoteOff 0 66 15)
                            , (0, MetaEvent $ EndOfTrack) 
                            ]