改变pyalsaaudio上的声卡

时间:2013-07-16 15:03:04

标签: python linux fedora alsa

我需要更改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一起使用时,默认的音频设备仍然是相同的。

On~ / .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"
    }
}

3 个答案:

答案 0 :(得分: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"])

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

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

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