KAPITALSIN > TUTORIA
Manual para recodificar ficheros de audio xwb
(1/1)
Fl0ppy:
Versión 2 del Manual para recodificar ficheros de audio xwb
Spoiler for Hiden: Manual para recodificar ficheros de audio xwb
¡¡¡ADVERTENCIA!!!
ESTA GUIA Y EL PAQUETE DE UTILIDADES ES PARA USARSE BAJO GNU/LINUX Y TAMBIEN ES NECESARIO TENER WINE INSTALADO
MAS ABAJO TIENES EL MISMO MANUAL PERO PARA WINDOWS
==================
MANUAL GNU/LINUX
==================
Vamos a poner como ejemplo el juego STARDEW VALLEY, concretamente la versión Linux de GOG
Una vez instalado el juego los datos de audio estan en el directorio Content/XACT
1.4K FarmerSounds.xgs
29K 'Sound Bank.xsb'
36M 'Wave Bank(1.4).xwb'
433M 'Wave Bank.xwb'
Nos interesa el fichero de 433 MB
Primero le cambiaremos el nombre a uno más sencillo
--- Código: ---mv 'Wave Bank.xwb' wavebank.xwb
--- Fin del código ---
Del paquete de utilidades xwb usaremos el unxwb, ya viene una versión que compilé para Linux y lo que haremos es usarlo para extrear los audios
Le damos permisos al unxwb
--- Código: ---chmod +x unxwb
--- Fin del código ---
Creamos un directorio temporal de trabajo
--- Código: ---mkdir wavheader
./unxwb -v -d wavheader wavebank.xwb
--- Fin del código ---
Ahora ya tenemos los datos volcados en formato WAV, los convertimos a opus con opusenc
--- Código: ---./fd -e wav -x ./ffmpeg -i {} {.}.pcm.wav
./fd -e pcm.wav -x wine opusenc.exe --bitrate 56 {} {}.opus && rm *.wav
--- Fin del código ---
Una vez reconvertidos los wav-adpcm a opus el proceso de conversión de wav a opus ya ha finalizado, ahora toca crear el setup para el proceso de recuperación de datos, que tranquilos no es tan largo y complejo como este primero
Creamos un directorio (toreencode) donde pondremos los siguientes ficheros
-Los *.opus
-adpcmencode.exe
-fd
-opusdec.exe
-XWBTool.exe
--- Código: ---./fd -e opus -x wine opusdec.exe {} {.}.wav && rm *.opus
find ./ -depth -name "*.pcm.wav.wav" -exec sh -c 'mv "$1" "${1%.pcm.wav.wav}.wav"' _ {} \;
./fd -e wav -x wine adpcmencode.exe {} {.}.adpcm && rm *.wav
wine ../XWBTool.exe -s -o ../Songs.xwb *.adpcm
cd ..
rm -rf wavheader
--- Fin del código ---
===================
MANUAL PARA WINDOWS
===================
Vamos a poner como ejemplo el juego STARDEW VALLEY, concretamente la versión Linux de GOG
Una vez instalado el juego los datos de audio estan en el directorio Content/XACT
1.4K FarmerSounds.xgs
29K 'Sound Bank.xsb'
36M 'Wave Bank(1.4).xwb'
433M 'Wave Bank.xwb'
Nos interesa el fichero de 433 MB
Primero le cambiaremos el nombre a uno más sencillo
--- Código: ---ren 'Wave Bank.xwb' wavebank.xwb
--- Fin del código ---
Del paquete de utilidades xwb usaremos el unxwb.exe y lo usaremos para extraer los audios
Creamos un directorio temporal de trabajo
--- Código: ---mkdir wavheader
unxwb.exe -v -d wavheader wavebank.xwb
--- Fin del código ---
Ahora ya tenemos los datos volcados en formato WAV, los convertimos a opus con opusenc
--- Código: ---fd.exe -e wav -x ffmpeg.exe -i {} {.}.pcm.wav
fd.exe -e pcm.wav -x wine opusenc.exe --bitrate 56 {} {}.opus && del *.wav
--- Fin del código ---
Una vez reconvertidos los wav-adpcm a opus el proceso de conversión de wav a opus ya ha finalizado, ahora toca crear el setup para el proceso de recuperación de datos, que tranquilos no es tan largo y complejo como este primero
Creamos un directorio (toreencode) donde pondremos los siguientes ficheros
-Los *.opus
-adpcmencode.exe
-fd.exe
-opusdec.exe
-XWBTool.exe
--- Código: ---fd.exe -e opus -x opusdec.exe {} {.}.wav && del *.opus
ren "*.pcm.wav.wav" "*.wav"
fd.exe -e wav -x adpcmencode.exe {} {.}.adpcm && del *.wav
..\XWBTool.exe -s -o ..\wavebank.xwb *.adpcm
cd ..
ren wavebank.xwb 'Wave Bank.xwb'
rd /s /q wavheader
--- Fin del código ---
Versión 1 del Manual para recodificar ficheros de audio xwb
Spoiler for Hiden: ¡¡¡ADVERTENCIA!!!
ESTA GUIA Y EL PAQUETE DE UTILIDADES ES PARA USARSE BAJO GNU/LINUX Y TAMBIEN ES NECESARIO TENER WINE INSTALADO
==================
Vamos a poner como ejemplo el juego STARDEW VALLEY, concretamente la versión Linux de GOG
Una vez instalado el juego los datos de audio estan en el directorio Content/XACT
1.4K FarmerSounds.xgs
29K 'Sound Bank.xsb'
36M 'Wave Bank(1.4).xwb'
433M 'Wave Bank.xwb'
Nos interesa el fichero de 433 MB
Primero le cambiaremos el nombre a uno más sencillo
--- Código: ---mv 'Wave Bank.xwb' wavebank.xwb
--- Fin del código ---
Del paquete de utilidades xwb usaremos el unxwb, ya viene una versión que compilé para Linux y lo que haremos es crear dos logs diferentes
Le damos permisos al unxwb
--- Código: ---chmod +x unxwb
--- Fin del código ---
Creamos dos directoris temporales de trabajo
--- Código: ---mkdir wavnoheader
mkdir wavheader
./unxwb -v -R -d wavnoheader wavebank.xwb >wavnoheader.txt
./unxwb -v -d wavheader wavebank.xwb >wavheader.txt
--- Fin del código ---
Para saber si los audios estan comprimidos hacemos
--- Código: ---cat wavheader.txt | grep ADP
--- Fin del código ---
Si salen resultados quiere decir que estan comprimidos con el ms-adpcm de XWB
Ahora ya tenemos los datos volcados en formato RAW, WAV, dos logs y sabemos que estan con ADPCM, toca convertir los log a un formato más "limpio"
Primero procesamos el fichero wavnoheader.txt creando el fichero test.txt
--- Código: ---cat wavnoheader.txt |awk '{ print $1 }'|grep 0x | sed 's/0x/wavebank.xwb_/' | awk '{print $1"_12345678.dat"}' >test.txt
--- Fin del código ---
Ahora procesamos los ficheros wav dentro del directorio wavheader
--- Código: ---cd wavheader
ls *.wav |awk '{print "\"mv\"",$0}' - |sed 's/"mv"/mv/' | paste - ../test.txt > wavebank.sh
--- Fin del código ---
Le damos permisos al fichero que se ha creado
--- Código: ---chmod +x wavebank.sh
--- Fin del código ---
Y lo ejecutamos
--- Código: ---./wavebank.sh
cd ..
--- Fin del código ---
Ahora ya tenemos los nombres de los ficheros (en formato wav) a punto y podemos borrar el fichero wavebank.sh
Hacemos el mismo proceso pero con los audio raw, pero variando el .wav por el .dat
--- Código: ---cd wavnoheader
ls *.dat |awk '{print "\"mv\"",$0}' - |sed 's/"mv"/mv/' | paste - ../test.txt > wavebank.sh
chmod +x wavebank.sh
./wavebank.sh
--- Fin del código ---
Ahora esos .dat les ponemos el tamaño que tiene en el nombre del fichero, para ello copia del paquete el fichero update_size.pl a ese directorio dale permisos y ejecutalo
--- Código: ---cp ../update_size.pl .
chmod +x update_size.pl
./update_size.pl
--- Fin del código ---
Ahora ya tenemos los ficheros originales en formato raw con el tamaño especificado, toca renombrar los .wav con el mismo nombre que los .dat
Salimos del directorio wavnoheader y ejecutamos estos comandos
--- Código: ---cd ..
ls wavnoheader/*.dat | sed 's/^wavnoheader\///;s/\// /g'>noheader.txt
ls wavheader/*.dat | sed 's/^wavheader\///;s/\// /g'>header.txt
--- Fin del código ---
Continuamos con el proceso de renombrar los .wav
--- Código: ---paste header.txt noheader.txt >test3.txt
cat test3.txt |awk '{print "\"mv\"",$0}' - |sed 's/"mv"/mv/' >test2.sh
--- Fin del código ---
Le damos permisos y lo ejecutamos DENTRO del directorio wavheader
--- Código: ---chmod +x test2.sh
cp test2.sh wavheader
cd wavheader
./test2.sh
rm test2.sh
cd ..
--- Fin del código ---
En este punto vamos a eliminar ficheros menores de 100kb en ambos directorios de trabajo, para evitar conflictos en la recodificación
Copiamos el fichero delsize.sh en ambos directorios, le damos permisos y lo ejecutamos
--- Código: ---cp delsize.sh wavheader
cp delsize.sh wavnoheader
cd wavheader
./delsize.sh
rm delsize.sh
cd ..
cd wavnoheader
./delsize.sh
rm delsize.sh
cd ..
--- Fin del código ---
Si todo ha ido bien en ambos directorios habran 159 ficheros
Ahora ya tenemos a punto los fichero dat y wav para procesarlos e inyectarlos
Comenzamos por vaciar el fichero "grande", el wavebank.xwb
Copiamos el script emptyfile.sh en el directorio wavnoheader
--- Código: ---cp emptyfiles.sh wavnoheader
cd wavnoheader
chmod +x emptyfiles.sh
./emptyfiles.sh
--- Fin del código ---
Movemos los ficheros .dat.cl al directorio inicial
--- Código: ---mv *.cl ..
cd ..
--- Fin del código ---
Y los inyectamos al fichero wavebank.xwb con el inyector de kps (que esta dentro del paquete de utilidades xwb), recuerda de hacer una copia de seguridad por si acaso del fichero (cp wavebank.xwb wavebank.xwb.ori)
--- Código: ---./injector wavebank.xwb
rm *.cl
--- Fin del código ---
Ahora ya tenemos el fichero de audios vacio y vamos a recodificar los ms-adpcm a opus con un bitrate de 56 usando un ffmpeg especial que he compilado (que está dentro del paquete de utilidades de xwb)
Copiamos ese ffmpeg y el opusenc.exe (el porque uso una aplicacińo nativa de linux con otra de windows es porque ffmpeg tiene en modo experimental el opus y haciendolo de esta manera los tamaños coinciden, el directorio wavheader, le damos permisos y ejecutamos esta linea
--- Código: ---cd wavheader
cp ../fd .
cp ../ffmpeg .
cp ../opusenc.exe .
./fd -e dat -x ./ffmpeg -i {} {.}.wav && rm *.dat
./fd -e wav -x wine opusenc.exe --bitrate 56 {} {.}.opus && rm *.wav
--- Fin del código ---
Una vez reconvertidos los wav-adpcm a opus el proceso de conversión de wav a opus ya ha finalizado, ahora toca crear el setup para el proceso de recuperación de datos, que tranquilos no es tan largo y complejo como este primero
Creamos un directorio (toreencode) donde pondremos los siguientes ficheros
-Los *.opus
-adpcmencode.exe
-fd
-injector
-opusdec.exe
Entramos en el directorio que hemos puesto todo eso y ejecutamos, el adpcmencode.exe, que tiene valores que van de 32 a 512 por defecto se usa el 128, en otros juegos pueden variar, si usas esta guia en diferentes juegos y los audio suenan mal prueba otros valores, has de ir probando, pero en este caso vas sobre seguro, ya que está más testado.
--- Código: ---./fd -e opus -x wine opusdec.exe {} {.}.wav && rm *.opus
./fd -e wav -x wine adpcmencode.exe -b 128 {} {.}.adpcm && rm *.wav
for i in *.adpcm;do tail -c +79 $i >$i.wav;done && rm *.adpcm
cp *.wav ..
cd ..
./injector wavebank.xwb
rm injector fd adpcmencode.exe ffmpeg *.wav
--- Fin del código ---
En este caso concreto hubo dos ficheros que dieron error de tamaño, el inyector avisa de ese fallo
--- Código: ---rm wavebank.xwb_08c2eba0_000B6304.adpcm.wav
rm wavebank.xwb_0da4832c_0008978C.adpcm.wav
cd wavnoheader
cp wavebank.xwb_08c2eba0_000B6304* ..
cp wavebank.xwb_0da4832c_0008978C* ..
cd ..
--- Fin del código ---
Y lo volvemos inyectar
--- Código: ---./injector wavebank.xwb
--- Fin del código ---
En tal caso lo que se haria es inyectar los .dat originales y eliminar los .opus del proceso de instalación y dejar el fichero wavebank.xwb "preparado".
Pero en caso de que no te quieras complicar la vida con el proceso de recuperación de datos simplmente ejecuta el programa opus2wxb con el parámetro "bloque" ex: "opux2xwb.exe 128" y el ya hará los procesos pertinentes de control de tamaños
Una vez finalizado volvemos a poner el nombre original
--- Código: ---mv wavebank.xwb 'Wave Bank.xwb'
--- Fin del código ---
Y ponemos ese fichero donde está el juego y si todo ha ido bien sonará la música correctamente
Fl0ppy:
Por si algun tiene curiosidad pongo como compilar (bajo ubuntu/mint) la utilidad (que viene el códig fuente y un binario pero de windows) para Linux de manera estática (sin dependéncias) y con musl-gcc
--- Quote (selected) ---sudo apt-install musl-gcc
mkdir unxwb_src
cd unxwb_src
wget http://aluigi.altervista.org/papers/unxwb.zip
unzip unxwb.zip
wget https://zlib.net/zlib-1.2.13.tar.gz
tar xvfa zlib-1.2.13.tar.gz
cd zlib-1.2.13
./configure
make -j4
cd ..
musl-gcc -O2 unxwb.c -I$PWD/zlib-1.2.13 -L$PWD/zlib-1.2.13 -lz -static -o unxwb
strip unxwb
--- Fin de la cita ---
¡Y ya está! :D
Fl0ppy:
Creada versión 2 del manual, muchisimo más simple y para GNU/Linux y Windows, también actualizado el paquete de las utilidades
Navegación
Ir a la versión completa