aboutsummaryrefslogtreecommitdiff
path: root/src/SPU.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/SPU.cpp')
-rw-r--r--src/SPU.cpp19
1 files changed, 16 insertions, 3 deletions
diff --git a/src/SPU.cpp b/src/SPU.cpp
index dd057d3..28582db 100644
--- a/src/SPU.cpp
+++ b/src/SPU.cpp
@@ -52,7 +52,7 @@ const s16 PSGTable[8][8] =
{-0x7FFF, -0x7FFF, -0x7FFF, 0x7FFF, 0x7FFF, 0x7FFF, 0x7FFF, 0x7FFF},
{-0x7FFF, -0x7FFF, 0x7FFF, 0x7FFF, 0x7FFF, 0x7FFF, 0x7FFF, 0x7FFF},
{-0x7FFF, 0x7FFF, 0x7FFF, 0x7FFF, 0x7FFF, 0x7FFF, 0x7FFF, 0x7FFF},
- { 0x7FFF, 0x7FFF, 0x7FFF, 0x7FFF, 0x7FFF, 0x7FFF, 0x7FFF, 0x7FFF}
+ {-0x7FFF, -0x7FFF, -0x7FFF, -0x7FFF, -0x7FFF, -0x7FFF, -0x7FFF, -0x7FFF}
};
const u32 OutputBufferSize = 2*1024;
@@ -99,6 +99,12 @@ void Reset()
}
+void SetBias(u16 bias)
+{
+ Bias = bias;
+}
+
+
Channel::Channel(u32 num)
{
Num = num;
@@ -358,8 +364,15 @@ void Mix(u32 samples)
l = ((s64)l * MasterVolume) >> 7;
r = ((s64)r * MasterVolume) >> 7;
- OutputBuffer[OutputWriteOffset ] = l >> 12;
- OutputBuffer[OutputWriteOffset + 1] = r >> 12;
+ l >>= 12;
+ if (l < -0x8000) l = -0x8000;
+ else if (l > 0x7FFF) l = 0x7FFF;
+ r >>= 12;
+ if (r < -0x8000) r = -0x8000;
+ else if (r > 0x7FFF) r = 0x7FFF;
+
+ OutputBuffer[OutputWriteOffset ] = l << 3;
+ OutputBuffer[OutputWriteOffset + 1] = r << 3;
OutputWriteOffset += 2;
OutputWriteOffset &= ((2*OutputBufferSize)-1);
}