From ca161f6e31223526b89a264693bccc1e4560690f Mon Sep 17 00:00:00 2001 From: Iliyas Jorio Date: Sat, 21 Nov 2020 14:22:58 +0100 Subject: [PATCH] Implement volumeCmd --- src/Sound/SoundManager.cpp | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/src/Sound/SoundManager.cpp b/src/Sound/SoundManager.cpp index 777ee60..89d5525 100644 --- a/src/Sound/SoundManager.cpp +++ b/src/Sound/SoundManager.cpp @@ -493,10 +493,22 @@ OSErr SndDoImmediate(SndChannelPtr chan, const SndCommand* cmd) break; case ampCmd: - impl.source.SetGain(cmd->param1 / 255.0); - LOG << "ampCmd " << impl.source.gain << "\n"; + impl.source.SetGain(cmd->param1 / 256.0); break; + case volumeCmd: + { + uint16_t lvol = (cmd->param2 ) & 0xFFFF; + uint16_t rvol = (cmd->param2 >> 16) & 0xFFFF; + + double pan = (double)rvol / (rvol + lvol); + pan = (pan - 0.5) * 2.0; // Transpose pan from [0...1] to [-1...+1] + + impl.source.SetPan(pan); + impl.source.SetGain(std::max(lvol, rvol) / 256.0); + break; + } + case freqCmd: LOG << "freqCmd " << cmd->param2 << " " << GetMidiNoteName(cmd->param2) << " " << midiNoteFrequencies[cmd->param2] << "\n"; impl.playbackNote = Byte(cmd->param2);