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