理由は分からんがContent-Lengthが必要のようだ。
↓を追加したら最初のコードで問題無く聴けたよ。
header("Content-Length: ".filesize('hoge.mp3'));

しかしまあ>>513のコードはなんか気味悪いな。
改行しないfile関数があってもよさそうだね・・。