除了“默认”外,我还必须在snd_pcm_open中提供什么设备名称


8

我想同时录制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规范,我应该给上述设备同时记录它们的正确名称是什么?

希望使用pulseaudioAPI。


参见multi插件。但是,如果设备的时钟不同步,这将无法长期工作。
CL。

@CL。我不想混流。我只想同时捕获两个输入到单独的周期缓冲区中。
Necktwi 2014年

1
尝试default:0default:1
CL。

得到既默认以下错误:0和默认:1ALSA lib conf.c:4694:(snd_config_expand) Unknown parameters 1 ALSA lib pcm.c:2239:(snd_pcm_open_noupdate) Unknown PCM default:1
Necktwi

1
显然,PA会覆盖默认设备。尝试plughw:0plughw:1
CL。

Answers:


1

如果同时运行Pulseaudio和ALSA,则发生的情况是Pulseaudio使用类似于以下的配置默认提供一个兼容层。

pcm.!default pulse
ctl.!default pulse

这意味着,如果您使用的snd_pcm_opendefault设备,则与Pulseaudio通话,然后根据存储的应用程序名称首选项对您进行路由。

Pulseaudio在使用ALSA设备时也会打开它们。ALSA hw设备只能打开一次,因此Pulseaudio打开它们后,如果尝试通过ALSA API访问它们,则会出现“忙”错误。这也适用于自动提供,如插件frontplughw等你跑掉使用plughw,因为pulseaudio的不是已经打开他们当你尝试,这不是一般的工作。

您有以下选项:

(1)完全停止Pulseaudio,然后您可以snd_pcm_open按照自己喜欢的任何方式打开ALSA设备,并使用CARD等识别设备。

(2)使用Pulseaudio API。

(3)在ALSA或Pulseaudio中为两个声卡制作一个组合设备,并手动将其设置为您的应用程序的首选接收器,然后通过来使用Pulseaudio兼容层default


0

尝试跑步

$ 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

使用第一个音频设备号为零的音频设备


0

我认为问题是front:,从另一个问题来看,这是行不通的,因为它front:是指一组扬声器,而不是麦克风或录音设备。您可以使用该hw:CARD=X,Y格式,但如果使用@CL所建议的,则会获得更多的灵活性plughw:CARD=X,Y。Plughw可以自动处理重采样或值转换hw:CARD=X,Y

根据您arecord -l和的输出arecord -L

  • 内部麦克风应该是:plughw:DEV=0,CARD=PCHplughw:PCH,0
  • USB网络摄像头应为:plughw:DEV=0,CARD=U0x46d0x825或仅plughw:U0x46d0x825,0
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.