Parece que você está com 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 "$ ()", apenas use "* .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, esse comando criará vários arquivos WAV com uma extensão ".mp3". Adicionando "-s .mp3" ao comando diz ao basename para retirar a extensão, e então colocar ".wav" no final adiciona a extensão correta.
Coloque tudo junto e você tem isso:
for i in *.mp3
do
sox "$i" "waves/$(basename -s .mp3 "$i").wav"
done