Karya, built on 2020-11-26T21:03:17 (patch 23b5be2d53a9e8e7d6136cda5aae2849abe5cded)

Perform.Midi.Convert

Description

Convert from the Derive events to MIDI performer specific events.

Since this module depends on both the Derive and Perform.Midi layers, it should be called from Derive or Cmd, not Perform.Midi, even though it's physically located in Perform.Midi.

Synopsis

Documentation

This is the sampling rate used to convert linear segments from Signal.Signal to MSignal.Signal.

Since this is only used to interpolate linear segments, it probably doesn't need to be as high as one needed to express the nuances of more complicated curves. If the tracklang srate is higher, then the MIDI output will be denser and more accurate.

Constructors

 MidiLookup

Convert Score events to Perform events, emitting warnings that may have happened along the way.

If the Event has an attribute matching its keymap, use the pitch from the keymap. Otherwise convert the pitch signal.

TODO this used to warn about unmatched attributes, but it got annoying because I use attributes freely. It still seems like it could be useful, so maybe I want to put it back in again someday.

Get the flattened Signal.NoteNumber from an event.

Round pitches to the nearest tenth of a cent. Differences below this are probably imperceptible. Due to floating point inaccuracy, pitches can wind up being slightly off of integral, leading to pitch bending where there should be none.

Arguments

 :: RealTime -> Control.ControlMap Instrument's control map. -> DeriveT.ControlMap Controls to convert. -> Map ScoreT.Control MSignal.Signal

Convert deriver controls to performance controls. Drop all non-MIDI controls, since those will inhibit channel sharing later.

If it's a Patch.Pressure instrument, move the Controls.dynamic control to Controls.breath.