我有一个更普遍的问题,关于标准 Linux-OS 中处理播放声音和通过串行端口接收数据的时间。
目前,我正在读取通过 USB 转串行桥 (pl2303) 到达的 PCM 信号,该信号是从 FPGA 记录、编码和发送的。
现在,我需要在录制的声音流中的已知位置创建“峰值”,并计划从在已知时刻录制的同一台机器播放声音文件。峰值必须在最大 50ms 的窗口内开始和停止,它的长度可能是 ~200ms...
现在,我的问题是:我可以期望时间有多精确?我知道,有几个组件会添加“未知滞后”、抖动:
- USB 到串行桥接器从串行端收集约 20 个字节,然后将它们发送到 USB 端(在 230400 波特下,这会导致约 1 毫秒)
- 如果我在录制软件之前直接调用“`sleep 1; mpg123 $MP3FILE` &”,Linux-Kernel 会以不同的方式安排它们(可能这会导致几个 10 毫秒,取决于系统负载?)
- 声卡/驱动程序可能会增加一些未知的延迟......
- 在我的情况下,像“nice”或“sched_setscheduler”这样的技巧会增加价值吗?
- 我可以在我的录音软件中建立一个额外的线程来播放声音。这样做,时间可能会更准确,但我还有很多工作要做......
非常感谢。
无论如何我都会尝试,但我正在寻找一些背景知识来更好地理解和解决我即将出现的问题。