Karya, built on 2018-03-16T03:22:32 (patch df7306861219887e676081746f4a4edfe05eb0b5)

Safe HaskellNone




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 -> Score.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 -> Score.Control -> Bool Source #

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

is_channel_control :: Score.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.