Web Audio APIを利用していて、再生できないm4a音源がある

投稿者: Anonymous

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(?!)

です。

解決

信頼度が足りずコメントを書けないのでこちらに書かせて頂きます。

ビットレートから察するに、もしかしてAACではなく可逆圧縮のApple Losslessのファイルではないでしょうか? Apple Losslessも拡張子m4aで保存されます。

iTunesで再生できるのであれば、iTunes上でファイルのプロパティを開けば「ファイル」タブでコーデックを確認することができます。

もしAACでないのであれば、そもそもChromeでは再生できないのではないでしょうか。

回答者: Anonymous

Leave a Reply

Your email address will not be published. Required fields are marked *