2

我需要更改 python 脚本中使用的音频设备。我正在使用 alsaaudio,根据这个http://pyalsaaudio.sourceforge.net/libalsaaudio.html ,这只需在创建 PCM 设备时输入卡名即可实现。当我在 Python 上打字时

import alsaaudio
alsaaudio.cards()

我明白了

[u'Intel', u'Q9000']

但将 PCM 对象创建为

alsaaudio.PCM(aa.PCM_CAPTURE, aa.PCM_NORMAL, 'Q9000')

它返回

Unknown PCM default:CARD=Q9000

我试图修改 .asoundrc 以将我想要的配置作为默认配置,但是当它在 Python 上与 aplay 和 arecord 一起使用时,默认音频设备仍然是相同的。

在 ~/.asoundrc 我放

pcm.quicktimeWebCam
{
    type hw
    card Q9000
}

pcm.internal
{
    type hw
    card Intel
}

pcm.!default
{
    type asym
    playback.pcm
    {
        type plug
        slave.pcm "internal"
    }
    capture.pcm
    {
        type plug
        slave.pcm "quicktimeWebCam"
    }
}
4

3 回答 3

3

ALSA 设备由“hw:x,y”表示,其中 x 是设备,y 是子设备(如果有)。它期望卡片以“hw:x,y”的形式指定,而不是人类可读的名称。

card_info = {}
for device_number, card_name in enumerate(alsaaudio.cards()):
    card_info[card_name] = "hw:%s,0" % device_number

device = alsaaudio.PCM(card=card_info["Q9000"])
于 2014-11-14T22:28:25.823 回答
0

这似乎是一个常见问题,并且是一个报告的错误。混淆在于 alsaaudio 的 PCM 对象对 card 参数的期望。正如上面提到的 wiki 会让您相信它是所需卡片的名称(技术上 ALSA 将其称为 ID)。只要您已将卡名称定义为您正在使用的.asoundrc中默认设备配置文件的控件,这就是正确的。

另一方面,card 参数可以接受上面 CL 提到的整个 PCM 句柄。正如在提到的错误中看到的,有一个提交的补丁会添加这个 PCM 句柄识别功能。在将其添加到模块之前,确定传递给 PCM 对象的正确句柄的好方法是查看输出arecord -L(或者可能aplay -L是查找播放设备名称)。

于 2014-05-08T00:07:31.180 回答
0

设备名称alsaaudio有一些未记录的怪癖;当您使用普通卡 ID(由 返回cards())时,预计您有一个default接受卡参数的设备。(默认default支持此参数。)

要使用特定设备,请使用plug:internalplug:quicktimeWebCam

于 2013-08-28T15:44:42.053 回答