Kann ich die Eingabe von einer Linux-Soundkarte in zwei verschiedene Anwendungen weiterleiten?

916
David White

Ich habe ein Ubuntu 16.04.3 LTS-System mit

  • eine ASUS Xonar DGX-Soundkarte und
  • eine generische USB-Soundkarte.

In unserer Kirche möchten wir einen Dienst übertragen und als WAV-Datei aufnehmen können. Um dies zu erreichen, habe ich das 3,5-mm-Audioausgangskabel von der Soundkarte an einen Splitter angeschlossen, so dass zwei Kabel zum Anschließen an den "Line In" -Anschluss jeder Soundkarte vorhanden sind.

Dann benutze ich "arecord", um das Audio auf einer Karte aufzunehmen, und "darkice", um einen MP3-Stream auf der anderen zu erstellen.

Im Idealfall möchte ich, dass eine Soundkarte gleichzeitig die Aufnahme und das Streaming übernimmt. Ist so etwas möglich? Oder stecke ich zwei Soundkarten mit zwei Anwendungen fest?

2
Verwenden Sie zum Teilen der Pipe-Eingabe den Befehl tee. zB: "echo hi | tee output.txt >> output2.txt" oder "` echo hi | tee output.txt | tee output2.txt "" oder "` echo hi | tee output.txt output2.txt` " TOOGAM vor 6 Jahren 0

2 Antworten auf die Frage

1
dirkt

Ja, das ist leicht möglich. Führen Sie eigentlich nur ALSA oder Pulseaudio aus (Standardeinstellung für alle Distros seit vielen Jahren)?

Mit Pulseaudio sollte es sofort funktionieren.

Stellen Sie bei ALSA sicher, dass Sie anstelle des Gerätenamens den plughwGerätenamen (der intern ein dsnoopPluging hinzufügt ) verwenden hw. Das dsnoop-Plugin teilt den Eingabestream für verschiedene Anwendungen in mehrere Streams auf.

Bearbeiten

Wie gesagt, anstelle von -D hw:0etc. (für Ihre Hardwareadresse ändern), verwenden Sie einfach -D plughw:0für arecord, und ähnlich für den Gerätenamen darkice.

Voraussetzung ist, dass kein anderes Programm hw:0direkt verwendet wird. Alle müssen verwenden plughw:0.

Sie müssen nicht wirklich Details darüber wissen dsnoop, ALSA erledigt dies automatisch für Sie. (Sie können jedoch Details auf der Plugin-Seite nachlesen, auf die ich verlinkt habe).

Sie müssen keine eigenen Einstellungen vornehmen ~/.asoundrc, Sie müssen keine Konfigurationsdateien ändern.

Nein, ich verwende einfach reines ALSA, nicht PulseAudio. Dies ist ein Server, daher ist keine Audioausgabe erforderlich, und in der Tat gibt es fast keine benutzerdefinierte Konfiguration für ALSA. Ich verwende nur die Geräte mit "arecord" und "darkice", da sie automatisch von modprobe geladen werden. Können Sie mir ein paar Details zur Verwendung von plughw / dsnoop geben? Ich sehe einige Konfigurationsdetails in `/ etc / modprobe.d / alsa-base.conf`, aber ich bin nicht sicher, wie Sie das, was Sie in dieser Datei erwähnt haben, anwenden. David White vor 6 Jahren 0
vielleicht habe ich noch etwas nicht ganz richtig? Ich verwende `arecord -D plughw: 0 -f S16_LE -c2 -r 44100 -vv foo.wav` und auch eine Darkice-Konfiguration, die 'device = plughw: 0' angibt, aber es scheint immer noch zu blockieren. Ein Programm kann gestartet werden, das andere wird jedoch mit `DarkIce: DarkIce.cpp: 1273: Connector [0] kann nicht geöffnet werden` oder `arecord: main: 722: Fehler beim Öffnen der Audiosignale: Gerät oder Ressource beschäftigt` (abhängig davon, welche Ich habe als Zweites angefangen). Was vermisse ich? Danke noch einmal. David White vor 6 Jahren 1
Sind Sie sicher, dass `plughw`` dsnoop` ​​hinzufügt? Was für mich funktionierte, war `arecord -D dsnoop: 0,0`, wodurch ich mehrere Listener gleichzeitig ausführen konnte, ohne die alsa config zu ändern. Linus Unnebäck vor 6 Jahren 0
0
David White

Ich akzeptierte die Antwort von dirkt, die mich dort am meisten bewegt hat. Es stellte sich heraus, dass ich eine dsnoopSchnittstelle erstellen musste :

/etc/asound.conf

pcm.custom_snoop_card { type dsnoop ipc_key 420042 ipc_key_add_uid 1 slave { pcm "hw:0,0" # the actual device format S16_LE channels 2 rate 44100 } } 

Nun kann ich device = custom_snoop_cardin meiner darkiceKonfig festlegen und gleichzeitig eine WAV-Aufnahme mit machenarecord -D custom_snoop_card -f S16_LE -c2 -r 44100 -vv myfile.wav