我想同时从 2 个设备录制声音:
- 内置麦克风
- 外部 USB 网络摄像头麦克风
使用pulseaudio
声音控制器,我将这些设备设置为默认设备,并且可以使用 录制声音snd_pcm_open(&handle, "default", SND_PCM_STREAM_CAPTURE, 0)
。
但现在我想同时录制两个设备的声音,所以我必须选择提到的命名方案这里。然而我对其中几个没有成功。
我想这可以解决我的问题,但front:CARD=U0x46d0x825,DEV=0
作为设备名称没有帮助。
我收到这些错误:
ALSA lib pcm.c:2239:(snd_pcm_open_noupdate) Unknown PCM ALSA lib pcm.c:2239:(snd_pcm_open_noupdate) Unknown PCM
ALSA lib pcm_hw.c:1667:(_snd_pcm_hw_open) Invalid value for card
arecord -l
给我:
# arecord -l
**** List of CAPTURE Hardware Devices ****
Home directory not accessible: Permission denied
card 0: PCH [HDA Intel PCH], device 0: ALC662 rev1 Analog [ALC662 rev1 Analog]
Subdevices: 1/1
Subdevice #0: subdevice #0
card 0: PCH [HDA Intel PCH], device 2: ALC662 rev1 Alt Analog [ALC662 rev1 Alt Analog]
Subdevices: 1/1
Subdevice #0: subdevice #0
card 1: U0x46d0x825 [USB Device 0x46d:0x825], device 0: USB Audio [USB Audio]
Subdevices: 1/1
Subdevice #0: subdevice #0
并# arecord -L
给出:
# arecord -L
null
Discard all samples (playback) or generate zero samples (capture)
pulse
PulseAudio Sound Server
default:CARD=PCH
HDA Intel PCH, ALC662 rev1 Analog
Default Audio Device
sysdefault:CARD=PCH
HDA Intel PCH, ALC662 rev1 Analog
Default Audio Device
front:CARD=PCH,DEV=0
HDA Intel PCH, ALC662 rev1 Analog
Front speakers
surround40:CARD=PCH,DEV=0
HDA Intel PCH, ALC662 rev1 Analog
4.0 Surround output to Front and Rear speakers
surround41:CARD=PCH,DEV=0
HDA Intel PCH, ALC662 rev1 Analog
4.1 Surround output to Front, Rear and Subwoofer speakers
surround50:CARD=PCH,DEV=0
HDA Intel PCH, ALC662 rev1 Analog
5.0 Surround output to Front, Center and Rear speakers
surround51:CARD=PCH,DEV=0
HDA Intel PCH, ALC662 rev1 Analog
5.1 Surround output to Front, Center, Rear and Subwoofer speakers
surround71:CARD=PCH,DEV=0
HDA Intel PCH, ALC662 rev1 Analog
7.1 Surround output to Front, Center, Side, Rear and Woofer speakers
dmix:CARD=PCH,DEV=0
HDA Intel PCH, ALC662 rev1 Analog
Direct sample mixing device
dmix:CARD=PCH,DEV=2
HDA Intel PCH, ALC662 rev1 Alt Analog
Direct sample mixing device
dsnoop:CARD=PCH,DEV=0
HDA Intel PCH, ALC662 rev1 Analog
Direct sample snooping device
dsnoop:CARD=PCH,DEV=2
HDA Intel PCH, ALC662 rev1 Alt Analog
Direct sample snooping device
hw:CARD=PCH,DEV=0
HDA Intel PCH, ALC662 rev1 Analog
Direct hardware device without any conversions
hw:CARD=PCH,DEV=2
HDA Intel PCH, ALC662 rev1 Alt Analog
Direct hardware device without any conversions
plughw:CARD=PCH,DEV=0
HDA Intel PCH, ALC662 rev1 Analog
Hardware device with all software conversions
plughw:CARD=PCH,DEV=2
HDA Intel PCH, ALC662 rev1 Alt Analog
Hardware device with all software conversions
default:CARD=U0x46d0x825
USB Device 0x46d:0x825, USB Audio
Default Audio Device
sysdefault:CARD=U0x46d0x825
USB Device 0x46d:0x825, USB Audio
Default Audio Device
front:CARD=U0x46d0x825,DEV=0
USB Device 0x46d:0x825, USB Audio
Front speakers
surround40:CARD=U0x46d0x825,DEV=0
USB Device 0x46d:0x825, USB Audio
4.0 Surround output to Front and Rear speakers
surround41:CARD=U0x46d0x825,DEV=0
USB Device 0x46d:0x825, USB Audio
4.1 Surround output to Front, Rear and Subwoofer speakers
surround50:CARD=U0x46d0x825,DEV=0
USB Device 0x46d:0x825, USB Audio
5.0 Surround output to Front, Center and Rear speakers
surround51:CARD=U0x46d0x825,DEV=0
USB Device 0x46d:0x825, USB Audio
5.1 Surround output to Front, Center, Rear and Subwoofer speakers
surround71:CARD=U0x46d0x825,DEV=0
USB Device 0x46d:0x825, USB Audio
7.1 Surround output to Front, Center, Side, Rear and Woofer speakers
iec958:CARD=U0x46d0x825,DEV=0
USB Device 0x46d:0x825, USB Audio
IEC958 (S/PDIF) Digital Audio Output
dmix:CARD=U0x46d0x825,DEV=0
USB Device 0x46d:0x825, USB Audio
Direct sample mixing device
dsnoop:CARD=U0x46d0x825,DEV=0
USB Device 0x46d:0x825, USB Audio
Direct sample snooping device
hw:CARD=U0x46d0x825,DEV=0
USB Device 0x46d:0x825, USB Audio
Direct hardware device without any conversions
plughw:CARD=U0x46d0x825,DEV=0
USB Device 0x46d:0x825, USB Audio
Hardware device with all software conversions
那么,我应该为上述设备指定哪些正确名称,以便根据 ALSA 规范同时记录它们?
我不想使用pulseaudio
API。
答案1
我认为问题在于front:
,从另一个问题,不会起作用,因为front:
指的是一组扬声器,而不是麦克风或录音设备。您可以使用该hw:CARD=X,Y
格式,但如果您使用 @CL 建议的plughw:CARD=X,Y
. Plughw 可以自动处理重采样或值转换,而不是hw:CARD=X,Y
.
根据您的输出arecord -l
和arecord -L
:
- 内部麦克风应该是:
plughw:DEV=0,CARD=PCH
,或者只是plughw:PCH,0
- USB 网络摄像头应该是:
plughw:DEV=0,CARD=U0x46d0x825
或者只是plughw:U0x46d0x825,0
答案2
如果您同时运行 Pulseaudio 和 ALSA,那么 Pulseaudio 会默认提供一个兼容层,使用类似于以下的配置
pcm.!default pulse
ctl.!default pulse
这意味着,如果您使用snd_pcm_open
该default
设备,您将与 Pulseaudio 对话,然后它会根据为应用程序名称存储的首选项为您路由。
Pulseaudio 在使用 ALSA 设备时也会打开它们。 ALSAhw
设备只能打开一次,因此一旦 Pulseaudio 打开它们,如果您尝试通过 ALSA API 访问它们,就会收到“忙”错误。这也适用于自动提供的插件,例如等front
。plughw
您没有使用,plughw
因为当您尝试时 Pulseaudio 尚未打开它们,这通常不起作用。
您有以下选择:
(1) 完全停止Pulseaudio,然后您可以用snd_pcm_open
任何您喜欢的方式打开ALSA设备,使用CARD
etc来识别设备。
(2) 使用Pulseaudio API。
(3) 在 ALSA 或 Pulseaudio 中为您的两个声卡制作一个组合设备,并手动将其设置为您的应用程序的首选接收器,然后通过 来使用 Pulseaudio 兼容层default
。
答案3
尝试跑步
$ cat /proc/asound/devices
1: : sequencer
2: [ 0- 3]: digital audio playback
3: [ 0- 0]: digital audio playback
4: [ 0- 0]: digital audio capture
5: [ 0- 3]: hardware dependent
6: [ 0- 0]: hardware dependent
7: [ 0] : control
33: : timer
使用设备号不为零的第一个音频设备