17template <
int CHANNELS>
 
   39        for (
int c = 0; c < CHANNELS; c++) {
 
   46        for (
int i = 0; i < 128; i++) {
 
 
   59        for (
int note = 0; note <= 127; note++) {
 
 
   74        for (uint8_t c = 
channels; c < this->channels; c++) {
 
 
   86        bool changedNote = gate && 
gates[c] && (note != 
notes[c]);
 
   87        bool enabledGate = gate && !
gates[c];
 
   88        bool disabledGate = !gate && 
gates[c];
 
   89        if (changedNote || disabledGate) {
 
   98        if (changedNote || enabledGate) {
 
 
  184        if (this->clk == 
clk)
 
 
  199        if (this->start == 
start)
 
 
  214        if (this->cont == 
cont)
 
 
  229        if (this->stop == 
stop)
 
 
 
  254template <u
int8_t MAX_CHANNELS>
 
  313    int16_t 
pws[MAX_CHANNELS];
 
  351        for (uint8_t c = 0; c < MAX_CHANNELS; c++) {
 
 
  368        for (uint8_t c = 0; c < wheelChannels; c++) {
 
  369            float pw = 
pws[c] / 8191.f;
 
  372                pw = 
pwFilters[c].process(deltaTime, pw);
 
  376            float mod = 
mods[c] / 127.f;
 
 
  391        for (uint8_t c = 0; c < 
channels; c++) {
 
 
  419                for (uint8_t c = 0; c < MAX_CHANNELS; c++) {
 
  436                    for (uint8_t c = 0; c < MAX_CHANNELS; c++) {
 
 
  519            for (uint8_t c = 0; c < 
channels; c++) {
 
  520                if (
notes[c] == note)
 
  526            for (uint8_t i = 0; i < 
channels; i++) {
 
  540            for (uint8_t c = 0; c < 
channels; c++) {
 
 
  553    void pressNote(uint8_t note, uint8_t channel, uint8_t velocity) {
 
  589        notes[channel] = note;
 
  590        gates[channel] = 
true;
 
 
  609            for (uint8_t c = 0; c < 
channels; c++) {
 
  621        gates[channel] = 
false;
 
 
  659            for (uint8_t c = 0; c < 
channels; c++) {
 
 
  715        for (uint8_t c = 0; c < MAX_CHANNELS; c++) {
 
 
  737        json_t* rootJ = json_object();
 
  738        json_object_set_new(rootJ, 
"channels", json_integer(
channels));
 
  739        json_object_set_new(rootJ, 
"monoMode", json_integer(
monoMode));
 
  740        json_object_set_new(rootJ, 
"retriggerOnResume", json_boolean(
retriggerOnResume));
 
  741        json_object_set_new(rootJ, 
"polyMode", json_integer(
polyMode));
 
  743        json_object_set_new(rootJ, 
"pwRange", json_real(
pwRange));
 
  744        json_object_set_new(rootJ, 
"smooth", json_boolean(
smooth));
 
  745        json_object_set_new(rootJ, 
"clockDivision", json_integer(
clockDivision));
 
  750            json_object_set_new(rootJ, 
"lastPw", json_integer(
pws[0]));
 
  751            json_object_set_new(rootJ, 
"lastMod", json_integer(
mods[0]));
 
  754        json_object_set_new(rootJ, 
"filterLambda", json_real(
pwFilters[0].lambda));
 
 
  759        json_t* channelsJ = json_object_get(rootJ, 
"channels");
 
  763        json_t* monoModeJ = json_object_get(rootJ, 
"monoMode");
 
  767        json_t* retriggerOnResumeJ = json_object_get(rootJ, 
"retriggerOnResume");
 
  768        if (retriggerOnResumeJ)
 
  771        json_t* polyModeJ = json_object_get(rootJ, 
"polyMode");
 
  775        json_t* releaseVelocityEnabledJ = json_object_get(rootJ, 
"releaseVelocityEnabled");
 
  776        if (releaseVelocityEnabledJ)
 
  779        json_t* pwRangeJ = json_object_get(rootJ, 
"pwRange");
 
  781            pwRange = json_number_value(pwRangeJ);
 
  783        json_t* smoothJ = json_object_get(rootJ, 
"smooth");
 
  785            smooth = json_boolean_value(smoothJ);
 
  787        json_t* clockDivisionJ = json_object_get(rootJ, 
"clockDivision");
 
  791        json_t* lastPwJ = json_object_get(rootJ, 
"lastPw");
 
  793            pws[0] = json_integer_value(lastPwJ);
 
  796        json_t* lastPitchJ = json_object_get(rootJ, 
"lastPitch");
 
  798            pws[0] = json_integer_value(lastPitchJ) - 8192;
 
  800        json_t* lastModJ = json_object_get(rootJ, 
"lastMod");
 
  802            mods[0] = json_integer_value(lastModJ);
 
  805        json_t* filterLambdaJ = json_object_get(rootJ, 
"filterLambda");
 
 
 
Digital signal processing routines and classes.
Definition approx.hpp:6
 
TExponentialFilter ExponentialFilter
Definition filter.hpp:88
 
int clamp(int x, int a, int b)
Limits x between a and b.
Definition math.hpp:32
 
Root namespace for the Rack API.
Definition AudioDisplay.hpp:9
 
bool gates[CHANNELS]
Definition midi.hpp:22
 
void reset()
Definition midi.hpp:37
 
void setSustainPedal(int8_t cc)
Definition midi.hpp:166
 
void setChannelPressure(int8_t val)
Definition midi.hpp:124
 
void setContinue(bool cont)
Definition midi.hpp:213
 
void panic()
Definition midi.hpp:56
 
bool stop
Definition midi.hpp:29
 
bool cont
Definition midi.hpp:30
 
MidiGenerator()
Definition midi.hpp:33
 
void setPitchWheel(int16_t pw)
Definition midi.hpp:170
 
void setCc(int8_t cc, int id)
Definition midi.hpp:137
 
void setBalance(int8_t cc)
Definition midi.hpp:158
 
bool start
Definition midi.hpp:28
 
void setPan(int8_t cc)
Definition midi.hpp:162
 
int8_t notes[CHANNELS]
Definition midi.hpp:21
 
int16_t pw
Definition midi.hpp:26
 
void setNoteGate(int8_t note, bool gate, int c)
Definition midi.hpp:85
 
void setClock(bool clk)
Definition midi.hpp:183
 
void setFrame(int64_t frame)
Definition midi.hpp:243
 
void setVelocity(int8_t vel, int c)
Must be called before setNoteGate().
Definition midi.hpp:81
 
int8_t channelPressure
Definition midi.hpp:24
 
void setStop(bool stop)
Definition midi.hpp:228
 
bool clk
Definition midi.hpp:27
 
void setChannels(uint8_t channels)
Definition midi.hpp:70
 
void setVolume(int8_t cc)
Definition midi.hpp:154
 
void setKeyPressure(int8_t val, int c)
Definition midi.hpp:111
 
int8_t ccs[128]
Definition midi.hpp:25
 
void setModWheel(int8_t cc)
Definition midi.hpp:150
 
uint8_t channels
Definition midi.hpp:19
 
int8_t keyPressures[CHANNELS]
Definition midi.hpp:23
 
void setStart(bool start)
Definition midi.hpp:198
 
int64_t frame
Definition midi.hpp:31
 
int8_t vels[CHANNELS]
Definition midi.hpp:20
 
virtual void onMessage(const midi::Message &message)
Definition midi.hpp:247
 
dsp::PulseGenerator retriggerPulses[MAX_CHANNELS]
Definition midi.hpp:323
 
uint8_t velocities[MAX_CHANNELS]
Definition midi.hpp:305
 
bool smooth
Enables pitch-wheel and mod-wheel exponential smoothing.
Definition midi.hpp:290
 
void setFilterLambda(float lambda)
Sets exponential smoothing filter lambda speed.
Definition midi.hpp:714
 
void setChannels(uint8_t channels)
Definition midi.hpp:687
 
bool gates[MAX_CHANNELS]
Definition midi.hpp:304
 
uint8_t channels
Actual number of output polyphonic channels.
Definition midi.hpp:259
 
void releasePedal()
Definition midi.hpp:676
 
void releaseNote(uint8_t note, int8_t channel, int8_t velocity)
-1 velocity means unset.
Definition midi.hpp:596
 
dsp::PulseGenerator clockDividerPulse
Definition midi.hpp:322
 
float getPw(uint8_t channel)
Returns pitch wheel value, from -1 to 1.
Definition midi.hpp:722
 
dsp::PulseGenerator stopPulse
Definition midi.hpp:325
 
void pressNote(uint8_t note, uint8_t channel, uint8_t velocity)
Definition midi.hpp:553
 
uint8_t getWheelChannels()
Returns number of polyphonic channels for pitch and mod wheels.
Definition midi.hpp:732
 
dsp::ExponentialFilter pwFilters[MAX_CHANNELS]
Smoothing filters for wheel values.
Definition midi.hpp:318
 
void setPolyMode(PolyMode polyMode)
Definition midi.hpp:701
 
uint8_t assignChannel(uint8_t note)
Definition midi.hpp:513
 
PolyMode polyMode
Definition midi.hpp:281
 
void setMonoMode(MonoMode monoMode)
Definition midi.hpp:694
 
bool releaseVelocityEnabled
Set Velocity output from Note Off velocity.
Definition midi.hpp:284
 
uint8_t aftertouches[MAX_CHANNELS]
Definition midi.hpp:306
 
MonoMode monoMode
Definition midi.hpp:268
 
int64_t clock
Clock index from song start.
Definition midi.hpp:298
 
float getMod(uint8_t channel)
Returns mod wheel value, from 0 to 1.
Definition midi.hpp:727
 
float getPitchVoltage(uint8_t channel)
Definition midi.hpp:708
 
dsp::PulseGenerator startPulse
Definition midi.hpp:324
 
void panic()
Resets performance state.
Definition midi.hpp:348
 
std::vector< uint8_t > heldNotes
Definition midi.hpp:307
 
bool pedal
Whether sustain pedal is held.
Definition midi.hpp:301
 
void processFilters(float deltaTime)
Definition midi.hpp:366
 
MidiParser()
Definition midi.hpp:328
 
json_t * toJson()
Definition midi.hpp:736
 
float pwRange
Number of semitones to bend up/down by pitch wheel.
Definition midi.hpp:287
 
dsp::PulseGenerator clockPulse
Definition midi.hpp:321
 
uint8_t mods[MAX_CHANNELS]
Mod wheel values, from 0 to 127.
Definition midi.hpp:316
 
dsp::PulseGenerator continuePulse
Definition midi.hpp:326
 
int16_t pws[MAX_CHANNELS]
Pitch wheel values, from -8192 to 8191.
Definition midi.hpp:313
 
uint32_t clockDivision
Number of 24 PPQN clocks between clock divider pulses.
Definition midi.hpp:293
 
MonoMode
Definition midi.hpp:261
 
@ NUM_MONO_MODES
Definition midi.hpp:266
 
@ FIRST_PRIORITY_MODE
Definition midi.hpp:263
 
@ HIGHEST_PRIORITY_MODE
Definition midi.hpp:265
 
@ LOWEST_PRIORITY_MODE
Definition midi.hpp:264
 
@ LAST_PRIORITY_MODE
Definition midi.hpp:262
 
void pressPedal()
Definition midi.hpp:670
 
int8_t rotateIndex
Definition midi.hpp:308
 
dsp::ExponentialFilter modFilters[MAX_CHANNELS]
Definition midi.hpp:319
 
uint8_t notes[MAX_CHANNELS]
Definition midi.hpp:303
 
void refreshHeld()
Deactivates all notes that are not held, and reactivates notes that are.
Definition midi.hpp:630
 
PolyMode
Method for assigning notes to polyphony channels.
Definition midi.hpp:274
 
@ ROTATE_MODE
Definition midi.hpp:275
 
@ REUSE_MODE
Definition midi.hpp:276
 
@ RESET_MODE
Definition midi.hpp:277
 
@ NUM_POLY_MODES
Definition midi.hpp:279
 
@ MPE_MODE
Definition midi.hpp:278
 
void processCC(const midi::Message &msg)
Definition midi.hpp:457
 
void processMessage(const midi::Message &msg)
Definition midi.hpp:396
 
void reset()
Resets settings and performance state.
Definition midi.hpp:334
 
void processPulses(float deltaTime)
Definition midi.hpp:385
 
void fromJson(json_t *rootJ)
Definition midi.hpp:758
 
void processSystem(const midi::Message &msg)
Definition midi.hpp:481
 
bool retriggerOnResume
In monophonic mode, generate Retrigger pulse when the active note is released and another takes over.
Definition midi.hpp:271
 
uint8_t getChannels()
Definition midi.hpp:683
 
When triggered, holds a high value for a specified time before going low again.
Definition digital.hpp:167
 
void setSize(int size)
Definition midi.hpp:31
 
void setFrame(int64_t frame)
Definition midi.hpp:85
 
void setValue(uint8_t value)
Definition midi.hpp:73
 
void setStatus(uint8_t status)
Definition midi.hpp:51
 
uint8_t getNote() const
Definition midi.hpp:57
 
void setNote(uint8_t note)
Definition midi.hpp:62
 
void setChannel(uint8_t channel)
Definition midi.hpp:40
 
uint8_t getChannel() const
Definition midi.hpp:35
 
uint8_t getStatus() const
Definition midi.hpp:46
 
uint8_t getValue() const
Definition midi.hpp:68