Browse Source

split midi_dispatch into subfunctions

master
heck 8 months ago
parent
commit
3292cba8cd
  1. 157
      src/main_osp.cc

157
src/main_osp.cc

@ -165,84 +165,97 @@ namespace Heck::OSP {
}
}
void midi_dispatch_note(ld::MidiEvent msg, bool from_seq)
{
ld::DaisySeed::PrintLine(
"[%i] MIDI from seq=%i : NOTE - ch: %i, nr: %i, val: %i",
ld::System::GetNow(),
from_seq,
msg.channel,
msg.AsNoteOn().note,
msg.AsNoteOn().velocity);
if (msg.channel >= 0 && msg.channel < Constants::TRACK_COUNT) {
tracks[msg.channel].trigger();
}
}
void midi_dispatch_cc(ld::MidiEvent msg, bool from_seq)
{
ld::DaisySeed::PrintLine(
"[%i] MIDI from seq=%i : CC - ch: %i, nr: %i, val: %i",
ld::System::GetNow(),
from_seq,
msg.channel,
msg.AsControlChange().control_number,
msg.AsControlChange().value);
const ld::ControlChangeEvent cc = msg.AsControlChange();
if (State::clear_mode && !from_seq) {
ld::DaisySeed::PrintLine("Clear: ch: %i, cc: %i", cc.channel, cc.control_number);
sequencer.clear_track_cc(cc.channel, cc.control_number);
} else {
if (!from_seq) {
sequencer.midi_in(msg);
}
const float val_normalized = cc.value / 127.;
switch (cc.control_number) {
// Pots
case Constants::MIDI_Mapping::TRACK_PITCH:
tracks[cc.channel].instrument->ctl(0, val_normalized);
break;
case Constants::MIDI_Mapping::TRACK_DECAY:
tracks[cc.channel].decay(val_normalized);
break;
case Constants::MIDI_Mapping::TRACK_PARAM1:
tracks[cc.channel].instrument->ctl(2, val_normalized);
break;
case Constants::MIDI_Mapping::TRACK_PARAM2:
tracks[cc.channel].instrument->ctl(3, val_normalized);
break;
case Constants::MIDI_Mapping::TRACK_FILTER:
tracks[cc.channel].filter(val_normalized);
delaytime = val_normalized;
break;
case Constants::MIDI_Mapping::TRACK_DRIVE:
tracks[cc.channel].drive(val_normalized);
delayfb = val_normalized;
break;
case Constants::MIDI_Mapping::TRACK_VOLUME:
tracks[cc.channel].volume(val_normalized);
break;
// Switches
case Constants::MIDI_Mapping::TRACK_ALGO:
tracks[cc.channel].instrument->switch_algo(int(val_normalized * 2.));
break;
case Constants::MIDI_Mapping::TRACK_MODE:
tracks[cc.channel].instrument->switch_mode(int(val_normalized * 2.));
break;
case Constants::MIDI_Mapping::TRACK_FILTERMODE:
tracks[cc.channel].filtermode(val_normalized);
break;
default:
break;
}
}
}
void midi_dispatch(ld::MidiEvent msg, bool from_seq)
{
switch (msg.type) {
case ld::MidiMessageType::NoteOn: {
ld::DaisySeed::PrintLine(
"MIDI from seq=%i : NOTE - ch: %i, nr: %i, val: %i",
from_seq,
msg.channel,
msg.AsNoteOn().note,
msg.AsNoteOn().velocity);
if (msg.channel >= 0 && msg.channel < Constants::TRACK_COUNT) {
tracks[msg.channel].trigger();
}
} break;
case ld::MidiMessageType::ControlChange: {
ld::DaisySeed::PrintLine(
"MIDI from seq=%i : CC - ch: %i, nr: %i, val: %i",
from_seq,
msg.channel,
msg.AsControlChange().control_number,
msg.AsControlChange().value);
const ld::ControlChangeEvent cc = msg.AsControlChange();
if (State::clear_mode && !from_seq) {
ld::DaisySeed::PrintLine("Clear: ch: %i, cc: %i", cc.channel, cc.control_number);
sequencer.clear_track_cc(cc.channel, cc.control_number);
} else {
if (!from_seq) {
sequencer.midi_in(msg);
}
const float val_normalized = cc.value / 127.;
switch (cc.control_number) {
// Pots
case Constants::MIDI_Mapping::TRACK_PITCH:
tracks[cc.channel].instrument->ctl(0, val_normalized);
break;
case Constants::MIDI_Mapping::TRACK_DECAY:
tracks[cc.channel].decay(val_normalized);
break;
case Constants::MIDI_Mapping::TRACK_PARAM1:
tracks[cc.channel].instrument->ctl(2, val_normalized);
break;
case Constants::MIDI_Mapping::TRACK_PARAM2:
tracks[cc.channel].instrument->ctl(3, val_normalized);
break;
case Constants::MIDI_Mapping::TRACK_FILTER:
tracks[cc.channel].filter(val_normalized);
delaytime = val_normalized;
break;
case Constants::MIDI_Mapping::TRACK_DRIVE:
tracks[cc.channel].drive(val_normalized);
delayfb = val_normalized;
break;
case Constants::MIDI_Mapping::TRACK_VOLUME:
tracks[cc.channel].volume(val_normalized);
break;
// Switches
case Constants::MIDI_Mapping::TRACK_ALGO:
tracks[cc.channel].instrument->switch_algo(int(val_normalized * 2.));
break;
case Constants::MIDI_Mapping::TRACK_MODE:
tracks[cc.channel].instrument->switch_mode(int(val_normalized * 2.));
break;
case Constants::MIDI_Mapping::TRACK_FILTERMODE:
tracks[cc.channel].filtermode(val_normalized);
break;
default:
break;
}
}
} break;
default: {
case ld::MidiMessageType::NoteOn:
midi_dispatch_note(msg, from_seq);
break;
case ld::MidiMessageType::ControlChange:
midi_dispatch_cc(msg, from_seq);
break;
default:
// Other MIDI message
ld::DaisySeed::PrintLine(
"UNHANDLED MIDI UNHANDLED MIDI from seq=%i : CC - ch: %i",
"[%i] UNHANDLED MIDI UNHANDLED MIDI from seq=%i : CC - ch: %i",
ld::System::GetNow(),
from_seq,
msg.channel);
// Other MIDI message
} break;
break;
}
}

Loading…
Cancel
Save