Browse Source

Fix: Clear mode inhibited instrument control

Introduce enum MidiSource (UART,SEQ)
master
heck 8 months ago
parent
commit
28c16ecc82
  1. 139
      src/main_osp.cc

139
src/main_osp.cc

@ -117,9 +117,9 @@ namespace Heck::OSP {
sig_osp += tracks[3].nextsample(); sig_osp += tracks[3].nextsample();
sig_bus = sig_osp + sig_in[i]; sig_bus = sig_osp + sig_in[i];
dly1.delayfb_ = delayfb; // dly1.delayfb_ = delayfb;
dly1.delaytime_ = delaytime; // dly1.delaytime_ = delaytime;
sig_bus += dly1.process(sig_bus); // sig_bus += dly1.process(sig_bus);
sig_out[i] = sig_bus; sig_out[i] = sig_bus;
} }
} }
@ -165,12 +165,19 @@ namespace Heck::OSP {
} }
} }
void midi_dispatch_note(ld::MidiEvent msg, bool from_seq)
enum class MidiSource : u8 {
UART = 0,
SEQUENCER = 1
};
void midi_dispatch_note(ld::MidiEvent msg, MidiSource source)
{ {
ld::DaisySeed::PrintLine( ld::DaisySeed::PrintLine(
"[%i] MIDI from seq=%i : NOTE - ch: %i, nr: %i, val: %i", "[%i] MIDI from seq=%i : NOTE - ch: %i, nr: %i, val: %i",
ld::System::GetNow(), ld::System::GetNow(),
from_seq, source,
msg.channel, msg.channel,
msg.AsNoteOn().note, msg.AsNoteOn().note,
msg.AsNoteOn().velocity); msg.AsNoteOn().velocity);
@ -179,82 +186,84 @@ namespace Heck::OSP {
} }
} }
void midi_dispatch_cc(ld::MidiEvent msg, bool from_seq) void midi_dispatch_cc(ld::MidiEvent msg, MidiSource source)
{ {
const ld::ControlChangeEvent msg_cc = msg.AsControlChange();
ld::DaisySeed::PrintLine( ld::DaisySeed::PrintLine(
"[%i] MIDI from seq=%i : CC - ch: %i, nr: %i, val: %i", "[%i] MIDI from seq=%i : CC - ch: %i, nr: %i, val: %i",
ld::System::GetNow(), ld::System::GetNow(),
from_seq, source,
msg.channel, msg_cc.channel,
msg.AsControlChange().control_number, msg_cc.control_number,
msg.AsControlChange().value); msg_cc.value);
const ld::ControlChangeEvent cc = msg.AsControlChange(); if (source == MidiSource::UART) {
if (State::clear_mode && !from_seq) { if (!State::clear_mode) {
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); sequencer.midi_in(msg);
} else {
ld::DaisySeed::PrintLine("Clear: ch: %i, cc: %i", msg_cc.channel, msg_cc.control_number);
sequencer.clear_track_cc(msg_cc.channel, msg_cc.control_number);
} }
const float val_normalized = cc.value / 127.; }
switch (cc.control_number) {
// Pots const float cc_val_normalized = float(msg_cc.value) / 128.F;
case Constants::MIDI_Mapping::TRACK_PITCH: switch (msg_cc.control_number) {
tracks[cc.channel].instrument->ctl(0, val_normalized); // Pots
break; case Constants::MIDI_Mapping::TRACK_PITCH:
case Constants::MIDI_Mapping::TRACK_DECAY: tracks[msg_cc.channel].instrument->ctl(0, cc_val_normalized);
tracks[cc.channel].decay(val_normalized); break;
break; case Constants::MIDI_Mapping::TRACK_DECAY:
case Constants::MIDI_Mapping::TRACK_PARAM1: tracks[msg_cc.channel].decay(cc_val_normalized);
tracks[cc.channel].instrument->ctl(2, val_normalized); break;
break; case Constants::MIDI_Mapping::TRACK_PARAM1:
case Constants::MIDI_Mapping::TRACK_PARAM2: tracks[msg_cc.channel].instrument->ctl(2, cc_val_normalized);
tracks[cc.channel].instrument->ctl(3, val_normalized); break;
break; case Constants::MIDI_Mapping::TRACK_PARAM2:
case Constants::MIDI_Mapping::TRACK_FILTER: tracks[msg_cc.channel].instrument->ctl(3, cc_val_normalized);
tracks[cc.channel].filter(val_normalized); break;
delaytime = val_normalized; case Constants::MIDI_Mapping::TRACK_FILTER:
break; tracks[msg_cc.channel].filter(cc_val_normalized);
case Constants::MIDI_Mapping::TRACK_DRIVE: delaytime = cc_val_normalized;
tracks[cc.channel].drive(val_normalized); break;
delayfb = val_normalized; case Constants::MIDI_Mapping::TRACK_DRIVE:
break; tracks[msg_cc.channel].drive(cc_val_normalized);
case Constants::MIDI_Mapping::TRACK_VOLUME: delayfb = cc_val_normalized;
tracks[cc.channel].volume(val_normalized); break;
break; case Constants::MIDI_Mapping::TRACK_VOLUME:
// Switches tracks[msg_cc.channel].volume(cc_val_normalized);
case Constants::MIDI_Mapping::TRACK_ALGO: break;
tracks[cc.channel].instrument->switch_algo(int(val_normalized * 2.)); // Switches
break; case Constants::MIDI_Mapping::TRACK_ALGO:
case Constants::MIDI_Mapping::TRACK_MODE: tracks[msg_cc.channel].instrument->switch_algo(int(cc_val_normalized * 2.));
tracks[cc.channel].instrument->switch_mode(int(val_normalized * 2.)); break;
break; case Constants::MIDI_Mapping::TRACK_MODE:
case Constants::MIDI_Mapping::TRACK_FILTERMODE: tracks[msg_cc.channel].instrument->switch_mode(int(cc_val_normalized * 2.));
tracks[cc.channel].filtermode(val_normalized); break;
break; case Constants::MIDI_Mapping::TRACK_FILTERMODE:
default: tracks[msg_cc.channel].filtermode(cc_val_normalized);
break; break;
} default:
break;
} }
} }
void midi_dispatch(ld::MidiEvent msg, bool from_seq) void midi_dispatch(ld::MidiEvent msg, MidiSource source)
{ {
switch (msg.type) { switch (msg.type) {
case ld::MidiMessageType::NoteOn: case ld::MidiMessageType::NoteOn:
midi_dispatch_note(msg, from_seq); midi_dispatch_note(msg, source);
break; break;
case ld::MidiMessageType::ControlChange: case ld::MidiMessageType::ControlChange:
midi_dispatch_cc(msg, from_seq); midi_dispatch_cc(msg, source);
break; break;
default: default:
// Other MIDI message // Other MIDI message
ld::DaisySeed::PrintLine( // ld::DaisySeed::PrintLine(
"[%i] UNHANDLED MIDI UNHANDLED MIDI from seq=%i : CC - ch: %i", // "[%i] UNHANDLED MIDI UNHANDLED MIDI from seq=%i : CC - ch: %i",
ld::System::GetNow(), // ld::System::GetNow(),
from_seq, // from_seq,
msg.channel); // msg.channel);
break; break;
} }
} }
@ -263,13 +272,13 @@ namespace Heck::OSP {
{ {
while (midi.HasEvents()) { while (midi.HasEvents()) {
ld::MidiEvent msg = midi.PopEvent(); ld::MidiEvent msg = midi.PopEvent();
midi_dispatch(msg, false); midi_dispatch(msg, MidiSource::UART);
} }
} }
void midi_from_sequencer() void midi_from_sequencer()
{ {
sequencer.midi_out([](ld::MidiEvent msg) { midi_dispatch(msg, true); }); sequencer.midi_out([](ld::MidiEvent msg) { midi_dispatch(msg, MidiSource::SEQUENCER); });
} }
//------------------------------------------------- //-------------------------------------------------

Loading…
Cancel
Save