2014-07-01 79 views
1

我在嵌入式Linux板上工作(基於Eukrea iMx25)。應用程序是一款可以播放音樂或其他歌曲的遊戲。我從無線電設備獲取事件,然後播放wav文件。Linux音頻應用程序:想要低延遲播放(並停止)

  1. 自制播放器:用於播放第一個解決方案是使用開/寫功能,能輸出的/ dev/DSP。延遲非常好,迅速啓動歌曲並迅速停止。但是,有一些錯誤,有時候歌曲會被歌曲末尾的噪音或噪音所取代。 (這可能是由於與硬件同步播放的問題,因爲此程序應用程序單獨作爲極簡程序測試單獨運行)。 (單聲道):第二種解決方案是使用linux發行版中提供的「aplay」。問題是延遲,當遊戲在啓動後立即停止時(從tlv320aic23設備),會出現一些kernell錯誤。因爲我的無線電傳感器有1​​00毫秒的延遲,所以在停止播放之前等待100或200毫秒是不可接受的。

  2. aplay with dmix(polyphonic):我認爲在這兩種解決方案中,限制均歸因於tlv320aic23設備。我不知道使用一個聲音服務器可能是最好的。我可以在收到活動後立即播放一首新歌,並在需要時停止播放歌曲。我測試了aplay -D plug:dmix /home/root/mysong.wav,但是在不同的測試後,我的插件崩潰了。問題是沒有任何錯誤返回aplay有關插件崩潰和aplay沒有dmix仍然有效。

我應該使用其他聲音服務器嗎?例如「傑克」?

下面是測試程序:

for(i=50; i>0; i--){ 
    periode = 23 * i; 
    // Display in log 
    msg(USER, MSG_CONTROLE, "declenchement dalle %d et attente %f", 
       choixDalle, periode); 
    // Send event to audio task 
    signalerAppuiDalleCtrl(&ctrlInstances, Hw.xmlParams, &Hw, choixDalle+100, 0); 
    // Waiting with arg in second 
    attendre(periode/1000.0); 
} 
+0

這是不可能的,任何其他API將能夠做的比ALSA更多,因爲驅動器/內核是基於ALSA。所以任何像JACK這樣的第三方解決方案都基於ALSA。有許多不同的ALSA播放選項。請參閱:[Alsa lib文檔](http://www.alsa-project.org/alsa-doc/alsa-lib/index.html)和[PCM概述](http://www.alsa-project.org/) ALSA-DOC/ALSA-LIB/pcm.html)。確保您已啓用FIQ支持。您可以降低採樣率。您可能需要更改來源以適合FIQ模型;我不確定它支持什麼比率/格式。您不希望軟件轉換樣品。 –

+0

我預計傑克就像插入dmix一樣沒有崩潰。 – vincenet

+0

我必須做一些關於FIQ模型的研究來理解你的警告。我希望啓用FIQ,因爲我使用Eukrea的腳本來編譯kernell和rootfs,但也許我錯了。 – vincenet

回答

0

我不知道更多關於FIQ功能,今天我仍在使用第三方解決方案,但與asound.conf文件(沒有-D插頭:DMIX參數),它似乎運作良好。 我asound.conf文件:

pcm.dmixed { 
    type dmix 
    ipc_key 1024 
    ipc_key_add_uid 0 
    slave.pcm "hw:0,0" 
} 
pcm.dsnooped { 
    type dsnoop 
    ipc_key 1026 
    slave.pcm "hw:0,0" 
} 

pcm.duplex { 
    type asym 
    playback.pcm "dmixed" 
    capture.pcm "dsnooped" 
} 

# Instruct ALSA to use pcm.duplex as the default device 
pcm.!default { 
    type plug 
    slave.pcm "duplex" 
} 
ctl.!default { 
    type hw 
    card 0 
}