3

我目前正在研究一个通过 FPGA 连接到 PC 的小型 microhpone。FPGA 通过 UART/USB 将原始数据流发送到我的计算机中。我能够记录、播放和分析数据。

但我不能直接播放“实时”音频流。

可行的方法是使用定制的 C 程序将数据流保存为 PCM 原始格式,并将文件内容通过管道传输到 aplay 中。但这会在数据流中增加 10 秒的延迟......对于演示或测试来说不是很好。

tail -f snd.raw | aplay -t raw -f S16_LE -r 9000

有人有另一个想法,如何让音频流更快地进入我的耳朵?为什么

cat /dev/ttyUSB0 | aplay

不行?(什么都没发生)

到目前为止谢谢
马文

4

2 回答 2

1

您需要一个 api 来让您将音频缓冲区直接流式传输到声卡。我没有在 Linux 上做过,但我为此使用了FMOD 。您可能会在这个问题中找到另一个 API 。SDL 似乎很受欢迎。

一般的想法是您设置一个流缓冲区,然后您的 c 程序将传入的字节填充到一个数组中。选择大小以平衡传入流中的延迟和抖动。当数组已满时,您将其传递给 API,并在第一个播放时开始填充另一个。

于 2009-12-02T18:31:25.073 回答
1

那似乎是该alsaloop程序的领域。但是,该程序需要两个 ALSA 设备才能使用,您可以从它的选项中看到,为了匹配设备的数据流,它付出了相当大的努力,而您自己不一定想这样做。

这个 Stackoverflow 主题讨论了如何创建可供 ALSA 使用的虚拟用户空间设备:也许这是一条值得追求的路线。

于 2017-02-26T08:31:53.997 回答