Guide to record multiple audio devices (here a Mumble conference) in a single Ogg/Vorbis file
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. Test recording
a) Get monitor device name:
pactl list | grep Name | grep monitor
Name: alsa_output.pci_8086_24c5_alsa_playback_0.monitor
b) 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
c) Get capture device name:
pactl list | grep Name | grep capture
Name: alsa_input.pci_8086_24c5_alsa_capture_0
d) 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
4. Record multiple streams:
4.1 Mix multiple sources to one channel
a) 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 /b) 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.
4.2 Save every source to a separate channel
a) 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
5. Links
6. TODO
- Get multiple streams muxed
- Document quality and channel settings
