Hallo alle,
in dieser Ausgabe will ich nur ein Beispiel zeigen, wie man Skypegespräche aufzeichnen kann. Es wird natürlich mit auch anderen Programmen funktionieren.
Dies mal müssen wir ein wenig Pusleaudiomagie nutzen. Als ersten müssen wir das aufzeichnen können, was unser PC ausgibt. Wir brauchen einen Monitor des Audioausgangs:
pactl list | grep Name | grep monitor Name: alsa_output.pci-0000_00_1b.0.analog-stereo.monitor Name: combined.monitor
Bei mir sind es zwei, in der Regel sollte es ein ALSA Gerät sein... "alsa_output.pci-0000_00_1b.0.analog-stereo.monitor".
Lass uns jetzt etwas damit aufnehmen:
gst-launch pulsesrc device=alsa_output.pci-0000_00_1b.0.analog-stereo.monitor ! vorbisenc ! oggmux ! filesink location=out.ogg
Wir wollen aber einen Gespräch aufnehmen, also wir brauchen nicht nur einen Ausgang sondern auch einen Eingang und zwar zusammen gemischt. Dafür brauchen wir ein adder Element:
gst-launch adder name=mix ! audioconvert ! vorbisenc ! oggmux ! filesink location=out.ogg pulsesrc device=alsa_output.pci-0000_00_1b.0.analog-stereo.monitor ! queue ! mix. pulsesrc ! queue ! mix.
In diesem Beispiel habe ich mit dem Ausgang (SINK) angefangen. Jeder mix. wird dann auf adder weiter leiten (ich hoffe es ist nicht zu verwirrend). Der erste pulsesrc nimmt den Monitor auf. Der zweite pulsesrc zeichnet das Default Aufnahmegerät auf. Dann alles wird mit adder gemischt, mit vorbisenc encodiert, in ogg reingestopft, und in eine Datei gespeichert.
Grek336
Gibt es auch eine Möglichkeit nur die Ausgabe einer einzelnen Anwendung aufzuzeichnen.
In pactl wird sie so angegeben: Client #42 Treiber: protocol-native.c Owner-Modul: 8 Eigenschaften: application.name = "ALSA plug-in [last.fm]" native-protocol.peer = "UNIX socket client" native-protocol.version = "16" application.process.id = "2703" application.process.user = "michael" application.process.host = "michael-laptop" application.process.binary = "last.fm" application.language = "de_DE.UTF-8" window.x11.display = ":0.0" application.process.machine_id = "49d26c0b3b1b6b8b80cbf85a4c6eff19" application.process.session_id = "49d26c0b3b1b6b8b80cbf85a4c6eff19-1291494283.832186-286582128"
Grüße aus Berlin
Alexey Fisher
Das kling wie eine Herausforderung. Ohne Tricks glaube ich wird es nicht gehen.
Zu erst müssen wir einen extra SINK erstellen. Abhängig davon ob wie es direkt hören wollen oder nicht wählen wir einen Module. z.B, null-sink:
pactl load-module module-null-sink sink_name=radio1
man muss, dann deine LastFm auf diesen SINK umschalten. Dafür kann man "pavucontrol" nehmen.
und jetzt können wir radio1 als Monitor nutzen. Da es aber einen NULL SINK, wird es nichts weiter an die Lautsprecher weiter geleitet. Das können wir mit Element "tee" umgehen:
gst-launch pulsesrc device=radio1.monitor ! tee name=feedback ! queue ! audioconvert ! vorbisenc ! oggmux ! filesink location=test.ogg feedback. ! audioconvert ! queue ! pulsesink
Alexey Fisher
Anstatt null-sink kann man auch module-combine nutzen. So pulseaudio bleibt für Lautsprecher verantwortlich und Gstreamer nur für Aufnahme
Grek336
Vielen Dank für die Antwort.
Es scheint zu funktionieren.
Jetzt muss ich noch herausfinden wie man die Aufnahmequalität von vorbisenc ändert. Und wie ich die Monitor wieder lösche die ich bei den Fehlversuche erzeugt habe (Ungeschick lässt Grüßen)
Alexey Fisher
Den Monitor kannst du mit "pactl unload-module module-null-sink" löschen, oder einfach mal neue starten/auslogen-einlogen... Qualität lest sich mit dem Parameter "quality" ändern ... also es wird so aussehen: ... ! vorbisenc quality=0,7 ! oggmux ! ...
Alle verfügbare Parameter kannst du mit Befehl "gst-inspect vorbisenc" finden.
geoback
Hi zockertown, super Sache die Einführung, da ich auf der Suche bin die Ausgabe meiner Soundcarte in ein .ogg file zu packen. Leider komme ich aber nicht mit den von Dir verwendeten Aufnamensyntax weiter:
Bei mir findet: pactl list | grep Name | grep monitor Name: alsa_output.pci-0000_00_1b.0.analog-stereo.monitor
nur ein ALSA Gerät. Habe versucht mit: gst-launch pulsesrc device=alsa_output.pci-0000_00_1b.0.analog-stereo.monitor ! vorbisenc ! oggmux ! filesink location=out.ogg
die Ausgabe der Soundkarte abzugreifen. Leider wird dann ein Soundfile ohne Inhalt erstellt.
Hättest Du noch nen Tipp für mein Anliegen?
Alexey Fisher
Hi, ich bin nicht zockertown ;D leider könnte ich nicht früher antworten, also... Ich hab jetzt reine Ubuntu 10.10 getestet und in der Tat, es geht nicht. Diese Version hat viele unterschiedliche Bugs. Ich glaube es ist schon zu spät die zu jagen...Die nächste 11.04 ist schon unterwegs , da soll man schon Zeit investieren um dort Bugs zu jagen. Also Befehl ist richtig.