midi-0.2.2.2: Handling of MIDI messages and files
Safe HaskellSafe-Inferred
LanguageHaskell2010

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

Instances details
Arbitrary T Source # 
Instance details

Defined in Sound.MIDI.File

Methods

arbitrary :: Gen T #

shrink :: T -> [T] #

Show T Source # 
Instance details

Defined in Sound.MIDI.File

Methods

showsPrec :: Int -> T -> ShowS #

show :: T -> String #

showList :: [T] -> ShowS #

Eq T Source # 
Instance details

Defined in Sound.MIDI.File

Methods

(==) :: T -> T -> Bool #

(/=) :: T -> T -> Bool #

data Division Source #

Constructors

Ticks Tempo 
SMPTE Int Int 

Instances

Instances details
Arbitrary Division Source # 
Instance details

Defined in Sound.MIDI.File

Show Division Source # 
Instance details

Defined in Sound.MIDI.File

Eq Division Source # 
Instance details

Defined in Sound.MIDI.File

data Type Source #

Constructors

Mixed 
Parallel 
Serial 

Instances

Instances details
Bounded Type Source # 
Instance details

Defined in Sound.MIDI.File

Enum Type Source # 
Instance details

Defined in Sound.MIDI.File

Methods

succ :: Type -> Type #

pred :: Type -> Type #

toEnum :: Int -> Type #

fromEnum :: Type -> Int #

enumFrom :: Type -> [Type] #

enumFromThen :: Type -> Type -> [Type] #

enumFromTo :: Type -> Type -> [Type] #

enumFromThenTo :: Type -> Type -> Type -> [Type] #

Ix Type Source # 
Instance details

Defined in Sound.MIDI.File

Methods

range :: (Type, Type) -> [Type] #

index :: (Type, Type) -> Type -> Int #

unsafeIndex :: (Type, Type) -> Type -> Int #

inRange :: (Type, Type) -> Type -> Bool #

rangeSize :: (Type, Type) -> Int #

unsafeRangeSize :: (Type, Type) -> Int #

Show Type Source # 
Instance details

Defined in Sound.MIDI.File

Methods

showsPrec :: Int -> Type -> ShowS #

show :: Type -> String #

showList :: [Type] -> ShowS #

Eq Type Source # 
Instance details

Defined in Sound.MIDI.File

Methods

(==) :: Type -> Type -> Bool #

(/=) :: Type -> Type -> Bool #

Ord Type Source # 
Instance details

Defined in Sound.MIDI.File

Methods

compare :: Type -> Type -> Ordering #

(<) :: Type -> Type -> Bool #

(<=) :: Type -> Type -> Bool #

(>) :: Type -> Type -> Bool #

(>=) :: Type -> Type -> Bool #

max :: Type -> Type -> Type #

min :: Type -> Type -> Type #

empty :: T Source #

An empty MIDI file. Tempo is set to one tick per quarter note.

type Tempo = Int Source #

explicitNoteOff :: T -> T Source #

Convert all NoteOn p 0 to NoteOff p 64. The latter one is easier to process.

implicitNoteOff :: T -> T Source #

Convert all NoteOff p 64 to NoteOn p 0. The latter one can be encoded more efficiently using the running status.

mergeTracks :: C time => Type -> [T time event] -> T time event Source #

Merge all tracks into a single track according to the MIDI file type.

mapTrack :: (Track -> Track) -> T -> T Source #

Apply a function to each track.

secondsFromTicks :: Division -> T ElapsedTime T -> T Rational T Source #

Process and remove all SetTempo events. The result is an event list where the times are measured in seconds.

showLines :: T -> String Source #

Deprecated: only use this for debugging

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

changeVelocity :: Double -> T -> T Source #

Deprecated: only use this for debugging

A hack that changes the velocities by a rational factor.

resampleTime :: Double -> T -> T Source #

Deprecated: only use this for debugging

Change the time base.

showEvent :: T -> ShowS Source #

Deprecated: only use this for debugging

showTime :: ElapsedTime -> ShowS Source #

Deprecated: only use this for debugging

sortEvents :: T -> T Source #

Deprecated: only use this for debugging

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 -> T Source #

Deprecated: only use this for debugging

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.