Linux音频应用:想要低延迟播放(和停止)

时间:2014-07-01 10:27:52

标签: linux audio embedded latency alsa

我在嵌入式Linux主板上工作(基于Eukrea iMx25)。应用程序是一种播放音乐或其他歌曲的游戏。我从无线电设备获取事件然后播放wav文件。

  1. 自制播放器:第一个播放解决方案是使用开放/写入系统功能输出 / dev / dsp 。延迟非常好,快速启动歌曲并快速停止。然而,有一些错误,有时歌曲被歌曲结尾处出现的噪音或噪音所取代。 (这可能是由于与硬件同步播放的问题,因为这个程序应用程序可以单独作为极简主义程序测试工作)。

  2. Aplay(单声道):第二种解决方案是使用" aplay"在linux发行版中提供。问题是延迟,在启动后立即停止播放时会出现一些kernell错误(来自tlv320aic23设备)。由于我的无线电传感器有1​​00毫秒的延迟,因此在停止播放前等待100或200毫秒是不可接受的。

  3. 使用dmix进行Aplay(复音):我认为在这两种解决方案中,限制都归功于tlv320aic23设备。我想知道使用声音服务器是否最好。我可以在收到活动后播放一首新歌,并在我想要的时候停止播放歌曲。我测试了aplay -D插件:dmix /home/root/mysong.wav但是在不同的测试之后我遇到了插件崩溃。问题是aplay没有关于插件崩溃的错误,没有dmix的播放仍然有效。

  4. 我应该使用其他声音服务器吗?例如"杰克" ?

    这是测试程序:

     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);
     }
    

1 个答案:

答案 0 :(得分:0)

我不太了解FIQ功能,今天我仍在使用第三种解决方案,但使用asound.conf文件(不是-D plug: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
}