Skip to content

Commit 245f03a

Browse files
committed
improve apu pulse channels non-linear mixing precision
1 parent 1a884a5 commit 245f03a

File tree

1 file changed

+11
-12
lines changed

1 file changed

+11
-12
lines changed

xgm/devices/Sound/nes_apu.cpp

Lines changed: 11 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -147,19 +147,18 @@ namespace xgm
147147

148148
if(option[OPT_NONLINEAR_MIXER])
149149
{
150-
INT32 voltage = square_table[out[0] + out[1]];
151-
m[0] = out[0] << 6;
152-
m[1] = out[1] << 6;
153-
INT32 ref = m[0] + m[1];
150+
INT32 ref = out[0] + out[1];
154151
if (ref > 0)
155152
{
156-
m[0] = (m[0] * voltage) / ref;
157-
m[1] = (m[1] * voltage) / ref;
153+
INT32 voltage = square_table[ref];
154+
m[0] = (out[0] * voltage) / ref;
155+
m[1] = (out[1] * voltage) / ref;
158156
}
159157
else
160158
{
161-
m[0] = voltage;
162-
m[1] = voltage;
159+
// square_table[0] = 0;
160+
m[0] = 0;
161+
m[1] = 0;
163162
}
164163
}
165164
else
@@ -170,11 +169,11 @@ namespace xgm
170169

171170
b[0] = m[0] * sm[0][0];
172171
b[0] += m[1] * sm[0][1];
173-
b[0] >>= 7;
172+
b[0] >>= 11;
174173

175174
b[1] = m[0] * sm[1][0];
176175
b[1] += m[1] * sm[1][1];
177-
b[1] >>= 7;
176+
b[1] >>= 11;
178177

179178
return 2;
180179
}
@@ -190,8 +189,8 @@ namespace xgm
190189
option[OPT_NEGATE_SWEEP_INIT] = false;
191190

192191
square_table[0] = 0;
193-
for(int i=1;i<32;i++)
194-
square_table[i]=(INT32)((8192.0*95.88)/(8128.0/i+100));
192+
for(int i=1;i<32;i++)
193+
square_table[i]=(INT32)round((16.0*8192.0*95.88)/(8128.0/i+100));
195194

196195
square_linear = square_table[15]; // match linear scale to one full volume square of nonlinear
197196

0 commit comments

Comments
 (0)