Talvez o xmp fique confuso porque o stdin não é um tty? Você poderia tentar:
xmp $f -d wav -o - </dev/null | ffmpeg -i - -acodec libmp3lame -ab 320k "$f.mp3"
Além disso, imagino que a ordem dos argumentos precisa ser
xmp -d wav -o - "$f" </dev/null | ffmpeg -i - -acodec libmp3lame -ab 320k "$f.mp3"
No Ubuntu 14.04 com xmp 4.0.6 e avconv ao invés de ffmpeg, a ordem precisa estar com a opção -d wav
mais tarde ou o raw será usado
xmp -o - -d wav "$f" | avconv -i - -b 320k "$f.mp3"