2010-11-30 75 views
2

在SDL中,当您设置音频输出设备时,您和SDL必须就音频格式达成一致 - 例如, 44.1KHz立体声16位有符号小端。没关系。但是,除了最终商定的格式之外,您还可以得到一个似乎没有很好记录的计算“沉默”值。SDL音频API中“沉默”值的确切含义是什么?

一个沉默的声音样本显然包含一遍又一遍重复的相同样本值,并且您希望它处于“零”水平。从某种意义上讲,任何常数值都可以做到,但是你必须同意一个值(所以当你切换到不同的声音时,你不会得到流行音乐),并且在一个理智的世界中,你想要在样本中心选择一个值值范围。

所以,如果你碰巧使用一个无符号格式为你的样本值范围为0..whatever,你的沉默值将是(无论/ 2)。

编辑 - 在下面插入“无符号”以避免混淆。

这一切都很好。但你得到的沉默值是一个无符号的8位整数。如果您想要无符号的16位样本,那么这样做效果不佳 - 0x8000的逻辑静默值需要两个不同的字节值,并且它要求它们的顺序是正确的。

因此,您从SDL获得的沉默值似乎没有太大意义。例如,你不能用它来擦除你的缓冲区,而不会处理额外的复杂问题,并且无论如何都会使得预计的沉默值几乎没有意义。

这意味着,当然,我误解了这一点。

所以 - 如果这不是如何使用沉默值,它应该如何使用应该

+0

Minor nitpick,但是如果您使用的是16位* signed *音频数据,由于范围是从-32k到+ 32k,因此无法将正确的静音值设置为0x0000?但是,我认为您对未签名的音频数据有效。我对SDL的沉默价值的看法是,它可能只是无用的遗留问题,你应该悄悄地忘记你曾经看到过的,计算你自己的,并且快乐的方式。 :) – cecilkorik 2010-11-30 10:38:59

+0

SDL支持16位有符号和无符号,大小尾数。而且之前的段落建立了使用无符号格式的上下文,无论样本值为0。但我可以更明确 - 将解决。 – Steve314 2010-11-30 12:13:09

回答

1

我没有证据支持这一点,但我认为这里的假设是“沉默”可以被解释为“沉默的普通声卡格式”。是的那些:

  1. 无符号8位整数
  2. 符号16位整数
  3. 符号32位整数(24位音频数据)
  4. 归一化的32位浮点
  5. 标准化的64位浮点。

在除无符号8位以外的所有情况下,零(0)是“零幅度”值。因此,返回的无符号8位整数包含这些格式的所有可能的“零幅度”值。

相关问题