Lun*_*oms 6 c linux audio alsa
播放两个独立波形文件所需的API配置/调用是什么?我试图这样做,我得到资源忙的错误.一些解决问题的指针将非常有帮助.
以下是snd_pcm_prepare()第二个wavefile 的错误消息
"Device or resource busy"
Run Code Online (Sandbox Code Playgroud)
Jon*_*nny 20
您可以配置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
}
Run Code Online (Sandbox Code Playgroud)
这样做如下:
dmix插件创建一个新设备,允许多个应用程序共享输出流dsnoop,它对输入流执行相同的操作duplex设备中,该设备将使用该asym插件支持输入和输出duplex设备作为默认设备hw:0控制默认设备(alsamixer等)坚持这个~/.asoundrc或者/etc/asound.conf你应该好好去.
有关更多信息,请参阅http://www.alsa-project.org/main/index.php/Asoundrc#Software_mixing.
ALSA不提供混音器.如果您需要同时播放多个音频流,则需要自己将它们混合在一起.
最简单的方法是将WAV文件解码为float样本,添加它们,并在将它们转换回整数样本时剪切它们.
或者,您可以尝试多次打开默认音频设备(而不是像"hw:0"这样的硬件设备),对于您希望播放的每个流,可以尝试打开一次,并希望加载dmix ALSA插件并提供混音功能.