我有一個更爲普遍的問題,關於在標準的Linux操作系統中處理播放聲音和通過串口接收數據的時間。當前,我正在讀取一個通過USB到串行橋(pl2303)到達的PCM信號,該信號被記錄,編碼並從FPGA發送。Linux:在錄製/播放聲音期間的定時
現在,我需要在錄製的聲音流的已知位置創建「峯值」,並計劃播放來自在已知時刻錄製的同一臺機器的聲音文件。峯值必須在最大50ms的窗口內開始和停止,它的長度可以是〜200ms ...
現在,我的問題是:我可以期待如何精確定時?我知道,那幾個組件添加「未知滯後」,抖動:從串行側20個字節將它們發送到USB端(在230400Baud這導致〜1ms的前
- USB轉串口網橋收集〜 )
- 如果我稱之爲「'睡1; mpg123的$ MP3FILE` &」我的直接錄音軟件前,Linux的內核將安排他們differenty(也許這會導致幾毫秒,這取決於系統負載)
- 的?聲卡/驅動程序可能會添加一些更多的未知滯後...
- 像「nice」或「sched_setscheduler」這樣的技巧在我的情況下會增加值嗎?
- 我可以在播放聲音的錄音軟件中創建一個附加線程。這樣做,時間可能會更精確,但我有更多的工作要做...
非常感謝。
無論如何,我會嘗試它,但我正在尋找一些背景,以更好地理解和解決我即將出現的問題。
事實證明,使用「sudo chrt --fifo 99 ./experiment.sh」的精度優於10ms - 足夠了!沒有內核補丁,沒有硬件升級沒有模糊多線程編程;-) fifo RT調度在ubuntu標準內核中激活。 – marvin2k 2010-05-21 14:18:33