我目前正在使用小型microhpone,通过FPGA连接到PC。 FPGA通过UART / USB将原始数据流吐入我的计算机。我能够录制,播放和分析数据。
但我不能直接播放“直播”的音频流。
使用自定义的C程序以PCM原始格式保存数据流,并将文件内容传送到播放中。但是这会在数据流中增加10秒的延迟......对于演示或测试来说并不是那么好。
tail -f snd.raw | aplay -t raw -f S16_LE -r 9000
有人有另一个想法,如何让听力流更快地进入我的耳朵?为什么
cat /dev/ttyUSB0 | aplay
不行吗? (没有任何反应)
到目前为止,谢谢你 马文
答案 0 :(得分:0)
您需要一个api,它允许您将audiobuffers直接流式传输到声卡。我没有在Linux上完成它,但为此我使用了FMOD。您可能会在this question中找到另一个API。 SDL似乎很受欢迎。
一般的想法是你设置一个流缓冲区,然后你的c程序将传入的字节填充到一个数组中。选择大小以平衡传入流中的滞后与抖动。当数组已满时,将其传递给API,并在第一次播放时开始填充另一个。
答案 1 :(得分:0)
这似乎是alsaloop
计划的范畴。但是,这个程序需要两个ALSA设备才能使用,你可以从它的选项中看到它为了匹配设备的数据流而付出了相当大的努力,这是你自己不一定想做的事情。
This Stackoverflow topic讨论如何创建ALSA可用的虚拟用户空间设备:这可能是值得追求的路线。