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