Blog > Komentarze do wpisu

Pulseaudio a Enemy Territory, Ventrilo, Teamspeak i VMware

Od pojawienia się Ubuntu 8.04 domyślnie zainstalowany jest w tej dystrybucji serwer PulseAudio. Czy to dobrze czy źle można zapewne dyskutować. Z pewnością PA daje ogromne możliwości, ale na obecnym etapie swojego rozwoju generuje ogromną ilość problemów z konfiguracją programów z niego korzystających. W moim przypadku celem było włączenie gry Enemy Territory z jednocześnie funkcjonującą komunikacją poprzez TeamSpeak2 lub Ventrilo. Ponieważ nie istnieje dedykowany dla Linuksa klient Ventrilo, dlatego konieczne jest jego odpalanie poprzez Wine, gdzie niestety jest on niestabilny i zawsze sprawia problemy przy dłuższej rozmowie, lub pod MS Windows na maszynie wirtualnej. Ponieważ nigdzie nie znalazłem dokładnego, całościowego poradnika jak tego dokonać, a konfiguracja i grzebanie w necie kosztowało mnie sporo nerwów i czasu, stąd też gdy rozwiązałem ten problem (na Ubuntu 9.04) postanowiłem napisać własne HOWTO aby byćmoże komuś zaoszczędzić kłopotu.

Instalacja dzwięku w ET

Zacznijmy od początku. Czyli od instalacji dzwięku w ET. Zakładam, że Enemy Territory zostało już zainstalowane bez większych problemów. Jeśli nie, dość dobre HOWTO mozna znaleźć Tutaj. Ponieważ nominalnie ET bezpośrednio łączy się ze sterownikami hardware'owymi karty dzwiękowej, dlatego niemożliwe jest jednoczesne granie i słuchanie muzyki, czy też używanie komunikacji głosowej. Zaradzono temu pisząc skrypt et-sdl-sound, który odpowiada za połączenie ET z serwerem ALSA a co za tym idzie z PulseAudio. Oficjalny poradnik znajduje się Tutaj. Najprostszy sposób instalacji to:

W terminalu nawigujemy do katalogu instalacji gry (zakładam, że została ona zainstalowana w katalogu domyślnym):

$ sudo -i
# cd /usr/local/games/enemy-territory
# wget -q -O - http://nullkey.ath.cx/~stuff/et-sdl-sound/et-sdl-sound.gz | gzip -d > et-sdl-sound && chmod a+x et-sdl-sound
# gedit (albo inny ulubiony edytor) et-sdl-sound

Wyszukujemy linie:
#GAME_PATH=""
SDL_AUDIODRIVER=""
GAME_BIN=''
GAME_DIR=''
i zmieniamy odpowiednio na:
GAME_PATH="/usr/local/games/enemy-territory"
SDL_AUDIODRIVER="alsa"
GAME_BIN='et.x86'
GAME_DIR='enemy-territory'

Zapisujemy i wychodzimy. Skrót do gry edytujemy następnie tak żeby wskazywał na wyedytowany uprzednio skrytp et-sdl-sound.

Instalacja TeamSpeak'a

Nie ma się właściwie nad czym rozwodzić, bo instalujemy go po prostu z repozytorium.

$ sudo aptitude install teamspeak-client

Ventrilo i VMWare

Z tym niestety zwykle jest masa problemów. Niegdyś stosunkowo długo korzystałem z Ventrilo 2.1.4 zainstalowanego pod Wine. Nie jest to wielką filozofią. Dokładny opis jak tego dokonać znajduje się Tutaj. Problemem jest, że Vent odpalony z Wine zazwyczaj dość szybko się wywraca. Ot cecha prawie wszystkich programów startowanych w Wine. Nie byłoby to może tak irytujące gdyby nie fakt, że przeważnie dzieje się podczas gry i niestety bardzo często. Krótko mówiąc Ventrilo pod Winem nie daje sie w praktyce używać.

Alternatywą, niestety tylko dla komputerów z procesorami dwurdzeniowymi wzwyż, jest jego instalacja pod systemem Windows na maszynie wirtualnej. Do wyboru są właściwie dwie: otwarty Virtualbox i zamknięty, niekiedy płatny VMWare. Choć oficjalnie ten pierwszy w najnowszej wersji współpracuje z Pulseaudio niestety z powodu znanego bugu nie pozwala na używanie mikrofonu.

