Linux 音频应用程序 : wanted low latency playback (and stop)

标签 linux audio embedded latency alsa

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

  1. 自制播放器:播放的第一个解决方案是使用 open/write 系统函数输出 /dev/dsp。延迟非常好,快速启动歌曲并快速停止。但是,存在一些错误,有时歌曲会被噪音取代或噪音出现在歌曲的结尾。 (这可能是由于与硬件同步播放的问题,因为该程序应用程序作为极简程序测试单独运行良好)。

  2. Aplay(单声道):第二种解决方案是使用 linux 发行版中提供的“aplay”。问题是延迟,当播放在启动后停止时出现一些内核错误(来自 tlv320aic23 设备)。在停止播放之前等待 100 或 200 毫秒是 Not Acceptable ,因为我的 radio 传感器有 100 毫秒的延迟。

  3. Aplay with dmix(和弦):我认为在这两种解决方案中,限制都是由于 tlv320aic23 设备造成的。我想知道使用声音服务器是否最好。我可以在收到事件后立即播放一首新歌,并在需要时停止播放歌曲。我测试了 aplay -D plug:dmix/home/root/mysong.wav 但在不同的测试后我的插件崩溃了。问题是 aplay 没有返回有关插入崩溃的错误,没有 dmix 的 aplay 仍然有效。

我应该使用其他声音服务器吗?例如“ jack ”?

这是测试程序:

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

最佳答案

我对 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
}

关于Linux 音频应用程序 : wanted low latency playback (and stop),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24507970/

相关文章:

linux - Web服务器至少应该具备哪些功能?

actionscript-3 - 声音——播放了多少字节?

linux - 适用于嵌入式设备的视频 session 堆栈

c - 我什么时候使用扩展数据?

linux - 如何重新排序 HTTP header ?

linux - 如何水平和垂直复制、粘贴和翻转多张图像?

linux - Archlinux 中 Nginx 的 WebDAV

audio - 耳机无声音

arrays - 一个按钮的随机声音生成器,该按钮使用8个不同的.wav文件。每个文件都命名为sound1.wav,sound2.wav…sound8.wav

linux - SNMP 代理所需的 MAU 数据