JSFiddle - React, Tailwind, and code Playground

Seismic web audio in stereo using horizontal channels from the IRIS API

by nathansnider

HTML

<script src="http://www.html5rocks.com/en/tutorials/webaudio/intro/js/buffer-loader.js"></script>
<input type="button" id="playButton" value="Play">

JavaScript

//web audio BufferLoader for seismic stereo

var network = 'IU',
  station = 'LCO',
  location = '10',
  channel = 'HH',
  ch1 = '1',
  ch2 = '2',
  starttime = '2015-09-16T22:50:00',
  endtime = '2015-09-17T00:50:00';

var context= new AudioContext();
var bufferLoader;

window.onload = init();
window.AudioContext = window.AudioContext || window.webkitAudioContext;

function init() {
  // Fix up prefixing
  bufferLoader = new BufferLoader(
    context, [
      'http://service.iris.edu/irisws/timeseries/1/query?net=' + network + '&sta=' + station + '&loc=' + location + '&cha=' + channel + ch1 + '&starttime=' + starttime + '&endtime=' + endtime + '&output=audio&audiosamplerate=44100',
      'http://service.iris.edu/irisws/timeseries/1/query?net=' + network + '&sta=' + station + '&loc=' + location + '&cha=' + channel + ch2 + '&starttime=' + starttime + '&endtime=' + endtime + '&output=audio&audiosamplerate=44100'
    ],
    playStereoBuffer
  );

  bufferLoader.load();
}

function playStereoBuffer(bufferList) {
  // create two buffer sources, one for each channel
  var source1 = context.createBufferSource();
  var source2 = context.createBufferSource();
  source1.buffer = bufferList[0];
  source2.buffer = bufferList[1];
  
  //merge channels into stereo for playback
  var merger = context.createChannelMerger(2);
  source1.connect(merger, 0, 0);
  source2.connect(merger, 0, 1);
  merger.connect(context.destination);
  
  //play the buffers
  source1.start(0);
  source2.start(0);
}

document.getElementById("playButton").addEventListener("click", function() {
  playStereoBuffer(bufferLoader.bufferList);
});