Krótko mówiąc jedyną opcją pozostaje VMWare. Tu też nie jest niestety zbyt łatwo. Defaultowo VM łączy się bowiem bezpośrednio ze sterownikami sprzętowymi dźwięku odcinając tym samym PulseAudio. Problem podobny jak w przypadku ET. Rozwiązanie, czyli przekierowanie VMWare na PA znalazłem w dwóch poradnikach Tutaj i Tutaj. Zakładam, że posiadamy już odpowiednią maszynę wirtualną pod VMWare z zainstalowanym systemem MS Windows 2k/XP/Vistą. Instalacja jest dość intuicyjna a wszelkie poradniki jak tego dokonać znajdziemy Tutaj.

Instalację współpracy z PulseAudio zaczynamy od zamknięcia wszystkich maszyn wirtualnych.
Następnie nawigujemy do katalogu zawierającego plik vmware-vmx, przenosimy go i tworzymy nowy skrypt:

$ sudo -i
# cd /usr/lib/vmware/bin
# mv vmware-vmx vmware-vmx.real
# touch vmware-vmx
# gedit (lub inny ulubiony edytor) vmware-vmx


Do skryptu wklejamy:
#!/bin/bash

LD_PRELOAD=libaoss.so exec /usr/lib/vmware/bin/vmware-vmx.real "$@"

Zapisujemy, wychodzimy.

Następnie zmieniamy uprawnienia do utworzonego skryptu i biblioteki libpulsedsp.

# chmod a+x,u+s vmware-vmx && chmod u+s /usr/lib/libpulsedsp.so

Teraz zmieniamy ustawienia maszyny wirtualnej. W ustawieniach dźwięku zamieniamy Auto detect na /dev/dsp.

Na tym etapie VMWare powinien startować i łączyć się z serwerem PulseAudio. Następnie instalujemy Ventrilo na maszynie wirtualnej. Aby mikrofon z Windowsa gościa również łączył się serwerem PA należy przed startem VM włączyć program pavucontrol (dostępny z gui volumecontrol w padevchooser). Następnie wybrać zakładkę 'urządzenia wejściowe' (czyli nasz mikrofon). Nie wiedzieć czemu ulega on zamutowaniu dwa razy. Pierwszy raz podczas startu wirtualnej Windy i drugi raz po włączeniu Ventrilo. Należy go za każdym razem odmutować. Wtedy Vent działa już bez kłopotu.

Pozostaje jeszcze to co zazwyczaj stwarza najwięcej problemów, a mianowicie:

Konfiguracja demona PulseAudio

Dość dobry manual konfigu PA znajduje się Tutaj.

Przed rozpoczęciem edycji konfigu musimy dodać własnego użytkownika, oraz użytkownika pulse do grup pulse-access i pulse-rt. Spowoduje to, iż wprowadzone przez nas następnie zmiany faktycznie odniosą skutek.

$ sudo adduser $USER pulse-access && sudo adduser pulse pulse-access
$ sudo adduser $USER pulse-rt && sudo adduser pulse pulse-rt

Teraz przechodzimy do właściwej edycji konfigu demona PulseAudio.

$ sudo gedit /etc/pulse/daemon.conf

Najistotniejsze linijki to:
; high-priority = no (zmieniamy na yes)
; rlimit-nice = 31
; rlimit-rtprio = 9

konfiguracja nie jest łatwa i wymaga w końcowym efekcie osiągnięcia kompromisu między jak najmniejszymi trzaskami w ET, Ventrilo i TeamSpeaku. Przy domyślnych ustawieniach, przynajmniej u mnie, trzeszczy zarówno gra jak i dzwięk w VMWare natomiast TS działa prawidłowo. Niestety obecnie, wbrew temu co napisane jest w wielu HOWTO, zabicie i zrestartowanie PA nie wystarcza do przetestowania zmian. Konieczny wydaje się restart systemu. Stąd też czasochłonność całej procedury. Wartościami przy których osiągnąłem faktyczny złoty środek były w moim wypadku:

; rlimit-nice = 20
; rlimit-rtprio = 15
Inne istotne linie to:
resample-method = src-linear (która odpowiada za jakość dzwięku)
oraz
default-fragments = 8
default-fragment-size-msec = 5

Moje ustawienia w nich wynikały z dopasowania do funkcjonowania Skype.

Dodatkowo w konfigu Enemy Territory stosuję s_mixahead 0.9 a nawet 1. Przy tych wartościach trzeszczenie w ET faktycznie zniknęło. Według niektórych źródeł ustawienia daemon.conf mogą być bardzo różne w zależności od posiadanego hardware'u. Pozostaje wykazać się dużą cierpliwością i dokładnym przewertowaniem manuala do daemon.confa.

środa, 29 lipca 2009, rollo-t0masi

Komentarze
2009/07/30 00:24:55
Czyżbyś dalej grał w ET? Naprawdę??
-
2009/07/30 12:31:10
To tylko poradnik jak to ustawić. Nie mam czasu/ochoty na poważne granie...