c - 阿尔萨 API : How to play two wave files simultaneously?

标签 c linux audio alsa

播放两个重叠的独立波形文件所需的 API 配置/调用是什么? 我尝试这样做,但出现资源繁忙错误。一些解决问题的建议将非常有帮助。

以下是来自第二个 wavefile 的 snd_pcm_prepare() 的错误信息

"Device or resource busy"

最佳答案

您可以配置 ALSA 的 dmix 插件以允许多个应用程序共享输入/输出设备。

执行此操作的示例配置如下:

pcm.dmixed {
    type dmix
    ipc_key 1024
    ipc_key_add_uid 0
    slave.pcm "hw:0,0"
}
pcm.dsnooped {
    type dsnoop
    ipc_key 1025
    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
}

这会执行以下操作:

  • 使用 dmix 插件创建一个新设备,该插件允许多个应用共享输出流
  • 使用 dsnoop 创建另一个,它对输入流做同样的事情
  • 将它们合并到一个新的 duplex 设备中,该设备将使用 asym 插件支持输入和输出
  • 告诉 ALSA 使用新的 duplex 设备作为默认设备
  • 告诉 ALSA 使用 hw:0 来控制默认设备(alsamixer 等)

将其粘贴到 ~/.asoundrc/etc/asound.conf 中,您就可以开始了。

有关详细信息,请参阅 http://www.alsa-project.org/main/index.php/Asoundrc#Software_mixing .

关于c - 阿尔萨 API : How to play two wave files simultaneously?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14398573/

相关文章:

javascript - 如何在 cordova 移动设备上本地加载 base64 音频?

c - 如何在 win 32 中使用线程概念实现进度条(显示进度)?

c - 执行异步 I/O 操作时退出

java - 无法为 Java 进程设置 LD_LIBRARY_PATH

linux - 无法将现有的 git 存储库推送到 github

iphone - 声音不会在我的应用中播放

c - strtok函数const char指针错误

c - 如何在c中正确格式化整数?

linux - 想知道脚本结果的 pid

python - 如何解释 mp3/wav 文件的 matplotlib 图中的各种颜色