Karya, built on 2022-03-21T01:30:44 (patch 89d1651424c35e564138d93424a157ff87457245)
Safe HaskellSafe-Inferred



Support for MIDI controls.



type PbRange = (Int, Int) Source #

Pitchbend range in tempered semitones below and above unity. The first integer should probably be negative.

control_constructor :: ControlMap -> ScoreT.Control -> Midi.Key -> Maybe (Signal.Y -> Midi.ChannelMessage) Source #

Convert from a control to a function that creates its MIDI message.

is_midi_control :: ControlMap -> ScoreT.Control -> Bool Source #

True if the given control will be used by the MIDI performer. Takes a ScoreT.Control because being a MIDI control is a precondition for conversion into Control.

is_channel_control :: ScoreT.Control -> Bool Source #

True for controls that must have a channel to themselves. Midi controls are a subset of what I consider controls, since I include all variable note parameters.

pitch_to_midi :: PbRange -> Pitch.NoteNumber -> Maybe (Midi.Key, Midi.PitchBendValue) Source #

Given a NoteNumber, return the midi note number and pitch bend amount to sound at the pitch.

cc controls

universal_control_map :: ControlMap Source #

This map is used by both input and outpt. On input, InputNote maps a midi cc to a symbolic control name, and on output, maps it back again. Of course it may very well be mapped to and from a higher level control name but the defaults are always available.

On output, the "standard" set of symbolic names are understood, but the low level cc## names work uniformly.

This will also be checked by control_constructor, so these are controls that every instrument will respond to. Of course it may override some of these names if it wishes.