我想使用ALSA将一些音频数据回放到PCM设备.作为示例,我已下载此示例示例并在我的PC中运行它.当没有其他进程正在使用声卡时,它工作正常.但是当其他一些进程使用音频设备(即播放歌曲的媒体播放器)并显示以下错误时,它不播放任何内容 -
Playback open error: Device or resource busy
Run Code Online (Sandbox Code Playgroud)
看一下这个例子的源代码,我可以说第882行的snd_pcm_open函数抛出了这个错误.它找到设备忙,因为另一个进程当前正在使用它.
我也尝试了相反的方式 - 首先开始这个例子然后尝试开始一首歌.在这种情况下,媒体播放器保持空闲状态,在进度条旁边显示"空闲"(我正在使用Banshee).我假设snd_pcm_open获得了设备资源的专有权,因此没有其他进程可以使用它.
但我不希望这样.我想在不需要任何专有权的情况下向音频设备播放声音,以便PC中的其他进程可以共享同一设备以输出音频数据.
我怎样才能做到这一点?如何打开PCM设备以便其他进程也可以共享同一设备?
我找不到在多个进程之间共享设备的方法。我尝试使用该dmix插件使用配置文件组合多个播放流.asoundrc,但由于某种原因不起作用。我尝试使用default我的声卡设备,但也不起作用。根据 ALSA 邮件列表中的建议,我尝试打开默认设备作为default:CARD=x该函数的设备名称参数snd_pcm_open,这导致device not found我的系统出现错误。显然没有办法做到这一点(如果有人能找到办法,请更新这个答案)。
接下来我没有使用 ALSA,而是使用了PulseAudio,它解决了我的问题。