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

[0] Índice de Mensajes

Ir a la versión completa