hommage-0.0.5: Haskell Offline Music Manipulation And Generation EDSLSource codeContentsIndex
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 Source
Constructors
MidiSync Ticks [MidiTrack]Some parallel (synchronous) MidiTracks.
MidiSingle Ticks MidiTrackA single MidiTrack. (Seems not to work yet)
MidiAsync Ticks [MidiTrack]Some asynchronous MidiTracks. (Seems not to work yet)
writeMidiFile :: FilePath -> MidiFile -> IO ()Source
Writes a MidiFile to a File.
type Ticks = IntSource
Ticks per Quarter. For some unknown reasons it does not work with any value. 96 seems to be ok.
MidiNote
data MidiNote Source
Constructors
MidiNote Chan MidiValue MidiValueA note with pitch and volume
MidiCtrl Chan MidiValue MidiValueControllernumber and value
type Chan = Word8Source
A Midi-Channel (0-15)
type MidiValue = Word8Source
A Midi-Value (0-127)
MidiMusic
type MidiMusic = [(Delta, Maybe MidiEvent)]Source
A kind of extended MidiTrack type, that allows delta-times without events (will be summed up by converting to MidiTrack).
noteMidiMusic :: Int -> MidiNote -> MidiMusicSource
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 -> MidiMusicSource
A pause with given length.
appendMidiMusic :: MidiMusic -> MidiMusic -> MidiMusicSource
Sequencial composition of MidiMusic.
mergeMidiMusic :: MidiMusic -> MidiMusic -> MidiMusicSource
Parallel composition of MidiMusic.
runMidiMusic :: MidiMusic -> MidiTrackSource
Converts a MidiMusic to a MidiTrack.
MidiTrack
type MidiTrack = [(Delta, MidiEvent)]Source
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 = IntSource
MidiEvent
data MidiEvent Source
Constructors
MidiNoteOff !Chan !MidiValue !MidiValue
MidiNoteOn !Chan !MidiValue !MidiValue
MidiKeyAfter !Chan !MidiValue !MidiValue
MidiControl !Chan !MidiValue !MidiValue
MidiEndOfTrack
Encoding
encodeMidiFile :: MidiFile -> [Word8]Source
midiHeaderSync :: [Word8]Source
midiHeaderSingle :: [Word8]Source
midiHeaderAsync :: [Word8]Source
encodeMidiTrack :: MidiTrack -> [Word8]Source
encodeDelta :: Int -> [Word8]Source
encodeMidiDeltaEvent :: (Delta, MidiEvent) -> [Word8]Source
encodeEvent :: MidiEvent -> [Word8]Source
lastByte :: Int -> Word8Source
nextByte :: Int -> IntSource
toBytes :: Int -> Int -> [Word8]Source
Produced by Haddock version 2.4.2