midi-0.0.5: Handling of MIDI messages and files

Sound.MIDI.File

Description

MIDI-File Datatype

Taken from Haskore.

Synopsis

Documentation

data T Source

The datatypes for MIDI Files and MIDI Events

Constructors

Cons Type Division [Track] 

Instances

Eq T 
Show T 

data Division Source

Constructors

Ticks Tempo 
SMPTE Int Int 

Instances

data Type Source

Constructors

Mixed 
Parallel 
Serial 

Instances

data Key Source

The following enumerated type lists all the keys in order of their key signatures from flats to sharps. (Cf = 7 flats, Gf = 6 flats ... F = 1 flat, C = 0 flats/sharps, G = 1 sharp, ... Cs = 7 sharps.) Useful for transposition.

Instances

data Mode Source

The Key Signature specifies a mode, either major or minor.

Constructors

Major 
Minor 

Instances

defltDurT :: ElapsedTimeSource

Default duration of a whole note, in seconds; and the default SetTempo value, in microseconds per quarter note. Both express the default of 120 beats per minute.

empty :: TSource

An empty MIDI file.

showLines :: T -> StringSource

Show the T with one event per line, suited for comparing MIDIFiles with diff. Can this be replaced by Sound.MIDI.Load.showFile?

changeVelocity :: Double -> T -> TSource

A hack that changes the velocities by a rational factor.

resampleTime :: Double -> T -> TSource

Change the time base.

sortEvents :: T -> TSource

Sort MIDI note events lexicographically. This is to make MIDI files unique and robust against changes in the computation. In principle Performance.merge should handle this but due to rounding errors in Float the order of note events still depends on some internal issues. The sample rate of MIDI events should be coarse enough to assert unique results.

progChangeBeforeSetTempo :: T -> TSource

Old versions of Haskore.Interface.MIDI.Write wrote ProgramChange and SetTempo once at the beginning of a file in that order. The current version supports multiple ProgramChanges in a track and thus a ProgramChange is set immediately before a note. Because of this a ProgramChange is now always after a SetTempo. For checking equivalence with old MIDI files we can switch this back.