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.


7 Kommentare

Linear

  • 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.

Kommentar schreiben

Die angegebene E-Mail-Adresse wird nicht dargestellt, sondern nur für eventuelle Benachrichtigungen verwendet.

Um maschinelle und automatische Übertragung von Spamkommentaren zu verhindern, bitte die Zeichenfolge im dargestellten Bild in der Eingabemaske eintragen. Nur wenn die Zeichenfolge richtig eingegeben wurde, kann der Kommentar angenommen werden. Bitte beachten Sie, dass Ihr Browser Cookies unterstützen muss, um dieses Verfahren anzuwenden.
CAPTCHA

Standard-Text Smilies wie :-) und ;-) werden zu Bildern konvertiert.
BBCode-Formatierung erlaubt
Markdown-Formatierung erlaubt