aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/adlmidi.cpp2
-rw-r--r--src/chips/nuked_opl3.cpp12
-rw-r--r--src/chips/nuked_opl3_v174.cpp12
3 files changed, 18 insertions, 8 deletions
diff --git a/src/adlmidi.cpp b/src/adlmidi.cpp
index e90680a..f7099e1 100644
--- a/src/adlmidi.cpp
+++ b/src/adlmidi.cpp
@@ -373,6 +373,8 @@ ADLMIDI_EXPORT void adl_setLogarithmicVolumes(struct ADL_MIDIPlayer *device, int
play->m_setup.LogarithmicVolumes = (logvol != 0);
if(play->m_setup.LogarithmicVolumes)
play->opl.ChangeVolumeRangesModel(ADLMIDI_VolumeModel_NativeOPL3);
+ else
+ play->opl.ChangeVolumeRangesModel(static_cast<ADLMIDI_VolumeModels>(play->opl.m_volumeScale));
}
ADLMIDI_EXPORT void adl_setVolumeRangeModel(struct ADL_MIDIPlayer *device, int volumeModel)
diff --git a/src/chips/nuked_opl3.cpp b/src/chips/nuked_opl3.cpp
index fc6363d..6490f7f 100644
--- a/src/chips/nuked_opl3.cpp
+++ b/src/chips/nuked_opl3.cpp
@@ -73,10 +73,14 @@ int NukedOPL3::generateAndMix(int16_t *output, size_t frames)
#if defined(ADLMIDI_ENABLE_HQ_RESAMPLER)
for(size_t i = 0; i < frames; ++i)
{
- int16_t frame[2];
- generateResampledHq(frame);
- output[0] += (int32_t)frame[0];
- output[1] += (int32_t)frame[1];
+ int32_t frame[2];
+ generateResampledHq32(frame);
+ for (unsigned c = 0; c < 2; ++c) {
+ int32_t temp = (int32_t)output[c] + frame[c];
+ temp = (temp > -32768) ? temp : -32768;
+ temp = (temp < 32767) ? temp : 32767;
+ output[c] = temp;
+ }
output += 2;
}
#else
diff --git a/src/chips/nuked_opl3_v174.cpp b/src/chips/nuked_opl3_v174.cpp
index 675e104..d8e8ef8 100644
--- a/src/chips/nuked_opl3_v174.cpp
+++ b/src/chips/nuked_opl3_v174.cpp
@@ -73,10 +73,14 @@ int NukedOPL3v174::generateAndMix(int16_t *output, size_t frames)
#if defined(ADLMIDI_ENABLE_HQ_RESAMPLER)
for(size_t i = 0; i < frames; ++i)
{
- int16_t frame[2];
- generateResampledHq(frame);
- output[0] += (int32_t)frame[0];
- output[1] += (int32_t)frame[1];
+ int32_t frame[2];
+ generateResampledHq32(frame);
+ for (unsigned c = 0; c < 2; ++c) {
+ int32_t temp = (int32_t)output[c] + frame[c];
+ temp = (temp > -32768) ? temp : -32768;
+ temp = (temp < 32767) ? temp : 32767;
+ output[c] = temp;
+ }
output += 2;
}
#else