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 コメント:
コメントを投稿