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