audio - SDL2 浮点音频不剪辑

标签 audio floating-point sdl clipping

我正在使用 SDL2 生成 32 位浮点音频格式的 440Hz 正弦波。

我已阅读 else where 32 位浮点音频格式在 -1.0 和 +1.0 之间标准化。

通过该声明,我预计超出 -1 和 +1 的值会发生剪裁。

当我将正弦波的幅度增加到超过 -1.0 和 +1.0 时,音调变得很重(在 3000 幅度时非常响亮),并且似乎没有发生削波。

所以我的问题是:

  • 幅度超过 -1.0/+1.0 时会发生什么情况以及为什么它不会削波?

  • 32位浮点音频格式的最大幅度值是多少?

  • 是否有任何地方定义了 -1/+1 标准化约定?

最佳答案

从整数格式转换为浮点时,SDL 映射到 [-1, 1],但是在混合时,它会在最大 float 处剪辑:[-3.402823466e+38F, 3.402823466e+38F] .

除此之外,SDL 似乎未经修改地将 float 音频数据直接传递到其许多音频设备实现,因此您的问题取决于操作系统/声卡。

就您的情况而言,您的信号可能在某个时刻已“对数化”,因此在 3000x 时缺乏削波。

关于audio - SDL2 浮点音频不剪辑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33197761/

相关文章:

assembly - 在 x86 Assembly 中使用 PC 扬声器播放声音

facebook - 从 ffmpeg 流式传输到 Facebook Live 被终止

java - 将音频流转换为 PCM

audio - ffmpeg - 将图像和音频组合成视频后,视频比音频长

c++ - 无法使用 <math.h> 中的 C/C++ nextafter/nexttoward 函数获取下一个 32 位浮点值

linux - 使用 Cocotron CDT 与 SDL 链接

c# - 从二进制形式转换 float NaN 值,反之亦然会导致不匹配

python - 为什么 Django DecimalField 让我存储 float 或字符串?

c++ - SDL 文本输入返回白色方 block

c++ - SDL 将光标更改为 Windows 默认值