qual nome do dispositivo devo fornecer em snd_pcm_open diferente de "default"

8

Eu quero gravar som de dois dispositivos simultaneamente:

  • microfone interno
  • microfone de webcam usb externo

Usando o controlador de som pulseaudio , eu configuro um desses dispositivos como padrão e posso gravar o som com snd_pcm_open(&handle, "default", SND_PCM_STREAM_CAPTURE, 0) .

Mas agora eu quero gravar o som de ambos os dispositivos simultaneamente, então eu tenho que optar pelo esquema de nomenclatura mencionado aqui . No entanto, não tenho sucesso com alguns deles.

Eu pensei isso resolveria meu problema, mas front:CARD=U0x46d0x825,DEV=0 não ajudou como o nome do dispositivo.

Eu recebo esses erros:

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 dá:

# 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

e # arecord -L dão:

# 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

Então, quais são os nomes corretos que devo dar aos dispositivos acima para gravá-los simultaneamente de acordo com a especificação da ALSA?

Eu não quero usar a pulseaudio API.

    
por neckTwi 29.06.2014 / 13:33

3 respostas

1

Se você executar o Pulseaudio e o ALSA, o que acontece é que o Pulseaudio provê uma camada de compatibilidade como padrão, usando uma configuração semelhante a

pcm.!default pulse
ctl.!default pulse

Isso significa que, se você snd_pcm_open o dispositivo default , você fala com o Pulseaudio, que o encaminha de acordo com a preferência armazenada para o nome do aplicativo.

O Pulseaudio também abre dispositivos ALSA quando os usa. Dispositivos hw do ALSA só podem ser abertos uma vez, então, assim que o Pulseaudio os abrir, você receberá um erro de "ocupado" se tentar acessá-los por meio da API da ALSA. Isso também se aplica a plugins fornecidos automaticamente, como front , plughw etc. Você fugiu usando plughw porque o Pulseaudio não os abriu quando você tentou, isso não funcionará em geral.

As opções que você tem são:

(1) Pare o Pulseaudio completamente, então você pode abrir dispositivos ALSA com snd_pcm_open da maneira que desejar, usando CARD etc. para identificar o dispositivo.

(2) Use a API Pulseaudio.

(3) Crie um dispositivo combinado para suas duas placas de som, seja no ALSA ou no Pulseaudio, e defina-o manualmente como o coletor preferido para sua aplicação, depois use a camada de compatibilidade Pulseaudio via default .

    
por 02.06.2017 / 08:46
0

Acho que o problema é que front: , de a outra questão , não teria funcionado, pois front: se refere a um conjunto de alto-falantes, em vez de um microfone ou dispositivo de gravação. Você poderia usar o formato hw:CARD=X,Y , mas obterá um pouco mais de flexibilidade se usar, como sugere @CL, o plughw:CARD=X,Y . O Plughw pode cuidar automaticamente da reamostragem ou conversão de valor em relação a hw:CARD=X,Y .

Com base na sua saída de arecord -l e arecord -L :

  • O microfone interno deve ser: plughw:DEV=0,CARD=PCH ou apenas plughw:PCH,0
  • A webcam USB deve ser: plughw:DEV=0,CARD=U0x46d0x825 ou apenas plughw:U0x46d0x825,0
por 14.07.2016 / 15:40
-1

tente executar

$ 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 o primeiro dispositivo de áudio que tenha um número de dispositivo diferente de zero

    
por 18.11.2014 / 04:56

Tags