diff --git a/src/main_osp.cc b/src/main_osp.cc index 7ce3d17..fa10c5b 100644 --- a/src/main_osp.cc +++ b/src/main_osp.cc @@ -117,9 +117,9 @@ namespace Heck::OSP { sig_osp += tracks[3].nextsample(); sig_bus = sig_osp + sig_in[i]; - dly1.delayfb_ = delayfb; - dly1.delaytime_ = delaytime; - sig_bus += dly1.process(sig_bus); + // dly1.delayfb_ = delayfb; + // dly1.delaytime_ = delaytime; + // sig_bus += dly1.process(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( "[%i] MIDI from seq=%i : NOTE - ch: %i, nr: %i, val: %i", ld::System::GetNow(), - from_seq, + source, msg.channel, msg.AsNoteOn().note, 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( "[%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); + source, + msg_cc.channel, + msg_cc.control_number, + msg_cc.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) { + if (source == MidiSource::UART) { + if (!State::clear_mode) { 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 - 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; - } + } + + const float cc_val_normalized = float(msg_cc.value) / 128.F; + switch (msg_cc.control_number) { + // Pots + case Constants::MIDI_Mapping::TRACK_PITCH: + tracks[msg_cc.channel].instrument->ctl(0, cc_val_normalized); + break; + case Constants::MIDI_Mapping::TRACK_DECAY: + tracks[msg_cc.channel].decay(cc_val_normalized); + break; + case Constants::MIDI_Mapping::TRACK_PARAM1: + tracks[msg_cc.channel].instrument->ctl(2, cc_val_normalized); + break; + case Constants::MIDI_Mapping::TRACK_PARAM2: + tracks[msg_cc.channel].instrument->ctl(3, cc_val_normalized); + break; + case Constants::MIDI_Mapping::TRACK_FILTER: + tracks[msg_cc.channel].filter(cc_val_normalized); + delaytime = cc_val_normalized; + break; + case Constants::MIDI_Mapping::TRACK_DRIVE: + tracks[msg_cc.channel].drive(cc_val_normalized); + delayfb = cc_val_normalized; + break; + case Constants::MIDI_Mapping::TRACK_VOLUME: + tracks[msg_cc.channel].volume(cc_val_normalized); + break; + // Switches + case Constants::MIDI_Mapping::TRACK_ALGO: + tracks[msg_cc.channel].instrument->switch_algo(int(cc_val_normalized * 2.)); + break; + case Constants::MIDI_Mapping::TRACK_MODE: + tracks[msg_cc.channel].instrument->switch_mode(int(cc_val_normalized * 2.)); + break; + case Constants::MIDI_Mapping::TRACK_FILTERMODE: + tracks[msg_cc.channel].filtermode(cc_val_normalized); + break; + default: + break; } } - void midi_dispatch(ld::MidiEvent msg, bool from_seq) + void midi_dispatch(ld::MidiEvent msg, MidiSource source) { switch (msg.type) { case ld::MidiMessageType::NoteOn: - midi_dispatch_note(msg, from_seq); + midi_dispatch_note(msg, source); break; case ld::MidiMessageType::ControlChange: - midi_dispatch_cc(msg, from_seq); + midi_dispatch_cc(msg, source); break; default: // Other MIDI message - ld::DaisySeed::PrintLine( - "[%i] UNHANDLED MIDI UNHANDLED MIDI from seq=%i : CC - ch: %i", - ld::System::GetNow(), - from_seq, - msg.channel); + // ld::DaisySeed::PrintLine( + // "[%i] UNHANDLED MIDI UNHANDLED MIDI from seq=%i : CC - ch: %i", + // ld::System::GetNow(), + // from_seq, + // msg.channel); break; } } @@ -263,13 +272,13 @@ namespace Heck::OSP { { while (midi.HasEvents()) { ld::MidiEvent msg = midi.PopEvent(); - midi_dispatch(msg, false); + midi_dispatch(msg, MidiSource::UART); } } 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); }); } //-------------------------------------------------