Loading...
Searching...
No Matches

Classes

struct  Note
 

Public Types

using tick = halp::tick_flicks
 

Public Member Functions

 halp_meta (name, "Midi scale") halp_meta(c_name
 
MidiScale halp_meta (category, "Midi") halp_meta(author
 
MidiScale ossia score halp_meta (manual_url, "https://ossia.io/score-docs/processes/midi-utilities.html#midi-scale") halp_meta(description
 
MidiScale ossia score Maps a midi input to a given scale halp_meta (uuid, "06b33b83-bb67-4f7a-9980-f5d66e4266c5") struct
 
 Node ()
 The map never allocates on the audio thread.
 
void start (int chan, int pitch, int vel, int64_t ts)
 
void stop (int chan, int pitch, int vel, int64_t ts)
 
void exec (const scale_array &scale, int transp)
 
void update (const scale_array &scale, int transp)
 Moves the held keys to their notes in the new scale / transposition.
 
void release_channel (int chan)
 
void operator() (const tick &tk)
 

Static Public Member Functions

static uint16_t key (int chan, int pitch) noexcept
 
static std::optional< uint8_t > map_note (const scale_array &scale, int pitch, int transp) noexcept
 

Public Attributes

 inputs
 
struct { 
 
   midi_out   midi 
 
} outputs 
 
ossia::flat_map< uint16_t, Note > map
 Held input keys (see key()) and the output note each plays.
 
std::array< std::array< uint8_t, 128 >, 17 > playing {}
 
std::string scale {}
 
int base {}
 
int transpose {}
 

Member Function Documentation

◆ release_channel()

void Nodes::MidiUtil::Node::release_channel ( int  chan)
inline

On all notes / sound off: forget the channel's held keys, or a later scale change would restart their notes.

Member Data Documentation

◆ playing

std::array<std::array<uint8_t, 128>, 17> Nodes::MidiUtil::Node::playing {}

Held keys per output note: two keys can map to the same scale note, which must only stop with the last one.


The documentation for this struct was generated from the following file: