Kann ich Eingaben von einer Linux-Soundkarte in 2 verschiedene Anwendungen leiten?

2

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 Gottesdienst senden und als WAV-Datei aufzeichnen können. Um dies zu erreichen, habe ich das 3,5-mm-Audioausgangskabel von der Soundkarte an einen Splitter angeschlossen, sodass zwei Kabel an den "Line In" -Anschluss jeder Soundkarte angeschlossen werden können.

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

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

David White
quelle
Verwenden Sie den Befehl tee, um die Pipe-Eingabe zu teilen. 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

Antworten:

1

Ja, das ist leicht möglich. Laufen Sie wirklich nur mit ALSA oder auch mit Pulseaudio (der Standard für praktisch alle Distributionen seit vielen Jahren)?

Mit Pulseaudio sollte es sofort funktionieren.

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

Bearbeiten

Wie gesagt, anstelle von -D hw:0usw. (ändern Sie für Ihre Hardware-Adresse), verwenden Sie einfach -D plughw:0für arecord, und ähnliches für den Gerätenamen in darkice.

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

Sie müssen nicht wirklich Details wissen dsnoop, ALSA erledigt dies automatisch für Sie. (Details können Sie aber auf der von mir verlinkten Plugin-Seite nachlesen).

Sie müssen keine eigenen Einstellungen ~/.asoundrcvornehmen und keine Konfigurationsdateien ändern.

dirkt
quelle
Nein, ich verwende nur das alte ALSA, nicht PulseAudio. Dies ist ein Server, daher ist keine Audioausgabe erforderlich. Tatsächlich gibt es für ALSA fast keine benutzerdefinierte Konfiguration. 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, bin mir aber nicht sicher, wie ich das anwenden soll, was Sie in dieser Datei erwähnt haben.
David White
1
Vielleicht habe ich noch etwas nicht ganz richtig? Ich verwende arecord -D plughw:0 -f S16_LE -c2 -r 44100 -vv foo.wavund verwende auch eine Darkice-Konfiguration, die angibt device = plughw:0, aber es scheint immer noch zu blockieren. Ein Programm kann starten, aber das andere stirbt mit DarkIce: DarkIce.cpp:1273: can't open connector [0]oder arecord: main:722: audio open error: Device or resource busy(je nachdem, welches ich als zweites gestartet habe). Was vermisse ich? Danke noch einmal.
David White
Sind Sie sicher, dass das plughwhinzufügt dsnoop? Was bei mir funktioniert hat, war, arecord -D dsnoop:0,0dass ich mehrere Listener gleichzeitig ausführen konnte, ohne die alsa-Konfiguration zu ändern.
Linus Unnebäck
0

Ich akzeptierte dirkts Antwort, die mich den größten Teil des Weges dorthin brachte. 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
    }
}

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

David White
quelle