Ieri cercando tra i TAG contrassegnati “Linux” ho visto questo post! Io qui non faccio altro che diffondere la cosa e descrivo la procedura perché sia più appetibile ad un utente inesperto! Il merito della “scoperta” è tutta di Ulisse.

I miei maggiori ringraziamenti vanno invece a chi lo ha creato, grazie Pyry Haulos e Kevin Vacit!

Si tratta di una libreria che va a sostituirsi a quella utilizzata da Enemy Territory per l’audio, utilizza SDL, quindi perfettamente compatibile con alsa…

AGGIORNAMENTO

La libreria è ora funzionante anche per Quake 3 Arena, il procedimento di installazione è il medesimo.. oppure potete seguire il “nuovo” procedimento di installazione, che descrivo qui.

Ho testato, e ho anche chiesto agli autori.. non c’è NESSUN problema ad usare punk buster con questo hack ( perché di hack si tratta )

Questa guida spiega tutti i singoli passaggi (non è l’unico modo per fare tutto), chi invece sa già come muoversi può utilizzare la guida di Ulisse che contiene solo l’essenziale🙂

Ma veniamo alla guida…

SDL

se già non lo fosse installiamo SDL

su sistemi debian:

apt-get install libsdl-sound1.2 libsdl1.2debian-alsa

Team Speak

team speak usa OSS, una vecchia specifica audio ormai deprecata, il problema con OSS è che le applicazioni tendono a richiedere il controllo totale della scheda audio, o tutto o niente! E quindi un programma che usa OSS impedirà a tutti gli altri di usare la scheda audio, oppure non funzionerà se già qualche altro programma la sta usando..

risolvere questo problema è semplice: installiamo alsa-oss ( apt-get install alsa-oss )

ed eseguiamo team speak con: aoss teamspeak

Enemy Territory

Prima di tutto scarichiamo il tarball (nel caso il link non funzionasse entrate nel loro sito e cercatelo )e scompattiamolo in una cartella (per chi volesse usare la linea di comando: tar xvfz et-sdl-sound.tar.gz ) quindi muoviamoci in quella cartella, apriamo un terminale proprio lì e diamo il comando

make

con buona probabilità vi darà qualche errore del tipo:

etalsa.hpp:5:28: error: alsa/asoundlib.h: No such file or directory

seguito da un altra sfilza di errori

il motivo è semplice, non trova il file “asoundlib.h” che gli serve per compilare, quando compilate qualcosa spesso servono i pacchetti da sviluppatore.. niente panico.. è sufficiente installare il pacchetto libasound2-dev ( nel modo che preferite, ad esempio con apt-get install libasound2-dev )

sudo apt-get install libasound2-dev

nel mio caso mancava solo questo pacchetto… se però aveste altri file mancanti nella lista d’errore c’è un modo semplice per scoprire che pacchetto vi serve (questo nei sistemi debian)

  1. installate il pacchetto apt-file ( apt-get install apt-file )
  2. da root date il comando apt-file update ( sudo apt-file update )
  3. cerchiamo quale pacchetto contiene il file asoundlib.h che ci serve: apt-file search asoundlib.h (ovviamente cambiate il nome del file con quello che viene richiesto)
  4. leggiamo dalla lista di pacchetti che ci serve il pacchetto libasound2-dev (in questo caso, in genere sono sempre pacchetti con la desinenza -dev )
  5. installiamo il pacchetto con apt-get install libasound2-dev ( o cerchiamolo con synaptic )

una volta che si hanno installato tutti i pacchetti necessari il comando make non darà più errori:

$ make
g++ -O2 -fomit-frame-pointer -Wall -fPIC -D__SDL -D__DLOPEN_SDL -D__DEFAULT_BACKEND=SDL -c etalsa.cpp
g++ -O2 -fomit-frame-pointer -Wall -fPIC -D__SDL -D__DLOPEN_SDL -D__DEFAULT_BACKEND=SDL -c hooks.cpp
g++ -shared mainlib.o etsdl.o etalsa.o hooks.o -o et-sdl-sound.so

