我在嵌入式Linux主板上工作(基于Eukrea iMx25)。应用程序是一种播放音乐或其他歌曲的游戏。我从无线电设备获取事件然后播放wav文件。
自制播放器:第一个播放解决方案是使用开放/写入系统功能输出 / dev / dsp 。延迟非常好,快速启动歌曲并快速停止。然而,有一些错误,有时歌曲被歌曲结尾处出现的噪音或噪音所取代。 (这可能是由于与硬件同步播放的问题,因为这个程序应用程序可以单独作为极简主义程序测试工作)。
Aplay(单声道):第二种解决方案是使用" aplay"在linux发行版中提供。问题是延迟,在启动后立即停止播放时会出现一些kernell错误(来自tlv320aic23设备)。由于我的无线电传感器有100毫秒的延迟,因此在停止播放前等待100或200毫秒是不可接受的。
使用dmix进行Aplay(复音):我认为在这两种解决方案中,限制都归功于tlv320aic23设备。我想知道使用声音服务器是否最好。我可以在收到活动后播放一首新歌,并在我想要的时候停止播放歌曲。我测试了aplay -D插件:dmix /home/root/mysong.wav但是在不同的测试之后我遇到了插件崩溃。问题是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 :(得分: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
}