aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorJP Cimalando <jpcima@users.noreply.github.com>2018-07-23 12:38:00 +0200
committerJP Cimalando <jpcima@users.noreply.github.com>2018-07-23 12:38:00 +0200
commit987d2e0bc2f1fc27869fac87876cb685c22d27b3 (patch)
tree7956a3061885961400cf2879773b2cdb65fa2e14 /src
parent24de684de05f7325e1add55583dc67333cb9f54a (diff)
downloadlibADLMIDI-987d2e0bc2f1fc27869fac87876cb685c22d27b3.tar.gz
libADLMIDI-987d2e0bc2f1fc27869fac87876cb685c22d27b3.tar.bz2
libADLMIDI-987d2e0bc2f1fc27869fac87876cb685c22d27b3.zip
implement the velocity offset parameter
Diffstat (limited to 'src')
-rw-r--r--src/adldata.hh3
-rw-r--r--src/adlmidi_load.cpp4
-rw-r--r--src/adlmidi_midiplay.cpp5
3 files changed, 11 insertions, 1 deletions
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
{