fadno-1.1.0: Minimal library for music generation and notation

Safe HaskellNone
LanguageHaskell2010

Fadno.Midi

Synopsis

Documentation

type MidiData = T Source #

Serializable midi data.

type IDur = Int Source #

class MidiNotes a where Source #

Convert some note value to midi-ready values.

Minimal complete definition

toMidiNotes

Methods

toMidiNotes :: a -> [([IPitch], IDur)] Source #

Instances

MidiNotes [([IPitch], IDur)] Source # 

Methods

toMidiNotes :: [([IPitch], IDur)] -> [([IPitch], IDur)] Source #

(Integral p, Integral d, Traversable t) => MidiNotes (t (Note p d)) Source # 

Methods

toMidiNotes :: t (Note p d) -> [([IPitch], IDur)] Source #

(Integral p, Traversable c, Integral d, Traversable t) => MidiNotes (t (Note (c p) d)) Source # 

Methods

toMidiNotes :: t (Note (c p) d) -> [([IPitch], IDur)] Source #

newtype MidiTempo Source #

Tempo in microseconds per quarter. See fromBPM.

Constructors

MidiTempo Int 

Instances

Bounded MidiTempo Source # 
Enum MidiTempo Source # 
Eq MidiTempo Source # 
Integral MidiTempo Source # 
Num MidiTempo Source # 
Ord MidiTempo Source # 
Real MidiTempo Source # 
Show MidiTempo Source # 

newtype MidiChan Source #

Midi channel, 1-16 presumably.

Constructors

MidiChan Int 

Instances

Bounded MidiChan Source # 
Enum MidiChan Source # 
Eq MidiChan Source # 
Integral MidiChan Source # 
Num MidiChan Source # 
Ord MidiChan Source # 
Real MidiChan Source # 
Show MidiChan Source # 

newtype MidiVelocity Source #

note velocity, 0-127

Constructors

MidiVelocity Int 

Instances

Bounded MidiVelocity Source # 
Enum MidiVelocity Source # 
Eq MidiVelocity Source # 
Integral MidiVelocity Source # 
Num MidiVelocity Source # 
Ord MidiVelocity Source # 
Real MidiVelocity Source # 
Show MidiVelocity Source # 

newtype MidiProgram Source #

Midi program. See fromInstrument.

Constructors

MidiProgram Int 

Instances

Bounded MidiProgram Source # 
Enum MidiProgram Source # 
Eq MidiProgram Source # 
Integral MidiProgram Source # 
Num MidiProgram Source # 
Ord MidiProgram Source # 
Real MidiProgram Source # 
Show MidiProgram Source # 

newtype MidiTicks Source #

Midi ticks per quarter.

Constructors

MidiTicks Int 

Instances

Bounded MidiTicks Source # 
Enum MidiTicks Source # 
Eq MidiTicks Source # 
Integral MidiTicks Source # 
Num MidiTicks Source # 
Ord MidiTicks Source # 
Real MidiTicks Source # 
Show MidiTicks Source # 

toTicks :: MidiTicks -> Iso' Rational IDur Source #

Rational to ticks

data MidiEvent Source #

Internal type for midi event or pad.

Constructors

Pad IDur 
Event T 

type MidiTrack = Track Source #

cover our tracks

writeMidiFile :: FilePath -> MidiData -> IO () Source #

write to disk.

showMidiFile :: FilePath -> IO () Source #

debug midi file.

midi :: MidiTicks -> [MidiTrack] -> MidiData Source #

Make midi file data

makeTrackFull :: MidiNotes notes => MidiTempo -> MidiChan -> MidiProgram -> MidiVelocity -> notes -> MidiTrack Source #

make a standard track which specifies tempo and program. | see makeTrack for more control.

fromBPM :: (Real a, Show a) => a -> MidiTempo Source #

BPM to microseconds per quarter note.

makeTrack :: [MidiEvent] -> MidiTrack Source #

make a track from track events.

toNoteEvents :: MidiNotes notes => MidiChan -> MidiVelocity -> notes -> [MidiEvent] Source #

turn notes into track events.

voiceEvent :: MidiChan -> T -> MidiEvent Source #

create a Voice MIDI event

setTempo :: MidiTempo -> MidiEvent Source #

tempo meta event.

metaEvent :: T -> MidiEvent Source #

create a Meta MIDI event

midiEvent :: MidiChan -> Body -> MidiEvent Source #

create a Voice or Mode MIDI event.

programChange :: MidiChan -> MidiProgram -> MidiEvent Source #

program change MIDI Voice event.

noteEvents :: MidiChan -> MidiVelocity -> ([IPitch], IDur) -> [MidiEvent] Source #

note on + note off events, using Pad to carve out space.

noteEvent :: (Pitch -> Velocity -> T) -> MidiChan -> MidiVelocity -> IPitch -> MidiEvent Source #

note on or note off event.

playMidi :: MidiNotes n => FilePath -> Int -> [(Instrument, n)] -> IO () Source #