Welchen Gerätenamen sollte ich in snd_pcm_open außer "default" angeben müssen?

8

Ich möchte Ton von 2 Geräten gleichzeitig aufnehmen:

  • internes Mikrofon
  • externes USB-Webcam-Mikrofon

Mit dem pulseaudioSoundcontroller habe ich eines dieser Geräte als Standard festgelegt und konnte Sound mit aufnehmen snd_pcm_open(&handle, "default", SND_PCM_STREAM_CAPTURE, 0).

Aber jetzt möchte ich Ton von beiden Geräten gleichzeitig aufnehmen, also muss ich mich für das hier erwähnte Namensschema entscheiden . Mit einigen habe ich jedoch keinen Erfolg.

Ich dachte, dies würde mein Problem lösen, front:CARD=U0x46d0x825,DEV=0half aber nicht als Name des Geräts.

Ich bekomme folgende Fehler:

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 gibt mir:

# 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

und # arecord -Lgibt:

# 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

Wie lauten also die richtigen Namen, die ich den oben genannten Geräten geben sollte, um sie gemäß der ALSA-Spezifikation gleichzeitig aufzuzeichnen?

Ich nicht verwenden möchten pulseaudioAPI.

Necktwi
quelle
Siehe das Multi-Plugin . Dies funktioniert jedoch nicht lange, wenn die Uhren der Geräte nicht synchronisiert sind.
CL.
@CL. Ich möchte die Streams nicht mischen. Ich möchte nur die beiden Eingänge gleichzeitig in getrennten Periodenpuffern erfassen.
Necktwi
1
Versuchen Sie default:0und default:1.
CL.
habe folgende Fehler mit Standard: 0 und Standard: 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
Anscheinend überschreibt PA das Standardgerät. Versuchen Sie plughw:0und plughw:1.
CL.

Antworten:

1

Wenn Sie sowohl Pulseaudio als auch ALSA ausführen, stellt Pulseaudio standardmäßig eine Kompatibilitätsebene mit einer ähnlichen Konfiguration bereit

pcm.!default pulse
ctl.!default pulse

Das heißt, wenn Sie snd_pcm_opendas defaultGerät verwenden, sprechen Sie mit Pulseaudio, das Sie dann gemäß den für den Anwendungsnamen gespeicherten Einstellungen weiterleitet.

Pulseaudio öffnet auch ALSA-Geräte, wenn es sie verwendet. ALSA- hwGeräte können nur einmal geöffnet werden. Sobald Pulseaudio sie geöffnet hat, wird ein "Besetzt" -Fehler angezeigt, wenn Sie versuchen, über die ALSA-API auf sie zuzugreifen. Das gilt auch für Plugins automatisch zur Verfügung gestellt, wie front, plughwetc. Sie wurde mit weg , plughwweil sie nicht Pulseaudio hatte bereits geöffnet , wenn Sie versucht haben, das wird nicht funktionieren im Allgemeinen.

Sie haben folgende Möglichkeiten:

(1) Stoppen Sie Pulseaudio vollständig. Anschließend können Sie ALSA-Geräte nach Belieben öffnen snd_pcm_open, CARDusw. verwenden, um das Gerät zu identifizieren.

(2) Verwenden Sie die Pulseaudio-API.

(3) Erstellen Sie ein kombiniertes Gerät für Ihre beiden Soundkarten, entweder in ALSA oder in Pulseaudio, und legen Sie dieses manuell als bevorzugte Senke für Ihre Anwendung fest. Verwenden Sie dann die Pulseaudio-Kompatibilitätsebene über default.

dirkt
quelle
0

versuche zu rennen

$ 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

Verwenden Sie das erste Audiogerät mit einer anderen Gerätenummer als Null

Phönix
quelle
0

Ich denke, das Problem ist, dass front:von der anderen Frage nicht funktioniert hätte, da es front:sich eher um einen Satz Lautsprecher als um ein Mikrofon oder ein Aufnahmegerät handelt. Sie könnten das hw:CARD=X,YFormat verwenden, aber Sie erhalten ein wenig mehr Flexibilität, wenn Sie, wie @CL vorschlägt, das verwenden plughw:CARD=X,Y. Plughw kann sich automatisch um Resampling oder Wertumwandlung kümmern hw:CARD=X,Y.

Basierend auf Ihrer Ausgabe von arecord -lund arecord -L:

  • Internes Mikrofon sollte sein: plughw:DEV=0,CARD=PCHoder nurplughw:PCH,0
  • USB Webcam sollte sein: plughw:DEV=0,CARD=U0x46d0x825oder nurplughw:U0x46d0x825,0
MeltedPez
quelle