2014/07/02

[JavaScript]Web Audio APIで音を鳴らす

Safari Developer Libraryを読んでいると、どうやらaudioタグ意外でも音を再生させることができるようだ。

Web Audio APIと呼ばれているらしくこれを使って再生する方法を調べてみた。

まず上のリンク先では、音声データをajaxを使って取得していた。

self.addEventListener('message', function(e) {
  request = new XMLHttpRequest();
  request.open('GET', './hoge.mp3', true);
  request.responseType = 'arraybuffer';
  request.addEventListener('load', function(event){
    var t = event.target;
    self.postMessage({audiodata:t.response});
  }, false);
  request.send();
}, false);
上の例では、web worker上で、音声を取得している。
jQuery(function($){
  var audioContext = new webkitAudioContext();

  var worker = new Worker('./task.js');
  worker.postMessage();

  worker.addEventListener('message', function(e) {
    audio = audioContext.createBufferSource();
    audio.buffer = audioContext.createBuffer(e.data.audiodata, false);
    audio.connect(audioContext.destination);
    audio.noteOn(0);
    audio.noteOff(0);
  });
});
web workerで取得した音声データをnoteOnで再生、noteOffで停止している。

これ、問題は、一度、noteOffしてしまうと、noteOnをしても再生されないばかりか、エラーになっちゃう。
なので、毎回、audioContext.createBufferSource()を呼ばないといけないみたいなんだけど、これ、毎回、毎回、作っていたらメモリー大丈夫かなと思ってしまう。

そこは、組み方次第で工夫できるのかなと。

0 コメント:

コメントを投稿