web-dev-qa-db-fra.com

Ligne de commande SPC to WAV

Par exemple, ces types de fichiers .SPC: dossiers SPC et WAV aléatoires

Je ne veux pas que cela amène une fenêtre au premier plan, mais simplement un processus invisible qui convertira un SPC en WAV.

executable foo/bar/input.spc bar/foo/output.wav

J'utilise ceci dans une application Java en ligne de commande, donc une solution Java serait appréciée si possible. (Je peux utiliser ProcessBuilder pour exécuter l'exécutable sinon.)

3
Soren

Comme c'est pratique! FFMPEG peut lire et convertir des fichiers SPC!

ffmpeg -i night1.spc -acodec pcm_u8 -ar 44100 night1.wav

Maintenant, cette commande convertira votre fichier assez proprement et crachera un fichier Nice .wav (assurez-vous de remplacer night1.spc et night1.wav avec le nom de fichier souhaité.).

Malheureusement, cela ne termine pas l'histoire du tout. Après avoir exécuté la commande ci-dessus pendant un moment, j'ai obtenu le résultat suivant:

-rw-rw-r-- 1 kazwolfe kazwolfe 297M Mar 28 02:05 night1.wav
-rw-rw-r-- 1 kazwolfe kazwolfe  65K Mar 28 02:01 night1.spc

Cela ne peut pas être juste ... ouvrons le fichier dans Audacity et voyons ce qui se passe:

En bref, les fichiers SPC n’ont pas de longueur définie. Bien que il y ait une mention de longueur dans la spécification , il semble être souvent ignoré, et en fait est ignoré dans les fichiers transféré sur votre Google Drive.

Les fichiers SPC, tels qu'ils ont été extraits du SNES (dans son format d'origine) étaient censés être en boucle pour toujours. En tant que tels, quand ils sont joués (ou convertis dans ce cas), ils vont également boucler pour toujours.

Il faut donc passer manuellement la longueur (et éventuellement le décalage) à ffmpeg. Heureusement, le programme est livré avec un petit argument en ligne de commande appelé -t <time>. En utilisant cela, nous pouvons spécifier combien d’audio nous voulons convertir.

De même, si le fichier a un décalage, nous pouvons utiliser l'argument -ss <time> pour spécifier à quelle distance du début nous voulons découper.

Par conséquent, en supposant un fichier de 45 secondes avec un décalage de 5 secondes, la commande à exécuter est la suivante:

ffmpeg -i night1.spc -t 00:00:45 -ss 00:00:05 -acodec pcm_u8 -ar 44100 night1.wav
4
Kaz Wolfe