electron 0.33.7 における Web Audio APIの不具合について

公開:2015-10-12 06:47
更新:2017-11-15 21:58
カテゴリ:electron,javascript,html5

electron 0.33.7におけるWeb Audio APIの不具合をまとめておこう。 Qiitaに書こうかなと思ったけどTipsじゃないし、一過性のものだと思うからね。

AudioContext.decodeAudioData()はopusをサポートしない。

audioタグではopusファイルはサポートされているにも関わらず、AudioContext.decodeAudioData()ではエラーとなる。またエラーの際に引数として渡されるオブジェクトはnullである。

このエラーはelectronというよりは、chromiumの不具合らしい。

https://code.google.com/p/chromium/issues/detail?id=482934

上記を読むと内臓のffmpegがopusをサポートしていないようなことが書いてある。またaudioタグとはデコードのされ方が違うようなことも。 まだクローズしてないから、フィックスされるのはまだ先なのかな。。

今のところ別フォーマットのファイルで再生するしかないようだ。

AudioBufferSourceNodeは明示的にstop()メソッドを呼ばないとonendedイベントを発火しない。

規格上はAudioBufferSourceNodeloop属性がtrue以外のときはonendedイベントを発火するはずだが、なぜか発火しない。なので、下記のようなコードを書く必要がある。

// 不具合対策
setTimeout(()=>{
    source.stop(0);
},((source.buffer.duration / source.playbackRate.value) * 1000));

source.onended = function(e)
{
    console.log('end');
    end = true;
}

これもIssueとして挙がっている。これもまたChromiumの不具合であった。

https://code.google.com/p/chromium/issues/detail?id=484176

上記2つのエラーはFirefoxでは起こらない。たしか Web Audio APIはGoogle起案のはずだが。。

Web Audio APIははやく勧告になってほしいね。

Web Audio APIのスケジュールってどうなっているんだろうね。はやくWeb Audio APIが勧告となって、規格を固定してもらいたいところだ。Editor's Draftではまだ規格の内容に揺れがあるようなのでまだまだ先のことかもしれない。規格が安定しないと実装も固まらないからね。やっぱり対応は消極的になってしまうよね。上記2つの不具合の対応が遅いのも。規格が固まらないことによるせいかもしれない。

Web Audio APIはモジュラー構造を採用していてとても面白いAPIなのだけれども、中途半端な気もしないでもない。高レベルと低レベルの中間のような。Audio Data APIのような低レベルのAPIをまずしっかり作って、それを補うためのAPIとして別に切り出したほうがいいような気もする。実際JSで低レベルのAPIだけで音声処理を行うのはちょっときついし、ネイティブサポートは必要だからWeb Audio APIのようなものは必要だけれどもね。

個人的にはVSTをノードとして取り扱えるようにしてほしいけど、それは無理だろうね。ベンダーの規格をそのまま採用することはないだろうからね。