【发布时间】:2016-11-04 04:55:49
【问题描述】:
我正在通过将数据传输到播放中来制作合成器(我知道这并不理想),并且声音落后于改变声音的按键。我相信这是因为 aplay 以恒定的 8000 Hz 运行,但 c 程序的运行速度不稳定。如何让 for 循环在 C 中以 8000 Hz 运行?
【问题讨论】:
-
这个问题太宽泛了。没有简单的措施可以确保这一点。这取决于目标平台、可用库等。
-
直接使用 ALSA、PulseAudio 等 API 可能比使用管道与
aplay通信更成功。这些 API 将提供回调或阻塞函数,以允许您以所需的采样率(例如 8 kHz)可靠地生成数据,而不会引入延迟。使用管道,您将始终与内核缓冲区竞争……默认为 64 kB,或 2 秒的 16 位立体声!还有一些包装这些 API 的更简单的库,比如 PortAudio(也许是你最好的选择?)