diff options
author | Wohlstand <admin@wohlnet.ru> | 2020-09-06 00:56:41 +0300 |
---|---|---|
committer | Wohlstand <admin@wohlnet.ru> | 2020-09-06 00:56:41 +0300 |
commit | f3dd9a6e69ba4ddc1359287754029f588db249df (patch) | |
tree | 3a87c86dfedf4a23bffc5a8fa017eae903b73ca8 /src/adlmidi_opl3.cpp | |
parent | e81db845bf4c8b78310fd8c8807f490cb094a0ec (diff) | |
download | libADLMIDI-f3dd9a6e69ba4ddc1359287754029f588db249df.tar.gz libADLMIDI-f3dd9a6e69ba4ddc1359287754029f588db249df.tar.bz2 libADLMIDI-f3dd9a6e69ba4ddc1359287754029f588db249df.zip |
Added an aproximated HMI volume model
Diffstat (limited to 'src/adlmidi_opl3.cpp')
-rw-r--r-- | src/adlmidi_opl3.cpp | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/src/adlmidi_opl3.cpp b/src/adlmidi_opl3.cpp index d5ae1f3..334db43 100644 --- a/src/adlmidi_opl3.cpp +++ b/src/adlmidi_opl3.cpp @@ -634,6 +634,14 @@ void OPL3::touchNote(size_t c, if(m_masterVolume < 127) midiVolume = (midiVolume * m_masterVolume) / 127; } + + case Synth::VOLUME_HMI: + { + /* Temporarily copying DMX volume model. TODO: Reverse-engine the actual HMI volume model! */ + volume = (channelVolume * channelExpression * m_masterVolume) / 16129; + volume = (s_dmx_volume_model[volume] + 1) << 1; + volume = (s_dmx_volume_model[(velocity < 128) ? velocity : 127] * volume) >> 9; + } break; } @@ -985,6 +993,10 @@ void OPL3::setVolumeScaleModel(ADLMIDI_VolumeModels volumeModel) case ADLMIDI_VolumeModel_9X_GENERIC_FM: m_volumeScale = OPL3::VOLUME_9X_GENERIC_FM; break; + + case ADLMIDI_VolumeModel_HMI: + m_volumeScale = OPL3::VOLUME_HMI; + break; } } @@ -1011,6 +1023,8 @@ ADLMIDI_VolumeModels OPL3::getVolumeScaleModel() return ADLMIDI_VolumeModel_AIL; case OPL3::VOLUME_9X_GENERIC_FM: return ADLMIDI_VolumeModel_9X_GENERIC_FM; + case OPL3::VOLUME_HMI: + return ADLMIDI_VolumeModel_HMI; } } |