latest log

酩酊状態で書いたエンジニアポエムです。酩酊状態で読んでください。

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 と、残された寿命について考えてみる ので、色々と調べてる最中です。