Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Unix 如何将原始PCM数据从/dev/ttyUSB0传输到声卡?_Unix_Audio_Pipe_Pcm - Fatal编程技术网

Unix 如何将原始PCM数据从/dev/ttyUSB0传输到声卡?

Unix 如何将原始PCM数据从/dev/ttyUSB0传输到声卡?,unix,audio,pipe,pcm,Unix,Audio,Pipe,Pcm,我目前正在使用一个小型microhpone,通过FPGA连接到PC。FPGA通过UART/USB将原始数据流吐入我的计算机。我能够记录、播放和分析数据 但我不能直接播放“现场”音频流 工作原理是使用定制的C程序以PCM原始格式保存数据流,并将文件内容管道化到aplay中。但这会给数据流增加10秒的延迟。。。不太适合演示或测试 tail -f snd.raw | aplay -t raw -f S16_LE -r 9000 有没有人有其他想法,如何让音频流更快地进入我的耳朵?为什么 cat /d

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

但我不能直接播放“现场”音频流

工作原理是使用定制的C程序以PCM原始格式保存数据流,并将文件内容管道化到aplay中。但这会给数据流增加10秒的延迟。。。不太适合演示或测试

tail -f snd.raw | aplay -t raw -f S16_LE -r 9000
有没有人有其他想法,如何让音频流更快地进入我的耳朵?为什么

cat /dev/ttyUSB0 | aplay
不工作?(什么也没发生)

非常感谢

marvin

您需要一个api,让您可以将音频缓冲区直接传输到声卡。我还没有在Linux上完成它,但我已经为此使用了。您可能会在中找到另一个API。SDL似乎很受欢迎


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

这似乎是
alsaloop
程序的域。然而,该程序需要使用两台ALSA设备,并且您可以从其选项中看出,为了匹配设备的数据流,它需要付出相当大的努力,而这是您自己不一定要做的


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

自定义C程序除了打开设备节点并从中读取数据之外,还有其他作用吗?是的。这是定制的,就是为了这个目的。它记录在原始、wav和matlab样式中。你有自定义程序的源代码吗?如果是,请描述它的作用。否则,使用
strace(1)
运行它,并发布它的活动日志。嗯,这有用吗?事实上,我更倾向于直接从tty进行分类,为了摆脱我的蹩脚C代码,程序只需从tty读取(使用strace,我可以看到每次迭代读取约10个字节),然后以无休止的循环写入文件。没什么特别的。好吧,你应该确认你的小实用程序除了从设备节点读取数据外,没有其他功能。对于串行设备,可能需要先进行某种设置。