Google Chrome上で動く(Firefoxでは動かない)簡単なWebアプリを作ってます。

FileAPIで取得したオーディオファイル(wav, m4aなど)の中身を渡して、再生するplaySoundという関数があるのですが、たまに再生できないm4a音源があります。

コードは以下のような感じです。(余計な処理をのぞいたもの)

window.AudioContext = window.AudioContext || window.webkitAudioContext;
var context = new window.AudioContext();
var source;
function playSound(arraybuffer) {
    context.decodeAudioData(arraybuffer, function (buf) {
        this.source = context.createBufferSource();
        this.source.connect(context.destination);
        this.source.buffer = buf;
        this.source.start(0);
    });
}

// 関数の呼び出し部
function playFile(file) {
    var freader = new FileReader();
    freader.onload = function (e) {
        playSound(e.target.result);
    };
    freader.readAsArrayBuffer(file);
}

m4pが再生できないのであればDRMのせいだろうと思うのですが、m4aで再生できない音源があるのはなぜでしょうか。

コードの問題なのか、音源の問題なのか(iTunes上で再生できます。別のアカウントが管理するMac上でも再生できます)、何か良い解決案があればお願いします。

尚、再生できない音源についてですが

  • ファイル名は半角スペースあり英数字(半角スペースを消しても改善なし)
  • サイズは約25MB
  • 長さは約3分
  • 925kbps(?!)

です。