我需要更改Python脚本上使用的audio设备。 我正在使用alsaaudio,根据这个http://pyalsaaudio.sourceforge.net/libalsaaudio.html,这是通过input卡名称创buildPCM设备时实现的。 当我在Python上键入
import alsaaudio alsaaudio.cards()
我明白了
[u'Intel', u'Q9000']
但创buildPCM对象
alsaaudio.PCM(aa.PCM_CAPTURE, aa.PCM_NORMAL, 'Q9000')
它返回
Unknown PCM default:CARD=Q9000
我试图修改.asoundrc作为默认的configuration,但是当它与aplay和arecord在Python上工作时,默认的audio设备仍然是一样的。
在〜/ .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" } }
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"])
设备名称为alsaaudio
有一些无证的怪癖; 当您使用普通卡ID(由cards()
返回)时,预计您有一个接受卡参数的default
设备。 (默认的default
支持这个参数。)
要使用特定设备,请使用plug:internal
或plug:quicktimeWebCam
。
这似乎是一个常见的问题,是一个报告的错误 。 混淆在于alsaaudio的PCM对象期望卡参数。 正如提到的维基会让你相信这是所需的卡的名字(技术上ALSA称这个ID)。 只要您已将卡名称定义为您正在使用的.asoundrc中的默认设备配置文件的控件 ,就是如此。
另一方面,卡参数可以接受上面提到的CL所提到的整个PCM句柄。 正如在提到的bug中看到的那样,提交的补丁会添加这个PCM句柄识别功能。 直到添加到模块中,确定传递给PCM对象的正确句柄的一个好方法是查看arecord -L
的输出(或者如果查找播放设备名称,则可能是aplay -L
)。