iOS Wakelock w/ Web Audio

by juberti

HTML

<input type="button" value="Enable Wakelock">
<input type="button" value="Play">
<canvas id="foo"></canvas>
<video id="bar" playsinline></video>

JavaScript

var button = document.querySelectorAll('input')[0];
var button2 = document.querySelectorAll('input')[1];
var video = document.querySelector('video');
var ms = null;

createStream = () => {
  var ctor = (window.AudioContext || window.webkitAudioContext);
  var audioContext = new ctor;
  audioContext.resume();
  var oscillator = audioContext.createOscillator();
  oscillator.type = 'sine';
  oscillator.frequency.value = 440; // value in hertz
  var gain = audioContext.createGain();
  gain.gain.setValueAtTime(0.01, audioContext.currentTime);
  var dest = audioContext.createMediaStreamDestination();
  oscillator.connect(gain); 
  gain.connect(dest);
  oscillator.start(0);
  return dest.stream;
}

video.addEventListener('pause', (event) => {
  console.log('onpause');
});

video.addEventListener('play', (event) => {
  console.log('onplay');
});

button.onclick = () => {
  if (!video.srcObject) {
    button.value = "Disable Wakelock";
    ms = createStream();
    video.srcObject = ms;
    video.play();
  } else {
    button.value = "Enable Wakelock";
    ms.getTracks()[0].stop();
    video.pause();
    video.srcObject = ms = null;
  }
}

button2.onclick = () => {
  video.play();
}