From f3dd9a6e69ba4ddc1359287754029f588db249df Mon Sep 17 00:00:00 2001 From: Wohlstand Date: Sun, 6 Sep 2020 00:56:41 +0300 Subject: Added an aproximated HMI volume model --- src/adlmidi_opl3.cpp | 14 ++++++++++++++ 1 file changed, 14 insertions(+) (limited to 'src/adlmidi_opl3.cpp') 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; } } -- cgit v1.2.3