diff options
author | Vitaly Novichkov <admin@wohlnet.ru> | 2018-06-15 01:37:43 +0300 |
---|---|---|
committer | Vitaly Novichkov <admin@wohlnet.ru> | 2018-06-15 01:37:43 +0300 |
commit | 70c83caace9911dc5d8b80c1653c96b073f88e4a (patch) | |
tree | 0906a3ac8558966153789da8e9ab382d3162f49f /src/adlmidi_midiplay.cpp | |
parent | a3e8ca2f942b466b658800a26a5674334b8c15ab (diff) | |
download | libADLMIDI-70c83caace9911dc5d8b80c1653c96b073f88e4a.tar.gz libADLMIDI-70c83caace9911dc5d8b80c1653c96b073f88e4a.tar.bz2 libADLMIDI-70c83caace9911dc5d8b80c1653c96b073f88e4a.zip |
Give more live to very long sustaining notes
Diffstat (limited to 'src/adlmidi_midiplay.cpp')
-rw-r--r-- | src/adlmidi_midiplay.cpp | 10 |
1 files changed, 5 insertions, 5 deletions
diff --git a/src/adlmidi_midiplay.cpp b/src/adlmidi_midiplay.cpp index d7155f4..0623ce7 100644 --- a/src/adlmidi_midiplay.cpp +++ b/src/adlmidi_midiplay.cpp @@ -100,17 +100,16 @@ inline bool isXgPercChannel(uint8_t msb, uint8_t lsb) void MIDIplay::AdlChannel::AddAge(int64_t ms) { + const int64_t neg = static_cast<int64_t>(-0x1FFFFFFFl); if(users_empty()) - koff_time_until_neglible = - std::max(int64_t(koff_time_until_neglible - ms), static_cast<int64_t>(-0x1FFFFFFFl)); + koff_time_until_neglible = std::max(int64_t(koff_time_until_neglible - ms), neg); else { koff_time_until_neglible = 0; - for(LocationData *i = users_first; i; i = i->next) { - i->kon_time_until_neglible = - std::max(i->kon_time_until_neglible - ms, static_cast<int64_t>(-0x1FFFFFFFl)); + if(!i->fixed_sustain) + i->kon_time_until_neglible = std::max(i->kon_time_until_neglible - ms, neg); i->vibdelay += ms; } } @@ -1466,6 +1465,7 @@ void MIDIplay::NoteUpdate(uint16_t MidCh, { d->sustained = false; d->vibdelay = 0; + d->fixed_sustain = (ains.ms_sound_kon == static_cast<uint16_t>(adlNoteOnMaxTime)); d->kon_time_until_neglible = ains.ms_sound_kon; d->ins = ins; } |