WMAudioUtil.js (getAutoPlayFunction) 作りました
従来から iOS にはブラウザ上でのサウンド再生に制限があり、
などをご覧いただけると分かるのですが、
(ε・◇・)з o O ( はっ!? なんだか毎回似たようなコード書いてるし!
と、やっと気づいたので、WebModule にしました。
タッチ(クリック)イベントハンドラの中で一回呼んでもらえれば、あとは楽ができます。
https://github.com/uupaa/WMAudioUtil.js/wiki/WMAudioUtil
// demo
var ctx = window.AudioContext ? new window.AudioContext()
: window.webkitAudioContext ? new window.webkitAudioContext() : null;
var autoPlay = WMAudioUtil.getAutoPlayFunction(ctx);
var buffer = {}; // decodedBuffer. { url: buffer, ... }
var source = {}; // AudioBufferSourceNode. { url: node ... }
function _loadAndAutoPlay(url, play) {
var xhr = new XMLHttpRequest();
xhr.onload = function() {
ctx.decodeAudioData(xhr.response, function(buffer) {
buffer[url] = buffer;
source[url] = ctx.createBufferSource();
source[url].buffer = buffer;
source[url].connect(ctx.destination);
if (play) {
source[url].start(0);
}
});
};
xhr.responseType = "arraybuffer";
xhr.open("GET", url);
xhr.send();
}
_loadAndAutoPlay("demo.m4a", true); // Auto play, supports iOS Devices.
<input type="button" value="enable auto play" onclick="autoPlay()"></input>
あ、そうそう iOS 8 は <audio> の実装が iOS 7 と違ってる気配があるAudio と WebAudio と、残された寿命について考えてみる ので、色々と調べてる最中です。