Я хочу записывать звук с 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?
Я не хочу использовать pulseaudio
API.
default:0
иdefault:1
.ALSA lib conf.c:4694:(snd_config_expand) Unknown parameters 1 ALSA lib pcm.c:2239:(snd_pcm_open_noupdate) Unknown PCM default:1
plughw:0
иplughw:1
.Ответы:
Если вы запускаете Pulseaudio и ALSA, то происходит то, что Pulseaudio обеспечивает уровень совместимости по умолчанию, используя конфигурацию, аналогичную
Это означает , если вы устройство, вы говорите с PulseAudio, который затем направляет вас в соответствии с предпочтениями , сохраненными для имени приложения.
snd_pcm_open
default
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
.источник
попробуйте запустить
использовать первое аудиоустройство с номером устройства, отличным от нуля
источник
Я думаю, что проблема в том
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
plughw:DEV=0,CARD=U0x46d0x825
или простоplughw:U0x46d0x825,0
источник