para um único .mp3, posso convertê-lo em wav usando
sox ./input/filename.mp3 ./output/filename.wav
Eu tentei:
#!/bin/bash
for i in $(ls *mp3)
do
sox -t wav $i waves/$(basename $i)
done
Mas dá o seguinte erro:
sox FAIL formats: can't open input file `filename.mp3': WAVE: RIFF header not found
Como eu executaria essa conversão sox em todos os arquivos mp3 na pasta de entrada e salvaria os wavs gerados na pasta de saída?
PS: não sei porque mostra o arquivo entre aspas invertidas (`) e apóstrofo'
`nome do arquivo.mp3'
Joguei todos os mp3 e eles funcionam perfeitamente.
Parece que você está tendo problemas com espaços no nome do arquivo. Se você tiver um arquivo chamado "My Greatest Hits.mp3", seu comando tentará converter os três arquivos diferentes chamados "My", "Greatest" e "Hits.mp3". Em vez de usar a sintaxe "$()", basta usar "*.mp3" na linha for e certifique-se de citar os nomes dos arquivos no comando sox.
Além disso, o comando basename não remove a extensão do arquivo, apenas os nomes das pastas. Portanto, este comando criará vários arquivos WAV com uma extensão ".mp3". Adicionar "-s .mp3" ao comando diz ao basename para remover a extensão e, em seguida, colocar ".wav" no final adiciona a extensão correta.
Junta tudo e tens isto:
Primeiro, não use
ls
assim, na verdade não faz nada, já que é o shell que realmente gera os nomes de arquivo no glob de*mp3
qualquer maneira. Além disso, ele quebra se algum de seus arquivos tiver espaços em branco em seus nomes.Quanto ao erro, acho que
sox
aqui tenta interpretar o arquivo MP3 como wav, já que deu-t wav
flag. Acho que você poderia passar sem ele, como fez no caso de arquivo único. Você só precisa alterar a extensão no nome do arquivo de saída também.basename
pode remover o sufixo também, se você disser o que remover.(O crase apóstrofo é um costume antigo do
`quoting'
nome do arquivo. O crase deve se parecer com as aspas do lado esquerdo, aquela que se parece com uma vírgula rotacionada ( veja exemplos na Wikipedia ). Mas tecnicamente, está errado, e parece horrível na maioria das fontes atuais.)Claramente, o sox está dizendo que não pode processar o arquivo no formato mp3. Eu estaria muito interessado em obter a saída em seu sistema para:
sox ./input/filename.mp3 ./output/filename.wav
Porque parece que seu sox não pode processar mp3 em geral. Sim, sox pode ser recompilado para lidar com mp3, mas sua mensagem de erro indica que ele está lendo o arquivo, mas está esperando um wav:
WAVE: RIFF header not found
.Os outros comentários sobre problemas com espaços ainda se aplicam em geral, mas o arquivo
filename.mp3
não possui espaços; é um mp3.