quel nom d'appareil dois-je donner dans snd_pcm_open autre que «par défaut»

8

Je veux enregistrer le son de 2 appareils simultanément:

  • micro interne
  • micro webcam usb externe

À pulseaudiol' aide du contrôleur de son, j'ai défini l'un de ces appareils par défaut et j'ai pu enregistrer du son avec snd_pcm_open(&handle, "default", SND_PCM_STREAM_CAPTURE, 0).

Mais maintenant, je veux enregistrer le son des deux appareils simultanément, je dois donc opter pour le schéma de dénomination mentionné ici . Cependant, je n'ai aucun succès avec deux d'entre eux.

Je pensais que cela résoudrait mon problème, mais cela front:CARD=U0x46d0x825,DEV=0n'a pas aidé en tant que nom de l'appareil.

Je reçois ces erreurs:

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 Donne moi:

# 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

et # arecord -Ldonne:

# 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

Alors, quels sont les noms corrects que je devrais donner aux appareils ci-dessus pour les enregistrer simultanément selon la spécification ALSA?

Je ne veux pas utiliser d' pulseaudioAPI.

Necktwi
la source
Voir le plugin multi . Mais cela ne fonctionnera pas longtemps si les horloges des appareils ne sont pas synchronisées.
CL.
@CL. Je ne veux pas mélanger les flux. Je veux juste capturer les deux entrées simultanément pour séparer les tampons de période.
Necktwi
1
Essayez default:0et default:1.
CL.
obtenu les erreurs suivantes avec à la fois par défaut: 0 et par défaut: 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
Apparemment, PA remplace le périphérique par défaut. Essayez plughw:0et plughw:1.
CL.

Réponses:

1

Si vous exécutez à la fois Pulseaudio et ALSA, ce qui se passe est que Pulseaudio propose une couche de compatibilité par défaut, en utilisant une configuration similaire à

pcm.!default pulse
ctl.!default pulse

Cela signifie que si vous snd_pcm_openl' defaultappareil, vous parlez à Pulseaudio, qui vous achemine ensuite selon la préférence enregistrée pour le nom de l'application.

Pulseaudio ouvre également les appareils ALSA lorsqu'il les utilise. Les hwappareils ALSA ne peuvent être ouverts qu'une seule fois, donc dès que Pulseaudio les a ouverts, vous obtiendrez une erreur "occupé" si vous essayez d'y accéder via l'API ALSA. Cela s'applique également aux plugins fournis automatiquement, comme front, plughwetc. Vous vous êtes éloigné de l'utilisation plughwparce que Pulseaudio ne les avait pas déjà ouverts lorsque vous avez essayé, cela ne fonctionnera pas en général.

Les options dont vous disposez sont les suivantes:

(1) Arrêtez complètement Pulseaudio, puis vous pouvez ouvrir les appareils ALSA avec snd_pcm_opencomme vous le souhaitez, en utilisant CARDetc. pour identifier l'appareil.

(2) Utilisez l'API Pulseaudio.

(3) Créez un appareil combiné pour vos deux cartes son, soit dans ALSA ou dans Pulseaudio, et définissez-le manuellement comme récepteur préféré pour votre application, puis utilisez la couche de compatibilité Pulseaudio via default.

dirkt
la source
0

essayez de courir

$ 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

utiliser le premier périphérique audio dont le numéro de périphérique est différent de zéro

phénix
la source
0

Je pense que le problème est que front:, d'après l'autre question , cela n'aurait pas fonctionné, car il front:s'agit d'un ensemble de haut-parleurs plutôt que d'un microphone ou d'un appareil d'enregistrement. Vous pouvez utiliser le hw:CARD=X,Yformat, mais vous obtiendrez un peu plus de flexibilité si vous utilisez, comme le suggère @CL, le plughw:CARD=X,Y. Plughw peut automatiquement prendre en charge le rééchantillonnage ou la conversion de valeur par rapport à hw:CARD=X,Y.

Sur la base de votre sortie de arecord -let arecord -L:

  • Le micro interne doit être:, plughw:DEV=0,CARD=PCHou justeplughw:PCH,0
  • La webcam USB doit être: plughw:DEV=0,CARD=U0x46d0x825ou tout simplementplughw:U0x46d0x825,0
MeltedPez
la source