SndDoImmediate: Fix NaN in volumeCmd pan

This commit is contained in:
Iliyas Jorio 2021-07-18 13:01:17 +02:00
parent 9031c6b869
commit 91f6390055
1 changed files with 7 additions and 2 deletions

View File

@ -609,9 +609,14 @@ OSErr SndDoImmediate(SndChannelPtr chan, const SndCommand* cmd)
{
uint16_t lvol = (cmd->param2 ) & 0xFFFF;
uint16_t rvol = (cmd->param2 >> 16) & 0xFFFF;
uint32_t volsum = lvol + rvol;
double pan = (double)rvol / (rvol + lvol);
pan = (pan - 0.5) * 2.0; // Transpose pan from [0...1] to [-1...+1]
double pan = 0;
if (volsum != 0) // don't divide by zero
{
pan = (double)rvol / volsum;
pan = 2*pan - 1; // Transpose pan from [0...1] to [-1...+1]
}
impl.pan = pan;
impl.gain = std::max(lvol, rvol) / 256.0;