c++ - ALSA:以共享模式打开PCM设备

标签 c++ c linux alsa

我想使用 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/

相关文章:

c++ - 如何将 CString 转换为字节

C: 存储命令历史的数据库

linux - 有关在 Linux 中自定义第 2 层实现的说明

c++添加操作菜单

c++ - 凭据提供程序的自定义 GUI

在 Mac 上编译 Unix 代码

c - 如何在C中用随机字母a..z创建字符方阵

无法在 GNU/Linux 中读取二进制视频文件

python - 无法为 Wagtail 设置 Elasticsearch

c++ - 指针和结构数组