diff options
author | Wohlstand <admin@wohlnet.ru> | 2020-08-21 00:01:17 +0300 |
---|---|---|
committer | Wohlstand <admin@wohlnet.ru> | 2020-08-21 00:01:17 +0300 |
commit | 5ab3afa77e91ea4f7a64769ac8a1ac016e29bfeb (patch) | |
tree | 3b13599898e8d37fb1f7054a0770546d3c6e0601 /src/adlmidi_midiplay.cpp | |
parent | 8cc347e887afaaeb4a4bd2cdd8967ed8e93be1b8 (diff) | |
download | libADLMIDI-5ab3afa77e91ea4f7a64769ac8a1ac016e29bfeb.tar.gz libADLMIDI-5ab3afa77e91ea4f7a64769ac8a1ac016e29bfeb.tar.bz2 libADLMIDI-5ab3afa77e91ea4f7a64769ac8a1ac016e29bfeb.zip |
Make DMX volume model be more accurate
(thanks to NukeYKT for a hint)
Diffstat (limited to 'src/adlmidi_midiplay.cpp')
-rw-r--r-- | src/adlmidi_midiplay.cpp | 9 |
1 files changed, 7 insertions, 2 deletions
diff --git a/src/adlmidi_midiplay.cpp b/src/adlmidi_midiplay.cpp index 5b81d83..61bdf95 100644 --- a/src/adlmidi_midiplay.cpp +++ b/src/adlmidi_midiplay.cpp @@ -704,8 +704,13 @@ void MIDIplay::realTime_ChannelAfterTouch(uint8_t channel, uint8_t atVal) void MIDIplay::realTime_Controller(uint8_t channel, uint8_t type, uint8_t value) { Synth &synth = *m_synth; + + if(value > 127) // Allowed values 0~127 only + value = 127; + if(static_cast<size_t>(channel) > m_midiChannels.size()) channel = channel % 16; + switch(type) { case 1: // Adjust vibrato @@ -1311,8 +1316,8 @@ void MIDIplay::noteUpdate(size_t midCh, case Synth::VOLUME_DMX: { - volume = 2 * (m_midiChannels[midCh].volume * m_midiChannels[midCh].expression * m_masterVolume / 16129) + 1; - //volume = 2 * (Ch[MidCh].volume) + 1; + volume = (m_midiChannels[midCh].volume * m_midiChannels[midCh].expression * m_masterVolume) / 16129; + volume = (DMX_volume_mapping_table[volume] + 1) << 1; volume = (DMX_volume_mapping_table[(vol < 128) ? vol : 127] * volume) >> 9; } break; |