Linux:录制/播放声音时的时间

时间:2010-05-21 10:31:43

标签: linux-kernel serial-port timing recording

关于播放声音和通过串口接收数据的标准Linux操作系统的时序,我有一个更普遍的问题。

目前,我正在读取通过USB转串口桥(pl2303)到达的PCM信号,该信号由FPGA记录,编码和发送。

现在,我需要在录制的声音流中的已知位置创建“峰值”,并计划从已知时刻录制的同一台机器播放声音文件。峰值必须在最大50ms的窗口内开始和停止,它的长度可能是〜200ms ......

现在,我的问题是:我对时间的准确程度如何?我知道,有几个组件会增加“未知滞后”,抖动:

  • USB-to-Serial Bridge从串口侧收集~20个字节,然后再将它们发送到USB端(230400波特,这导致~1ms)
  • 如果我叫“睡1; mpg123 $ MP3FILE`&”在我的录音软件之前,Linux-Kernel会将它们安排得不同(可能这会导致几十分钟,具体取决于系统负载?)
  • 声卡/驱动程序可能会增加一些未知的滞后......
  • 像“nice”或“sched_setscheduler”这样的技巧会在我的案例中增加价值吗?
  • 我可以在我的录音软件中构建一个额外的线程,播放声音。这样做,时间可能更精确,但我还有很多工作要做......

非常感谢。

无论如何我会尝试,但我正在寻找一些背景知识,以便更好地理解和解决我即将出现的问题。

2 个答案:

答案 0 :(得分:0)

我不是百分百肯定,但我认为你的内核需要重建以允许调度程序减少切换任务的延迟时间和多任务处理,在内核2.6.x系列中,有一个选项可以使通过使内核变得更加顺畅,内核更加顺畅。

  • 转到处理器类型和功能
  • 优先购买模式
  • 选择Preemptible kernel(低延迟桌面)

这应该简化时间并使声音看起来更平滑,因为更少的抖动。

尝试并再次重新编译内核。当然,有很多内核补丁可以减少每个任务切换的时间片,使其更加平滑,您的里程可能会有所不同,具体取决于:

  1. 处理器速度 - 使用什么处理器?
  2. 内存 - 内存多少?
  3. 磁盘输入/输出 - 越快,越好
  4. 使用这三个因素相结合,将对调度程序和多任务功能产生影响。延迟越低,它就越精细。

    顺便提一下,有一个专门用于实时捕获声音的Linux发行版,我不记得它的名称,该发行版中的内核经过严格修补,使声音捕获非常流畅。

答案 1 :(得分:0)

再次是我...经过一个不安的夜晚,我解决了我奇怪的时间问题...我的第一次编辑并不完全正确,因为我发布的内容并非100%可重复。在运行了一些测试之后,我可以得出以下Plot,显示时序准确度:

Results from analysis http://mega2000.de/~mzenzes/pics4web/2010-05-28_13-37-08_timingexperiment.png

我尝试了两个不同的ubuntu-kernels2.6.32-21-generic2.6.32-10-rt

我尝试实现RT调度:sudo chrt --fifo 99 ./experimenter.sh

我尝试更改powersaving-options:echo {performance,conservative} | sudo tee /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor

这导致8个不同的测试,每个测试50次。以下是数字:

                                   mean(peakPos)  std(peakPos) 
rt-kernel-fifo99-ondemand          0.97           0.0212 
rt-kernel-fifo99-performance       0.99           0.0040 
rt-kernel-ondemand                 0.91           0.1423 
rt-kernel-performance              0.96           0.0078 
standard-kernel-fifo99-ondemand    0.68           0.0177 
standard-kernel-fifo99-performance 0.72           0.0142 
standard-kernel-ondemand           0.69           0.0749 
standard-kernel-performance        0.69           0.0147
相关问题