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)
- installate il pacchetto apt-file ( apt-get install apt-file )
- da root date il comando apt-file update ( sudo apt-file update )
- 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)
- leggiamo dalla lista di pacchetti che ci serve il pacchetto libasound2-dev (in questo caso, in genere sono sempre pacchetti con la desinenza -dev )
- 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/bashexport 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.
17 Giugno, 2007 at 9:47
wowowowoowowo!
17 Giugno, 2007 at 15:45
sono riuscito a farlo funzionare, piccolo errore di ortografia al punto 3
copio/incollo ” cerchiamo quale pacchetto contiene il file asoundlib.h che ci serve: apt-file searc asoundlib.h (ovviamente cambiate il nome del file con quello che viene richiesto)”
manca la h in search
io per far veloce copiavo incollavo e non funzionava… eheh
cmq, per il resto è andato tutto bene
grazie
Marco
17 Giugno, 2007 at 15:52
@imar
ups!
correggo subito..
tra l’altro avevo dimenticato di dire che SDL andava installato
se non lo è già chiaramente
17 Giugno, 2007 at 18:15
hai dimentiacto un ”
export ETSDL_SDL_LIB=libSDL-1.2.so.0″
fixalo in
export ETSDL_SDL_LIB=”libSDL-1.2.so.0″
bye!
17 Giugno, 2007 at 19:15
@kron1x
ups..
sistemato…
tnx
23 Agosto, 2007 at 14:33
[...] in Problemi Risolti, Aggiornamenti, Svago, Segnalazioni, Linux a 14:33 di mastro Tempo fa ho parlato di una libreria per far funzionare l’audio di Enemy Territory con SDL, e quindi con anche con Alsa.. la [...]
17 Settembre, 2007 at 16:19
prima domanda: quando sono su un server etpro di Et e dò il comando “/cheaters”
vengono visualizzate le guid e il sistema operativo di chi è collegato in quel momento. dopo aver installato et.sdl non mi compare più il sistema operativo, viene visualizzato “[???]“.
non c’è modo di risolvere ?
seconda domanda: quando mi collego su un server attraverso XQF, ET si avvia normalmente, se faccio partire ET da console, mi chiede la passw, perchè ? attenzione non dò il comando “sudo et”, ma solo “et”
17 Settembre, 2007 at 16:36
@imar
ciao
1) no, non c’è un modo che io sappia
semplicemente puoi spiegare cosa stai usando rimandando a questo link
2) dipende da com’è installato enemy territory nel tuo sistema. lo script che lanci per il gioco evidentemente usa sudo… cosa che non gli serve.. io ci darei un occhiata!
XQF ti lancia ET normalmente perché non hai seguito la parte della guida dove spiego come rendere le modifiche permanenti, o hai sbagliato qualcosa… ad ogni omdo XQF nelle impostazioni ha il path del “vecchio” eseguibile di et.. e quindi non funziona
è un po’ complicato risponderti con più dettaglio
io ti consiglio di cominciare con questo comando:
whereis et
quindi iniziare a “guardare dentro” tale file per capire dove ti chiede la password e perché…
qualcosa di strano c’è cmq
17 Settembre, 2007 at 17:06
no no, XQF lancia et normalmente senza chiedermi la passw e l’audio si sente.
la cosa strana è che se lancio et da console mi chiede la passw, anche in questo caso l’audio si sente.
grazie per la rapida risposta!!
17 Settembre, 2007 at 17:11
@imar
ok.. allora se lanci da console esegue un qualche script differente
e il consiglio per scoprire perché chieda la password è cmq valido
whereis et
e da lì parti ad analizzare i file finché non trovi qualcosa di utile
cmq se esegue il tutto da root è meglio non farlo partire da linea di comando cmq
17 Settembre, 2007 at 17:21
problema risolto:
lo script originale di et è questo :
—————————————————————————-
#!/bin/sh
# Needed to make symlinks/shortcuts work.
# the binaries must run with correct working directory
cd “/usr/local/games/enemy-territory/”
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:.
exec ./et.x86 “$@”
—————————————————————————-
mentre lo scritp che ho creato seguendo la guida era questo:
—————————————————————————-
#!/bin/bash
sudo su -c ‘echo “et.x86 0 0 disable” > /proc/asound/card0/pcm0c/oss’
export ETSDL_SDL_LIB=”libSDL-1.2.so.0″
cd /usr/local/games/enemy-territory/
LD_PRELOAD=”/usr/local/games/enemy-territory/et-sdl-sound.so” ./et.x86 $*
—————————————————————————-
se vedi nell’ultima riga c’è ./et.x86 $* ho risolto modificandola così : ./et.x86 “$@”
grazie ancora per l’aiuto
Marco
17 Settembre, 2007 at 18:32
@imar
sudo su -c ‘echo “et.x86 0 0 disable” > /proc/asound/card0/pcm0c/oss’
questa è la riga che ti chiede la password
l’hai messa per lavorare con TeamSpeak?
se si… usa teamspeak lanciandolo con il comando: aoss teamspeak
e vedrai che quella non ti serve più
ps: aoss è contenuto nel pacchetto alsa-oss o simile
15 Settembre, 2008 at 1:58
hey raga cmq non serviva fare tutti questi sbattimenti bastava scaricare il pachetto Wine e il gioco era fatto..
con Wine installi qualsiasa cosa di windows su linux.. good lunk