# Title: Guide to record multiple audio devices (here a Mumble conference) in a single Ogg/Vorbis file. # File: http://files.kral.ws/Tobias/Gentoo/mumble-conference_record_with_pulseaudio_and_gstreamer.txt # Author: Tobias Kral - http://www.kral.ws # Last update: 2008-09-04 ##################### # 1. Install Mumble # ##################### # prerequisite to mumble USE="sqlite3" emerge -av1 ">=x11-libs/qt-4.3" USE="pulseaudio" # ebuild: http://bugs.gentoo.org/show_bug.cgi?id=206792 emerge =media-sound/mumble-1.1.4 ######################## # 2. Install GStreamer # ######################## # Package requirements: # media-libs/gst-plugins-base # media-plugins/gst-plugins-vorbis # media-plugins/gst-plugins-ogg # media-plugins/gst-plugins-pulse ############# # 3. Record # ############# # Get monitor device name: $ pactl list | grep Name | grep monitor Name: alsa_output.pci_8086_24c5_alsa_playback_0.monitor # Record monitor device to Ogg/Vorbis file: $ gst-launch-0.10 pulsesrc device=alsa_output.pci_8086_24c5_alsa_playback_0.monitor ! queue ! audioconvert ! vorbisenc ! oggmux ! filesink location=`date +%Y%m%d-%H%M%S`.ogg # -- # Get capture device name: $ pactl list | grep Name | grep capture Name: alsa_input.pci_8086_24c5_alsa_capture_0 # Record capture device to Ogg/Vorbis file: $ gst-launch-0.10 pulsesrc device=alsa_input.pci_8086_24c5_alsa_capture_0 ! queue ! audioconvert ! vorbisenc ! oggmux ! filesink location=`date +%Y%m%d-%H%M%S`.ogg # -- # Raw audio data mixing: $ gst-launch-0.10 adder name=mix ! audioconvert ! vorbisenc ! oggmux ! filesink location=`date +%Y%m%d-%H%M%S`.ogg { pulsesrc device=alsa_input.pci_8086_24c5_alsa_capture_0 ! queue ! mix. } { pulsesrc device=alsa_output.pci_8086_24c5_alsa_playback_0.monitor ! queue ! mix. } # Flowchart: # monitor device -> queue \ # audioconvert -> vorbisenc -> oggmux -> filesink # capture device -> queue / # Same as above, but without queues: $ gst-launch-0.10 pulsesrc device=alsa_input.pci_8086_24c5_alsa_capture_0 ! adder name=mix ! audioconvert ! vorbisenc ! oggmux ! filesink location=`date +%Y%m%d-%H%M%S`.ogg { pulsesrc device=alsa_output.pci_8086_24c5_alsa_playback_0.monitor ! mix. } # FIX ME: Both devices need to be served, else GStreamer won't record. # -- # Mux multiple vorbis streams in ogg container (doesn't work yet): $ gst-launch-0.10 oggmux name=mux ! filesink location=`date +%Y%m%d-%H%M%S`.ogg { pulsesrc device=alsa_output.pci_8086_24c5_alsa_playback_0.monitor ! queue ! audioconvert ! vorbisenc ! queue ! mux. } { pulsesrc device=alsa_input.pci_8086_24c5_alsa_capture_0 ! queue ! audioconvert ! vorbisenc ! queue ! mux. } # Flowchart: # monitor device -> queue -> audioconvert -> vorbisenc -> queue \ # oggmux -> filesink # capture device -> queue -> audioconvert -> vorbisenc -> queue / # FIX ME: doesn't work yet ############ # 4. Links # ############ # GStreamer Base Plugins 0.10 Plugins Reference Manual ## http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base-plugins/html/ ########### # 5. TODO # ########### # Get multiple streams muxed # Document quality and channel settings