SPC para linha de comando WAV

4

Por exemplo, esses tipos de arquivos .SPC: pasta aleatória SPC e WAV

Eu não quero trazer uma janela em primeiro plano, apenas um processo invisível que irá converter um SPC para um WAV.

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

Estou usando isso em um aplicativo Java de linha de comando, para que uma solução Java seja apreciada, se possível. (Eu posso usar ProcessBuilder para executar o executável se não.)

    
por TsundereBug 23.03.2017 / 22:56

1 resposta

4

Que conveniente! O FFMPEG pode ler e converter arquivos SPC!

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

Agora, este comando irá converter o seu arquivo de forma bem limpa, e irá cuspir um bom arquivo .wav (não se esqueça de substituir night1.spc e night1.wav com o que você quiser que os nomes dos arquivos sejam).

Infelizmente, isso não encerra a história nem um pouco. Depois de executar o comando acima por um tempo, recebi o seguinte resultado:

-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

Isso não pode estar certo ... vamos abrir o arquivo no Audacity e ver o que está acontecendo:

Em suma, os arquivos SPC não possuem comprimento definido neles. Embora haja uma menção ao comprimento na especificação , ela parece ser ignorada com frequência e, na verdade, é ignorados nos arquivos enviados para o seu Google Drive.

Os arquivos SPC, conforme copiados do SNES (em seu formato original), foram feitos para praticamente todos os tipos de arquivos. Assim, quando eles são reproduzidos (ou convertidos neste caso), eles também vão fazer loop para sempre.

Portanto, precisamos passar manualmente o comprimento (e possivelmente compensar) para ffmpeg . Felizmente, o programa vem com um pequeno argumento de linha de comando chamado -t <time> . Usando isso, podemos especificar quanto áudio queremos converter.

Da mesma forma, se o arquivo tiver um deslocamento, podemos usar o argumento -ss <time> para especificar o quão longe do começo queremos recortar.

Portanto, assumindo um arquivo de 45 segundos com um deslocamento de 5 segundos, o comando que precisamos executar é:

ffmpeg -i night1.spc -t 00:00:45 -ss 00:00:05 -acodec pcm_u8 -ar 44100 night1.wav
    
por Kaz Wolfe 28.03.2017 / 11:31