ParentContentsIndex
Sound.Hommage.Midi
Contents
MidiFile
MidiNote
MidiMusic
MidiTrack
MidiEvent
Encoding
Synopsis
data MidiFile
= MidiSync Ticks [MidiTrack]
| MidiSingle Ticks MidiTrack
| MidiAsync Ticks [MidiTrack]
writeMidiFile :: FilePath -> MidiFile -> IO ()
type Ticks = Int
data MidiNote
= MidiNote Chan MidiValue MidiValue
| MidiCtrl Chan MidiValue MidiValue
type Chan = Word8
type MidiValue = Word8
type MidiMusic = [(Delta, Maybe MidiEvent)]
noteMidiMusic :: Int -> MidiNote -> MidiMusic
restMidiMusic :: Int -> MidiMusic
appendMidiMusic :: MidiMusic -> MidiMusic -> MidiMusic
mergeMidiMusic :: MidiMusic -> MidiMusic -> MidiMusic
runMidiMusic :: MidiMusic -> MidiTrack
type MidiTrack = [(Delta, MidiEvent)]
type Delta = Int
data MidiEvent
= MidiNoteOff !Chan !MidiValue !MidiValue
| MidiNoteOn !Chan !MidiValue !MidiValue
| MidiKeyAfter !Chan !MidiValue !MidiValue
| MidiControl !Chan !MidiValue !MidiValue
| MidiEndOfTrack
encodeMidiFile :: MidiFile -> [Word8]
midiHeaderSync :: [Word8]
midiHeaderSingle :: [Word8]
midiHeaderAsync :: [Word8]
encodeMidiTrack :: MidiTrack -> [Word8]
encodeDelta :: Int -> [Word8]
encodeMidiDeltaEvent :: (Delta, MidiEvent) -> [Word8]
encodeEvent :: MidiEvent -> [Word8]
lastByte :: Int -> Word8
nextByte :: Int -> Int
toBytes :: Int -> Int -> [Word8]
Documentation
The action writeMidiFile stores the datatype MidiFile in a MIDI-File. It consists of a field for the Ticks per quarter and a MidiTrack (or some). The function runMidiMusic produces such a track from a MidiMusic, which can be created using the functions noteMidiMusic, restMidiMusic, appendMidiMusic and mergeMidiMusic. MidiNote is used to create note or controller events; it consists of the Midi-Channel (Chan) and two fields with a MidiValue.
MidiFile
data MidiFile
Constructors
MidiSync Ticks [MidiTrack] Some parallel (synchronous) MidiTracks.
MidiSingle Ticks MidiTrack A single MidiTrack. (Seems not to work yet)
MidiAsync Ticks [MidiTrack] Some asynchronous MidiTracks. (Seems not to work yet)
writeMidiFile :: FilePath -> MidiFile -> IO ()
Writes a MidiFile to a File.
type Ticks = Int
Ticks per Quarter. For some unknown reasons it does not work with any value. 96 seems to be ok.
MidiNote
data MidiNote
Constructors
MidiNote Chan MidiValue MidiValue A note with pitch and volume
MidiCtrl Chan MidiValue MidiValue Controllernumber and value
type Chan = Word8
A Midi-Channel (0-15)
type MidiValue = Word8
A Midi-Value (0-127)
MidiMusic
type MidiMusic = [(Delta, Maybe MidiEvent)]
A kind of extended MidiTrack type, that allows delta-times without events (will be summed up by converting to MidiTrack).
noteMidiMusic :: Int -> MidiNote -> MidiMusic
Creates a note or controller event with given length (relative to Ticks). The length means the delta-time between note-on and note-off resp. the time after the controller event.
restMidiMusic :: Int -> MidiMusic
A pause with given length.
appendMidiMusic :: MidiMusic -> MidiMusic -> MidiMusic
Sequencial composition of MidiMusic.
mergeMidiMusic :: MidiMusic -> MidiMusic -> MidiMusic
Parallel composition of MidiMusic.
runMidiMusic :: MidiMusic -> MidiTrack
Converts a MidiMusic to a MidiTrack.
MidiTrack
type MidiTrack = [(Delta, MidiEvent)]
A sequence of MidiEvents with a delta-time which means the number of ticks before the event happens (relative to the last event).
type Delta = Int
MidiEvent
data MidiEvent
Constructors
MidiNoteOff !Chan !MidiValue !MidiValue
MidiNoteOn !Chan !MidiValue !MidiValue
MidiKeyAfter !Chan !MidiValue !MidiValue
MidiControl !Chan !MidiValue !MidiValue
MidiEndOfTrack
Encoding
encodeMidiFile :: MidiFile -> [Word8]
midiHeaderSync :: [Word8]
midiHeaderSingle :: [Word8]
midiHeaderAsync :: [Word8]
encodeMidiTrack :: MidiTrack -> [Word8]
encodeDelta :: Int -> [Word8]
encodeMidiDeltaEvent :: (Delta, MidiEvent) -> [Word8]
encodeEvent :: MidiEvent -> [Word8]
lastByte :: Int -> Word8
nextByte :: Int -> Int
toBytes :: Int -> Int -> [Word8]
Produced by Haddock version HADDOCK_VERSION