Treat a stream of MIDI events as parallel streams of MIDI controller events.
- data T key a
- data Controller
- fromChannel :: Channel -> Filter (T Controller Int)
- controllerLinear :: C y => Controller -> (y, y) -> y -> Filter (T y)
- controllerExponential :: C y => Controller -> (y, y) -> y -> Filter (T y)
- pitchBend :: C y => y -> y -> Filter (T y)
- channelPressure :: C y => y -> y -> Filter (T y)
- data BendModulation a = BendModulation a a
- shiftBendModulation :: C a => a -> BendModulation a -> BendModulation a
- bendWheelPressure :: (C y, C y) => Int -> y -> y -> Filter (T (BendModulation y))
Documentation
(Show key, Show a) => Show (T key a) | |
Monoid (T key y) | |
Read (T key a) | |
(NFData key, NFData a) => NormalForm (T key a) | |
Ord key => Transform (T key y) | For reverse you must make sure, that all controller events have an corresponding initial value. Controllers that miss an initial value their last constant piece will be undefined. |
data Controller Source
fromChannel :: Channel -> Filter (T Controller Int)Source
controllerLinear :: C y => Controller -> (y, y) -> y -> Filter (T y)Source
controllerExponential :: C y => Controller -> (y, y) -> y -> Filter (T y)Source
pitchBend :: C y => y -> y -> Filter (T y)Source
pitchBend channel range center
:
emits frequencies on an exponential scale from
center/range
to center*range
.
channelPressure :: C y => y -> y -> Filter (T y)Source
data BendModulation a Source
BendModulation a a |
Eq a => Eq (BendModulation a) | |
Show a => Show (BendModulation a) | |
NFData a => NFData (BendModulation a) |
shiftBendModulation :: C a => a -> BendModulation a -> BendModulation aSource
Multiply the pitch bend by a given factor. This way you can e.g. shift the pitch bend from around 1 to the actual frequency.
bendWheelPressure :: (C y, C y) => Int -> y -> y -> Filter (T (BendModulation y))Source