Endlich wieder Surround

Hallo Leute!
Einigen wenigen dürfte ich von meinem Problem mit dem Sound unter Linux berichtet haben. Unter Windows hatte ich mir meine fünf Satellitenlautsprecher so eingestellt, dass die Geräusche alle ein wenig nach hinten verschoben werden, denn die hinteren Lautsprecher würden sonst ja fast gar nicht frequentiert.
Unter Linux stand ich dann aber vor dem Problem, dass ich entweder Surroundsound für ein Programm haben konnte, und die anderen dann stumm sein mussten, oder alle Sound bekommen, dafür aber nur Stereo. Der Grund für die Masche, dass nur ein Programm gleichzeitig spielen konnte, ist der, dass immer nur ein Programm gleichzeitig auf die Hardwareressource ‚Soundkarte‘ gleichzeitig zugreifen kann bzw. dies beim Betriebssystem beantragen kann. Um trotzdem mehrere Programme Sound ausgeben zu lassen bedarf es eines Programmes, das alle Soundanfragen entgegen nimmt, alles zusammenmixt und dann als das Programm diesen Mix auf der Soundkarte ausgibt. Alternativ könnte man sich auch eine Soundkarte kaufen, die das hardwareseitig unterstützt, aber weder habe ich so eine, noch möchte ich mir so was kaufen. Diese ganze Problematik wurde mir unter Windows einfach verschwiegen, obwohl es dort wahrscheinlich ganz ähnlich abläuft. Nur bekommt man davon unter Windows natürlich nichts mit und man darf sich seinen Soundserver (das ist das Mixprogramm) nicht aussuchen. Vermute ich… bei Windows kann man ja nicht rein gucken.
Jedenfalls funktionierte die mehr oder weniger hauseigene Lösung des Mixens über ALSA (Advanced Linux Sound Architecture) nur mit 2 Kanälen.

Seit ca. einem Monat benutze ich Pulseaudio als Soundserver, da ich 1. mal wieder einen Surroundversuch starten wollte und 2. das in der kommenden Ubuntuversion sowieso zum Standard werden wird. Mein Versuch scheiterte wieder und ich weiß schon gar nicht mehr wieso… jedenfalls hab ich es heute endlich geschafft, das ganze zum Laufen zu bewegen! Ich habe jetzt endlich wieder 5.1 Surround Sound für alle Programme!

Nun möchte ich noch meine Lösung hier niederschreiben. Pulseaudio ist so aufgebaut, dass es seine Ausgabe nicht direkt an die Soundkarte schickt, sondern dort noch eine Zwischenstation zwischenschaltet, denn zur Kommunikation mit der Soundkarte sollten richtiger Weise systemnähere Programme dienen. Das sind in meinem Fall die ALSA-Kernelmodule. Pulseaudio gibt seinen Mix über ALSA aus. Anwendungsprogramme, die von vornherein schon über ALSA ausgeben wollen, müssen aber vorher an Pulseaudio umgeleitet werden, damit sie zusammengemischt werden.

Die ALSA-Konfiguration in /etc/asound.conf (oder ~/.asoundrc) sieht bei mir nun wie folgt aus (nur der relevante Teil):

# dieses virtuelle Gerät konvertiert Stereosignale so,
# dass auch auf den hinteren Lautsprechern etwas landet
pcm.upmix {
  type route
  slave.pcm "surround51"
  slave.channels 6
  ttable {
    0.0 1
    1.1 1
    0.2 1
    1.3 1
    0.4 0.5
    1.4 0.5
    0.5 0.5
    1.5 0.5
  }
}

# auf diesem virtuellen Gerät wird Pulseaudio seinen Soundmix ausgeben
pcm.surround {
  type softvol
  slave {
      pcm "upmix"
  }
  control {
      name "Surround volume"
      card 0 
  }
}

# das ist das Standardgerät, wo die Anwendungen ihren Sound hinpacken wollen,
# sofern sie an ALSA leiten
pcm.!default {
  type pulse
}

ctl.!default {
  type pulse
}

Jetzt muss Pulseaudio noch mitgeteilt werden, dieses dafür vorgesehene Gerät zu benutzen. Dies geschieht am besten in der Datei /etc/pulse/default.pa: in die Sektion, in der die Sink-Module geladen werden (da wo die kommentierten load-module Befehle stehen), muss folgende Zeile unkommentiert stehen, also hinzugefügt werden:

load-module module-alsa-sink device=surround channels=6 sink_name=surround

ein paar Zeilen tiefer muss folgende Zeile auskommentiert werden:

#load-module module-hal-detect

andernfalls würde er versuchen noch eine zweite Verbindung mit ALSA herzustellen, deren Beschaffenheit (welches Gerät) er selbst versucht zu ‚erraten‘. Bei mir reichte das aber nur für Stereo.

Mit dieser Einstellung läuft bei mir bis jetzt alles. Viel Glück anderen mit dem gleichen Problem!

Quellen, die mir zuletzt halfen:
https://bugs.launchpad.net/ubuntu/+source/kaffeine/+bug/147643
http://ubuntuusers.de/paste/17099/