a questo punto non resta che copiare ( da root ) il file et-sdl-sound.so nella cartella di installazione di enemy territory ( in genere /opt/enemy-territory/ ) se non sapete dov’è cercate il file et.x86 nel vostro sistema🙂 troverete la cartella di enemy-territory

a questo punto, sempre da root, posizioniamoci nella cartella di enemy territory e creiamo un file di testo con nome et.sdl all’interno copiate questo:

#!/bin/bash
export ETSDL_SDL_LIB="libSDL-1.2.so.0"

cd /opt/enemy-territory/
LD_PRELOAD="/opt/enemy-territory/et-sdl-sound.so" ./et.x86 $*

quindi diamo al file i permessi di esecuzione ( potete farlo graficamente, ma da root, o via linea di comando, sempre da root, con chmod +x et.sdl )

proviamo il tutto
apriamo un terminale e scriviamo aoss teamspeak, diamo invio… quindi apriamo un altro terminale e scriviamo /opt/enemy-territory/et.sdl se c’è il suono avete fatto tutto correttamente😀

NOTA:

potrebbe essere necessario impedire ad Enemy Territory di utilizzare il microfono (che tanto non gli serve) per lasciarlo a teamspeak.. se questo non dovesse funzionare proviamo a dare questo comando da root

echo "et.x86 0 0 disable" > /proc/asound/card0/pcm0c/oss

quindi ripetiamo il test… se funziona rendiamo la modifica permanente scrivendo questo comando (sempre da root)

echo 'echo "et.x86 0 0 disable" > /proc/asound/card0/pcm0c/oss'
>> /etc/rc.local

mettete quest’ultimo tutto su una sola riga! mi raccomando le doppie >>🙂 in questo modo ad ogni avvio verrà automaticamente eseguito quel comando

ora facciamo in modo che tutte le volte venga avviata questa modifica

per teamspeak possiamo modificare la voce del menù perché utilizzi il comando “aoss teamspeak” invece di “teamspeak”, su gnome si può fare usando il programma “alacarte” ( nei menù si chiama Editor dei menù ), se non lo trovate aprite un terminale e scrivete alacarte🙂

per enemy territory basta creare un link simbolico nella cartella dove già si trova il nostro eseguibile, quindi prima di tutto vediamo dove si trova l’eseguibile

whereis et

questo comando dato da terminale chiede “dove si trova l’eseguibile “et” ?

sul mio sistema risponde così:

et: /usr/games/et

se non avete il comando whereis vi basta installare il pacchetto util-linux

quindi.. spostiamoci nella cartella /usr/games/ (nel mio caso) e da root rinominiamo il file “et” in “et.backup” quindi creiamo un link simbolico al nostro nuovo eseguibile (oppure copiamolo)

link simbolico:

ln -s /opt/enemy-territory/et.sdl /usr/games/et

copia

cp /opt/enemy-territory/et.sdl /usr/games/et

adesso aprendo i programmi dai menù tutto dovrebbe funzionare!

Mi sono dilungato volutamente, ci sono diversi modi per ottenere tutte queste cose, io ho dato una spiegazione principalmente orientata a chi ha Debian, ma salvo il modo di installare i pacchetti, dovrebbe funzionare su qualunque distribuzione🙂

PS: ho contattato gli autori del programma, si sono offerti di estendere il supporto per quake 3 arena, in cambio di una mano; io in questo periodo non ho assolutamente tempo! Ho già risposto spiegandoli che mi rifarò vivo per aiutarli quando ne avrò… intanto vi riporto qui la loro risposta

(alla domanda: sarebbe difficile modificare questa libreria per quake 3? )
It should be fairly trivial if you can find correct memory addresses. And youneed to modify dma_t a bit. Correct dma_t for Q3 is (if I remember correctly)

typedef struct
{
int channels;
int samples;
int submission_chunk;
int samplebits;
int speed;

// int unknown;
// et has different offset for *buffer byte *buffer;

} dma_t;

Since this modification makes et-sdl-sound incompatible with RTCW and newer

modifications of Q3 engine, some additional tricks are needed. If you help mefind those needed memory addresses I will add support for Q3.