text: /**
   * jMID.Util.min.js v0.2
   *
   * A javascript library for reading, manipulating, writing, and timing MIDI files
   * @author Steven Sojka - Tuesday, February 05, 2013
   *
   * MIT Licensed
   */
  var jMID=function(e){var f=Array.prototype;e.Util={isObject:function(b){return b===Object(b)},asciiToHex:function(b){for(var a="",c=0,d=b.length;c<d;c++)a+=b.charCodeAt(c).toString(16);return a},hexToAscii:function(b){
  return a},stringToBytes:function(b,a){if(a)for(;b.length/2<a;)b="0"+b;for(var c=[],d=b.length-1;0<=d;d-=2)c.unshift(parseInt(0===d?b[d]:b[d-1]+b[d],16));return c},writeVarInt:function(b){for(var a=b&127;b>>=7;)a<<=8,a|=b&127|128;for(b=[];;)if(b.push(a&255),a&128)a>>=8;else break;return b},getType:function(b){var a=e.SubEventTypes;switch(b){case "sequenceNumber":return a.SEQUENCER_NUMBER;case "text":return a.TEXT;case "copyrightNotice":return a.COPYRIGHT_NOTICE;case "trackName":return a.TRACK_NAME;
  case "instrumentName":return a.INSTRUMENT_NAME;case "lyrics":return a.LYRICS;case "marker":return a.MARKER;case "cuePoint":return a.CUE_POINT;case "midiChannelPrefix":return a.MIDI_CHANNEL_PREFIX;case "endOfTrack":return a.END_OF_TRACK;case "setTempo":return a.SET_TEMPO;case "smpteOffset":return a.SMPTE_OFFSET;case "timeSignature":return a.TIME_SIGNATURE;case "sequencerSpecific":return a.SEQUENCER_SPECIFIC;case "noteOff":return a.NOTE_OFF;case "noteOn":return a.NOTE_ON;case "noteAfterTouch":return a.NOTE_AFTER_TOUCH;
  case "controller":return a.CONTROLLER;case "programChange":return a.PROGRAM_CHANGE;case "channelAfterTouch":return a.CHANNEL_AFTER_TOUCH;case "pitchBend":return a.PITCH_BEND}},forAllEvents:function(b,a){var c=this,d=f.slice.call(arguments);d.splice(0,2);this.forEachTrack(b,function(b,e){c.forEachEvent.apply(c,[b,a,e].concat(d))})},forAllNotes:function(b,a){var c=this,d=f.slice.call(arguments);d.splice(0,2);this.forEachTrack(b,function(b,e){c.forEachNote.apply(c,[b,a,e].concat(d))})},forEachTrack:function(b,
  a){var c=f.slice.call(arguments);c.splice(0,2);for(var d=0,e=b.length;d<e;d++)a.apply(this,[b[d],d].concat(c))},forEachNote:function(b,a){var c=f.slice.call(arguments);c.splice(0,2);for(var d=0,e=b.notes.length;d<e;d++)a.apply(this,[b.notes[d],d].concat(c))},forEachEvent:function(b,a){var c=f.slice.call(arguments);c.splice(0,2);for(var d=0,e=b.events.length;d<e;d++)a.apply(this,[b.events[d],d].concat(c))},inRange:function(b,a,c){return b>=a&&b<=c}};for(var h="Arguments Function String Number Date RegExp".split(" "),
  g=h.length-1;0<=g;g--)(function(b){e.Util["is"+b]=function(a){return toString.call(a)=="[object "+b+"]"}})(h[g]);return e}(jMID||{});
  