An mich wurde schon öfters die Frage angetragen, wie man denn Audio von zwei unterschiedlichen Quellen zur selben Zeit aufnehmen könnte. Besonders im Zusammenhang mit dem Beitrag Desktop inklusive Ton mit gtk-recordMyDesktop aufnehmen wurde diese Frage öfters gestellt, da es wohl den Bedarf gibt, bei Screencasts – zusammen mit dem gesprochenen und mit dem Mikro aufgezeichneten Kommentar – auch den von der Soundkarte abgespielten Ton aufnehmen zu können. So kann man bspw. den Sound eines Spiels zusammen mit dem Kommentar aufzeichnen. Prinzipiell ist das gar nicht so schwer, man muss sich nur ein bisschen in PulseAudio reinfuxen.
recordMyDesktop für PulseAudio vorbereiten
Bevor ich zum PulseAudio-Teil komme, noch ein Hinweis für alle, die recordMyDesktop benutzen, um Screencasts erstellen zu können. Ich habe damals im Beitrag Desktop inklusive Ton mit gtk-recordMyDesktop aufnehmen ziemlich aufwändig beschrieben, wie man die Audio-Geräte für die Aufnahme rausfindet. Es geht jedoch viel einfacher, wenn man einfach nur „pulse“ als Aufnahmegerät einträgt und den Rest PulseAudio überlasst.
Generell würde ich auch eine Samplingrate von 48kHz empfehlen. Solange es keine Aussetzer in Bild oder Ton gibt, würde ich versuchen die Aufnahmequalität so hoch wie möglich anzusetzen. Runterrechnen kann man die Qualität im Nachhinein immer noch.
Erstellt einen PulseAudio-Mix mehrerer Audiogeräte
Nun zum eigentlichen Thema: Wie kombiniert man die Audio-Signale mehrerer Quellen, zu einem Signal? Prinzipiell bringt PulseAudio dafür alles nötige mit. Ihr müsst in einem ersten Schritt eine „Null-Senke“ erzeugen und zwei virtuelle Loopback-Audiogeräte, die ihr Signal in diese Senke leiten. Der zweite Befehl SOLL wiederholt werden, da ihr für die Kombination zweier Signale eben auch zwei dieser virtuellen Audiogeräte braucht. Solltet Ihr weiterer Quellen in den Mix einfügen wollen, so wiederholt den Befehl nochmals.
$ pactl load-module module-null-sink sink_name=mix $ pactl load-module module-loopback sink=mix $ pactl load-module module-loopback sink=mix
Im Endeffekt seid Ihr mit dem Schlimmsten schon durch. Startet nun den PulseAudio-Lautstärkeregler (eventuell müsst Ihr das Programm über das Paket „pavucontrol“ nachinstallieren) und geht dort in die Lasche „Aufnahme“. Schaut zuerst unten rechts, dass „Alle Spuren“ angezeigt werden, ansonsten bekommt ihr die Loopback-Geräte nicht zu Gesicht.
Stellt nun bei den beiden Loopback-Geräten die von euch gewünschten Quellen ein. In meinem Fall ist das z.B. das Mikro meiner Microsoft Lifecam (Lifecam Cinema…) und zum anderen die Ausgabe meiner internen Soundkarte (Monitor of Internes Audio…). Bei euch werden die Geräte mit Sicherheit anders heißen, doch prinzipiell sollte es nicht so schwer sein die richtigen Geräte zu finden.
Startet ihr nun eine Aufnahme über recordMyDesktop oder den Audio-Recorder der GNOME-Desktopumgebung, dann taucht auch dieses Programm in der Liste auf. Wenn ihr jetzt als Aufnahmequelle euren Mix „Monitor of Null Ausgang“ auswählt, dann wird sowohl der aufgenommenen Ton eurer Webcam wie auch der ausgegebene Klang eurer Soundkarte aufgenommen.
Video-Link: https://www.youtube.com/watch?v=4-yGz0FS7Dw
Zur Demonstration habe ich diese Schritte auch kurz in einen Screencast gepackt. Das schöne ist, dass man im laufenden Betrieb an PulseAudio basteln kann, ohne dass die Aufnahme ins Stolpern gerät.
Die PulseAudio-Konfiguration permanent machen
Die mit pactl erstellten Quellen und Geräte sind nicht von Dauer, spätestens wenn PulseAudio neu gestartet wird, also bspw. bei einem Neustart oder auch nach dem Aus- und wieder Einloggen aus der Desktopumgebung sind die Einstellungen Geschichte. Solltet Ihr des öfteren Screencasts erstellen oder Audio-Chats mitschneiden wollen, so könnt Ihr diese Einstellungen fest in PulseAudio verdrahten. Erzeugt euch dazu am besten eine für euren Benutzer spezifische Konfigurationsdatei für PulseAudio und öffnet diese in einem Editor…
$ cp /etc/pulse/default.pa ~/.pulse/ $ gedit ~/.pulse/default.pa
…und fügt dann am Ende dieser Datei die folgenden Zeilen ein. Sie entsprechen im Endeffekt den zuvor ausgeführten pactl-Befehlen, allerdings kann man auf das Kommando davor verzichten.
load-module module-null-sink sink_name=mix
load-module module-loopback sink=mix
load-module module-loopback sink=mix
Von jetzt an werden die Null-Senke sowie die zwei virtuellen Geräte automatisch angelegt und mit den von euch im PulseAudio-Lautstärkeregler definierten Geräten befüllt, so dass ihr jederzeit Screencasts mit Mikrofon und Desktop-Klängen erstellen könnt.
Hallo Christoph,
vielen Dank für den interessanten Post. Eine kleine OT Frage: Welches Theme verwendest du (im Video)? Ist das elementary?
Danke & Grüße
casula
Hallo Casula, das ist Shiki. Ich habe das Shiki-Theme inkl. den GNOME-Colors vor ner ganzen Weile mal ausführlich vorgestellt. Mittlerweile kannst du es direkt aus den Paketquellen von Ubuntu installieren. Such im Software-Center einfach nach „Shiki“ und nach „GNOME-Colors“.
Grüße
Christoph
Wow danke.
Das erklärt wirklich ausführlich wie man beide Sounds aufnehmen kann. Viele Anleitungen sind da nicht dazu gekommen. Echt Super 😉
Vielen Dank, ich habe schon einige Zeit nach einer Lösung gesucht!
Hallo Christoph,
man kann über die Methode auch wunderbar Internet Radio usw. aufnehmen. Viel einfacher als die Methode, dem Audiorekorder beizubringen den Master aufzunehmen und auch flexibler.
Danke
Allerdings muss man dafür gar nicht den Aufwand treiben die zwei Pseudo-Quellen anzulegen. Du kannst einfach die pavucontrol laden, die Aufnahme im Sound-Recorder starten und dann in pavucontrol einstellen, dass der Recorder von „Monitor of“ aufnimmt.
Grüße
Christoph
Hier möchte ich ausdrücklich auf die Fähigkeiten von Jack hinweisen, da dieser Daemon unglaubliche Sachen mit Audiostreams anstellen kann, ausserdem ist er ein wichtiger Bestandteil von Musiksoftwar unter Linux. Mit Jack lassen sich ziemlich alle Ausgaben in ziemlich jede Eingabe umleiten, und das auch mit Midi-Daten
Hi Pandoras! Keine Frage, Jack ist ein mächtiges Instrument für alle Musikschaffende, doch wenn man einfach nur schnell einen Screencast mit Ton vom Desktop und vom Mikro aufnehmen möchte und sonst wenig mit der Produktion von Musik am Hut hat, dann ist Jack eben ein bisschen Overkill 😉
Vor allem läuft jack auch nicht immer wie erwartet, ist, wie gesagt, overkill und für mal eben etwas aufnehmen schon ein wenig komplizierter Einzustellen. Da ist pulse eleganter und man braucht nicht unbedingt noch mehr installieren, als man schon hat.
Hallo Christoph,
eins vorweg: das shiki-theme ist schiki 🙂
Auch wieder ein super Artikel von dir – interessant wäre, ob es eine ähnlich einfache Möglichkeit (Senke/Loopback) über ALSA gibt – ohne jack.
Ist mir leider nicht bekannt, bin aber auch nicht gerade ein ALSA-Spezialist.
Grüße
Christoph
Hallo Christoph, herzlichen Dank für die Anleitung. Sie hat mir sehr weitergeholfen. Einen kleinen Tipp will ich noch loswerden (wenn diese Internetseite hier falsch ist, bitte an eine bessere verschieben oder meinen Beitrag löschen).
Er betrifft Desktop-Aufnahmen, wenn man Compiz verwendet; in meinem Fall das kommende Xubuntu 12.04 LTS im Test mit Compiz (läuft übrigens tadellos). Gtk-Recordmydesktop funktioniert unmittelbar nach der Installation, stürzt jedoch in der Grundeinstellung nach erfolgtem Abmelden oder Neustart ab. Genauer: Es nimmt zwar etwas auf, lässt sich aber nicht mehr stoppen bzw. nur Abwürgen über die Systemüberwachung geht noch. Dann aber werden keine Daten konvertiert und keine out.ogg-Datei entsteht.
Deshalb habe ich unter den Einstellungen den Haken entfernt bei „Fensterdekoration ebenfalls aufnehmen“. Ohne Fensterdeko verhält sich gtk-recordmydesktop normal.
Viele Grüße, Bostaurus
Hallo Christoph,
vielen Dank für diesen ausführlichen und leicht verständlichen Artikel.
Zusammen mit deinem Artikel „Desktop inklusive Ton mit gtk-recordMyDesktop aufnehmen“ hat es mir endlich geholfen einen Screencast aufzunehmen.
Gerne spendiere ich dir hierfür einen Kaffee!
Eine Frage noch: Bei mir zeigt es keinen Input für den Systemsound an.
Ton per Mikrofon funktioniert perfekt.
Fehlt hier ein Treiber, oder was vermutest du?
Vielen Dank für deine Hilfe,
Thomas
Hallo Thomas, ein Treiber kann eigentlich nicht fehlen, da in Linux alles im Kernel selber steckt. Was für ein System hast du denn da?
Grüße
Christoph
Hallo, vielen lieben dank. Ich komme naemlich mit jack nicht zu recht, das hat mich echt gerettet. Ich habe linux mint 17.
Hi Namensvetter, ich freue mich, dass dieser doch schon etwas angestaubte Beitrag auch noch heute hilfreich ist 🙂
hi Christoph danke erstmal fürs tutorial aber wenn ich unter dem reiter aufnahme bei der loopback Monitor of internes audio analog stereo umstellen möchte nimmt er es nicht keine fehler meldung nichts er will einfach nicht was kann ich tun ich benutze ubuntu 14.10
Oh Mann … ich hab es aber doch endlich geschafft. (Ich bin zwar noch ein relativer Linuxneuling aber es geklappt.)
Ich war auf der Suche nach einen Vitualen-Audio-Kabel für Linux. Und da kam mir dein Beitrag schon recht gut in die Quere, auch wenn der schon etwas älter ist. Das Problem was ich hatte, war genau das Gegenteil. Ich wollte eine Audioquelle direkt an meine Soundkarte senden und parallel dazu an einer Aufnahmequelle.
Beispielszenario Aufnahme Youtube:
-> Browseraudiostream soll direkt ans Aufnahmegeräte geleitet werden
-> Browseraudiostream soll auch gleichzeitig an die Defaultsoundkarte geleitet werden.
pactl load-module module-null-sink sink_name=mix war schon recht gut.
Aber wie das Signal da wieder raus bekommen 😀
Da stand ich dann vor eine ein echten Problem.
Zur Kontrolle hat mir paman sehr gut geholfen und ich hab es dann so gelöst:
pactl load-module module-null-sink sink_name=va
pactl load-module module-combine-sink slaves=va,alsa_output.pci-0000_00_14.2.analog-stereo sink_name=vac
Ja combine-sink war die Lösung 😀 dann noch die richtige Einstellung in pavucontrol und ab gehtssss 😀
Ich werde mir noch ein kleines Script schreiben, welches die Default-Audiokarte ausliest und die Zeile mit alsa_output.pci-0000_00_14.2.analog-stereo automatisch erzeugt.
Momentan heißt mein Script noch vac (virtual-audio-cable) aber wenn es denn soweit ist nenne ich es einfach d-vac (default-virtual-audio-cable)
Noch sieht es so aus:
#!/bin/bash
echo „v0.1\n“;
echo „fail -> the default sound card still need to read\n“;
echo „default is: alsa_output.pci-0000_00_14.2.analog-stereo“;
pactl load-module module-null-sink sink_name=va
pactl load-module module-combine-sink slaves=va,alsa_output.pci-0000_00_14.2.analog-stereo sink_name=vac
aber ich arbeite dran.
Gruß Olly
…ich war gerade auf der Suche nach meinen eigenen Einträgen… Das Script mit kleinen Anpassungen funktioniert zwar immer noch aber ich versuche es immer noch global anzupassen 😉 Liest sich ja wie ein „ich backe mir einen Kuchen Rezept“ 😀