Es ist ja doch immer etwas Bastelei, wenn man Enemy Territory und Teamspeak zusammen ans Laufen bekommen möchte. Zumal ich nur eine Soundkarte in dem Rechner habe (was auch so bleiben soll), und dazu noch gerne einen Audioplayer laufen lassen würde. Das Problem dabei besteht aus zwei Teilen. Enemy Territory und Teamspeak unterstützen beide erstmal nur das oss-Soundsystem, was ja unter Linux nicht mehr aktuell ist. Zumindest der Teamspeak2-Client lässt sich davon auch nicht abbringen, und der neue Teamspeak Client steht noch aus. Für Enemy Territory gibt es ein LD_PRELOAD Modul welches dem Spiel SDL Sound beibringt.
Arch
Während ich
Archlinux auf meinem ET-Rechner verwendet habe war das ganz gut über alsa zu machen. Irgendwie konnte ich seit dem 2.6.23er Kernel mehrere alsa-Programme mit Sound gleichzeitig starten, und alsa hat das gemischt. Ich habe keine Ahnung ob das ein neues alsa-Feature ist, aber es ist toll das es funktioniert, und so habe ich den ESD da fürs erste in Rente geschickt. Zumal ESD sowieso zuviel Latenz für Enemy Territory hat. Gestartet habe ich Teamspeak mit aoss aus dem
alsa-oss Paket vor Enemy Territory. Danach tut das ganz gut, ein paar kleine Aussetzer im Sound gibts, aber alles von mir gesprochene kommt anscheinend gut an, und ich kann mit dem alsamixer die Mic-Kanäle steuern.
Für Enemy Territory gibts eine Möglichkeit via LD_PRELOAD die SDL Bibliothek für die Sound-Ausgaben zu benutzen. ET selbst macht nämlich auch nur oss, und dank dem Preload-Modul kann ich als Umgebungsvariable den SDL-Audiotreiber setzen. Das ganze sieht dann so aus :
export ETSDL_SDL_LIB="libSDL-1.2.so.0"
export SDL_AUDIODRIVER="alsa"
LD_PRELOAD="$etdir/et-sdl-sound.so" ./et.x86 +set com_hunkmegs 512 +connect $1 >et.log 2>&1&
Und schon macht ET auch Alsa-Sound. Beschrieben ist das im Arch-Wiki auch noch unter
Enemy Territory. Da gibts auch das et-sdl-sound.so.
Ubuntu Hardy
Unter Ubuntu Hardy Heron sieht das ganze allerdings etwas anders aus. Ich muss gestehen voher noch nie etwas von Pulseaudio gehört zu haben. Zunächst habe ich das Teil auch einfach abgeschossen und versucht ET mit alsa zum Laufen zu bringen. Da das mir auf dem Heron nicht auf Anhieb den Sound gemischt hat (alle Programme haben einzeln Sound gemacht, aber eben immer nur eins) habe ich den Pulse-Daemon dann doch wieder gestartet und versucht meine Konfiguration daran anzupassen. Für Teamspeak war das relativ simpel. Analog zum esddsp gibt es einen padsp, welcher das oss-Output auf Pulse mapped. Im Gegensatz zum ESD scheint das recht performant zu laufen. Der Vorteil daran ist dass ich keine Hänger im Sound mehr habe.
An Enemy Territory habe ich zunächst ein wenig herumgebastelt. Pulseaudio hat einen ESD Wrapper, damit hat das allerdings nicht geklappt. Alsa als Output ging auch nicht mehr, und so bin ich nach einigem Suchen darauf gestossen dass die SDL selbst nun einen Pulseaudio Soundtreiber hat. Das ganze ist ziemlich frisch, aber zum Glück in Hardy schon als Paket verfügbar. Nachdem ich libsdl1.2debian-pulseaudio installiert habe kann ich die Preload-Methode verwenden. Ich tausche einfach das "alsa" als SDL_AUDIODRIVER gegen "pulse" aus, und schon läuft alles zusammen.
Das ganze habe ich in ein ET-Startscript zusammengefasst. Etwas abgewandelt startet das nun auf einem Ubuntu Hardy Heron wahlweise ET mit verschiedenen Servern oderTeamspeak. Für ein System ohne Pulseaudio muss der padsp Aufruf durch alsaoss ersetzt werden und SDL_AUDIODRIVER="alsa" sein. Des weiteren benutzt das Script dialog, das muss also ggf. installiert werden.
#!/bin/bash
DIALOG=`which dialog`
if [ -z $DIALOG ]; then
echo "error: the tool dialog is not available."
exit 1
fi
etdir="/home/sven/games/enemy-territory"
tsdir="/home/sven/games/ts2"
export ETSDL_SDL_LIB="libSDL-1.2.so.0" # hier die installierte sdl-Lib angeben.
export SDL_AUDIODRIVER="pulse"
start_et () {
cd "$etdir"
LD_PRELOAD="$etdir/et-sdl-sound.so" ./et.x86 +set com_hunkmegs 512 +connect $1 >et.log 2>&1&
cd -
read s
}
start_ts () {
cd "$tsdir"
padsp ./TeamSpeak &
cd -
}
while /bin/true; do
tempfile=`mktemp`
trap "rm -f $tempfile" 0 1 2 6 11 15
dialog --menu "Enemy Territory - Start Menu" 20 70 13 \
"T" "Teamspeak" \
"L" "Timelord.de" \
"1" "Bunker 1" \
"2" "Bunker 2" \
"3" "Bunker 3" \
"4" "Bunker 4" \
"X" "Abort" 2>$tempfile
if [ $? -gt 0 ]; then
dialog --infobox "process cancelled" 3 30
rm -f "$tempfile"
exit 0
fi
c=`cat $tempfile`
case $c in
T) start_ts ;;
L) start_et timelord.de ;;
1) start_et bunker1.aaxxss.com ;;
2) start_et bunker2.aaxxss.com ;;
3) start_et bunker3.aaxxss.com ;;
4) start_et bunker4.aaxxss.com ;;
X) rm -f $tempfile
exit 0;;
esac
rm -f $tempfile
done
Viel Spass damit.