Python 更换pyalsaaudio上的声卡
我需要更改python脚本上使用的音频设备。我使用的是alsaaudio,根据这一点,在创建PCM设备时只需输入卡名即可实现。当我在Python上键入Python 更换pyalsaaudio上的声卡,python,linux,fedora,alsa,Python,Linux,Fedora,Alsa,我需要更改python脚本上使用的音频设备。我使用的是alsaaudio,根据这一点,在创建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 我试图修改.a
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"
}
}
alsaaudio
的设备名称有一些未记录的怪癖;
当您使用普通卡ID(由cards()
返回)时,您应该有一个接受卡参数的默认设备。
(默认值default
支持此参数。)
要使用特定设备,请使用plug:internal
或plug:quicktimeWebCam
这似乎是一个常见问题,也是一个常见问题。混淆之处在于alsaaudio的PCM对象对card参数的期望值。正如上面提到的wiki会让你相信它是你想要的卡片名称(从技术上来说,ALSA称之为ID)。只要您已将卡名定义为所使用的中默认设备配置文件的控件,则这是正确的
另一方面,card参数可以接受上面CL中提到的整个PCM句柄。如上述缺陷所示,提交的补丁将添加此PCM句柄识别功能。在将其添加到模块之前,确定传递给PCM对象的正确句柄的一个好方法是查看arecord-L
(或者如果查找播放设备名称,则可能查看aplay-L
)。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"])
您在.asoundrc
中做了什么?我通过更改声音管理器上的默认音频设置来避免这个问题。。。但基本上在.asoundrc中,我和这里做的一样。。(这在我的raspberry Pi和Debian上运行得很好)我在上添加了内容。asoundrc,我在Fedora18上也有同样的问题,如果您同时找到了解决方案,我会很感兴趣。感谢您的回答,我尝试将alsaaudio.PCM(aa.PCM_CAPTURE,aa.PCM_NORMAL,'plug:internal
替换为alsaaudio.PCM(aa.PCM_CAPTURE,aa.PCM_NORMAL,'Q9000')
但我仍然得到卡的无效值错误卡kwarg已被弃用,取而代之的是设备
,因此,对于较新版本的python alsaaudio,最后一行应该是'device=alsaaudio.PCM(device=card_info[“Q9000]”)