какое имя устройства я должен указать в snd_pcm_open, кроме «default»

8

Я хочу записывать звук с 2 устройств одновременно:

  • внутренний микрофон
  • внешний микрофон для веб-камеры

Используя 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.

Necktwi
источник
Смотрите мульти плагин . Но это не будет работать долго, если часы устройств не синхронизированы.
кл.
@CL. Я не хочу смешивать потоки. Я просто хочу захватить два входа одновременно, чтобы разделить буферы периода.
Necktwi
1
Попробуйте default:0и default:1.
кл.
получил следующие ошибки по умолчанию: 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:0и plughw:1.
кл.

Ответы:

1

Если вы запускаете Pulseaudio и ALSA, то происходит то, что Pulseaudio обеспечивает уровень совместимости по умолчанию, используя конфигурацию, аналогичную

pcm.!default pulse
ctl.!default pulse

Это означает , если вы устройство, вы говорите с PulseAudio, который затем направляет вас в соответствии с предпочтениями , сохраненными для имени приложения.snd_pcm_opendefault

Pulseaudio также открывает устройства ALSA при их использовании. hwУстройства ALSA могут быть открыты только один раз, поэтому, как только Pulseaudio откроет их, вы получите ошибку «занято», если попытаетесь получить к ним доступ через API ALSA. Это также относится к плагинам, предоставляемым автоматически, например front, plughwи т. Д. Вы plughwперестали использовать, потому что Pulseaudio еще не открывал их, когда вы пытались, это не будет работать в целом.

Варианты у вас есть:

(1) Полностью остановите Pulseaudio, затем вы можете открыть устройства ALSA snd_pcm_openлюбым удобным для вас способом, используя CARDи т. Д. Для идентификации устройства.

(2) Используйте Pulseaudio API.

(3) Создайте комбинированное устройство для двух звуковых карт, либо в ALSA, либо в Pulseaudio, и вручную установите его в качестве предпочтительного приемника для вашего приложения, затем используйте слой совместимости Pulseaudio через default.

dirkt
источник
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=PCHили простоplughw:PCH,0
  • USB-камера должна быть: plughw:DEV=0,CARD=U0x46d0x825или простоplughw:U0x46d0x825,0
MeltedPez
источник