From 987d2e0bc2f1fc27869fac87876cb685c22d27b3 Mon Sep 17 00:00:00 2001 From: JP Cimalando Date: Mon, 23 Jul 2018 12:38:00 +0200 Subject: implement the velocity offset parameter --- src/adldata.hh | 3 ++- src/adlmidi_load.cpp | 4 ++++ src/adlmidi_midiplay.cpp | 5 +++++ 3 files changed, 11 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/adldata.hh b/src/adldata.hh index dc6a5f8..bb0e883 100644 --- a/src/adldata.hh +++ b/src/adldata.hh @@ -71,6 +71,7 @@ struct adlinsdata2 uint8_t flags; uint16_t ms_sound_kon; // Number of milliseconds it produces sound; uint16_t ms_sound_koff; + int8_t midi_velocity_offset; double voice2_fine_tune; adlinsdata2() {} explicit adlinsdata2(const adlinsdata &d); @@ -105,7 +106,7 @@ extern const AdlBankSetup adlbanksetup[]; * @brief Conversion of storage formats */ inline adlinsdata2::adlinsdata2(const adlinsdata &d) - : tone(d.tone), flags(d.flags), + : tone(d.tone), flags(d.flags), midi_velocity_offset(d.midi_velocity_offset), ms_sound_kon(d.ms_sound_kon), ms_sound_koff(d.ms_sound_koff), voice2_fine_tune(d.voice2_fine_tune) { diff --git a/src/adlmidi_load.cpp b/src/adlmidi_load.cpp index 1bb004f..4a581b7 100644 --- a/src/adlmidi_load.cpp +++ b/src/adlmidi_load.cpp @@ -87,6 +87,8 @@ static void cvt_generic_to_FMIns(adlinsdata2 &ins, const WOPLI &in) ins.adl[1].feedconn = in.fb_conn2_C0; } + ins.midi_velocity_offset = in.midi_velocity_offset; + ins.ms_sound_kon = in.delay_on_ms; ins.ms_sound_koff = in.delay_off_ms; } @@ -143,6 +145,8 @@ static void cvt_FMIns_to_generic(WOPLI &ins, const adlinsdata2 &in) ins.fb_conn2_C0 = in.adl[1].feedconn; } + ins.midi_velocity_offset = in.midi_velocity_offset; + ins.delay_on_ms = in.ms_sound_kon; ins.delay_off_ms = in.ms_sound_koff; } diff --git a/src/adlmidi_midiplay.cpp b/src/adlmidi_midiplay.cpp index b226ce1..1cd6000 100644 --- a/src/adlmidi_midiplay.cpp +++ b/src/adlmidi_midiplay.cpp @@ -261,6 +261,8 @@ bool MIDIplay::realTime_NoteOn(uint8_t channel, uint8_t note, uint8_t velocity) MIDIchannel::activenoteiterator i = m_midiChannels[channel].activenotes_find(note); if(i) { + const int veloffset = i->ains->midi_velocity_offset; + velocity = (uint8_t)std::min(127, std::max(1, (int)velocity + veloffset)); i->vol = velocity; noteUpdate(channel, i, Upd_Volume); return false; @@ -367,6 +369,9 @@ bool MIDIplay::realTime_NoteOn(uint8_t channel, uint8_t note, uint8_t velocity) ains = &bnk->ins[midiins]; } + const int veloffset = ains->midi_velocity_offset; + velocity = (uint8_t)std::min(127, std::max(1, (int)velocity + veloffset)); + int32_t tone = note; if(!isPercussion && (bank > 0)) // For non-zero banks { -- cgit v1.2.3