ALSA配置以在多个进程之间启用设备共享

时间:2011-11-21 13:45:19

标签: c linux pcm alsa

我的主目录中的.asoundrc文件中包含以下代码 -

pcm.lol
{
    type dmix
    ipc_key 1024
    ipc_key_add_uid true
    slave{
        pcm "hw:0,0"
        period_time 125000
        rate 48000
        format S32_LE
        channels 2
    }
}

当我运行this sample example时,它工作正常(我将设备名称更改为plug:lol)。我可以听到耳机里播放的声音。当两个或多个进程尝试同时输出音频数据时,会出现此问题。在这种情况下,后面的过程无法正确输出其音频数据。

例如,我运行了一个正在播放歌曲的媒体播放器,然后我尝试运行该示例。我听不到任何声音,我只能听到媒体播放器里播放的音乐。类似的事情发生在我首先运行这个例子然后是媒体播放器时,在这种情况下我只听我的例子中的音频输出。

我该如何解决这个问题?我的pcm设备配置有错误吗?或者我是否必须在示例代码中提供任何其他PCM配置参数?

另外,如果我能以编程方式创建此逻辑设备配置而不是使用这样的配置文件,那将是非常好的。

2 个答案:

答案 0 :(得分:0)

我认为问题是您的声音输出仍然默认为hw0,0,但是您希望它默认为lol,因此您需要按照ALSA website中的示例添加以下内容到.asoundrc的开头:

pcm.!default {
    type plug
    slave.pcm "lol"
}

不幸的是,我不知道任何编程方式.asoundrc。

答案 1 :(得分:0)

据我检查和检查,ALSA显然没有具体的方法可以做到这一点。我可以在多个进程之间共享内置default设备,但任何其他配置都不提供此功能。此外,我找不到任何编程方式来配置ALSA设备。配置文件似乎是执行此操作的唯一方法。