synthesizer-alsa-0.3: Control synthesizer effects via ALSA/MIDI

Synthesizer.EventList.ALSA.MIDI

Contents

Synopsis

Documentation

getTimeSeconds :: C time => IO timeSource

The time type needs high precision, so you will certainly have to instantiate it with Double. Float has definitely not enough bits.

wait :: C time => time -> IO ()Source

type StampedEvent time = (time, T)Source

getStampedEvent :: (C time, AllowInput mode) => T mode -> IO (StampedEvent time)Source

only use it for non-blocking sequencers

We ignore ALSA time stamps and use the time of fetching the event, because I don't know whether the ALSA time stamps are in sync with getClockTime.

getWaitingStampedEvents :: (C time, AllowInput mode) => T mode -> IO [StampedEvent time]Source

only use it for non-blocking sequencers

getEventsUntilEcho_ :: (C time, AllowInput mode) => T mode -> IO [StampedEvent time]Source

only use it for blocking sequencers

getEventsUntilEcho :: AllowInput mode => T -> T mode -> IO [T]Source

getWaitingEvents :: AllowInput mode => T mode -> IO [T]Source

chopLongTime :: StrictTime -> [StrictTime]Source

Returns a list of non-zero times.

withMIDIEvents :: C time => time -> time -> (T StrictTime [T] -> IO a) -> IO aSource

withMIDIEventsNonblockWaitGrouped :: C time => time -> time -> (T StrictTime [T] -> IO a) -> IO aSource

withMIDIEventsNonblockWaitDefer :: C time => time -> time -> (T StrictTime (Maybe T) -> IO a) -> IO aSource

withMIDIEventsNonblockWaitSkip :: C time => time -> time -> (T StrictTime (Maybe T) -> IO a) -> IO aSource

withMIDIEventsNonblockWaitMin :: C time => time -> time -> (T StrictTime (Maybe T) -> IO a) -> IO aSource

withMIDIEventsNonblockConstantPause :: C time => time -> time -> (T StrictTime (Maybe T) -> IO a) -> IO aSource

withMIDIEventsNonblockSimple :: C time => time -> time -> (T StrictTime T -> IO a) -> IO aSource

withMIDIEventsBlockEcho :: C time => time -> time -> (T StrictTime [T] -> IO a) -> IO aSource

makeEcho :: C time => T -> T -> T -> time -> Custom -> TSource

withMIDIEventsBlock :: C time => time -> (T StrictTime T -> IO a) -> IO aSource

discretizeTime :: C time => time -> T time a -> T StrictTime aSource

We first discretize the absolute time values, then we compute differences, in order to avoid rounding errors in further computations.

event filters

getSlice :: (T -> Maybe a) -> Filter (T StrictTime [a])Source

We turn the strict time values into lazy ones according to the breaks by our beat. However for the laziness breaks we ignore the events that are filtered out. That is we loose laziness granularity but hopefully gain efficiency by larger blocks.

data NoteBoundary a Source

Instances

Eq a => Eq (NoteBoundary a) 
Show a => Show (NoteBoundary a) 

data Note Source

Instances

matchNoteEventsCore :: (noteBnd -> Maybe (noteBnd -> Bool, LazyTime -> Note)) -> T StrictTime [noteBnd] -> T StrictTime [Note]Source

durationRemove :: C time => (body -> Bool) -> T time [body] -> (T time, T time [body])Source

Search for specific event, return its time stamp and remove it.

durationRemoveTB :: C time => (body -> Bool) -> T time [body] -> (T time, T time [body])Source

lazySequence :: [IO a] -> IO [a]Source