SDL音频API中的“静音”值究竟是什么?

时间:2010-11-30 10:28:48

标签: audio sdl

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

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

因此,如果您碰巧使用无符号格式作为0..whatever的样本值范围,则您的静默值将为(无论/ 2)。

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

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

因此,从SDL获得的沉默值似乎没有多大意义。例如,你不能用它来擦拭你的缓冲区而不需要处理额外的复杂情况并做出推断,这几乎可以使预先计算的沉默值无意义。

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

那么 - 如果这不是如何使用沉默值,应该如何使用?

1 个答案:

答案 0 :(得分:1)

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

  1. 无符号8位整数
  2. 签名的16位整数
  3. 有符号的32位整数(用于24位音频数据)
  4. 规范化的32位浮点
  5. 规范化的64位浮点。
  6. 在除无符号8位之外的所有情况下,零(0)是“零幅度”值。因此,返回的无符号8位整数包含这些格式的“零幅度”的所有可能值。