Ich möchte eine Ausgabe eines Programms mit PulseAudio mit einem Befehlszeilen- / Bash-Skript aufzeichnen . Es ist wichtig, nicht alle Ausgaben aufzuzeichnen, sondern nur die Ausgaben eines bestimmten Programms.
Ich dachte, ich müsste eine neue Null-Senke erstellen und dann die Ausgabe des Programms auf diese neue Senke verschieben. Dann weisen Sie parec an, diesen speziellen Monitor für die Aufnahme zu verwenden.
Der erste Schritt wäre etwa so:
pactl load-module module-null-sink sink_name=steam
Aber wie kann man die Ausgabe des Programms jetzt auf diese Senke verschieben?
Und wie zeichnet man die spezifische Senke mit einem Bash-Skript auf?
quelle
pulseaudio -k
in einem Terminal aus.list-sink-inputs
, notieren Sie sich densink
Wert. Zum Zurücktauschen einfach laufenpactl move-sink-input $INDEX $SINK
. So etwas wiepactl move-sink-input 4719 1
Verbessere die Waschtl-Antwort dieses Threads, damit du den App-Sound BEIDE HÖREN UND AUFZEICHNEN kannst :
Zuerst suchen wir nach unserer Standardausgabe und geben den Namen der Senke ein
$DEFAULT_OUTPUT
:Dann erstellen wir eine kombinierte Senke mit nur einem Slave: $ DEFAULT_OUTPUT . Der von der App (Quelle) erzeugte Ton wird an die Slave-Senke (dh an die reale Ausgabe) weitergeleitet, und wir zeichnen ihn auch auf. Es unterscheidet sich von einer Null-Senke, bei der der Quellensound nicht weitergeleitet wird.
sink_properties
ist optional und kann Fehler verursachen, wenn Sie Leerzeichen im Beschreibungsnamen verwenden.Dann könnten wir den
pactl move-sink-input ...
Befehl Waschtl-Antwort verwenden (mit Record-n-Play anstelle von Steam ), aber die GUIpavucontrol
ist einfacher (und ideal für die Überprüfung / Fehlerbehebung):Dann spielen wir einen Sound in der App, die wir aufnehmen möchten. In der
pavucontrol
PlaybackRegisterkarte wählen wir in der App-Dropdown-Liste: "Record-and-Play" .Endlich ist es gut, gleichzeitig aufzunehmen und zu hören! ( lahm mp3 Beispiel im Vordergrund laufen)
Oder wir können im Hintergrund aufnehmen und jederzeit anhalten:
NB:
pulseaudio -k
Funktioniert hervorragend, um alle Einstellungen auf die Standardeinstellungen der Sitzung zurückzusetzen.pactl load-module module-combine-sink sink_name=record-n-play slaves=real-output-1,real-output-2
.BEARBEITEN: Achtung, seit Ubuntu 18 (vielleicht auch 17) wird die kombinierte Senke eher zum Standard-Systemausgabegerät als zum echten Ausgabegerät. Wenn Sie also die Lautstärke mithilfe des Sound-Symbols in der Taskleiste ändern, wirkt sich dies auf Ihren Aufnahmeklang aus. Problemumgehung: Öffnen Sie nach dem Erstellen der kombinierten Senke die
pavucontrol
Registerkarte Ausgabe. Wählen Sie "Ansicht: Virtuelle Ausgabegeräte" und setzen Sie die Lautstärke der kombinierten Senke auf 100% zurück. Wählen Sie dann "Ansicht: Hardware-Ausgabegeräte" und drücken Sie das grüne Symbol "Als Alternative definieren" auf dem realen Ausgabegerät.quelle
@Waschtls Antwort ist fantastisch. @ixtmixilix fragte nach der Wiederherstellung des normalen Audios nach Abschluss der Aufnahme. Hier ist der einfachste Weg, den ich kenne:
Installieren Sie die
pavucontrol
GUI und führen Sie sie aus . Sie sollten Ihre Audioausgabeanwendung und deren Lautstärkeanzeige unter der PlaybackRegisterkarte dort sehen. Daneben befindet sich eine Schaltfläche, die anzeigt, dass die Wiedergabe auf Null Output erfolgt . Klicken Sie darauf und ändern Sie es in Ihren normalen Audioausgang, in meinem Fall " Built-in Audio Analog Stereo" .Hier ist ein Screenshot von dem, wonach Sie suchen:
Sie können diesen Ansatz auch verwenden, um Ihre Aufzeichnung in Zukunft einzurichten, nachdem Sie den
load-module
Befehl in der Antwort von @ Waschtl ausgeführt haben, um die Spüle zu erstellen.quelle
Wenn Sie die Antwort von KrisWebDev weiter verbessern möchten , müssen Sie zunächst die Standardausgabe ermitteln:
welches so etwas ausgibt wie:
Als nächstes erstellen Sie eine Datei
~/.config/pulse/default.pa
:Bitte ersetzen Sie sie durch die
alsa_output.pci-0000_00_1b.0.analog-stereo
Ausgabe, die Sie vompacmd
Befehl erhalten haben. Pulse liest die Standardkonfigurationsdatei nicht, wenn eine benutzerdefinierte Konfigurationsdatei vorhanden ist. Aus diesem Grund enthält die erste Zeile oben die Standardkonfigurationsdatei. Auf diese Weise lädt pulseaudio immer noch zuerst die Standardkonfiguration.Führen Sie
pulseaudio -k
den Befehl aus, um die aktuelle pulseaudio-Instanz zu beenden, damit eine neue mit der neuen Konfiguration gestartet wird.Wenn Sie die Änderungen hier jederzeit rückgängig machen möchten, entfernen Sie einfach die
~/.config/pulse/default.pa
Datei und führen Sie sie auspulseaudio -k
.Wenn Sie möchten, dass Record-n-Play die Standardsenke für alle Ausgaben ist, können Sie dies tun, indem Sie eine weitere Zeile am Ende von
~/.config/pulse/default.pa
:Bei Programmen, auf denen pulseaudio bereits Informationen gespeichert hat, merkt es sich das zuletzt verwendete Ausgabegerät, sodass Sie diese manuell mit einer der in der Antwort von KrisWebDev beschriebenen Methoden neu konfigurieren müssen.
quelle
Ich habe dieses Bash-Skript basierend auf den Antworten von @Waschtl und @KrisWebDev erstellt.
Verfügbar hier: https://gist.github.com/ramast/4be3314bc73f28f55e3604497188b007
Wie benutzt man?
Neue Version
Ich habe ein Python-Skript erstellt, das einige Verbesserungen gegenüber dem alten bietet. https://gist.github.com/ramast/c47bd5e57586e9c2deb74975e27089f0
Wie benutzt man?
Wenn Sie die Eingabetaste drücken, wird die Aufnahme sofort gestartet. Wenn die Anwendung zu dem Zeitpunkt, zu dem Sie die Eingabetaste gedrückt haben, bereits gestoppt war (dh Sie haben mplayer beispielsweise geschlossen), wartet das Skript, bis die App erneut angezeigt wird, und startet die Aufzeichnung.
Der einzige Nachteil dieses Skripts (im Vergleich zum Original) besteht darin, dass sich das Skript nicht korrekt verhält, wenn die Liste zwei Einträge mit demselben Namen enthält. Zum Beispiel
quelle