¿Qué nombre de dispositivo debo dar en snd_pcm_open que no sea "predeterminado"?


8

Quiero grabar sonido de 2 dispositivos simultáneamente:

  • micrófono interno
  • micrófono de cámara web usb externo

Usando pulseaudioel controlador de sonido, configuré cualquiera de estos dispositivos como predeterminado y pude grabar sonido con snd_pcm_open(&handle, "default", SND_PCM_STREAM_CAPTURE, 0).

Pero ahora quiero grabar el sonido de ambos dispositivos simultáneamente, así que tengo que optar por el esquema de nombres mencionado aquí . Sin embargo, no tengo éxito con algunos de ellos.

Pensé que esto resolvería mi problema, pero front:CARD=U0x46d0x825,DEV=0no ayudó como nombre del dispositivo.

Recibo estos errores:

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 me da

# 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

y # arecord -Lda:

# 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

Entonces, ¿cuáles son los nombres correctos que debo dar a los dispositivos anteriores para registrarlos simultáneamente según la especificación ALSA?

Yo no quiero utilizar pulseaudiola API.


Ver el complemento múltiple . Pero esto no funcionará por mucho tiempo si los relojes de los dispositivos no están sincronizados.
CL.

@CL. No quiero mezclar las transmisiones. Solo quiero capturar las dos entradas simultáneamente en buffers de período separados.
Necktwi

1
Pruebe default:0y default:1.
CL.

Recibí los siguientes errores con el valor predeterminado: 0 y predeterminado: 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
Aparentemente, PA anula el dispositivo predeterminado. Pruebe plughw:0y plughw:1.
CL.

Respuestas:


1

Si ejecuta Pulseaudio y ALSA, lo que sucede es que Pulseaudio proporciona una capa de compatibilidad de forma predeterminada, utilizando una configuración similar a

pcm.!default pulse
ctl.!default pulse

Eso significa que si usted es snd_pcm_openel defaultdispositivo, habla con Pulseaudio, que luego lo enruta según la preferencia almacenada para el nombre de la aplicación.

Pulseaudio también abre dispositivos ALSA cuando los usa. Los hwdispositivos ALSA solo se pueden abrir una vez, por lo que tan pronto como Pulseaudio los haya abierto, obtendrá un error de "ocupado" si intenta acceder a ellos a través de la API de ALSA. Eso también se aplica a los complementos proporcionados automáticamente, como front, plughwetc. Te plughwsaliste usando porque Pulseaudio no los había abierto cuando lo intentaste, esto no funcionará en general.

Las opciones que tienes son:

(1) Detenga Pulseaudio por completo, luego puede abrir dispositivos ALSA de la snd_pcm_openforma que desee, utilizando CARDetc. para identificar el dispositivo.

(2) Use la API Pulseaudio.

(3) Cree un dispositivo combinado para sus dos tarjetas de sonido, ya sea en ALSA o en Pulseaudio, y configúrelo manualmente como el receptor preferido para su aplicación, luego use la capa de compatibilidad de Pulseaudio a través de default.


0

intenta correr

$ 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

use el primer dispositivo de audio que tenga un número de dispositivo distinto de cero


0

Creo que el problema es que front:, desde la otra pregunta , no habría funcionado, ya que se front:refiere a un conjunto de altavoces, en lugar de un micrófono o dispositivo de grabación. Puede usar el hw:CARD=X,Yformato, pero obtendrá un poco más de flexibilidad si usa, como sugiere @CL, el plughw:CARD=X,Y. Plughw puede encargarse automáticamente del remuestreo o conversión de valor versus hw:CARD=X,Y.

Según su salida de arecord -ly arecord -L:

  • El micrófono interno debe ser: plughw:DEV=0,CARD=PCHo simplementeplughw:PCH,0
  • La cámara web USB debe ser: plughw:DEV=0,CARD=U0x46d0x825o simplementeplughw:U0x46d0x825,0
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.