synthesizer-midi-0.6.1: Render audio signals from MIDI files or realtime messages

Safe HaskellNone
LanguageHaskell2010

Synthesizer.MIDI.Generic

Description

Convert MIDI events of a MIDI controller to a control signal.

Synopsis

Documentation

replicateLong :: Write sig y => StrictTime -> y -> sig y #

piecewiseConstant :: Write sig y => T StrictTime y -> sig y #

piecewiseConstantInit :: Write sig y => y -> T StrictTime y -> sig y #

piecewiseConstantInitWith :: Write sig c => (y -> c) -> c -> T StrictTime [y] -> sig c #

type Instrument y signal = y -> y -> LazyTime -> signal #

type Bank y signal = Program -> Instrument y signal #

renderInstrument :: C y => Bank y signal -> Note -> signal #

Instrument parameters are: velocity from -1 to 1 (0 is the normal pressure, no pressure aka NoteOff is not supported), frequency is given in Hertz

renderInstrumentIgnoreProgram :: C y => Instrument y signal -> Note -> signal #

flatten :: (Monoid signal, C time) => T time [signal] -> T time signal #

Turn an event list with bundles of elements into an event list with single events. ToDo: Move to event-list package?

applyModulation :: (Transform signal, NormalForm signal) => signal -> Modulator (signal -> instr, note) (instr, note) #

evaluateVectorHead :: NormalForm signal => signal -> t -> t #

We have to evaluate the head value at each drop in order to avoid growing thunks that lead to a space leak.

advanceModulation :: (Transform signal, NormalForm signal) => LazyTime -> State signal LazyTime #

type FilterSequence event signal = Filter event (T ShortStrictTime signal) #

data Modulator note signal #

The state action for the time should just return the argument time. However we need this time (or alternatively another result type) for triggering the drop in advanceModulationChunk. Without this strict evaluation, the drop will be delayed until the control curve is actually needed.

Constructors

Modulator state (StrictTime -> State state StrictTime) (note -> State state signal) 

Instances

Arrow Modulator # 

Methods

arr :: (b -> c) -> Modulator b c #

first :: Modulator b c -> Modulator (b, d) (c, d) #

second :: Modulator b c -> Modulator (d, b) (d, c) #

(***) :: Modulator b c -> Modulator b' c' -> Modulator (b, b') (c, c') #

(&&&) :: Modulator b c -> Modulator b c' -> Modulator b (c, c') #

Category * Modulator # 

Methods

id :: cat a a #

(.) :: cat b c -> cat a b -> cat a c #

sequenceCore :: (C event, Monoid signal) => Channel -> Program -> Modulator Note signal -> FilterSequence event signal #

sequence :: (C event, Monoid signal, C y) => Channel -> Instrument y signal -> FilterSequence event signal #

sequenceModulated :: (C event, Transform ctrl, NormalForm ctrl, Monoid signal, C y) => ctrl -> Channel -> (ctrl -> Instrument y signal) -> FilterSequence event signal #

sequenceMultiModulated :: (C event, Monoid signal, C y) => Channel -> instrument -> Modulator (instrument, Note) (Instrument y signal, Note) -> FilterSequence event signal #

sequenceMultiProgram :: (C event, Monoid signal, C y) => Channel -> Program -> [Instrument y signal] -> FilterSequence event signal #

sequenceModulatedMultiProgram :: (Transform ctrl, NormalForm ctrl, C event, Monoid signal, C y) => ctrl -> Channel -> Program -> [ctrl -> Instrument y signal] -> FilterSequence event signal #