{"version":3,"sources":["jsdelivr-header.js","/npm/jzz@1.9.2/javascript/JZZ.js"],"names":[],"mappings":"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","file":"/npm/jzz@1.9.2/javascript/JZZ.js","sourceRoot":"","sourcesContent":["/**\n * Minified by jsDelivr using Terser v5.37.0.\n * Original file: /npm/jzz@1.9.2/javascript/JZZ.js\n *\n * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files\n */\n","(function(global, factory) {\r\n  /* istanbul ignore next */\r\n  if (typeof exports === 'object' && typeof module !== 'undefined') {\r\n    module.exports = factory();\r\n  }\r\n  else if (typeof define === 'function' && define.amd) {\r\n    define('JZZ', [], factory);\r\n  }\r\n  else {\r\n    if (!global) global = window;\r\n    if (global.JZZ && global.JZZ.MIDI) return;\r\n    global.JZZ = factory();\r\n  }\r\n})(this, function() {\r\n\r\n  var _scope = typeof window === 'undefined' ? global : window;\r\n  var _version = '1.9.2';\r\n  var i, j, k, m, n;\r\n\r\n  /* istanbul ignore next */\r\n  var _time = Date.now || function () { return new Date().getTime(); };\r\n  var _startTime = _time();\r\n  /* istanbul ignore next */\r\n  var _now = typeof performance != 'undefined' && performance.now ?\r\n    function() { return performance.now(); } : function() { return _time() - _startTime; };\r\n  var _schedule = function(f) {\r\n    setTimeout(f, 0);\r\n  };\r\n  function _nop() {}\r\n  function _func(f) { return typeof f == 'function'; }\r\n\r\n  // _R: common root for all async objects\r\n  function _R() {\r\n    this._orig = this;\r\n    this._ready = false;\r\n    this._queue = [];\r\n    this._log = [];\r\n  }\r\n  _R.prototype._exec = function() {\r\n    while (this._ready && this._queue.length) {\r\n      var x = this._queue.shift();\r\n      x[0].apply(this, x[1]);\r\n    }\r\n  };\r\n  _R.prototype._push = function(func, arg) { this._queue.push([func, arg]); _R.prototype._exec.apply(this); };\r\n  _R.prototype._slip = function(func, arg) { this._queue.unshift([func, arg]); };\r\n  _R.prototype._pause = function() { this._ready = false; };\r\n  _R.prototype._resume = function() { this._ready = true; _R.prototype._exec.apply(this); };\r\n  _R.prototype._break = function(err) { this._orig._bad = true; this._orig._log.push(err || 'Unknown JZZ error'); };\r\n  _R.prototype._repair = function() { this._orig._bad = false; };\r\n  _R.prototype._crash = function(err) { this._break(err); this._resume(); };\r\n  _R.prototype._err = function() { return this._log[this._log.length - 1]; };\r\n  _R.prototype.log = function() { return _clone(this._log); };\r\n  _R.prototype._dup = function() {\r\n    var F = function() {};\r\n    F.prototype = this._orig;\r\n    var ret = new F();\r\n    ret._ready = false;\r\n    ret._queue = [];\r\n    return ret;\r\n  };\r\n  _R.prototype._image = function() { return this._dup(); };\r\n  _R.prototype._thenable = function() {\r\n    if (this.then) return this;\r\n    var self = this;\r\n    var F = function() {}; F.prototype = self;\r\n    var ret = new F();\r\n    ret.then = function(good, bad) { self._push(_then, [good, bad]); return this; };\r\n    return ret;\r\n  };\r\n  function _then(good, bad) {\r\n    if (this._bad) {\r\n      if (_func(bad)) bad.apply(this, [new Error(this._err())]);\r\n    }\r\n    else {\r\n      if (_func(good)) good.apply(this, [this]);\r\n    }\r\n  }\r\n  function _wait(obj, delay) {\r\n    if (this._bad) obj._crash(this._err());\r\n    else setTimeout(function() { obj._resume(); }, delay);\r\n  }\r\n  _R.prototype.wait = function(delay) {\r\n    if (!delay) return this;\r\n    var ret = this._image();\r\n    this._push(_wait, [ret, delay]);\r\n    return ret._thenable();\r\n  };\r\n  function _kick(obj) { if (this._bad) obj._break(this._err()); obj._resume(); }\r\n  function _rechain(self, obj, name) {\r\n    self[name] = function() {\r\n      var arg = arguments;\r\n      var ret = obj._image();\r\n      this._push(_kick, [ret]);\r\n      return ret[name].apply(ret, arg);\r\n    };\r\n  }\r\n  function _and(q) {\r\n    if (!this._bad) {\r\n      if (_func(q)) q.apply(this); else console.log(q);\r\n    }\r\n  }\r\n  _R.prototype.and = function(func) { this._push(_and, [func]); return this._thenable(); };\r\n  function _or(q) {\r\n    if (this._bad) {\r\n      if (_func(q)) q.apply(this); else console.log(q);\r\n    }\r\n  }\r\n  _R.prototype.or = function(func) { this._push(_or, [func]); return this._thenable(); };\r\n\r\n  _R.prototype._info = {};\r\n  _R.prototype.info = function() {\r\n    var info = _clone(this._orig._info);\r\n    if (typeof info.engine == 'undefined') info.engine = 'none';\r\n    if (typeof info.sysex == 'undefined') info.sysex = true;\r\n    return info;\r\n  };\r\n  _R.prototype.name = function() { return this.info().name; };\r\n\r\n  function _close(obj) {\r\n    if (this._bad) obj._crash(this._err());\r\n    else {\r\n      this._break('Closed');\r\n      obj._resume();\r\n    }\r\n  }\r\n  _R.prototype.close = function() {\r\n    var ret = new _R();\r\n    if (this._close) this._push(this._close, []);\r\n    this._push(_close, [ret]);\r\n    return ret._thenable();\r\n  };\r\n\r\n  function _tryAny(arr) {\r\n    if (!arr.length) {\r\n      this._break();\r\n      return;\r\n    }\r\n    var func = arr.shift();\r\n    if (arr.length) {\r\n      var self = this;\r\n      this._slip(_or, [ function() { _tryAny.apply(self, [arr]); } ]);\r\n    }\r\n    try {\r\n      this._repair();\r\n      func.apply(this);\r\n    }\r\n    catch (err) {\r\n      this._break(err.toString());\r\n    }\r\n  }\r\n\r\n  function _push(arr, obj) {\r\n    for (var i = 0; i < arr.length; i++) if (arr[i] === obj) return;\r\n    arr.push(obj);\r\n  }\r\n  function _pop(arr, obj) {\r\n    for (var i = 0; i < arr.length; i++) if (arr[i] === obj) {\r\n      arr.splice(i, 1);\r\n      return;\r\n    }\r\n  }\r\n\r\n  // _J: JZZ object\r\n  function _J() {\r\n    _R.apply(this);\r\n  }\r\n  _J.prototype = new _R();\r\n\r\n  function _for(x, f) {\r\n    for(var k in x) if (x.hasOwnProperty(k)) f.call(this, k);\r\n  }\r\n  function _clone(obj, key, val) {\r\n    if (typeof key == 'undefined') return _clone(obj, [], []);\r\n    if (obj instanceof Object) {\r\n      for (var i = 0; i < key.length; i++) if (key[i] === obj) return val[i];\r\n      var ret;\r\n      if (obj instanceof Array) ret = []; else ret = {};\r\n      key.push(obj); val.push(ret);\r\n      _for(obj, function(k) { ret[k] = _clone(obj[k], key, val); });\r\n      return ret;\r\n    }\r\n    return obj;\r\n  }\r\n  _J.prototype._info = { name: 'JZZ.js', ver: _version, version: _version, inputs: [], outputs: [] };\r\n\r\n  var _outs = [];\r\n  var _ins = [];\r\n  var _outsW = [];\r\n  var _insW = [];\r\n  var _outsM = {};\r\n  var _insM = {};\r\n\r\n  function _postRefresh() {\r\n    _jzz._info.engine = _engine._type;\r\n    _jzz._info.version = _engine._version;\r\n    _jzz._info.sysex = _engine._sysex;\r\n    _jzz._info.inputs = [];\r\n    _jzz._info.outputs = [];\r\n    _outs = [];\r\n    _ins = [];\r\n    _engine._allOuts = {};\r\n    _engine._allIns = {};\r\n    var i, x;\r\n    for (i = 0; i < _engine._outs.length; i++) {\r\n      x = _engine._outs[i];\r\n      if (_outsM[x.name]) continue;\r\n      x.engine = _engine;\r\n      _engine._allOuts[x.name] = x;\r\n      _jzz._info.outputs.push({\r\n        id: x.name,\r\n        name: x.name,\r\n        manufacturer: x.manufacturer,\r\n        version: x.version,\r\n        engine: _engine._type\r\n      });\r\n      _outs.push(x);\r\n    }\r\n    for (i = 0; i < _virtual._outs.length; i++) {\r\n      x = _virtual._outs[i];\r\n      if (_outsM[x.name]) continue;\r\n      _jzz._info.outputs.push({\r\n        id: x.name,\r\n        name: x.name,\r\n        manufacturer: x.manufacturer,\r\n        version: x.version,\r\n        engine: x.type\r\n      });\r\n      _outs.push(x);\r\n    }\r\n    for (i = 0; i < _engine._ins.length; i++) {\r\n      x = _engine._ins[i];\r\n      if (_insM[x.name]) continue;\r\n      x.engine = _engine;\r\n      _engine._allIns[x.name] = x;\r\n      _jzz._info.inputs.push({\r\n        id: x.name,\r\n        name: x.name,\r\n        manufacturer: x.manufacturer,\r\n        version: x.version,\r\n        engine: _engine._type\r\n      });\r\n      _ins.push(x);\r\n    }\r\n    for (i = 0; i < _virtual._ins.length; i++) {\r\n      x = _virtual._ins[i];\r\n      if (_insM[x.name]) continue;\r\n      _jzz._info.inputs.push({\r\n        id: x.name,\r\n        name: x.name,\r\n        manufacturer: x.manufacturer,\r\n        version: x.version,\r\n        engine: x.type\r\n      });\r\n      _ins.push(x);\r\n    }\r\n    if (_jzz._watcher && _jzz._watcher._handles.length) {\r\n      var diff = _diff(_insW, _outsW, _jzz._info.inputs, _jzz._info.outputs);\r\n       if (diff) {\r\n        for (j = 0; j < diff.inputs.removed.length; j++) {\r\n          x = _engine._inMap[diff.inputs.removed[j].name];\r\n          if (x) x._closeAll();\r\n        }\r\n        for (j = 0; j < diff.outputs.removed.length; j++) {\r\n          x = _engine._outMap[diff.outputs.removed[j].name];\r\n          if (x) x._closeAll();\r\n        }\r\n        _schedule(function() { _fireW(diff); });\r\n      }\r\n    }\r\n    _insW = _jzz._info.inputs;\r\n    _outsW = _jzz._info.outputs;\r\n  }\r\n  function _refresh() {\r\n    if (!this._bad) _engine._refresh(this);\r\n  }\r\n  _J.prototype.refresh = function() {\r\n    this._push(_refresh, []);\r\n    return this._thenable();\r\n  };\r\n\r\n  function _filterList(q, arr) {\r\n    var i, n;\r\n    if (_func(q)) q = q(arr);\r\n    if (!(q instanceof Array)) q = [q];\r\n    var before = [];\r\n    var after = [];\r\n    var etc = arr.slice();\r\n    var a = before;\r\n    for (i = 0; i < q.length; i++) {\r\n      if (typeof q[i] == 'undefined') a = after;\r\n      else if (q[i] instanceof RegExp) for (n = 0; n < etc.length; n++) {\r\n        if (q[i].test(etc[n].name)) {\r\n          a.push(etc[n]);\r\n          etc.splice(n, 1);\r\n          n--;\r\n        }\r\n      }\r\n      else {\r\n        for (n = 0; n < etc.length; n++) if (q[i] + '' === n + '' || q[i] === etc[n].name || (q[i] instanceof Object && q[i].name === etc[n].name)) {\r\n          a.push(etc[n]);\r\n          etc.splice(n, 1);\r\n          n--;\r\n        }\r\n      }\r\n    }\r\n    return a == before ? before : before.concat(etc).concat(after);\r\n  }\r\n\r\n  function _notFound(port, q) {\r\n    var msg;\r\n    if (q instanceof RegExp) msg = 'Port matching ' + q + ' not found';\r\n    else if (q instanceof Object || typeof q == 'undefined') msg = 'Port not found';\r\n    else msg = 'Port \"' + q + '\" not found';\r\n    port._crash(msg);\r\n  }\r\n  function _openMidiOut(port, arg) {\r\n    if (this._bad) port._crash(this._err());\r\n    else {\r\n      var arr = _filterList(arg, _outs);\r\n      if (!arr.length) { _notFound(port, arg); return; }\r\n      var pack = function(x) { return function() { x.engine._openOut(this, x.name); }; };\r\n      for (var i = 0; i < arr.length; i++) arr[i] = pack(arr[i]);\r\n      port._slip(_tryAny, [arr]);\r\n      port._resume();\r\n    }\r\n  }\r\n  _J.prototype.openMidiOut = function(arg) {\r\n    var port = new _M();\r\n    this._push(_refresh, []);\r\n    this._push(_openMidiOut, [port, arg]);\r\n    return port._thenable();\r\n  };\r\n  _J.prototype._openMidiOutNR = function(arg) {\r\n    var port = new _M();\r\n    this._push(_openMidiOut, [port, arg]);\r\n    return port._thenable();\r\n  };\r\n\r\n  function _openMidiIn(port, arg) {\r\n    if (this._bad) port._crash(this._err());\r\n    else {\r\n      var arr = _filterList(arg, _ins);\r\n      if (!arr.length) { _notFound(port, arg); return; }\r\n      var pack = function(x) { return function() { x.engine._openIn(this, x.name); }; };\r\n      for (var i = 0; i < arr.length; i++) arr[i] = pack(arr[i]);\r\n      port._slip(_tryAny, [arr]);\r\n      port._resume();\r\n    }\r\n  }\r\n  _J.prototype.openMidiIn = function(arg) {\r\n    var port = new _M();\r\n    this._push(_refresh, []);\r\n    this._push(_openMidiIn, [port, arg]);\r\n    return port._thenable();\r\n  };\r\n  _J.prototype._openMidiInNR = function(arg) {\r\n    var port = new _M();\r\n    this._push(_openMidiIn, [port, arg]);\r\n    return port._thenable();\r\n  };\r\n\r\n  function _onChange(watcher, arg) {\r\n    if (this._bad) watcher._crash();\r\n    else {\r\n      watcher._slip(_connectW, [arg]);\r\n      watcher._resume();\r\n    }\r\n  }\r\n  _J.prototype.onChange = function(arg) {\r\n    if (!this._orig._watcher) this._orig._watcher = new _W();\r\n    var watcher = this._orig._watcher._image();\r\n    this._push(_onChange, [watcher, arg]);\r\n    return watcher._thenable();\r\n  };\r\n\r\n  _J.prototype._close = function() {\r\n    _engine._close();\r\n    for (var i = 0; i < _plugged.length; i++) if (_plugged[i] && _plugged[i].close) _plugged[i].close();\r\n  };\r\n\r\n  // _M: MIDI-In/Out object\r\n  function _M() {\r\n    _R.apply(this);\r\n    this._handles = [];\r\n    this._outs = [];\r\n  }\r\n  _M.prototype = new _R();\r\n  _M.prototype._filter = function(msg) {\r\n    if (this._orig._mpe) {\r\n      var out;\r\n      var outs = 0;\r\n      if (this._handles && this._handles.length) {\r\n        outs = this._handles.length;\r\n        out = this._handles[0];\r\n      }\r\n      if (this._outs && this._outs.length) {\r\n        outs = this._outs.length;\r\n        out = this._outs[0];\r\n      }\r\n      if (outs == 1 && !out._mpe) {\r\n        msg = this._orig._mpe.filter(msg);\r\n      }\r\n    }\r\n    return msg;\r\n  };\r\n  _M.prototype._receive = function(msg) { this._emit(this._filter(msg)); };\r\n  function _receive(msg) { if (!this._bad) this._receive(msg); }\r\n  _M.prototype.send = function() {\r\n    this._push(_receive, [_midi.apply(null, arguments)]);\r\n    return this._thenable();\r\n  };\r\n  _M.prototype.note = function(c, n, v, t) {\r\n    this.noteOn(c, n, v);\r\n    if (typeof this._ch == 'undefined' && typeof this._master == 'undefined') {\r\n      if (t > 0) this.wait(t).noteOff(c, n);\r\n    }\r\n    else {\r\n      if (v > 0) this.wait(v).noteOff(c);\r\n    }\r\n    return this._thenable();\r\n  };\r\n  function _midi(msg) { return msg.isMidi2 ? new UMP(msg) : MIDI.apply(null, arguments); }\r\n  _M.prototype._emit = function(msg) {\r\n    var i, m;\r\n    for (i = 0; i < this._handles.length; i++) {\r\n      m = _midi(msg);\r\n      this._handles[i].apply(this, [m._stamp(this)]);\r\n    }\r\n    for (i = 0; i < this._outs.length; i++) {\r\n      m = _midi(msg);\r\n      if (!m._stamped(this._outs[i])) this._outs[i].send(m._stamp(this));\r\n    }\r\n  };\r\n  function _emit(msg) { this._emit(msg); }\r\n  _M.prototype.emit = function(msg) {\r\n    this._push(_emit, [msg]);\r\n    return this._thenable();\r\n  };\r\n  function _connect(arg) {\r\n    if (_func(arg)) _push(this._orig._handles, arg);\r\n    else _push(this._orig._outs, arg);\r\n  }\r\n  function _disconnect(arg) {\r\n    if (typeof arg == 'undefined') {\r\n      this._orig._handles = [];\r\n      this._orig._outs = [];\r\n    }\r\n    else if (_func(arg)) _pop(this._orig._handles, arg);\r\n    else _pop(this._orig._outs, arg);\r\n  }\r\n  _M.prototype.connect = function(arg) {\r\n    this._push(_connect, [arg]);\r\n    return this._thenable();\r\n  };\r\n  _M.prototype.disconnect = function(arg) {\r\n    this._push(_disconnect, [arg]);\r\n    return this._thenable();\r\n  };\r\n  _M.prototype.connected = function() {\r\n    return this._orig._handles.length + this._orig._outs.length;\r\n  };\r\n  _M.prototype._image = function() {\r\n    var dup = this._dup();\r\n    dup._gr = this._gr;\r\n    dup._ch = this._ch;\r\n    dup._sxid = this._sxid;\r\n    dup._master = this._master;\r\n    dup._band = this._band;\r\n    return dup;\r\n  };\r\n  _M.prototype._sxid = 0x7f;\r\n\r\n  _M.prototype.sxId = function(id) {\r\n    if (typeof id == 'undefined') id = _M.prototype._sxid;\r\n    if (id == this._sxid) return this._thenable();\r\n    id = _7b(id);\r\n    var img = this._image();\r\n    img._sxid = id;\r\n    this._push(_kick, [img]);\r\n    return img._thenable();\r\n  };\r\n  _M.prototype.ch = function(c) {\r\n    if (c == this._ch || typeof c == 'undefined' && typeof this._ch == 'undefined') return this._thenable();\r\n    var img = this._image();\r\n    if (typeof c != 'undefined') c = _ch(c);\r\n    img._ch = c;\r\n    img._master = undefined;\r\n    img._band = undefined;\r\n    this._push(_kick, [img]);\r\n    return img._thenable();\r\n  };\r\n  _M.prototype.MIDI1 = function() {\r\n    var img = this._image();\r\n    img._ch = undefined;\r\n    img._sxid = _M.prototype._sxid;\r\n    img._master = undefined;\r\n    img._band = undefined;\r\n    this._push(_kick, [img]);\r\n    return img._thenable();\r\n  };\r\n  _M.prototype.MIDI2 = function() {\r\n    var img = this._image();\r\n    img._ch = undefined;\r\n    img._sxid = _M.prototype._sxid;\r\n    img._master = undefined;\r\n    img._band = undefined;\r\n    var m2 = new _M2(img);\r\n    this._push(_kick, [m2]);\r\n    return m2._thenable();\r\n  };\r\n\r\n  function _mpe(m, n) {\r\n    if (!this._orig._mpe) this._orig._mpe = new MPE();\r\n    this._orig._mpe.setup(m, n);\r\n  }\r\n  _M.prototype.mpe = function(m, n) {\r\n    if (m == this._master && n == this._band || typeof m == 'undefined' && typeof this._master == 'undefined') return this._thenable();\r\n    if (typeof m != 'undefined') MPE.validate(m, n);\r\n    if (!n) return this.ch(m);\r\n    var img = this._image();\r\n    img._ch = undefined;\r\n    img._master = m;\r\n    img._band = n;\r\n    this._push(_mpe, [m, n]);\r\n    this._push(_kick, [img]);\r\n    return img._thenable();\r\n  };\r\n  function _validateChannel(c) {\r\n    if (c != parseInt(c) || c < 0 || c > 15)\r\n      throw RangeError('Bad channel value (must not be less than 0 or more than 15): ' + c);\r\n  }\r\n\r\n  // _M2: MIDI 2.0 adaptor\r\n  function _M2(sink) {\r\n    _R.apply(this);\r\n    this._sink = sink;\r\n  }\r\n  _M2.prototype = new _R();\r\n  _M2.prototype._sxid = _M.prototype._sxid;\r\n  _M2.prototype._receive = function(msg) { this._sink._receive(msg); };\r\n  function _midi2(msg) { return msg.isMidi && !msg.isMidi2 ? new MIDI(msg) : UMP.apply(null, arguments); }\r\n  _M2.prototype.send = function() {\r\n    this._push(_receive, [_midi2.apply(null, arguments)]);\r\n    return this._thenable();\r\n  };\r\n  _M2.prototype._image = _M.prototype._image;\r\n  _M2.prototype.connect = function(arg) {\r\n    this._sink.connect(arg);\r\n    this._push(_kick, [this._sink]);\r\n    return this._thenable();\r\n  };\r\n  _M2.prototype.disconnect = function(arg) {\r\n    this._sink.disconnect(arg);\r\n    this._push(_kick, [this._sink]);\r\n    return this._thenable();\r\n  };\r\n  _M2.prototype.connected = function() { return this._sink.connected(); };\r\n  _M2.prototype.sxId = _M.prototype.sxId;\r\n  _M2.prototype.ch = _M.prototype.ch;\r\n  _M2.prototype.gr = function(g) {\r\n    if (g == this._gr || typeof g == 'undefined' && typeof this._gr == 'undefined') return this._thenable();\r\n    var img = this._image();\r\n    if (typeof g != 'undefined') g = _7b(g);\r\n    img._gr = g;\r\n    this._push(_kick, [img]);\r\n    return img._thenable();\r\n  };\r\n  _M2.prototype.MIDI1 = function() {\r\n    var img = this._sink._image();\r\n    this._push(_kick, [img]);\r\n    return img._thenable();\r\n  };\r\n  _M2.prototype.MIDI2 = function() {\r\n    var img = this._image();\r\n    img._gr = undefined;\r\n    img._ch = undefined;\r\n    img._sxid = _M.prototype._sxid;\r\n    this._push(_kick, [img]);\r\n    return img._thenable();\r\n  };\r\n\r\n  // _W: Watcher object ~ MIDIAccess.onstatechange\r\n  function _W() {\r\n    _R.apply(this);\r\n    this._handles = [];\r\n    _rechain(this, _jzz, 'refresh');\r\n    _rechain(this, _jzz, 'openMidiOut');\r\n    _rechain(this, _jzz, 'openMidiIn');\r\n    _rechain(this, _jzz, 'onChange');\r\n    _rechain(this, _jzz, 'close');\r\n  }\r\n  _W.prototype = new _R();\r\n  function _connectW(arg) {\r\n    if (_func(arg)) {\r\n      if (!this._orig._handles.length) _engine._watch();\r\n      _push(this._orig._handles, arg);\r\n    }\r\n  }\r\n  function _disconnectW(arg) {\r\n    if (typeof arg == 'undefined') this._orig._handles = [];\r\n    else _pop(this._orig._handles, arg);\r\n    if (!this._orig._handles.length) _engine._unwatch();\r\n  }\r\n  _W.prototype.connect = function(arg) {\r\n    this._push(_connectW, [arg]);\r\n    return this._thenable();\r\n  };\r\n  _W.prototype.disconnect = function(arg) {\r\n    this._push(_disconnectW, [arg]);\r\n    return this._thenable();\r\n  };\r\n  function _changed(x0, y0, x1, y1) {\r\n    var i;\r\n    if (x0.length != x1.length || y0.length != y1.length) return true;\r\n    for (i = 0; i < x0.length; i++) if (x0[i].name != x1[i].name) return true;\r\n    for (i = 0; i < y0.length; i++) if (y0[i].name != y1[i].name) return true;\r\n    return false;\r\n  }\r\n  function _diff(x0, y0, x1, y1) {\r\n    if (!_changed(x0, y0, x1, y1)) return;\r\n    var ax = []; // added\r\n    var ay = [];\r\n    var rx = []; // removed\r\n    var ry = [];\r\n    var i;\r\n    var h = {};\r\n    for (i = 0; i < x0.length; i++) h[x0[i].name] = true;\r\n    for (i = 0; i < x1.length; i++) if (!h[x1[i].name]) ax.push(x1[i]);\r\n    h = {};\r\n    for (i = 0; i < x1.length; i++) h[x1[i].name] = true;\r\n    for (i = 0; i < x0.length; i++) if (!h[x0[i].name]) rx.push(x0[i]);\r\n    h = {};\r\n    for (i = 0; i < y0.length; i++) h[y0[i].name] = true;\r\n    for (i = 0; i < y1.length; i++) if (!h[y1[i].name]) ay.push(y1[i]);\r\n    h = {};\r\n    for (i = 0; i < y1.length; i++) h[y1[i].name] = true;\r\n    for (i = 0; i < y0.length; i++) if (!h[y0[i].name]) ry.push(y0[i]);\r\n    return { inputs: { added: ax, removed: rx }, outputs: { added: ay, removed: ry } };\r\n  }\r\n  function _fireW(arg) {\r\n    for (i = 0; i < _jzz._watcher._handles.length; i++) _jzz._watcher._handles[i].apply(_jzz, [arg]);\r\n  }\r\n\r\n  var _jzz;\r\n  var _engine = { _outs: [], _ins: [], _close: _nop };\r\n  var _virtual = { _outs: [], _ins: [] };\r\n  var _plugged = [];\r\n\r\n  // Node.js\r\n  function _tryNODE() {\r\n    if (typeof module != 'undefined' && module.exports) {\r\n      var jazzmidi = require('jazz-midi');\r\n      if (jazzmidi) {\r\n        _initNode(jazzmidi);\r\n        return;\r\n      }\r\n    }\r\n    this._break();\r\n  }\r\n  // Jazz-Plugin\r\n  function _tryJazzPlugin() {\r\n    var div = document.createElement('div');\r\n    div.style.visibility = 'hidden';\r\n    document.body.appendChild(div);\r\n    var obj = document.createElement('object');\r\n    obj.style.visibility = 'hidden';\r\n    obj.style.width = '0px'; obj.style.height = '0px';\r\n    obj.classid = 'CLSID:1ACE1618-1C7D-4561-AEE1-34842AA85E90';\r\n    obj.type = 'audio/x-jazz';\r\n    document.body.appendChild(obj);\r\n    /* istanbul ignore next */\r\n    if (obj.isJazz) {\r\n      _initJazzPlugin(obj);\r\n      return;\r\n    }\r\n    this._break();\r\n  }\r\n\r\n  // Web MIDI API\r\n  var _navigator;\r\n  var _requestMIDIAccess;\r\n  function _findMidiAccess() {\r\n    if (typeof navigator !== 'undefined' && navigator.requestMIDIAccess) {\r\n      _navigator = navigator;\r\n      _requestMIDIAccess = navigator.requestMIDIAccess;\r\n      try {\r\n        if (_requestMIDIAccess.toString().indexOf('JZZ(') != -1) _requestMIDIAccess = undefined;\r\n      }\r\n      catch (err) {}\r\n    }\r\n  }\r\n  function _tryWebMIDI() {\r\n    _findMidiAccess();\r\n    if (_requestMIDIAccess) {\r\n      var self = this;\r\n      var onGood = function(midi) {\r\n        _initWebMIDI(midi);\r\n        self._resume();\r\n      };\r\n      var onBad = function(msg) {\r\n        self._crash(msg);\r\n      };\r\n      var opt = {};\r\n      _requestMIDIAccess.call(_navigator, opt).then(onGood, onBad);\r\n      this._pause();\r\n      return;\r\n    }\r\n    this._break();\r\n  }\r\n  function _tryWebMIDIsysex() {\r\n    _findMidiAccess();\r\n    if (_requestMIDIAccess) {\r\n      var self = this;\r\n      var onGood = function(midi) {\r\n        _initWebMIDI(midi, true);\r\n        self._resume();\r\n      };\r\n      var onBad = function(msg) {\r\n        self._crash(msg);\r\n      };\r\n      var opt = { sysex:true };\r\n      _requestMIDIAccess.call(_navigator, opt).then(onGood, onBad);\r\n      this._pause();\r\n      return;\r\n    }\r\n    this._break();\r\n  }\r\n\r\n  // Web-extension\r\n  function _tryCRX() {\r\n    var self = this;\r\n    var inst;\r\n    var msg;\r\n    function eventHandle(evt) {\r\n      inst = true;\r\n      var a = evt.detail;\r\n      if (!a) {\r\n        if (!msg) msg = document.getElementById('jazz-midi-msg');\r\n        if (!msg) return;\r\n        try { a = JSON.parse(msg.innerText); } catch (err) {}\r\n        msg.innerText = '';\r\n      }\r\n      document.removeEventListener('jazz-midi-msg', eventHandle);\r\n      if (a[0] === 'version') {\r\n        _initCRX(msg, a[2]);\r\n        self._resume();\r\n      }\r\n      else {\r\n        self._crash();\r\n      }\r\n    }\r\n    this._pause();\r\n    try {\r\n      document.addEventListener('jazz-midi-msg', eventHandle);\r\n      document.dispatchEvent(new Event('jazz-midi'));\r\n    }\r\n    catch (err) {}\r\n    setTimeout(function() { if (!inst) self._crash(); }, 50);\r\n  }\r\n\r\n  /* istanbul ignore next */\r\n  function _zeroBreak() {\r\n    this._pause();\r\n    var self = this;\r\n    _schedule(function() { self._crash(); });\r\n  }\r\n\r\n  function _filterEngines(opt) {\r\n    var ret = [];\r\n    var arr = _filterEngineNames(opt);\r\n    for (var i = 0; i < arr.length; i++) {\r\n      if (arr[i] == 'webmidi') {\r\n        if (opt && opt.sysex === true) ret.push(_tryWebMIDIsysex);\r\n        if (!opt || opt.sysex !== true || opt.degrade === true) ret.push(_tryWebMIDI);\r\n      }\r\n      else if (arr[i] == 'node') { ret.push(_tryNODE); ret.push(_zeroBreak); }\r\n      else if (arr[i] == 'extension') ret.push(_tryCRX);\r\n      else if (arr[i] == 'plugin') ret.push(_tryJazzPlugin);\r\n    }\r\n    ret.push(_initNONE);\r\n    return ret;\r\n  }\r\n\r\n  function _filterEngineNames(opt) {\r\n    var web = ['node', 'extension', 'plugin', 'webmidi'];\r\n    if (!opt || !opt.engine) return web;\r\n    var arr = opt.engine instanceof Array ? opt.engine : [opt.engine];\r\n    var dup = {};\r\n    var none;\r\n    var etc;\r\n    var head = [];\r\n    var tail = [];\r\n    var i;\r\n    for (i = 0; i < arr.length; i++) {\r\n      var name = arr[i].toString().toLowerCase();\r\n      if (dup[name]) continue;\r\n      dup[name] = true;\r\n      if (name === 'none') none = true;\r\n      if (name === 'etc' || typeof name == 'undefined') etc = true;\r\n      if (etc) tail.push(name); else head.push(name);\r\n      _pop(web, name);\r\n    }\r\n    if (etc || head.length || tail.length) none = false;\r\n    return none ? [] : head.concat(etc ? web : tail);\r\n  }\r\n\r\n  function _initJZZ(opt) {\r\n    _jzz = new _J();\r\n    _jzz._options = opt;\r\n    _jzz._push(_tryAny, [_filterEngines(opt)]);\r\n    _jzz.refresh();\r\n    _jzz._resume();\r\n  }\r\n\r\n  function _initNONE() {\r\n    _engine._type = 'none';\r\n    _engine._version = _version;\r\n    _engine._sysex = true;\r\n    _engine._outs = [];\r\n    _engine._ins = [];\r\n    _engine._outMap = {};\r\n    _engine._inMap = {};\r\n    _engine._refresh = function() { _postRefresh(); };\r\n    _engine._watch = _nop;\r\n    _engine._unwatch = _nop;\r\n    _engine._close = _nop;\r\n  }\r\n  // common initialization for Jazz-Plugin and jazz-midi\r\n  function _initEngineJP() {\r\n    _engine._inArr = [];\r\n    _engine._outArr = [];\r\n    _engine._inMap = {};\r\n    _engine._outMap = {};\r\n    _engine._outsW = [];\r\n    _engine._insW = [];\r\n    _engine._version = _engine._main.version;\r\n    _engine._sysex = true;\r\n    var watcher;\r\n    function _closeAll() {\r\n      for (var i = 0; i < this.clients.length; i++) this._close(this.clients[i]);\r\n    }\r\n    _engine._refresh = function() {\r\n      _engine._outs = [];\r\n      _engine._ins = [];\r\n      var i, x;\r\n      for (i = 0; (x = _engine._main.MidiOutInfo(i)).length; i++) {\r\n        _engine._outs.push({ type: _engine._type, name: x[0], manufacturer: x[1], version: x[2] });\r\n      }\r\n      for (i = 0; (x = _engine._main.MidiInInfo(i)).length; i++) {\r\n        _engine._ins.push({ type: _engine._type, name: x[0], manufacturer: x[1], version: x[2] });\r\n      }\r\n      _postRefresh();\r\n    };\r\n    _engine._openOut = function(port, name) {\r\n      var impl = _engine._outMap[name];\r\n      if (!impl) {\r\n        if (_engine._pool.length <= _engine._outArr.length) _engine._pool.push(_engine._newPlugin());\r\n        impl = {\r\n          name: name,\r\n          clients: [],\r\n          info: {\r\n            name: name,\r\n            manufacturer: _engine._allOuts[name].manufacturer,\r\n            version: _engine._allOuts[name].version,\r\n            type: 'MIDI-out',\r\n            sysex: _engine._sysex,\r\n            engine: _engine._type\r\n          },\r\n          _close: function(port) { _engine._closeOut(port); },\r\n          _closeAll: _closeAll,\r\n          _receive: function(a) { if (a.length) this.plugin.MidiOutRaw(a.slice()); }\r\n        };\r\n        var plugin = _engine._pool[_engine._outArr.length];\r\n        impl.plugin = plugin;\r\n        _engine._outArr.push(impl);\r\n        _engine._outMap[name] = impl;\r\n      }\r\n      if (!impl.open) {\r\n        var s = impl.plugin.MidiOutOpen(name);\r\n        if (s !== name) {\r\n          if (s) impl.plugin.MidiOutClose();\r\n          port._break(); return;\r\n        }\r\n        impl.open = true;\r\n      }\r\n      port._orig._impl = impl;\r\n      _push(impl.clients, port._orig);\r\n      port._info = impl.info;\r\n      port._receive = function(arg) { impl._receive(arg); };\r\n      port._close = function() { impl._close(this); };\r\n    };\r\n    _engine._openIn = function(port, name) {\r\n      var impl = _engine._inMap[name];\r\n      if (!impl) {\r\n        if (_engine._pool.length <= _engine._inArr.length) _engine._pool.push(_engine._newPlugin());\r\n        impl = {\r\n          name: name,\r\n          clients: [],\r\n          info: {\r\n            name: name,\r\n            manufacturer: _engine._allIns[name].manufacturer,\r\n            version: _engine._allIns[name].version,\r\n            type: 'MIDI-in',\r\n            sysex: _engine._sysex,\r\n            engine: _engine._type\r\n          },\r\n          _close: function(port) { _engine._closeIn(port); },\r\n          _closeAll: _closeAll,\r\n          handle: function(t, a) {\r\n            for (var i = 0; i < this.clients.length; i++) {\r\n              var msg = MIDI(a);\r\n              this.clients[i]._emit(msg);\r\n            }\r\n          }\r\n        };\r\n        var makeHandle = function(x) { return function(t, a) { x.handle(t, a); }; };\r\n        impl.onmidi = makeHandle(impl);\r\n        var plugin = _engine._pool[_engine._inArr.length];\r\n        impl.plugin = plugin;\r\n        _engine._inArr.push(impl);\r\n        _engine._inMap[name] = impl;\r\n      }\r\n      if (!impl.open) {\r\n        var s = impl.plugin.MidiInOpen(name, impl.onmidi);\r\n        if (s !== name) {\r\n          if (s) impl.plugin.MidiInClose();\r\n          port._break(); return;\r\n        }\r\n        impl.open = true;\r\n      }\r\n      port._orig._impl = impl;\r\n      _push(impl.clients, port._orig);\r\n      port._info = impl.info;\r\n      port._close = function() { impl._close(this); };\r\n    };\r\n    _engine._closeOut = function(port) {\r\n      var impl = port._impl;\r\n      _pop(impl.clients, port._orig);\r\n      if (!impl.clients.length && impl.open) {\r\n        impl.open = false;\r\n        impl.plugin.MidiOutClose();\r\n      }\r\n    };\r\n    _engine._closeIn = function(port) {\r\n      var impl = port._impl;\r\n      _pop(impl.clients, port._orig);\r\n      if (!impl.clients.length && impl.open) {\r\n        impl.open = false;\r\n        impl.plugin.MidiInClose();\r\n      }\r\n    };\r\n    _engine._close = function() {\r\n      for (var i = 0; i < _engine._inArr.length; i++) if (_engine._inArr[i].open) _engine._inArr[i].plugin.MidiInClose();\r\n      _engine._unwatch();\r\n    };\r\n    _engine._watch = function() {\r\n      if (!watcher) watcher = setInterval(function() { _engine._refresh(); }, 250);\r\n    };\r\n    _engine._unwatch = function() {\r\n      if (watcher) clearInterval(watcher);\r\n      watcher = undefined;\r\n    };\r\n  }\r\n\r\n  function _initNode(obj) {\r\n    _engine._type = 'node';\r\n    _engine._main = obj;\r\n    _engine._pool = [];\r\n    _engine._newPlugin = function() { return new obj.MIDI(); };\r\n    _initEngineJP();\r\n  }\r\n  /* istanbul ignore next */\r\n  function _initJazzPlugin(obj) {\r\n    _engine._type = 'plugin';\r\n    _engine._main = obj;\r\n    _engine._pool = [obj];\r\n    _engine._newPlugin = function() {\r\n      var plg = document.createElement('object');\r\n      plg.style.visibility = 'hidden';\r\n      plg.style.width = '0px'; obj.style.height = '0px';\r\n      plg.classid = 'CLSID:1ACE1618-1C7D-4561-AEE1-34842AA85E90';\r\n      plg.type = 'audio/x-jazz';\r\n      document.body.appendChild(plg);\r\n      return plg.isJazz ? plg : undefined;\r\n    };\r\n    _initEngineJP();\r\n  }\r\n  function _initWebMIDI(access, sysex) {\r\n    _engine._type = 'webmidi';\r\n    _engine._version = 43;\r\n    _engine._sysex = !!sysex;\r\n    _engine._access = access;\r\n    _engine._inMap = {};\r\n    _engine._outMap = {};\r\n    _engine._outsW = [];\r\n    _engine._insW = [];\r\n    var watcher;\r\n    function _closeAll() {\r\n      for (var i = 0; i < this.clients.length; i++) this._close(this.clients[i]);\r\n    }\r\n    _engine._refresh = function() {\r\n      _engine._outs = [];\r\n      _engine._ins = [];\r\n      _engine._access.outputs.forEach(function(port) {\r\n        _engine._outs.push({type: _engine._type, name: port.name, manufacturer: port.manufacturer, version: port.version});\r\n      });\r\n      _engine._access.inputs.forEach(function(port) {\r\n        _engine._ins.push({type: _engine._type, name: port.name, manufacturer: port.manufacturer, version: port.version});\r\n      });\r\n      _postRefresh();\r\n    };\r\n    _engine._openOut = function(port, name) {\r\n      var impl = _engine._outMap[name];\r\n      if (!impl) {\r\n        impl = {\r\n          name: name,\r\n          clients: [],\r\n          info: {\r\n            name: name,\r\n            manufacturer: _engine._allOuts[name].manufacturer,\r\n            version: _engine._allOuts[name].version,\r\n            type: 'MIDI-out',\r\n            sysex: _engine._sysex,\r\n            engine: _engine._type\r\n          },\r\n          _close: function(port) { _engine._closeOut(port); },\r\n          _closeAll: _closeAll,\r\n          _receive: function(a) { if (impl.dev && a.length) this.dev.send(a.slice()); }\r\n        };\r\n      }\r\n      var found;\r\n      _engine._access.outputs.forEach(function(dev) {\r\n        if (dev.name === name) found = dev;\r\n      });\r\n      if (found) {\r\n        impl.dev = found;\r\n        _engine._outMap[name] = impl;\r\n        port._orig._impl = impl;\r\n        _push(impl.clients, port._orig);\r\n        port._info = impl.info;\r\n        port._receive = function(arg) { impl._receive(arg); };\r\n        port._close = function() { impl._close(this); };\r\n        if (impl.dev.open) {\r\n          port._pause();\r\n          impl.dev.open().then(function() {\r\n            port._resume();\r\n          }, function() {\r\n            port._crash();\r\n          });\r\n        }\r\n      }\r\n      else port._break();\r\n    };\r\n    _engine._openIn = function(port, name) {\r\n      var impl = _engine._inMap[name];\r\n      if (!impl) {\r\n        impl = {\r\n          name: name,\r\n          clients: [],\r\n          info: {\r\n            name: name,\r\n            manufacturer: _engine._allIns[name].manufacturer,\r\n            version: _engine._allIns[name].version,\r\n            type: 'MIDI-in',\r\n            sysex: _engine._sysex,\r\n            engine: _engine._type\r\n          },\r\n          _close: function(port) { _engine._closeIn(port); },\r\n          _closeAll: _closeAll,\r\n          handle: function(evt) {\r\n            for (var i = 0; i < this.clients.length; i++) {\r\n              var msg = MIDI([].slice.call(evt.data));\r\n              this.clients[i]._emit(msg);\r\n            }\r\n          }\r\n        };\r\n      }\r\n      var found;\r\n      _engine._access.inputs.forEach(function(dev) {\r\n        if (dev.name === name) found = dev;\r\n      });\r\n      if (found) {\r\n        impl.dev = found;\r\n        var makeHandle = function(x) { return function(evt) { x.handle(evt); }; };\r\n        impl.dev.onmidimessage = makeHandle(impl);\r\n        _engine._inMap[name] = impl;\r\n        port._orig._impl = impl;\r\n        _push(impl.clients, port._orig);\r\n        port._info = impl.info;\r\n        port._close = function() { impl._close(this); };\r\n        if (impl.dev.open) {\r\n          port._pause();\r\n          impl.dev.open().then(function() {\r\n            port._resume();\r\n          }, function() {\r\n            port._crash();\r\n          });\r\n        }\r\n      }\r\n      else port._break();\r\n    };\r\n    _engine._closeOut = function(port) {\r\n      var impl = port._impl;\r\n      _pop(impl.clients, port._orig);\r\n      if (!impl.clients.length) {\r\n        if (impl.dev && impl.dev.close) impl.dev.close();\r\n        impl.dev = undefined;\r\n      }\r\n    };\r\n    _engine._closeIn = function(port) {\r\n      var impl = port._impl;\r\n      _pop(impl.clients, port._orig);\r\n      if (!impl.clients.length) {\r\n        if (impl.dev) {\r\n          impl.dev.onmidimessage = null;\r\n          if (impl.dev.close) impl.dev.close();\r\n        }\r\n        impl.dev = undefined;\r\n      }\r\n    };\r\n    _engine._close = function() {\r\n      _engine._unwatch();\r\n    };\r\n    _engine._watch = function() {\r\n      _engine._access.onstatechange = function() {\r\n        watcher = true;\r\n        _schedule(function() {\r\n          if (watcher) {\r\n            _engine._refresh();\r\n            watcher = false;\r\n          }\r\n        });\r\n      };\r\n    };\r\n    _engine._unwatch = function() {\r\n      _engine._access.onstatechange = undefined;\r\n    };\r\n  }\r\n  function _initCRX(msg, ver) {\r\n    _engine._type = 'extension';\r\n    _engine._version = ver;\r\n    _engine._sysex = true;\r\n    _engine._pool = [];\r\n    _engine._outs = [];\r\n    _engine._ins = [];\r\n    _engine._inArr = [];\r\n    _engine._outArr = [];\r\n    _engine._inMap = {};\r\n    _engine._outMap = {};\r\n    _engine._outsW = [];\r\n    _engine._insW = [];\r\n    _engine.refreshClients = [];\r\n    _engine._msg = msg;\r\n    _engine._newPlugin = function() {\r\n      var plugin = { id: _engine._pool.length };\r\n      _engine._pool.push(plugin);\r\n      if (!plugin.id) plugin.ready = true;\r\n      else document.dispatchEvent(new CustomEvent('jazz-midi', { detail: ['new'] }));\r\n    };\r\n    _engine._newPlugin();\r\n    _engine._refresh = function(client) {\r\n      _engine.refreshClients.push(client);\r\n      client._pause();\r\n      _schedule(function() {\r\n        document.dispatchEvent(new CustomEvent('jazz-midi', { detail: ['refresh'] }));\r\n      });\r\n    };\r\n    function _closeAll() {\r\n      for (var i = 0; i < this.clients.length; i++) this._close(this.clients[i]);\r\n    }\r\n    _engine._openOut = function(port, name) {\r\n      var impl = _engine._outMap[name];\r\n      if (!impl) {\r\n        if (_engine._pool.length <= _engine._outArr.length) _engine._newPlugin();\r\n        var plugin = _engine._pool[_engine._outArr.length];\r\n        impl = {\r\n          name: name,\r\n          clients: [],\r\n          info: {\r\n            name: name,\r\n            manufacturer: _engine._allOuts[name].manufacturer,\r\n            version: _engine._allOuts[name].version,\r\n            type: 'MIDI-out',\r\n            sysex: _engine._sysex,\r\n            engine: _engine._type\r\n          },\r\n          _start: function() { document.dispatchEvent(new CustomEvent('jazz-midi', { detail: ['openout', plugin.id, name] })); },\r\n          _close: function(port) { _engine._closeOut(port); },\r\n          _closeAll: _closeAll,\r\n          _receive: function(a) { if (a.length) { var v = a.slice(); v.splice(0, 0, 'play', plugin.id); document.dispatchEvent(new CustomEvent('jazz-midi', {detail: v})); } }\r\n        };\r\n        impl.plugin = plugin;\r\n        plugin.output = impl;\r\n        _engine._outArr.push(impl);\r\n        _engine._outMap[name] = impl;\r\n      }\r\n      port._orig._impl = impl;\r\n      _push(impl.clients, port._orig);\r\n      port._info = impl.info;\r\n      port._receive = function(arg) { impl._receive(arg); };\r\n      port._close = function() { impl._close(this); };\r\n      if (!impl.open) {\r\n        port._pause();\r\n        if (impl.plugin.ready) impl._start();\r\n      }\r\n    };\r\n    _engine._openIn = function(port, name) {\r\n      var impl = _engine._inMap[name];\r\n      if (!impl) {\r\n        if (_engine._pool.length <= _engine._inArr.length) _engine._newPlugin();\r\n        var plugin = _engine._pool[_engine._inArr.length];\r\n        impl = {\r\n          name: name,\r\n          clients: [],\r\n          info: {\r\n            name: name,\r\n            manufacturer: _engine._allIns[name].manufacturer,\r\n            version: _engine._allIns[name].version,\r\n            type: 'MIDI-in',\r\n            sysex: _engine._sysex,\r\n            engine: _engine._type\r\n          },\r\n          _start: function() { document.dispatchEvent(new CustomEvent('jazz-midi', { detail: ['openin', plugin.id, name] })); },\r\n          _close: function(port) { _engine._closeIn(port); },\r\n          _closeAll: _closeAll\r\n        };\r\n        impl.plugin = plugin;\r\n        plugin.input = impl;\r\n        _engine._inArr.push(impl);\r\n        _engine._inMap[name] = impl;\r\n      }\r\n      port._orig._impl = impl;\r\n      _push(impl.clients, port._orig);\r\n      port._info = impl.info;\r\n      port._close = function() { impl._close(this); };\r\n      if (!impl.open) {\r\n        port._pause();\r\n        if (impl.plugin.ready) impl._start();\r\n      }\r\n    };\r\n    _engine._closeOut = function(port) {\r\n      var impl = port._impl;\r\n      _pop(impl.clients, port._orig);\r\n      if (!impl.clients.length && impl.open) {\r\n        impl.open = false;\r\n        document.dispatchEvent(new CustomEvent('jazz-midi', { detail: ['closeout', impl.plugin.id] }));\r\n      }\r\n    };\r\n    _engine._closeIn = function(port) {\r\n      var impl = port._impl;\r\n      _pop(impl.clients, port._orig);\r\n      if (!impl.clients.length && impl.open) {\r\n        impl.open = false;\r\n        document.dispatchEvent(new CustomEvent('jazz-midi', { detail: ['closein', impl.plugin.id] }));\r\n      }\r\n    };\r\n    _engine._close = function() {\r\n      _engine._unwatch();\r\n    };\r\n    var watcher;\r\n    _engine._watch = function() {\r\n      _engine._insW = _engine._ins;\r\n      _engine._outsW = _engine._outs;\r\n      watcher = setInterval(function() {\r\n        document.dispatchEvent(new CustomEvent('jazz-midi', {detail:['refresh']}));\r\n      }, 250);\r\n    };\r\n    _engine._unwatch = function() {\r\n      clearInterval(watcher);\r\n      watcher = undefined;\r\n    };\r\n    document.addEventListener('jazz-midi-msg', function(evt) {\r\n      var i, j, impl;\r\n      var v = evt.detail ? [ evt.detail ] : undefined;\r\n      if (!v) {\r\n        v = _engine._msg.innerText.split('\\n');\r\n        _engine._msg.innerText = '';\r\n        for (i = 0; i < v.length; i++) try { v[i] = JSON.parse(v[i]); } catch (err) { v[i] = []; }\r\n      }\r\n      for (i = 0; i < v.length; i++) {\r\n        var a = v[i];\r\n        if (!a.length) continue;\r\n        if (a[0] === 'refresh') {\r\n          if (a[1].ins) {\r\n            for (j = 0; j < a[1].ins.length; j++) a[1].ins[j].type = _engine._type;\r\n            _engine._ins = a[1].ins;\r\n          }\r\n          if (a[1].outs) {\r\n            for (j = 0; j < a[1].outs.length; j++) a[1].outs[j].type = _engine._type;\r\n            _engine._outs = a[1].outs;\r\n          }\r\n          _postRefresh();\r\n          for (j = 0; j < _engine.refreshClients.length; j++) _engine.refreshClients[j]._resume();\r\n          _engine.refreshClients = [];\r\n        }\r\n        else if (a[0] === 'version') {\r\n          var plugin = _engine._pool[a[1]];\r\n          if (plugin) {\r\n            plugin.ready = true;\r\n            if (plugin.input) plugin.input._start();\r\n            if (plugin.output) plugin.output._start();\r\n          }\r\n        }\r\n        else if (a[0] === 'openout') {\r\n          impl = _engine._pool[a[1]].output;\r\n          if (impl) {\r\n            if (a[2] == impl.name) {\r\n              impl.open = true;\r\n              if (impl.clients) for (j = 0; j < impl.clients.length; j++) impl.clients[j]._resume();\r\n            }\r\n            else if (impl.clients) for (j = 0; j < impl.clients.length; j++) impl.clients[j]._crash();\r\n          }\r\n        }\r\n        else if (a[0] === 'openin') {\r\n          impl = _engine._pool[a[1]].input;\r\n          if (impl) {\r\n            if (a[2] == impl.name) {\r\n              impl.open = true;\r\n              if (impl.clients) for (j = 0; j < impl.clients.length; j++) impl.clients[j]._resume();\r\n            }\r\n            else if (impl.clients) for (j = 0; j < impl.clients.length; j++) impl.clients[j]._crash();\r\n          }\r\n        }\r\n        else if (a[0] === 'midi') {\r\n          impl = _engine._pool[a[1]].input;\r\n          if (impl && impl.clients) {\r\n            for (j = 0; j < impl.clients.length; j++) {\r\n              var msg = MIDI(a.slice(3));\r\n              impl.clients[j]._emit(msg);\r\n            }\r\n          }\r\n        }\r\n      }\r\n    });\r\n  }\r\n\r\n  var JZZ = function(opt) {\r\n    if (!_jzz) _initJZZ(opt);\r\n    return _jzz._thenable();\r\n  };\r\n  JZZ.JZZ = JZZ;\r\n  JZZ.version = _version;\r\n  JZZ.info = function() { return _J.prototype.info(); };\r\n\r\n  function Widget(arg) {\r\n    var self = new _M();\r\n    if (arg instanceof Object) _for(arg, function(k) { self[k] = arg[k]; });\r\n    self._resume();\r\n    return self;\r\n  }\r\n  JZZ.Widget = Widget;\r\n  _J.prototype.Widget = JZZ.Widget;\r\n\r\n  JZZ.addMidiIn = function(name, widget) {\r\n    var info = _clone(widget._info || {});\r\n    info.name = name;\r\n    info.type = info.type || 'javascript';\r\n    info.manufacturer = info.manufacturer || 'virtual';\r\n    info.version = info.version || '0.0';\r\n    var engine = {\r\n      _info: function() { return info; },\r\n      _openIn: function(port) {\r\n        port._pause();\r\n        port._info = _clone(info);\r\n        port._close = function() { widget.disconnect(port); };\r\n        widget.connect(port);\r\n        port._resume();\r\n      }\r\n    };\r\n    return JZZ.lib.registerMidiIn(name, engine);\r\n  };\r\n  _J.prototype.addMidiIn = JZZ.addMidiIn;\r\n  JZZ.addMidiOut = function(name, widget) {\r\n    var info = _clone(widget._info || {});\r\n    info.name = name;\r\n    info.type = info.type || 'javascript';\r\n    info.manufacturer = info.manufacturer || 'virtual';\r\n    info.version = info.version || '0.0';\r\n    var engine = {\r\n      _info: function() { return info; },\r\n      _openOut: function(port) {\r\n        port._pause();\r\n        port._info = _clone(info);\r\n        port._close = function() { port.disconnect(); };\r\n        _connect.apply(port, [widget]);\r\n        port._resume();\r\n      }\r\n    };\r\n    return JZZ.lib.registerMidiOut(name, engine);\r\n  };\r\n  _J.prototype.addMidiOut = JZZ.addMidiOut;\r\n  JZZ.removeMidiOut = function(name) { return JZZ.lib.unregisterMidiOut(name); };\r\n  _J.prototype.removeMidiOut = JZZ.removeMidiOut;\r\n  JZZ.removeMidiIn = function(name) { return JZZ.lib.unregisterMidiIn(name); };\r\n  _J.prototype.removeMidiIn = JZZ.removeMidiIn;\r\n  JZZ.maskMidiIn = function(name) { _insM[name] = true; };\r\n  _J.prototype.maskMidiIn = JZZ.maskMidiIn;\r\n  JZZ.unmaskMidiIn = function(name) { delete _insM[name]; };\r\n  _J.prototype.unmaskMidiIn = JZZ.unmaskMidiIn;\r\n  JZZ.maskMidiOut = function(name) { _outsM[name] = true; };\r\n  _J.prototype.maskMidiOut = JZZ.maskMidiOut;\r\n  JZZ.unmaskMidiOut = function(name) { delete _outsM[name]; };\r\n  _J.prototype.unmaskMidiOut = JZZ.unmaskMidiOut;\r\n\r\n  // JZZ.SMPTE\r\n\r\n  function SMPTE() {\r\n    var self = this instanceof SMPTE ? this : self = new SMPTE();\r\n    SMPTE.prototype.reset.apply(self, arguments);\r\n    return self;\r\n  }\r\n  SMPTE.prototype.reset = function(arg) {\r\n    if (arg instanceof SMPTE) {\r\n      this.setType(arg.getType());\r\n      this.setHour(arg.getHour());\r\n      this.setMinute(arg.getMinute());\r\n      this.setSecond(arg.getSecond());\r\n      this.setFrame(arg.getFrame());\r\n      this.setQuarter(arg.getQuarter());\r\n      return this;\r\n    }\r\n    var arr = arg instanceof Array ? arg : arguments;\r\n    this.setType(arr[0]);\r\n    this.setHour(arr[1]);\r\n    this.setMinute(arr[2]);\r\n    this.setSecond(arr[3]);\r\n    this.setFrame(arr[4]);\r\n    this.setQuarter(arr[5]);\r\n    return this;\r\n  };\r\n  function _fixDropFrame() { if (this.type == 29.97 && !this.second && this.frame < 2 && this.minute % 10) this.frame = 2; }\r\n  SMPTE.prototype.isFullFrame = function() { return this.quarter == 0 || this.quarter == 4; };\r\n  SMPTE.prototype.getType = function() { return this.type; };\r\n  SMPTE.prototype.getHour = function() { return this.hour; };\r\n  SMPTE.prototype.getMinute = function() { return this.minute; };\r\n  SMPTE.prototype.getSecond = function() { return this.second; };\r\n  SMPTE.prototype.getFrame = function() { return this.frame; };\r\n  SMPTE.prototype.getQuarter = function() { return this.quarter; };\r\n  SMPTE.prototype.setType = function(x) {\r\n    if (typeof x == 'undefined' || x == 24) this.type = 24;\r\n    else if (x == 25) this.type = 25;\r\n    else if (x == 29.97) { this.type = 29.97; _fixDropFrame.apply(this); }\r\n    else if (x == 30) this.type = 30;\r\n    else throw RangeError('Bad SMPTE frame rate: ' + x);\r\n    if (this.frame >= this.type) this.frame = this.type - 1; // could not be more than 29\r\n    return this;\r\n  };\r\n  SMPTE.prototype.setHour = function(x) {\r\n    if (typeof x == 'undefined') x = 0;\r\n    if (x != parseInt(x) || x < 0 || x >= 24) throw RangeError('Bad SMPTE hours value: ' + x);\r\n    this.hour = x;\r\n    return this;\r\n  };\r\n  SMPTE.prototype.setMinute = function(x) {\r\n    if (typeof x == 'undefined') x = 0;\r\n    if (x != parseInt(x) || x < 0 || x >= 60) throw RangeError('Bad SMPTE minutes value: ' + x);\r\n    this.minute = x;\r\n    _fixDropFrame.apply(this);\r\n    return this;\r\n  };\r\n  SMPTE.prototype.setSecond = function(x) {\r\n    if (typeof x == 'undefined') x = 0;\r\n    if (x != parseInt(x) || x < 0 || x >= 60) throw RangeError('Bad SMPTE seconds value: ' + x);\r\n    this.second = x;\r\n    _fixDropFrame.apply(this);\r\n    return this;\r\n  };\r\n  SMPTE.prototype.setFrame = function(x) {\r\n    if (typeof x == 'undefined') x = 0;\r\n    if (x != parseInt(x) || x < 0 || x >= this.type) throw RangeError('Bad SMPTE frame number: ' + x);\r\n    this.frame = x;\r\n    _fixDropFrame.apply(this);\r\n    return this;\r\n  };\r\n  SMPTE.prototype.setQuarter = function(x) {\r\n    if (typeof x == 'undefined') x = 0;\r\n    if (x != parseInt(x) || x < 0 || x >= 8) throw RangeError('Bad SMPTE quarter frame: ' + x);\r\n    this.quarter = x;\r\n    return this;\r\n  };\r\n  SMPTE.prototype.incrFrame = function() {\r\n    this.frame++;\r\n    if (this.frame >= this.type) {\r\n      this.frame = 0;\r\n      this.second++;\r\n      if (this.second >= 60) {\r\n        this.second = 0;\r\n        this.minute++;\r\n        if (this.minute >= 60) {\r\n          this.minute = 0;\r\n          this.hour = this.hour >= 23 ? 0 : this.hour + 1;\r\n        }\r\n      }\r\n    }\r\n    _fixDropFrame.apply(this);\r\n    return this;\r\n  };\r\n  SMPTE.prototype.decrFrame = function() {\r\n    if (!this.second && this.frame == 2 && this.type == 29.97 && this.minute % 10) this.frame = 0; // drop-frame\r\n    this.frame--;\r\n    if (this.frame < 0) {\r\n      this.frame = this.type == 29.97 ? 29 : this.type - 1;\r\n      this.second--;\r\n      if (this.second < 0) {\r\n        this.second = 59;\r\n        this.minute--;\r\n        if (this.minute < 0) {\r\n          this.minute = 59;\r\n          this.hour = this.hour ? this.hour - 1 : 23;\r\n        }\r\n      }\r\n    }\r\n    return this;\r\n  };\r\n  SMPTE.prototype.incrQF = function() {\r\n    this.backwards = false;\r\n    this.quarter = (this.quarter + 1) & 7;\r\n    if (this.quarter == 0 || this.quarter == 4) this.incrFrame();\r\n    return this;\r\n  };\r\n  SMPTE.prototype.decrQF = function() {\r\n    this.backwards = true;\r\n    this.quarter = (this.quarter + 7) & 7;\r\n    if (this.quarter == 3 || this.quarter == 7) this.decrFrame();\r\n    return this;\r\n  };\r\n  function _825(a) { return [[24, 25, 29.97, 30][(a[7] >> 1) & 3], ((a[7] & 1) << 4) | a[6], (a[5] << 4) | a[4], (a[3] << 4) | a[2], (a[1] << 4) | a[0]]; }\r\n  SMPTE.prototype.read = function(m) {\r\n    if (!(m instanceof MIDI)) m = MIDI.apply(null, arguments);\r\n    if (m[0] == 0xf0 && m[1] == 0x7f && m[3] == 1 && m[4] == 1 && m[9] == 0xf7) {\r\n      this.type = [24, 25, 29.97, 30][(m[5] >> 5) & 3];\r\n      this.hour = m[5] & 31;\r\n      this.minute = m[6];\r\n      this.second = m[7];\r\n      this.frame = m[8];\r\n      this.quarter = 0;\r\n      this._ = undefined;\r\n      this._b = undefined;\r\n      this._f = undefined;\r\n      return true;\r\n    }\r\n    if (m[0] == 0xf1 && typeof m[1] != 'undefined') {\r\n      var q = m[1] >> 4;\r\n      var n = m[1] & 15;\r\n      if (q == 0) {\r\n        if (this._ == 7) {\r\n          if (this._f == 7) {\r\n            this.reset(_825(this._a));\r\n            this.incrFrame();\r\n          }\r\n          this.incrFrame();\r\n        }\r\n      }\r\n      else if (q == 3) {\r\n        if (this._ == 4) {\r\n          this.decrFrame();\r\n        }\r\n      }\r\n      else if (q == 4) {\r\n        if (this._ == 3) {\r\n          this.incrFrame();\r\n        }\r\n      }\r\n      else if (q == 7) {\r\n        if (this._ === 0) {\r\n          if (this._b === 0) {\r\n            this.reset(_825(this._a));\r\n            this.decrFrame();\r\n          }\r\n          this.decrFrame();\r\n        }\r\n      }\r\n      if (!this._a) this._a = [];\r\n      this._a[q] = n;\r\n      this._f = this._f === q - 1 || q == 0 ? q : undefined;\r\n      this._b = this._b === q + 1 || q == 7 ? q : undefined;\r\n      this._ = q;\r\n      this.quarter = q;\r\n      return true;\r\n    }\r\n    return false;\r\n  };\r\n  function _mtc(t) {\r\n    if (!t.backwards && t.quarter >= 4) t.decrFrame(); // continue encoding previous frame\r\n    else if (t.backwards && t.quarter < 4) t.incrFrame();\r\n    var ret;\r\n    switch (t.quarter >> 1) {\r\n      case 0: ret = t.frame; break;\r\n      case 1: ret = t.second; break;\r\n      case 2: ret = t.minute; break;\r\n      default: ret = t.hour;\r\n    }\r\n    if (t.quarter & 1) ret >>= 4;\r\n    else ret &= 15;\r\n    if (t.quarter == 7) {\r\n      if (t.type == 25) ret |= 2;\r\n      else if (t.type == 29.97) ret |= 4;\r\n      else if (t.type == 30) ret |= 6;\r\n    }\r\n    // restore original t\r\n    if (!t.backwards && t.quarter >= 4) t.incrFrame();\r\n    else if (t.backwards && t.quarter < 4) t.decrFrame();\r\n    return ret | (t.quarter << 4);\r\n  }\r\n  function _hrtype(t) {\r\n    if (t.type == 25) return t.hour | 0x20;\r\n    if (t.type == 29.97) return t.hour | 0x40;\r\n    if (t.type == 30) return t.hour | 0x60;\r\n    return t.hour;\r\n  }\r\n  function _dec(x) { return x < 10 ? '0' + x : x; }\r\n  function _smptetxt(x) {\r\n    var arr = [];\r\n    for (var i = 0; i < x.length; i++) arr[i] = _dec(i ? x[i] : x[i] & 0x1f);\r\n    return arr.join(':');\r\n  }\r\n  SMPTE.prototype.toString = function() { return _smptetxt([this.hour, this.minute, this.second, this.frame]); };\r\n  JZZ.SMPTE = SMPTE;\r\n  _J.prototype.SMPTE = SMPTE;\r\n\r\n  // JZZ.MIDI\r\n\r\n  function MIDI(arg) {\r\n    var self = this instanceof MIDI ? this : self = new MIDI();\r\n    var i;\r\n    if (arg instanceof MIDI) {\r\n      self._from = arg._from.slice();\r\n      _for(arg, function(i) { if (i != '_from') self[i] = arg[i]; });\r\n      return self;\r\n    }\r\n    else self._from = [];\r\n    if (typeof arg == 'undefined') return self;\r\n    var arr = arg instanceof Array ? arg : arguments;\r\n    for (i = 0; i < arr.length; i++) {\r\n      n = arr[i];\r\n      if (i == 1) {\r\n        if (self[0] >= 0x80 && self[0] <= 0xAF) n = MIDI.noteValue(n);\r\n        if (self[0] >= 0xC0 && self[0] <= 0xCF) n = MIDI.programValue(n);\r\n      }\r\n      if (n != parseInt(n) || n < 0 || n > 255) _throw(arr[i]);\r\n      self.push(n);\r\n    }\r\n    return self;\r\n  }\r\n  MIDI.prototype = [];\r\n  MIDI.prototype.constructor = MIDI;\r\n  MIDI.prototype.isMidi = function() { return 1; };\r\n  var _noteNum = {};\r\n  MIDI.noteValue = function(x) { return typeof x == 'undefined' ? undefined : _noteNum[x.toString().toLowerCase()]; };\r\n  MIDI.programValue = function(x) { return x; };\r\n  MIDI.octaveValue = function(x) {\r\n    var n = _noteNum[x.toString().toLowerCase()];\r\n    if (typeof n == 'undefined') n = _noteNum[x.toString().toLowerCase() + '1'];\r\n    return typeof n == 'undefined' ? undefined : n % 12;\r\n  };\r\n  MIDI.freq = function(n, a) {\r\n    if (typeof a == 'undefined') a = 440.0;\r\n    _float(a);\r\n    if (n != parseFloat(n)) n = _7bn(n);\r\n    return (a * Math.pow(2, (n - 69.0) / 12.0));\r\n  };\r\n  function _float(x) { if (x != parseFloat(x)) throw TypeError('Not a number: ' + x); }\r\n  MIDI.shift = function(f, f0) {\r\n    if (typeof f0 == 'undefined') f0 = 440;\r\n    _float(f);\r\n    _float(f0);\r\n    return Math.log2(f / f0) * 12;\r\n  };\r\n  MIDI.midi = function(f, f0) {\r\n    if (f != parseFloat(f)) return _7bn(f);\r\n    return MIDI.shift(f, f0) + 69;\r\n  };\r\n  MIDI.to7b = function(x) {\r\n    _float(x);\r\n    return x <= 0 ? 0 : x >= 1 ? 0x7f : Math.floor(x * 0x80);\r\n  };\r\n  MIDI.to14b = function(x) {\r\n    _float(x);\r\n    return x <= 0 ? 0 : x >= 1 ? 0x3fff : Math.floor(x * 0x4000);\r\n  };\r\n  MIDI.to21b = function(x) {\r\n    if (typeof x == 'undefined') return 0x1fffff;\r\n    _float(x);\r\n    if (x <= 0) return 0;\r\n    x = (Math.floor(x) << 14) + MIDI.to14b(x - Math.floor(x));\r\n    return x < 0x1fffff ? x : 0x1ffffe;\r\n  };\r\n  MIDI.to32b = function(x) {\r\n    _float(x);\r\n    return x <= 0 ? 0 : x >= 1 ? 0xffffffff : Math.floor(x * 0x100000000);\r\n  };\r\n  function _MIDI() {}\r\n  _MIDI.prototype = MIDI;\r\n  MIDI._sxid = 0x7f;\r\n  MIDI.sxId = function(id) {\r\n    if (typeof id == 'undefined') id = MIDI._sxid;\r\n    if (id == this._sxid) return this;\r\n    id = _7b(id);\r\n    var ret = new _MIDI();\r\n    ret._ch = this._ch;\r\n    ret._sxid = id;\r\n    return ret;\r\n  };\r\n  MIDI.ch = function(c) {\r\n    if (c == this._ch || typeof c == 'undefined' && typeof this._ch == 'undefined') return this;\r\n    var ret = new _MIDI();\r\n    if (typeof c != 'undefined') c = _ch(c);\r\n    ret._ch = c;\r\n    ret._sxid = this._sxid;\r\n    return ret;\r\n  };\r\n\r\n  var _noteMap = { c:0, d:2, e:4, f:5, g:7, a:9, b:11, h:11 };\r\n  _for(_noteMap, function(k) {\r\n    for (n = 0; n < 12; n++) {\r\n      m = _noteMap[k] + n * 12;\r\n      if (m > 127) break;\r\n      _noteNum[k + n] = m; _noteNum[k + '♮' + n] = m;\r\n      if (m > 0) {\r\n        _noteNum[k + 'b' + n] = m - 1; _noteNum[k + '♭' + n] = m - 1;\r\n        _noteNum[k + 'bb' + n] = m - 2; _noteNum[k + '♭♭' + n] = m - 2; _noteNum[k + '𝄫' + n] = m - 2;\r\n      }\r\n      if (m < 127) {\r\n        _noteNum[k + '#' + n] = m + 1; _noteNum[k + '♯' + n] = m + 1;\r\n        _noteNum[k + '##' + n] = m + 2; _noteNum[k + '♯♯' + n] = m + 2; _noteNum[k + '𝄪' + n] = m + 2;\r\n      }\r\n    }\r\n  });\r\n  for (n = 0; n < 128; n++) _noteNum[n] = n;\r\n  function _throw(x) { throw RangeError('Bad MIDI value: ' + x); }\r\n  function _bad(x) { throw TypeError('Invalid value: ' + x); }\r\n  function _oor(x) { throw RangeError('Out of range: ' + x); }\r\n  function _ch(c) { _validateChannel(c); return parseInt(c); }\r\n  function _4b(n) { if (n != parseInt(n) || n < 0 || n > 0xf) throw RangeError('Expected a 4-bit value: ' + n); return parseInt(n); }\r\n  function _7b(n, m) { if (n != parseInt(n) || n < 0 || n > 0x7f) _throw(typeof m == 'undefined' ? n : m); return parseInt(n); }\r\n  function _8b(n) { if (n != parseInt(n) || n < 0 || n > 0xff) _throw(n); return parseInt(n); }\r\n  function _14b(n) { if (n != parseInt(n) || n < 0 || n > 0x3fff) _throw(n); return parseInt(n); }\r\n  function _16b(n) { if (n != parseInt(n) || n < 0 || n > 0xffff) throw RangeError('Expected a 16-bit value: ' + n); return parseInt(n); }\r\n  function _20b(n) { if (n != parseInt(n) || n < 0 || n > 0xfffff) throw RangeError('Expected a 20-bit value: ' + n); return parseInt(n); }\r\n  function _21b(n) { if (n != parseInt(n) || n < 0 || n > 0x1fffff) _throw(n); return parseInt(n); }\r\n  function _32b(n) { if (n != parseInt(n) || n < 0 || n > 0xffffffff) _throw(n); return parseInt(n); }\r\n  function _7bn(n) { return _7b(MIDI.noteValue(n), n); }\r\n  function _lsb(n) { return _14b(n) & 0x7f; }\r\n  function _msb(n) { return _14b(n) >> 7; }\r\n  function _8bs(s) { s = '' + s; for (var i = 0; i < s.length; i++) if (s.charCodeAt(i) > 255) _throw(s[i]); return s; }\r\n  function _to777(n) { return [n >> 14, (n >> 7) & 0x7f, n & 0x7f]; }\r\n  function _01(x, y) {\r\n    if (x != parseFloat(x)) _bad(typeof y == 'undefined' ? x : y);\r\n    if (x < 0 || x > 1) _oor(typeof y == 'undefined' ? x : y);\r\n    return parseFloat(x);\r\n }\r\n  function _rt(b) { return typeof b != 'undefined' && !b ? 0x7E : 0x7F; }\r\n  function _ntu(x) {\r\n    var k, m;\r\n    var kkk = [];\r\n    var vvv = {};\r\n    _for(x, function(k) {\r\n      m = _21b(x[k]);\r\n      k = _7bn(k);\r\n      if (k in vvv) throw RangeError('Duplicate MIDI value: ' + k);\r\n      kkk.push(k);\r\n      vvv[k] = m;\r\n    });\r\n    kkk.sort();\r\n    var out = [kkk.length];\r\n    for (k = 0; k < kkk.length; k++) out = out.concat([kkk[k]], _to777(vvv[kkk[k]]));\r\n    return out;\r\n  }\r\n  function _f2ntu(x) {\r\n    var out = {};\r\n    _for (x, function(k) { out[k] = MIDI.to21b(x[k] == parseFloat(x[k]) ? x[k] : _7bn(x[k])); });\r\n    return out;\r\n  }\r\n  function _hz2ntu(x) {\r\n    var out = {};\r\n    _for (x, function(k) { out[k] = MIDI.to21b(MIDI.midi(x[k])); });\r\n    return out;\r\n  }\r\n  function _12x7(a) {\r\n    var out = [];\r\n    if (!(a instanceof Array) || a.length != 12) throw TypeError('Expected an array of size 12');\r\n    for (var i = 0; i < 12; i++) out.push(_7b(a[i]));\r\n    return out;\r\n  }\r\n  function _12x14(a) {\r\n    var out = [];\r\n    if (!(a instanceof Array) || a.length != 12) throw TypeError('Expected an array of size 12');\r\n    for (var i = 0; i < 12; i++) {\r\n      out.push(_msb(a[i]));\r\n      out.push(_lsb(a[i]));\r\n    }\r\n    return out;\r\n  }\r\n  var _helperMPE = {\r\n    noteOff: function(c, n, v) { if (typeof v == 'undefined') v = 64; return [0x80 + _ch(c), _7bn(n), _7b(v)]; },\r\n    noteOn: function(c, n, v) { if (typeof v == 'undefined') v = 127; return [0x90 + _ch(c), _7bn(n), _7b(v)]; },\r\n    aftertouch: function(c, n, v) { return [0xA0 + _ch(c), _7bn(n), _7b(v)]; }\r\n  };\r\n  var _helperCH = {\r\n    control: function(c, n, v) { return [0xB0 + _ch(c), _7b(n), _7b(v)]; },\r\n    program: function(c, n) { return [0xC0 + _ch(c), _7b(MIDI.programValue(n), n)]; },\r\n    pressure: function(c, n) { return [0xD0 + _ch(c), _7b(n)]; },\r\n    pitchBend: function(c, n, l) { return typeof l == 'undefined' ? [0xE0 + _ch(c), _lsb(n), _msb(n)] : [0xE0 + _ch(c), _7b(l), _7b(n)]; },\r\n    pitchBendF: function(c, x) { return _helperCH.pitchBend(c, MIDI.to14b((x + 1) / 2)); },\r\n    bankMSB: function(c, n) { return [0xB0 + _ch(c), 0x00, _7b(n)]; },\r\n    bankLSB: function(c, n) { return [0xB0 + _ch(c), 0x20, _7b(n)]; },\r\n    modMSB: function(c, n) { return [0xB0 + _ch(c), 0x01, _7b(n)]; },\r\n    modLSB: function(c, n) { return [0xB0 + _ch(c), 0x21, _7b(n)]; },\r\n    breathMSB: function(c, n) { return [0xB0 + _ch(c), 0x02, _7b(n)]; },\r\n    breathLSB: function(c, n) { return [0xB0 + _ch(c), 0x22, _7b(n)]; },\r\n    footMSB: function(c, n) { return [0xB0 + _ch(c), 0x04, _7b(n)]; },\r\n    footLSB: function(c, n) { return [0xB0 + _ch(c), 0x24, _7b(n)]; },\r\n    portamentoMSB: function(c, n) { return [0xB0 + _ch(c), 0x05, _7b(n)]; },\r\n    portamentoLSB: function(c, n) { return [0xB0 + _ch(c), 0x25, _7b(n)]; },\r\n    dataMSB: function(c, n) { return [0xB0 + _ch(c), 0x06, _7b(n)]; },\r\n    dataLSB: function(c, n) { return [0xB0 + _ch(c), 0x26, _7b(n)]; },\r\n    volumeMSB: function(c, n) { return [0xB0 + _ch(c), 0x07, _7b(n)]; },\r\n    volumeLSB: function(c, n) { return [0xB0 + _ch(c), 0x27, _7b(n)]; },\r\n    balanceMSB: function(c, n) { return [0xB0 + _ch(c), 0x08, _7b(n)]; },\r\n    balanceLSB: function(c, n) { return [0xB0 + _ch(c), 0x28, _7b(n)]; },\r\n    panMSB: function(c, n) { return [0xB0 + _ch(c), 0x0A, _7b(n)]; },\r\n    panLSB: function(c, n) { return [0xB0 + _ch(c), 0x2A, _7b(n)]; },\r\n    expressionMSB: function(c, n) { return [0xB0 + _ch(c), 0x0B, _7b(n)]; },\r\n    expressionLSB: function(c, n) { return [0xB0 + _ch(c), 0x2B, _7b(n)]; },\r\n    damper: function(c, b) { if (typeof b == 'undefined') b = true; return [0xB0 + _ch(c), 0x40, b ? 127 : 0]; },\r\n    portamento: function(c, b) { if (typeof b == 'undefined') b = true; return [0xB0 + _ch(c), 0x41, b ? 127 : 0]; },\r\n    sostenuto: function(c, b) { if (typeof b == 'undefined') b = true; return [0xB0 + _ch(c), 0x42, b ? 127 : 0]; },\r\n    soft: function(c, b) { if (typeof b == 'undefined') b = true; return [0xB0 + _ch(c), 0x43, b ? 127 : 0]; },\r\n    legato: function(c, b) { if (typeof b == 'undefined') b = true; return [0xB0 + _ch(c), 0x44, b ? 127 : 0]; },\r\n    hold2: function(c, b) { if (typeof b == 'undefined') b = true; return [0xB0 + _ch(c), 0x45, b ? 127 : 0]; },\r\n    soundVariation: function(c, n) { return [0xB0 + _ch(c), 0x46, _7bn(n)]; },\r\n    filterResonance: function(c, n) { return [0xB0 + _ch(c), 0x47, _7bn(n)]; },\r\n    releaseTime: function(c, n) { return [0xB0 + _ch(c), 0x48, _7bn(n)]; },\r\n    attackTime: function(c, n) { return [0xB0 + _ch(c), 0x49, _7bn(n)]; },\r\n    brightness: function(c, n) { return [0xB0 + _ch(c), 0x4A, _7bn(n)]; },\r\n    decayTime: function(c, n) { return [0xB0 + _ch(c), 0x4B, _7bn(n)]; },\r\n    vibratoRate: function(c, n) { return [0xB0 + _ch(c), 0x4C, _7bn(n)]; },\r\n    vibratoDepth: function(c, n) { return [0xB0 + _ch(c), 0x4D, _7bn(n)]; },\r\n    vibratoDelay: function(c, n) { return [0xB0 + _ch(c), 0x4E, _7bn(n)]; },\r\n    ptc: function(c, n) { return [0xB0 + _ch(c), 0x54, _7bn(n)]; },\r\n    dataIncr: function(c) { return [0xB0 + _ch(c), 0x60, 0]; },\r\n    dataDecr: function(c) { return [0xB0 + _ch(c), 0x61, 0]; },\r\n    nrpnLSB: function(c, n) { return [0xB0 + _ch(c), 0x62, _7b(n)]; },\r\n    nrpnMSB: function(c, n) { return [0xB0 + _ch(c), 0x63, _7b(n)]; },\r\n    rpnLSB: function(c, n) { return [0xB0 + _ch(c), 0x64, _7b(n)]; },\r\n    rpnMSB: function(c, n) { return [0xB0 + _ch(c), 0x65, _7b(n)]; },\r\n    allSoundOff: function(c) { return [0xB0 + _ch(c), 0x78, 0]; },\r\n    resetAllControllers: function(c) { return [0xB0 + _ch(c), 0x79, 0]; },\r\n    localControl: function(c, b) { if (typeof b == 'undefined') b = true; return [0xB0 + _ch(c), 0x7a, b ? 127 : 0]; },\r\n    allNotesOff: function(c) { return [0xB0 + _ch(c), 0x7b, 0]; },\r\n    omni: function(c, b) { if (typeof b == 'undefined') b = true; return [0xB0 + _ch(c), b ? 0x7d : 0x7c, 0]; },\r\n    mono: function(c, n) { if (typeof n == 'undefined') n = 1; return [0xB0 + _ch(c), 0x7e, _7b(n)]; },\r\n    poly: function(c) { return [0xB0 + _ch(c), 0x7f, 0]; }\r\n  };\r\n  function _splitMasterTuning(a, b, c, d) {\r\n    if (typeof b != 'undefined') return [_7b(a), _7b(b), _7b(c), _7b(d)];\r\n    if (a != parseInt(a) || a < 0 || a > 0xffff) _bad(a);\r\n    a = parseInt(a);\r\n    return [(a >> 12) & 0xf, (a >> 8) & 0xf, (a >> 4) & 0xf, a & 0xf];\r\n  }\r\n  function _gsxg16b(x) { // -1 <= x <= 1\r\n    _float(x);\r\n    x = Math.round(x * 0x10000 + 0x4000);\r\n    return x < 0 ? 0 : x > 0xffff ? 0xffff : x;\r\n  }\r\n  var _helperNC = { // no channel\r\n    mtc: function(t) { return [0xF1, _mtc(t)]; },\r\n    songPosition: function(n, l) { return typeof l == 'undefined' ? [0xF2, _lsb(n), _msb(n)] : [0xF2, _7b(l), _7b(n)]; },\r\n    songSelect: function(n) { return [0xF3, _7b(n)]; },\r\n    tune: function() { return [0xF6]; },\r\n    clock: function() { return [0xF8]; },\r\n    start: function() { return [0xFA]; },\r\n    continue: function() { return [0xFB]; },\r\n    stop: function() { return [0xFC]; },\r\n    active: function() { return [0xFE]; },\r\n    reset: function() { return [0xFF]; }\r\n  };\r\n  var _helperSX = { // SysEx\r\n    sxIdRequest: function() { return [0xF0, 0x7E, this._sxid, 0x06, 0x01, 0xF7]; },\r\n    sxTuningDumpRequest: function(n, k) { return typeof k == 'undefined' ?\r\n      [0xF0, 0x7E, this._sxid, 0x08, 0x00, _7b(n), 0xF7] : [0xF0, 0x7E, this._sxid, 0x08, 0x03, _7b(n), _7b(k), 0xF7]; },\r\n    sxFullFrame: function(t) { return [0xF0, 0x7F, this._sxid, 0x01, 0x01, _hrtype(t), t.getMinute(), t.getSecond(), t.getFrame(), 0xF7]; },\r\n    sxMasterVolume: function(n, l) { return typeof l == 'undefined' ?\r\n      [0xF0, 0x7F, this._sxid, 0x04, 0x01, _lsb(n), _msb(n), 0xF7] : [0xF0, 0x7F, this._sxid, 0x04, 0x01, _7b(l), _7b(n), 0xF7]; },\r\n    sxMasterVolumeF: function(x) { return _helperSX.sxMasterVolume.call(this, MIDI.to14b(_01(x))); },\r\n    sxMasterFineTuning: function(n, l) { return typeof l == 'undefined' ?\r\n      [0xF0, 0x7F, this._sxid, 0x04, 0x03, _lsb(n), _msb(n), 0xF7] : [0xF0, 0x7F, this._sxid, 0x04, 0x03, _7b(l), _7b(n), 0xF7]; },\r\n    sxMasterFineTuningF: function(x) { return _helperSX.sxMasterFineTuning.call(this, MIDI.to14b(_01((x % 1 + 1) / 2, x))); },\r\n    sxMasterCoarseTuning: function(n) { return [0xF0, 0x7F, this._sxid, 0x04, 0x04, 0x00, _7b(n), 0xF7]; },\r\n    sxMasterCoarseTuningF: function(x) { return _helperSX.sxMasterCoarseTuning.call(this, 0x40 + (x - x % 1)); },\r\n    sxNoteTuning: function(a, b, c, d) { return b == parseInt(b) ?\r\n      [0xF0, _rt(d), this._sxid, 0x08, 0x07, _7b(a), _7b(b)].concat(_ntu(c), [0xF7]) :\r\n      [0xF0, 0x7F, this._sxid, 0x08, 0x02, _7b(a)].concat(_ntu(b), [0xF7]); },\r\n    sxNoteTuningF: function(a, b, c, d) { return b == parseInt(b) ?\r\n      _helperSX.sxNoteTuning.call(this, a, b, _f2ntu(c), d) : _helperSX.sxNoteTuning.call(this, a, _f2ntu(b)); },\r\n    sxNoteTuningHZ: function(a, b, c, d) { return b == parseInt(b) ?\r\n      _helperSX.sxNoteTuning.call(this, a, b, _hz2ntu(c), d) : _helperSX.sxNoteTuning.call(this, a, _hz2ntu(b)); },\r\n    sxScaleTuning1: function(a, b, c) { return a == parseInt(a) ?\r\n      [0xF0, _rt(c), this._sxid, 0x08, 0x08].concat(_to777(_16b(a)), _12x7(b), [0xF7]) :\r\n      _helperSX.sxScaleTuning1.call(this, 0xffff, a, b); },\r\n    sxScaleTuning1F: function(a, b, c) { if (a != parseInt(a)) return _helperSX.sxScaleTuning1F.call(this, 0xffff, a, b);\r\n      var v = []; for (var i = 0; i < b.length; i++) {\r\n        if (b[i] < -0.64 || b[i] > 0.63) throw RangeError('Out of range: ' + b[i]);\r\n        v.push(Math.floor(b[i] * 100 + 64)); }\r\n      return _helperSX.sxScaleTuning1.call(this, a, v, c); },\r\n    sxScaleTuning2: function(a, b, c) { return a == parseInt(a) ?\r\n      [0xF0, _rt(c), this._sxid, 0x08, 0x09].concat(_to777(_16b(a)), _12x14(b), [0xF7]) :\r\n      _helperSX.sxScaleTuning2.call(this, 0xffff, a, b); },\r\n    sxScaleTuning2F: function(a, b, c) { if (a != parseInt(a)) return _helperSX.sxScaleTuning2F.call(this, 0xffff, a, b);\r\n      var v = []; for (var i = 0; i < b.length; i++) {\r\n        var x = (b[i] + 1) / 2;\r\n        if (x < -1 || x > 1) throw RangeError('Out of range: ' + b[i]);\r\n        v.push(MIDI.to14b((b[i] + 1) / 2)); }\r\n      return _helperSX.sxScaleTuning2.call(this, a, v, c); },\r\n    sxGM: function(gm) { if (typeof gm == 'undefined') gm = 1; return [0xF0, 0x7E, this._sxid, 0x09, gm ? gm == 2 ? 3 : 1 : 2, 0xf7]; },\r\n    sxGS: function(arg) { var arr = typeof arg == 'undefined' ? [0x40, 0, 0x7F, 0] : arg instanceof Array ? arg : arguments;\r\n      var c = 0; var a = [0xf0, 0x41, this._sxid, 0x42, 0x12];\r\n      for (var i = 0; i < arr.length; i++) { var x = _7b(arr[i]); a.push(x); c += x; }\r\n      c %= 128; a.push(c ? 128 - c : 0); a.push(0xf7); return a; },\r\n    sxXG: function(arg) { var arr = typeof arg == 'undefined' ? [0, 0, 0x7E, 0] : arg instanceof Array ? arg : arguments;\r\n      var sxid = this._sxid == 0x7f ? 0 : this._sxid;\r\n      if (sxid > 15) _throw('Bad Yamaha device number: ' + sxid);\r\n      var a = [0xf0, 0x43, 16 + sxid, 0x4c];\r\n      for (var i = 0; i < arr.length; i++) a.push(_7b(arr[i])); a.push(0xf7); return a; },\r\n    sxMidiSoft: function(n, s) {\r\n      var a = [0xf0, 0x00, 0x20, 0x24, 0x00, _7b(n || 0)];\r\n      s = typeof s == 'undefined' ? '' : '' + s;\r\n      for (var i = 0; i < s.length; i++) a.push(_7b(s.charCodeAt(i)));\r\n      a.push(0xf7); return a; },\r\n    gsMasterVolume: function(n) { return _helperSX.sxGS.call(this, [0x40, 0, 4, _7b(n)]); },\r\n    gsMasterVolumeF: function(x) { return _helperSX.gsMasterVolume.call(this, MIDI.to7b(_01(x))); },\r\n    gsMasterFineTuning: function(a, b, c, d) { a = _splitMasterTuning(a, b, c, d); return _helperSX.sxGS.call(this, [0x40, 0, 0, a[0], a[1], a[2], a[3]]); },\r\n    gsMasterFineTuningF: function(x) { return _helperSX.gsMasterFineTuning.call(this, _gsxg16b(x % 1)); },\r\n    gsMasterCoarseTuning: function(n) { return _helperSX.sxGS.call(this, [0x40, 0, 5, _7b(n)]); },\r\n    gsMasterCoarseTuningF: function(x) { return _helperSX.gsMasterCoarseTuning.call(this, 0x40 + (x - x % 1)); },\r\n    gsOctaveTuning: function(c, n, x) { return _helperSX.sxGS.call(this, [0x40, 0x10 + [1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 11, 12, 13, 14, 15][_ch(c)], 0x40 + MIDI.octaveValue(n), _7b(x)]); },\r\n    gsOctaveTuningF: function(c, n, x) { if (x < -0.64 || x > 0.63) throw RangeError('Out of range: ' + x);\r\n      return _helperSX.gsOctaveTuning.call(this, c, n, Math.floor(x * 100 + 64)); },\r\n    xgMasterVolume: function(n) { return _helperSX.sxXG.call(this, [0, 0, 4, _7b(n)]); },\r\n    xgMasterVolumeF: function(x) { return _helperSX.xgMasterVolume.call(this, MIDI.to7b(_01(x))); },\r\n    xgMasterFineTuning: function(a, b, c, d) { a = _splitMasterTuning(a, b, c, d); return _helperSX.sxXG.call(this, [0, 0, 0, a[0], a[1], a[2], a[3]]); },\r\n    xgMasterFineTuningF: function(x) { return _helperSX.xgMasterFineTuning.call(this, _gsxg16b(x % 1)); },\r\n    xgMasterCoarseTuning: function(n) { return _helperSX.sxXG.call(this, [0, 0, 6, _7b(n)]); },\r\n    xgMasterCoarseTuningF: function(x) { return _helperSX.xgMasterCoarseTuning.call(this, 0x40 + (x - x % 1)); },\r\n    xgOctaveTuning: function(c, n, x) { return _helperSX.sxXG.call(this, [8, _ch(c), 0x41 + MIDI.octaveValue(n), _7b(x)]); },\r\n    xgOctaveTuningF: function(c, n, x) { if (x < -0.64 || x > 0.63) throw RangeError('Out of range: ' + x);\r\n      return _helperSX.xgOctaveTuning.call(this, c, n, Math.floor(x * 100 + 64)); }\r\n  };\r\n  _helperSX.sxScaleTuning = _helperSX.sxScaleTuning2;\r\n  _helperSX.sxScaleTuningF = _helperSX.sxScaleTuning2F;\r\n  _helperSX.sxMasterTranspose = _helperSX.sxMasterCoarseTuning;\r\n  _helperSX.sxMasterTransposeF = _helperSX.sxMasterCoarseTuningF;\r\n  _helperSX.gsMasterTranspose = _helperSX.gsMasterCoarseTuning;\r\n  _helperSX.gsMasterTransposeF = _helperSX.gsMasterCoarseTuningF;\r\n  _helperSX.xgMasterTranspose = _helperSX.xgMasterCoarseTuning;\r\n  _helperSX.xgMasterTransposeF = _helperSX.xgMasterCoarseTuningF;\r\n  var _helperGCH = { // compound messages\r\n    bank: function(c, m, l) { return typeof l == 'undefined' ?\r\n      [_helperCH.bankMSB(c, _msb(m)), _helperCH.bankLSB(c, _lsb(m))] : [_helperCH.bankMSB(c, m), _helperCH.bankLSB(c, l)]; },\r\n    modF: function(c, x) { return _helperGCH.mod(c, MIDI.to14b(x)); },\r\n    mod: function(c, m, l) { return typeof l == 'undefined' ?\r\n      [_helperCH.modMSB(c, _msb(m)), _helperCH.modLSB(c, _lsb(m))] : [_helperCH.modMSB(c, m), _helperCH.modLSB(c, l)]; },\r\n    breathF: function(c, x) { return _helperGCH.breath(c, MIDI.to14b(x)); },\r\n    breath: function(c, m, l) { return typeof l == 'undefined' ?\r\n      [_helperCH.breathMSB(c, _msb(m)), _helperCH.breathLSB(c, _lsb(m))] : [_helperCH.breathMSB(c, m), _helperCH.breathLSB(c, l)]; },\r\n    footF: function(c, x) { return _helperGCH.foot(c, MIDI.to14b(x)); },\r\n    foot: function(c, m, l) { return typeof l == 'undefined' ?\r\n      [_helperCH.footMSB(c, _msb(m)), _helperCH.footLSB(c, _lsb(m))] : [_helperCH.footMSB(c, m), _helperCH.footLSB(c, l)]; },\r\n    portamentoTimeF: function(c, x) { return _helperGCH.portamentoTime(c, MIDI.to14b(x)); },\r\n    portamentoTime: function(c, m, l) { return typeof l == 'undefined' ?\r\n      [_helperCH.portamentoMSB(c, _msb(m)), _helperCH.portamentoLSB(c, _lsb(m))] : [_helperCH.portamentoMSB(c, m), _helperCH.portamentoLSB(c, l)]; },\r\n    dataF: function(c, x) { return _helperGCH.data(c, MIDI.to14b(x)); },\r\n    data: function(c, m, l) { return typeof l == 'undefined' ?\r\n      [_helperCH.dataMSB(c, _msb(m)), _helperCH.dataLSB(c, _lsb(m))] : [_helperCH.dataMSB(c, m), _helperCH.dataLSB(c, l)]; },\r\n    volumeF: function(c, x) { return _helperGCH.volume(c, MIDI.to14b(x)); },\r\n    volume: function(c, m, l) { return typeof l == 'undefined' ?\r\n      [_helperCH.volumeMSB(c, _msb(m)), _helperCH.volumeLSB(c, _lsb(m))] : [_helperCH.volumeMSB(c, m), _helperCH.volumeLSB(c, l)]; },\r\n    balanceF: function(c, x) { return _helperGCH.balance(c, MIDI.to14b((x + 1) / 2)); },\r\n    balance: function(c, m, l) { return typeof l == 'undefined' ?\r\n      [_helperCH.balanceMSB(c, _msb(m)), _helperCH.balanceLSB(c, _lsb(m))] : [_helperCH.balanceMSB(c, m), _helperCH.balanceLSB(c, l)]; },\r\n    panF: function(c, x) { return _helperGCH.pan(c, MIDI.to14b((x + 1) / 2)); },\r\n    pan: function(c, m, l) { return typeof l == 'undefined' ?\r\n      [_helperCH.panMSB(c, _msb(m)), _helperCH.panLSB(c, _lsb(m))] : [_helperCH.panMSB(c, m), _helperCH.panLSB(c, l)]; },\r\n    expressionF: function(c, x) { return _helperGCH.expression(c, MIDI.to14b(x)); },\r\n    expression: function(c, m, l) { return typeof l == 'undefined' ?\r\n      [_helperCH.expressionMSB(c, _msb(m)), _helperCH.expressionLSB(c, _lsb(m))] : [_helperCH.expressionMSB(c, m), _helperCH.expressionLSB(c, l)]; },\r\n    nrpn: function(c, m, l) { return typeof l == 'undefined' ?\r\n      [_helperCH.nrpnMSB(c, _msb(m)), _helperCH.nrpnLSB(c, _lsb(m))] : [_helperCH.nrpnMSB(c, m), _helperCH.nrpnLSB(c, l)]; },\r\n    rpn: function(c, m, l) { return typeof l == 'undefined' ?\r\n      [_helperCH.rpnMSB(c, _msb(m)), _helperCH.rpnLSB(c, _lsb(m))] : [_helperCH.rpnMSB(c, m), _helperCH.rpnLSB(c, l)]; },\r\n    rpnPitchBendRange: function(c, m, l) { return _helperGCH.rpn(c, 0, 0).concat(_helperGCH.data(c, m, l)); },\r\n    rpnPitchBendRangeF: function(c, x) { return _helperGCH.rpnPitchBendRange(c, _7b(x - x % 1), Math.floor((x % 1) * 100)); },\r\n    rpnFineTuning: function(c, m, l) { return _helperGCH.rpn(c, 0, 1).concat(_helperGCH.data(c, m, l)); },\r\n    rpnFineTuningF: function(c, x) { return _helperGCH.rpn(c, 0, 1).concat(_helperGCH.dataF(c, (x % 1 + 1) / 2)); },\r\n    rpnCoarseTuning: function(c, m) { return _helperGCH.rpn(c, 0, 2).concat([_helperCH.dataMSB(c, m)]); },\r\n    rpnCoarseTuningF: function(c, x) { return _helperGCH.rpn(c, 0, 2).concat([_helperCH.dataMSB(c, 0x40 + (x - x % 1))]); },\r\n    rpnTuning: function(c, n, m, l) { return _helperGCH.rpnCoarseTuning(c, n).concat(_helperGCH.rpnFineTuning(c, m, l)); },\r\n    rpnTuningF: function(c, x) { return _helperGCH.rpnCoarseTuningF(c, x).concat(_helperGCH.rpnFineTuningF(c, x)); },\r\n    rpnTuningA: function(c, a) { return _helperGCH.rpnTuningF(c, MIDI.shift(a)); },\r\n    rpnSelectTuningProgram: function(c, n) { return _helperGCH.rpn(c, 0, 3).concat([_helperCH.dataMSB(c, n)]); },\r\n    rpnSelectTuningBank: function(c, n) { return _helperGCH.rpn(c, 0, 4).concat([_helperCH.dataMSB(c, n)]); },\r\n    rpnSelectTuning: function(c, n, k) { return typeof k == 'undefined' ?\r\n      _helperGCH.rpnSelectTuningProgram(c, n) : _helperGCH.rpnSelectTuningBank(c, n).concat(_helperGCH.rpnSelectTuningProgram(c, k)); },\r\n    rpnModulationDepthRange: function(c, m, l) { return _helperGCH.rpn(c, 0, 5).concat(_helperGCH.data(c, m, l)); },\r\n    rpnModulationDepthRangeF: function(c, x) { return _helperGCH.rpnModulationDepthRange(c, _7b(x - x % 1), Math.floor((x % 1) * 128)); },\r\n    rpnNull: function(c) { return _helperGCH.rpn(c, 0x7f, 0x7f); },\r\n    mode1: function(c) { return [ _helperCH.omni(c, true), _helperCH.poly(c) ]; },\r\n    mode2: function(c) { return [ _helperCH.omni(c, true), _helperCH.mono(c) ]; },\r\n    mode3: function(c) { return [ _helperCH.omni(c, false), _helperCH.poly(c) ]; },\r\n    mode4: function(c) { return [ _helperCH.omni(c, false), _helperCH.mono(c) ]; }\r\n  };\r\n  _helperGCH.rpnTranspose = _helperGCH.rpnCoarseTuningF;\r\n  var _helperSXX = { // compound messages no channel\r\n    sxMasterTuning: function(n, m, l) { return [_helperSX.sxMasterCoarseTuning.call(this, n), _helperSX.sxMasterFineTuning.call(this, m, l)]; },\r\n    sxMasterTuningF: function(x) { return [_helperSX.sxMasterCoarseTuningF.call(this, x), _helperSX.sxMasterFineTuningF.call(this, x)]; },\r\n    gsMasterTuningF: function(x) { return [_helperSX.gsMasterCoarseTuningF.call(this, x), _helperSX.gsMasterFineTuningF.call(this, x)]; },\r\n    xgMasterTuningF: function(x) { return [_helperSX.xgMasterCoarseTuningF.call(this, x), _helperSX.xgMasterFineTuningF.call(this, x)]; },\r\n    sxMasterTuningA: function(a) { return _helperSXX.sxMasterTuningF.call(this, MIDI.shift(a)); },\r\n    gsMasterTuningA: function(a) { return _helperSXX.gsMasterTuningF.call(this, MIDI.shift(a)); },\r\n    xgMasterTuningA: function(a) { return _helperSXX.xgMasterTuningF.call(this, MIDI.shift(a)); },\r\n    gsScaleTuning: function(c, a) { var out = []; if (a.length != 12) throw RangeError('Wrong input size: ' + a.length);\r\n      for (var i = 0; i < 12; i++) out.push(_helperSX.gsOctaveTuning.call(this, c, i, a[i])); return out; },\r\n    gsScaleTuningF: function(c, a) { var out = []; if (a.length != 12) throw RangeError('Wrong input size: ' + a.length);\r\n      for (var i = 0; i < 12; i++) out.push(_helperSX.gsOctaveTuningF.call(this, c, i, a[i])); return out; },\r\n    xgScaleTuning: function(c, a) { var out = []; if (a.length != 12) throw RangeError('Wrong input size: ' + a.length);\r\n      for (var i = 0; i < 12; i++) out.push(_helperSX.xgOctaveTuning.call(this, c, i, a[i])); return out; },\r\n    xgScaleTuningF: function(c, a) { var out = []; if (a.length != 12) throw RangeError('Wrong input size: ' + a.length);\r\n      for (var i = 0; i < 12; i++) out.push(_helperSX.xgOctaveTuningF.call(this, c, i, a[i])); return out; }\r\n  };\r\n  function _smf(ff, dd) {\r\n    var midi = new MIDI();\r\n    midi.ff = _8b(ff);\r\n    midi.dd = typeof dd == 'undefined' ? '' : _8bs(dd);\r\n    return midi;\r\n  }\r\n  var _helperSMF = { // Standard MIDI File events\r\n    smf: function(arg) {\r\n      if (arg instanceof MIDI) return new MIDI(arg);\r\n      var arr = arg instanceof Array ? arg : arguments;\r\n      var ff = _8b(arr[0]);\r\n      var dd = '';\r\n      if (arr.length == 2) dd = _2s(arr[1]);\r\n      else if (arr.length > 2) dd = _2s(Array.prototype.slice.call(arr, 1));\r\n      return _smf(ff, dd);\r\n    },\r\n    smfSeqNumber: function(dd) {\r\n      if (dd == parseInt(dd)) {\r\n        if (dd < 0 || dd > 0xffff) throw RangeError('Sequence number out of range: ' + dd);\r\n        dd = String.fromCharCode(dd >> 8) + String.fromCharCode(dd & 0xff);\r\n      }\r\n      else {\r\n        dd = '' + dd;\r\n        if (dd.length == 0) dd = '\\x00\\x00';\r\n        else if (dd.length == 1) dd = '\\x00' + dd;\r\n        else if (dd.length > 2) throw RangeError('Sequence number out of range' + _smftxt(dd));\r\n      }\r\n      return _smf(0, dd);\r\n    },\r\n    smfText: function(dd) { return _smf(1, JZZ.lib.toUTF8(dd)); },\r\n    smfCopyright: function(dd) { return _smf(2, JZZ.lib.toUTF8(dd)); },\r\n    smfSeqName: function(dd) { return _smf(3, JZZ.lib.toUTF8(dd)); },\r\n    smfInstrName: function(dd) { return _smf(4, JZZ.lib.toUTF8(dd)); },\r\n    smfLyric: function(dd) { return _smf(5, JZZ.lib.toUTF8(dd)); },\r\n    smfMarker: function(dd) { return _smf(6, JZZ.lib.toUTF8(dd)); },\r\n    smfCuePoint: function(dd) { return _smf(7, JZZ.lib.toUTF8(dd)); },\r\n    smfProgName: function(dd) { return _smf(8, JZZ.lib.toUTF8(dd)); },\r\n    smfDevName: function(dd) { return _smf(9, JZZ.lib.toUTF8(dd)); },\r\n    smfChannelPrefix: function(dd) {\r\n      if (dd == parseInt(dd)) {\r\n        _validateChannel(dd);\r\n        dd = String.fromCharCode(dd);\r\n      }\r\n      else {\r\n        dd = '' + dd;\r\n        if (dd.length == 0) dd = '\\x00';\r\n        else if (dd.length > 1 || dd.charCodeAt(0) > 15) throw RangeError('Channel number out of range' + _smftxt(dd));\r\n      }\r\n      return _smf(32, dd);\r\n    },\r\n    smfMidiPort: function(dd) {\r\n      if (dd == parseInt(dd)) {\r\n        if (dd < 0 || dd > 127) throw RangeError('Port number out of range: ' + dd);\r\n        dd = String.fromCharCode(dd);\r\n      }\r\n      else {\r\n        dd = '' + dd;\r\n        if (dd.length == 0) dd = '\\x00';\r\n        else if (dd.length > 1 || dd.charCodeAt(0) > 127) throw RangeError('Port number out of range' + _smftxt(dd));\r\n      }\r\n      return _smf(33, dd);\r\n    },\r\n    smfEndOfTrack: function(dd) {\r\n      if (_2s(dd) != '') throw RangeError('Unexpected data' + _smftxt(_2s(dd)));\r\n      return _smf(47);\r\n    },\r\n    smfTempo: function(dd) { // microseconds per quarter note\r\n      if (('' + dd).length == 3) return _smf(81, dd);\r\n      if (dd == parseInt(dd) && dd > 0 && dd <= 0xffffff) {\r\n        return _smf(81, String.fromCharCode(dd >> 16) + String.fromCharCode((dd >> 8) & 0xff) + String.fromCharCode(dd & 0xff));\r\n      }\r\n      throw RangeError('Out of range' + _smftxt(_2s(dd)));\r\n    },\r\n    smfBPM: function(bpm) { return _helperSMF.smfTempo(Math.round(60000000.0 / bpm)); },\r\n    smfSMPTE: function(dd) {\r\n      if (dd instanceof SMPTE) return _smf(84, String.fromCharCode(dd.hour) + String.fromCharCode(dd.minute) + String.fromCharCode(dd.second) + String.fromCharCode(dd.frame) + String.fromCharCode((dd.quarter % 4) * 25));\r\n      var s = '' + dd;\r\n      if (s.length == 5) {\r\n        return _smf(84, dd);\r\n      }\r\n      var arr = dd instanceof Array ? dd : Array.prototype.slice.call(arguments);\r\n      arr.splice(0, 0, 30);\r\n      return _helperSMF.smfSMPTE(new SMPTE(arr));\r\n    },\r\n    smfTimeSignature: function(a, b, c, d) {\r\n      var nn, dd, cc, bb;\r\n      var m = ('' + a ).match(/^\\s*(\\d+)\\s*\\/\\s*(\\d+)\\s*$/);\r\n      if (m) {\r\n        nn = parseInt(m[1]);\r\n        dd = parseInt(m[2]);\r\n        if (nn > 0 && nn < 0x100 && dd > 0 && !(dd & (dd - 1))) {\r\n          cc = dd; dd = 0;\r\n          for (cc >>= 1; cc; cc >>= 1) dd++;\r\n          cc = b == parseInt(b) ? b : 24;\r\n          bb = c == parseInt(c) ? c : 8;\r\n          return _smf(88, String.fromCharCode(nn) + String.fromCharCode(dd) + String.fromCharCode(cc) + String.fromCharCode(bb));\r\n        }\r\n        else if (('' + a ).length == 4) return _smf(88, a);\r\n      }\r\n      else if (a == parseInt(a) && b == parseInt(b)) {\r\n        if (a > 0 && a < 0x100 && b > 0 && !(b & (b - 1))) {\r\n          nn = a;\r\n          dd = 0;\r\n          cc = b;\r\n          for (cc >>= 1; cc; cc >>= 1) dd++;\r\n          cc = c == parseInt(c) ? c : 24;\r\n          bb = d == parseInt(d) ? d : 8;\r\n          return _smf(88, String.fromCharCode(nn) + String.fromCharCode(dd) + String.fromCharCode(cc) + String.fromCharCode(bb));\r\n        }\r\n        else if (('' + a ).length == 4) return _smf(88, a);\r\n        a = a + '/' + b;\r\n      }\r\n      else if (('' + a ).length == 4) return _smf(88, a);\r\n      throw RangeError('Wrong time signature' + _smftxt(_2s('' + a)));\r\n    },\r\n    smfKeySignature: function(dd) {\r\n      dd = '' + dd;\r\n      var m = dd.match(/^\\s*([A-H][b#]?)\\s*(|maj|major|dur|m|min|minor|moll)\\s*$/i);\r\n      if (m) {\r\n        var sf = {\r\n          CB: 0, GB: 1, DB: 2, AB: 3, EB: 4, BB: 5, F: 6, C: 7, G: 8, D: 9, A: 10,\r\n          E:11, B: 12, H: 12, 'F#': 13, 'C#': 14, 'G#': 15, 'D#': 16, 'A#': 17\r\n        }[m[1].toUpperCase()];\r\n        var mi = { '': 0, MAJ: 0, MAJOR: 0, DUR: 0, M: 1, MIN: 1, MINOR: 1, MOLL: 1}[m[2].toUpperCase()];\r\n        if (typeof sf != 'undefined' && typeof mi != 'undefined') {\r\n          if (mi) sf -= 3;\r\n          sf -= 7;\r\n          if (sf >= -7 && sf < 0) dd = String.fromCharCode(256 + sf) + String.fromCharCode(mi);\r\n          else if (sf >= 0 && sf <= 7) dd = String.fromCharCode(sf) + String.fromCharCode(mi);\r\n        }\r\n      }\r\n      if (dd.length == 2 && dd.charCodeAt(1) <= 1 && (dd.charCodeAt(0) <= 7 || dd.charCodeAt(0) <= 255 && dd.charCodeAt(0) >= 249)) return _smf(89, dd);\r\n      throw RangeError('Incorrect key signature' + _smftxt(dd));\r\n    },\r\n    smfSequencer: function(dd) { return _smf(127, _2s(dd)); }\r\n  };\r\n\r\n  var _helpers = {};\r\n  function _copyHelperNC(name, func) {\r\n    MIDI[name] = function() { return new MIDI(func.apply(this, arguments)); };\r\n    _helpers[name] = function() { return this.send(func.apply(this, arguments)); };\r\n  }\r\n  function _copyHelperSMF(name, func) {\r\n    MIDI[name] = function() { return func.apply(this, arguments); };\r\n    _helpers[name] = function() { return this.send(func.apply(this, arguments)); };\r\n  }\r\n  function _copyHelperGNC(name, func) {\r\n    MIDI[name] = function() {\r\n      var i;\r\n      var g = [];\r\n      var a = func.apply(this, arguments);\r\n      for (i = 0; i < a.length; i++) g.push(new MIDI(a[i]));\r\n      return g;\r\n    };\r\n    _helpers[name] = function() {\r\n      var a = func.apply(this, arguments);\r\n      var g = this;\r\n      for (var i = 0; i < a.length; i++) g = g.send(a[i]);\r\n      return g;\r\n    };\r\n  }\r\n  function _copyHelperMPE(name, func) {\r\n    MIDI[name] = function() {\r\n      return new MIDI(func.apply(this, typeof this._ch == 'undefined' ? arguments : [this._ch].concat(Array.prototype.slice.call(arguments))));\r\n    };\r\n    _helpers[name] = function() {\r\n      if (typeof this._master != 'undefined') {\r\n        var msg = new MIDI(func.apply(this, [this._master].concat(Array.prototype.slice.call(arguments))));\r\n        msg._mpe = msg[1];\r\n        return this.send(msg);\r\n      }\r\n      return this.send(func.apply(this, typeof this._ch == 'undefined' ? arguments : [this._ch].concat(Array.prototype.slice.call(arguments))));\r\n    };\r\n  }\r\n  function _copyHelperCH(name, func) {\r\n    MIDI[name] = function() {\r\n      return new MIDI(func.apply(this, typeof this._ch == 'undefined' ? arguments : [this._ch].concat(Array.prototype.slice.call(arguments))));\r\n    };\r\n    _helpers[name] = function() {\r\n      if (typeof this._master != 'undefined') {\r\n        var chan;\r\n        var args = Array.prototype.slice.call(arguments);\r\n        if (args.length < func.length) args = [this._master].concat(args);\r\n        else {\r\n          chan = _7bn(args[0]);\r\n          args[0] = this._master;\r\n        }\r\n        var msg = new MIDI(func.apply(this, args));\r\n        msg._mpe = chan;\r\n        return this.send(msg);\r\n      }\r\n      return this.send(func.apply(this, typeof this._ch == 'undefined' ? arguments : [this._ch].concat(Array.prototype.slice.call(arguments))));\r\n    };\r\n  }\r\n  function _copyHelperGCH(name, func) {\r\n    MIDI[name] = function() {\r\n      var i;\r\n      var g = [];\r\n      var a = func.apply(this, typeof this._ch == 'undefined' ? arguments : [this._ch].concat(Array.prototype.slice.call(arguments)));\r\n      for (i = 0; i < a.length; i++) g.push(new MIDI(a[i]));\r\n      return g;\r\n    };\r\n    _helpers[name] = function() {\r\n      var i;\r\n      var a;\r\n      var g;\r\n      if (typeof this._master != 'undefined') {\r\n        var chan;\r\n        var args = Array.prototype.slice.call(arguments);\r\n        if (args.length < func.length) args = [this._master].concat(args);\r\n        else {\r\n          chan = _7bn(args[0]);\r\n          args[0] = this._master;\r\n        }\r\n        a = func.apply(this, args);\r\n        g = this;\r\n        for (i = 0; i < a.length; i++) {\r\n          var msg = MIDI(a[i]);\r\n          msg._mpe = chan;\r\n          g = g.send(msg);\r\n        }\r\n        return g;\r\n      }\r\n      a = func.apply(this, typeof this._ch == 'undefined' ? arguments : [this._ch].concat(Array.prototype.slice.call(arguments)));\r\n      g = this;\r\n      for (i = 0; i < a.length; i++) g = g.send(a[i]);\r\n      return g;\r\n    };\r\n  }\r\n\r\n  _for(_helperNC, function(n) { _copyHelperNC(n, _helperNC[n]); });\r\n  _for(_helperSX, function(n) { _copyHelperNC(n, _helperSX[n]); });\r\n  _for(_helperSMF, function(n) { _copyHelperSMF(n, _helperSMF[n]); });\r\n  _for(_helperSXX, function(n) { _copyHelperGNC(n, _helperSXX[n]); });\r\n  _for(_helperMPE, function(n) { _copyHelperMPE(n, _helperMPE[n]); });\r\n  _for(_helperCH, function(n) { _copyHelperCH(n, _helperCH[n]); });\r\n  _for(_helperGCH, function(n) { _copyHelperGCH(n, _helperGCH[n]); });\r\n\r\n  function _copyMidiHelpers(M) {\r\n    _for(_helpers, function(n) { M.prototype[n] = _helpers[n]; });\r\n  }\r\n  _copyMidiHelpers(_M);\r\n\r\n  var _channelMap = { a:10, b:11, c:12, d:13, e:14, f:15, A:10, B:11, C:12, D:13, E:14, F:15 };\r\n  for (k = 0; k < 16; k++) _channelMap[k] = k;\r\n  MIDI.prototype.getChannel = function() {\r\n    if (this.ff == 0x20 && this.dd.length == 1 && this.dd.charCodeAt(0) < 16) return this.dd.charCodeAt(0);\r\n    var c = this[0];\r\n    if (typeof c == 'undefined' || c < 0x80 || c > 0xef) return;\r\n    return c & 15;\r\n  };\r\n  MIDI.prototype.setChannel = function(x) {\r\n    x = _channelMap[x];\r\n    if (typeof x == 'undefined') return this;\r\n    if (this.ff == 0x20) this.dd = String.fromCharCode(x);\r\n    else {\r\n      var c = this[0];\r\n      if (typeof c != 'undefined' && c >= 0x80 && c <= 0xef) this[0] = (c & 0xf0) | x;\r\n    }\r\n    return this;\r\n  };\r\n  MIDI.prototype.getNote = function() {\r\n    var c = this[0];\r\n    if (typeof c == 'undefined' || c < 0x80 || c > 0xaf) return;\r\n    return this[1];\r\n  };\r\n  MIDI.prototype.setNote = function(x) {\r\n    var c = this[0];\r\n    if (typeof c == 'undefined' || c < 0x80 || c > 0xaf) return this;\r\n    x = MIDI.noteValue(x);\r\n    if (typeof x != 'undefined') this[1] = x;\r\n    return this;\r\n  };\r\n  MIDI.prototype.getVelocity = function() {\r\n    var c = this[0];\r\n    if (typeof c == 'undefined' || c < 0x80 || c > 0x9f) return;\r\n    return this[2];\r\n  };\r\n  MIDI.prototype.setVelocity = function(x) {\r\n    var c = this[0];\r\n    if (typeof c == 'undefined' || c < 0x80 || c > 0x9f) return this;\r\n    x = parseInt(x);\r\n    if (x >= 0 && x < 128) this[2] = x;\r\n    return this;\r\n  };\r\n  MIDI.prototype.getSysExId = function() {\r\n    if (this[0] == 0xf0) return this[2];\r\n  };\r\n  MIDI.prototype.setSysExId = function(x) {\r\n    if (this[0] == 0xf0 && this.length > 2) {\r\n      x = parseInt(x);\r\n      if (x >= 0 && x < 128) this[2] = x;\r\n    }\r\n    return this;\r\n  };\r\n  MIDI.prototype.getData = function() {\r\n    if (typeof this.dd != 'undefined') return this.dd.toString();\r\n  };\r\n  MIDI.prototype.setData = function(dd) {\r\n    this.dd = _2s(dd);\r\n    return this;\r\n  };\r\n  function _is_yamaha_smf(ff, dd) { return ff == 0x7f && typeof dd != 'undefined' && dd.charCodeAt(0) == 0x43 && dd.charCodeAt(1) == 0x7b; }\r\n  function _is_yamaha_chord(ff, dd) { return _is_yamaha_smf(ff, dd) && dd.charCodeAt(2) == 1; }\r\n  function _yamaha_chord(a, b) {\r\n    if (a >= 0 && a <= 0x7f && b >= 0 && b <= 0x7f) {\r\n      var c = a & 0xf;\r\n      var d = a >> 4;\r\n      if (c > 0 && c < 8 && d < 7) c = ['C', 'D', 'E', 'F', 'G', 'A', 'B'][c - 1] + ['bbb', 'bb', 'b', '', '#', '##', '###'][d];\r\n      else return '-';\r\n      if (b > 34) return c + '?';\r\n      else return c + [\r\n        '', '6', 'Maj7', 'Maj7(#11)', '(9)', 'Maj7(9)', '6(9)', 'aug', 'm', 'm6', 'm7', 'm7b5',\r\n        'm(9)', 'm7(9)', 'm7(11)', 'm+7', 'm+7(9)', 'dim', 'dim7', '7', '7sus4', '7b5', '7(9)',\r\n        '7(#11)', '7(13)', '7(b9)', '7(b13)', '7(#9)', 'Maj7aug', '7aug', '1+8', '1+5', 'sus4', '1+2+5', 'cc'][b];\r\n    }\r\n    return '-';\r\n  }\r\n  MIDI.prototype.getText = function() {\r\n    if (typeof this.dd != 'undefined') {\r\n      if (_is_yamaha_chord(this.ff, this.dd)) return _yamaha_chord(this.dd.charCodeAt(3), this.dd.charCodeAt(4));\r\n      else return JZZ.lib.fromUTF8(this.dd);\r\n    }\r\n    if (this.isMidiSoft()) {\r\n      var s = [];\r\n      for (var i = 6; i < this.length - 1; i++) s.push(String.fromCharCode(this[i]));\r\n      return s.join('');\r\n    }\r\n  };\r\n  MIDI.prototype.setText = function(dd) {\r\n    this.dd = JZZ.lib.toUTF8(dd);\r\n    return this;\r\n  };\r\n  MIDI.prototype.getTempo = function() {\r\n    if (this.ff == 0x51 && typeof this.dd != 'undefined') {\r\n      return this.dd.charCodeAt(0) * 65536 + this.dd.charCodeAt(1) * 256 + this.dd.charCodeAt(2);\r\n    }\r\n  };\r\n  MIDI.prototype.getBPM = function() {\r\n    var ms = this.getTempo();\r\n    if (ms) return 60000000 / ms;\r\n  };\r\n  MIDI.prototype.getTimeSignature = function() {\r\n    if (this.ff == 0x58 && typeof this.dd != 'undefined') {\r\n       return [this.dd.charCodeAt(0), 1 << this.dd.charCodeAt(1)];\r\n    }\r\n  };\r\n  MIDI.prototype.getTimeSignature4 = function() {\r\n    if (this.ff == 0x58 && typeof this.dd != 'undefined') {\r\n       var a = [this.dd.charCodeAt(0), 1 << this.dd.charCodeAt(1)];\r\n       if (this.dd.length == 4) a.push(this.dd.charCodeAt(2), this.dd.charCodeAt(3));\r\n       return a;\r\n    }\r\n  };\r\n  MIDI.prototype.getKeySignature = function() {\r\n    if (this.ff == 0x59 && typeof this.dd != 'undefined') {\r\n      var sf = this.dd.charCodeAt(0);\r\n      var mi = this.dd.charCodeAt(1);\r\n      if (sf & 0x80) sf = sf - 0x100;\r\n      if (sf >= -7 && sf <= 7 && mi >= 0 && mi <= 1) {\r\n        return [sf,\r\n          ['Cb', 'Gb', 'Db', 'Ab', 'Eb', 'Bb', 'F', 'C', 'G', 'D', 'A', 'E', 'B', 'F#', 'C#', 'G#', 'D#', 'A#'][mi ? sf + 10 : sf + 7],\r\n          !!mi\r\n        ];\r\n      }\r\n    }\r\n  };\r\n\r\n  MIDI.prototype.isNoteOn = function() {\r\n    var c = this[0];\r\n    if (typeof c == 'undefined' || c < 0x90 || c > 0x9f) return false;\r\n    return this[2] > 0 ? true : false;\r\n  };\r\n  MIDI.prototype.isNoteOff = function() {\r\n    var c = this[0];\r\n    if (typeof c == 'undefined' || c < 0x80 || c > 0x9f) return false;\r\n    if (c < 0x90) return true;\r\n    return this[2] == 0 ? true : false;\r\n  };\r\n  MIDI.prototype.isSysEx = function() {\r\n    return this[0] == 0xf0;\r\n  };\r\n  MIDI.prototype.isFullSysEx = function() {\r\n    return this[0] == 0xf0 && this[this.length - 1] == 0xf7;\r\n  };\r\n  MIDI.prototype.isMidiSoft = function() {\r\n    return this.isFullSysEx() && this[1] == 0 && this[2] == 0x20 && this[3] == 0x24 && this[4] == 0;\r\n  };\r\n  MIDI.prototype.isSMF = function() {\r\n    return this.ff >= 0 && this.ff <= 0x7f;\r\n  };\r\n  MIDI.prototype.isEOT = function() {\r\n    return this.ff == 0x2f;\r\n  };\r\n  MIDI.prototype.isText = function() {\r\n    return this.ff == 1;\r\n  };\r\n  MIDI.prototype.isCopyright = function() {\r\n    return this.ff == 2;\r\n  };\r\n  MIDI.prototype.isSeqName = function() {\r\n    return this.ff == 3;\r\n  };\r\n  MIDI.prototype.isInstrName = function() {\r\n    return this.ff == 4;\r\n  };\r\n  MIDI.prototype.isLyric = function() {\r\n    return this.ff == 5;\r\n  };\r\n  MIDI.prototype.isMarker = function() {\r\n    return this.ff == 6;\r\n  };\r\n  MIDI.prototype.isCuePoint = function() {\r\n    return this.ff == 7;\r\n  };\r\n  MIDI.prototype.isProgName = function() {\r\n    return this.ff == 8;\r\n  };\r\n  MIDI.prototype.isDevName = function() {\r\n    return this.ff == 9;\r\n  };\r\n  MIDI.prototype.isTempo = function() {\r\n    return this.ff == 0x51;\r\n  };\r\n  MIDI.prototype.isTimeSignature = function() {\r\n    return this.ff == 0x58;\r\n  };\r\n  MIDI.prototype.isKeySignature = function() {\r\n    return this.ff == 0x59;\r\n  };\r\n  MIDI.prototype.isGmReset = function() {\r\n    return this.match([0xf0, 0x7e, [0, 0], 0x09, [0, 0], 0xf7]);\r\n  };\r\n  MIDI.prototype.isGsReset = function() {\r\n    return this.match([0xf0, 0x41, [0, 0], 0x42, 0x12, 0x40, 0, 0x7f, 0, 0x41, 0xf7]);\r\n  };\r\n  MIDI.prototype.isXgReset = function() {\r\n    return this.match([0xf0, 0x43, [0x10, 0xf0], 0x4c, 0, 0, 0x7e, 0, 0xf7]);\r\n  };\r\n  MIDI.prototype.match = function(a) {\r\n    var i, m;\r\n    for (i = 0; i < a.length; i++) {\r\n      m = a[i][1];\r\n      if (typeof m == 'undefined') {\r\n        if (this[i] != a[i]) return false;\r\n      }\r\n      else {\r\n        if ((this[i] & m) != (a[i][0] & m)) return false;\r\n      }\r\n    }\r\n    return true;\r\n  };\r\n\r\n  function _s2a(x) {\r\n    var a = [];\r\n    for (var i = 0; i < x.length; i++) {\r\n      a[i] = x.charCodeAt(i);\r\n    }\r\n    return a;\r\n  }\r\n  function _a2s(x) {\r\n    var a = '';\r\n    for (var i = 0; i < x.length; i++) {\r\n      a += String.fromCharCode(x[i]);\r\n    }\r\n    return a;\r\n  }\r\n  function _2s(x) {\r\n    return x instanceof Array ? _a2s(x) : typeof x == 'undefined' ? '' : '' + x;\r\n  }\r\n  function _s2n(x) {\r\n    var n = 0;\r\n    for (var i = 0; i < x.length; i++) n = (n << 8) + x.charCodeAt(i);\r\n    return n;\r\n  }\r\n\r\n  function __hex(x) { return (x < 16 ? '0' : '') + x.toString(16); }\r\n  function _hex(x) {\r\n    var a = [];\r\n    for (var i = 0; i < x.length; i++) a.push(__hex(x[i]));\r\n    return a.join(' ');\r\n  }\r\n  function _hexx(x) {\r\n    var a = [];\r\n    for (var i = 0; i < x.length; i++) {\r\n      if (i && i % 4 == 0) a.push(' ');\r\n      a.push(__hex(x[i]));\r\n    }\r\n    return a.join('');\r\n  }\r\n  function _toLine(s) {\r\n    var out = '';\r\n    for (var i = 0; i < s.length; i++) {\r\n      if (s[i] == '\\n') out += '\\\\n';\r\n      else if (s[i] == '\\r') out += '\\\\r';\r\n      else if (s[i] == '\\t') out += '\\\\t';\r\n      else if (s.charCodeAt(i) < 32) out += '\\\\x' + __hex(s.charCodeAt(i));\r\n      else out += s[i];\r\n    }\r\n    return out;\r\n  }\r\n  function _smfhex(dd) {\r\n    return dd.length ? ': ' + _hex(_s2a(dd)) : '';\r\n  }\r\n  function _smftxt(dd) {\r\n    return dd.length ? ': ' + _toLine(JZZ.lib.fromUTF8(dd)) : '';\r\n  }\r\n  MIDI.prototype.label = function(s) {\r\n    this.lbl = this.lbl ? this.lbl + ', ' + s : s;\r\n    return this;\r\n  };\r\n  MIDI.prototype.toString = function() {\r\n    return this.lbl ? this._str() + ' (' + this.lbl + ')' : this._str();\r\n  };\r\n  MIDI.prototype._str = function() {\r\n    var s, t;\r\n    if (!this.length) {\r\n      if (typeof this.ff == 'undefined') return 'empty';\r\n      s = 'ff' + __hex(this.ff);\r\n    }\r\n    else s = _hex(this);\r\n    t = this._string();\r\n    return t ? s + ' -- ' + t : s;\r\n  };\r\n  MIDI.prototype._string = function() {\r\n    var s = '';\r\n    var ss;\r\n    if (!this.length) {\r\n      if (this.ff == 0) s += 'Sequence Number: ' + _s2n(this.dd);\r\n      else if (this.ff > 0 && this.ff < 10) s += ['', 'Text', 'Copyright', 'Sequence Name', 'Instrument Name', 'Lyric', 'Marker', 'Cue Point', 'Program Name', 'Device Name'][this.ff] + _smftxt(this.dd);\r\n      else if (this.ff == 32) s += 'Channel Prefix' + _smfhex(this.dd);\r\n      else if (this.ff == 33) s += 'MIDI Port' + _smfhex(this.dd);\r\n      else if (this.ff == 47) s += 'End of Track' + _smfhex(this.dd);\r\n      else if (this.ff == 81) {\r\n        var bpm = Math.round(this.getBPM() * 100) / 100;\r\n        s += 'Tempo: ' + bpm + ' bpm';\r\n      }\r\n      else if (this.ff == 84) s += 'SMPTE Offset: ' + _smptetxt(_s2a(this.dd));\r\n      else if (this.ff == 88) {\r\n        var d = 1 << this.dd.charCodeAt(1);\r\n        s += 'Time Signature: ' + this.dd.charCodeAt(0) + '/' + d;\r\n        s += ' ' + this.dd.charCodeAt(2) + ' ' + this.dd.charCodeAt(3);\r\n      }\r\n      else if (this.ff == 89) {\r\n        s += 'Key Signature: ';\r\n        var ks = this.getKeySignature();\r\n        if (ks) {\r\n          s += ks[1];\r\n          if (ks[2]) s += ' min';\r\n        }\r\n        else s+= 'invalid';\r\n      }\r\n      else if (this.ff == 127) {\r\n        if (this.dd.charCodeAt(0) == 0x43) {\r\n          if (this.dd.charCodeAt(1) == 0x7b) {\r\n            s += '[XF:' + __hex(this.dd.charCodeAt(2)) + ']';\r\n            ss = { 0: 'Version', 1: 'Chord', 2: 'Rehearsal Mark', 3: 'Phrase Mark', 4: 'Max Phrase Mark',\r\n              5: 'Fingering Number', 12: 'Guide Track Flag', 16: 'Guitar Info', 18: 'Chord Voicing',\r\n              127: 'XG Song Data Number' }[this.dd.charCodeAt(2)];\r\n            s += ss ? ' ' + ss : '';\r\n            s += ': ';\r\n            if (this.dd.charCodeAt(2) == 0) {\r\n              return s + this.dd.substring(3, 7) + ' ' + _hex(_s2a(this.dd.substring(7)));\r\n            }\r\n            if (this.dd.charCodeAt(2) == 1) {\r\n              return s + this.getText();\r\n            }\r\n            return s + _hex(_s2a(this.dd.substring(3)));\r\n          }\r\n        }\r\n        s += 'Sequencer Specific' + _smfhex(this.dd);\r\n      }\r\n      else s += 'SMF' + _smfhex(this.dd);\r\n      return s;\r\n    }\r\n    ss = {\r\n      241: 'MIDI Time Code',\r\n      242: 'Song Position',\r\n      243: 'Song Select',\r\n      244: 'Undefined',\r\n      245: 'Undefined',\r\n      246: 'Tune request',\r\n      248: 'Timing clock',\r\n      249: 'Undefined',\r\n      250: 'Start',\r\n      251: 'Continue',\r\n      252: 'Stop',\r\n      253: 'Undefined',\r\n      254: 'Active Sensing',\r\n      255: 'Reset'\r\n    }[this[0]];\r\n    if (ss) return ss;\r\n    if (this.isMidiSoft()) {\r\n      ss = _toLine(this.getText());\r\n      if (ss) ss = ' ' + ss;\r\n      return '[K:' + __hex(this[5]) + ']' + ss;\r\n    }\r\n    var c = this[0] >> 4;\r\n    ss = {8: 'Note Off', 10: 'Aftertouch', 12: 'Program Change', 13: 'Channel Aftertouch', 14: 'Pitch Wheel'}[c];\r\n    if (ss) return ss;\r\n    if (c == 9) return this[2] ? 'Note On' : 'Note Off';\r\n    if (c != 11) return s;\r\n    ss = {\r\n      0: 'Bank Select MSB',\r\n      1: 'Modulation Wheel MSB',\r\n      2: 'Breath Controller MSB',\r\n      4: 'Foot Controller MSB',\r\n      5: 'Portamento Time MSB',\r\n      6: 'Data Entry MSB',\r\n      7: 'Channel Volume MSB',\r\n      8: 'Balance MSB',\r\n      10: 'Pan MSB',\r\n      11: 'Expression Controller MSB',\r\n      12: 'Effect Control 1 MSB',\r\n      13: 'Effect Control 2 MSB',\r\n      16: 'General Purpose Controller 1 MSB',\r\n      17: 'General Purpose Controller 2 MSB',\r\n      18: 'General Purpose Controller 3 MSB',\r\n      19: 'General Purpose Controller 4 MSB',\r\n      31: 'Karaoke',\r\n      32: 'Bank Select LSB',\r\n      33: 'Modulation Wheel LSB',\r\n      34: 'Breath Controller LSB',\r\n      36: 'Foot Controller LSB',\r\n      37: 'Portamento Time LSB',\r\n      38: 'Data Entry LSB',\r\n      39: 'Channel Volume LSB',\r\n      40: 'Balance LSB',\r\n      42: 'Pan LSB',\r\n      43: 'Expression Controller LSB',\r\n      44: 'Effect control 1 LSB',\r\n      45: 'Effect control 2 LSB',\r\n      48: 'General Purpose Controller 1 LSB',\r\n      49: 'General Purpose Controller 2 LSB',\r\n      50: 'General Purpose Controller 3 LSB',\r\n      51: 'General Purpose Controller 4 LSB',\r\n      64: 'Damper Pedal',\r\n      65: 'Portamento',\r\n      66: 'Sostenuto',\r\n      67: 'Soft Pedal',\r\n      68: 'Legato',\r\n      69: 'Hold 2',\r\n      70: 'Sound Variation',\r\n      71: 'Filter Resonance',\r\n      72: 'Release Time',\r\n      73: 'Attack Time',\r\n      74: 'Brightness',\r\n      75: 'Decay Time',\r\n      76: 'Vibrato Rate',\r\n      77: 'Vibrato Depth',\r\n      78: 'Vibrato Delay',\r\n      79: 'Sound Controller 10',\r\n      80: 'General Purpose Controller 5',\r\n      81: 'General Purpose Controller 6',\r\n      82: 'General Purpose Controller 7',\r\n      83: 'General Purpose Controller 8',\r\n      84: 'Portamento Control',\r\n      88: 'High Resolution Velocity Prefix',\r\n      91: 'Effects 1 Depth',\r\n      92: 'Effects 2 Depth',\r\n      93: 'Effects 3 Depth',\r\n      94: 'Effects 4 Depth',\r\n      95: 'Effects 5 Depth',\r\n      96: 'Data Increment',\r\n      97: 'Data Decrement',\r\n      98: 'Non-Registered Parameter Number LSB',\r\n      99: 'Non-Registered Parameter Number MSB',\r\n      100: 'Registered Parameter Number LSB',\r\n      101: 'Registered Parameter Number MSB',\r\n      120: 'All Sound Off',\r\n      121: 'Reset All Controllers',\r\n      122: 'Local Control On/Off',\r\n      123: 'All Notes Off',\r\n      124: 'Omni Mode Off',\r\n      125: 'Omni Mode On',\r\n      126: 'Mono Mode On',\r\n      127: 'Poly Mode On'\r\n    }[this[1]];\r\n    if (this[1] >= 64 && this[1] <= 69) ss += this[2] < 64 ? ' Off' : ' On';\r\n    if (!ss) ss = 'Undefined';\r\n    return ss;\r\n  };\r\n  MIDI.prototype._stamp = function(obj) { this._from.push(obj._orig ? obj._orig : obj); return this; };\r\n  MIDI.prototype._unstamp = function(obj) {\r\n    if (typeof obj == 'undefined') this._from = [];\r\n    else {\r\n      if (obj._orig) obj = obj._orig;\r\n      var i = this._from.indexOf(obj);\r\n      if (i > -1) this._from.splice(i, 1);\r\n    }\r\n    return this;\r\n  };\r\n  MIDI.prototype._stamped = function(obj) {\r\n    if (obj._orig) obj = obj._orig;\r\n    for (var i = 0; i < this._from.length; i++) if (this._from[i] == obj) return true;\r\n    return false;\r\n  };\r\n\r\n  JZZ.MIDI = MIDI;\r\n  _J.prototype.MIDI = MIDI;\r\n\r\n  function _clear_ctxt(gr) {\r\n    if (typeof gr == 'undefined') this._cc = {};\r\n    else this._cc[gr] = {};\r\n  }\r\n  function _rpn_txt(msb, lsb) {\r\n    var a = typeof msb == 'undefined' ? '??' : __hex(msb);\r\n    var b = typeof lsb == 'undefined' ? '??' : __hex(lsb);\r\n    var c = {\r\n      '0000': 'Pitch Bend Sensitivity',\r\n      '0001': 'Channel Fine Tuning',\r\n      '0002': 'Channel Coarse Tuning',\r\n      '0003': 'Select Tuning Program',\r\n      '0004': 'Select Tuning Bank',\r\n      '0005': 'Vibrato Depth Range',\r\n      '7f7f': 'NONE'\r\n    }[a + '' + b];\r\n    return 'RPN ' + a + ' ' + b + (c ? ': ' + c : '');\r\n  }\r\n  function _nrpn_txt(msb, lsb) {\r\n    var a = typeof msb == 'undefined' ? '??' : __hex(msb);\r\n    var b = typeof lsb == 'undefined' ? '??' : __hex(lsb);\r\n    return 'NRPN ' + a + ' ' + b;\r\n  }\r\n  function _m2_str(a) {\r\n    var i;\r\n    var s = '';\r\n    for (i = 0; i < a.length; i++) {\r\n      if (!a[i]) break;\r\n      s += String.fromCharCode(a[i]);\r\n    }\r\n    return JZZ.lib.fromUTF8(s);\r\n  }\r\n  function _read_ctxt(msg) {\r\n    var mmm, kk, tt, st, n, a, s;\r\n    var gr = 'x';\r\n    var ch = 'x';\r\n    if (msg.isMidi2) {\r\n      tt = msg[0] >> 4;\r\n      gr = (msg[0] & 15).toString(16);\r\n      kk = gr;\r\n      if (!this._cc[kk]) this._cc[kk] = {};\r\n      if (tt == 2) {\r\n        mmm = new MIDI(msg.slice(1));\r\n      }\r\n      else if (tt == 3) {\r\n        st = msg[1] >> 4;\r\n        n = msg[1] & 15;\r\n        a = msg.slice(2, 2 + n);\r\n        if (st == 0) {\r\n          mmm = new MIDI([0xf0].concat(a, [0xf7]));\r\n          this._cc[kk].sx = undefined;\r\n        }\r\n        if (st == 1) {\r\n          this._cc[kk].sx = a;\r\n        }\r\n        if (st == 2) {\r\n          if (this._cc[kk].sx) this._cc[kk].sx = this._cc[kk].sx.concat(a);\r\n        }\r\n        if (st == 3) {\r\n          if (this._cc[kk].sx) {\r\n            a = this._cc[kk].sx.concat(a);\r\n            mmm = new MIDI([0xf0].concat(a, [0xf7]));\r\n            this._cc[kk].sx = undefined;\r\n          }\r\n        }\r\n      }\r\n      else if (tt == 4) {\r\n        st = msg[1] >> 4;\r\n        ch = (msg[1] & 15).toString(16);\r\n        kk = gr + ch;\r\n        if (!this._cc[kk]) this._cc[kk] = {};\r\n        if (st == 12) {\r\n          if (msg[3] & 1) {\r\n            this._cc[kk].bm = msg[6];\r\n            this._cc[kk].bl = msg[7];\r\n          }\r\n          msg._bm = this._cc[kk].bm;\r\n          msg._bl = this._cc[kk].bl;\r\n          if (JZZ.MIDI.programName) msg.label(JZZ.MIDI.programName(msg[4], msg._bm, msg._bl));\r\n        }\r\n      }\r\n      else if (tt == 13) {\r\n        st = msg[1] >> 6;\r\n        if (!(msg[1] & 0x30)) ch = (msg[1] & 15).toString(16);\r\n        kk = gr + ch;\r\n        if (!this._cc[kk]) this._cc[kk] = {};\r\n        a = msg.slice(4);\r\n        if (st == 0) {\r\n          msg.label(_m2_str(a));\r\n          this._cc[kk].tx = undefined;\r\n        }\r\n        if (st == 1) {\r\n          this._cc[kk].tx = a;\r\n        }\r\n        if (st == 2) {\r\n          if (this._cc[kk].tx) this._cc[kk].tx = this._cc[kk].tx.concat(a);\r\n        }\r\n        if (st == 3) {\r\n          if (this._cc[kk].tx) {\r\n            a = this._cc[kk].tx.concat(a);\r\n            msg.label(_m2_str(a));\r\n            this._cc[kk].tx = undefined;\r\n          }\r\n        }\r\n      }\r\n    }\r\n    else mmm = msg;\r\n    if (!mmm || !mmm.length || mmm[0] < 0x80) return msg;\r\n    if (mmm[0] == 0xff) { this._clear(); return msg; }\r\n    st = mmm[0] >> 4;\r\n    ch = (mmm[0] & 15).toString(16);\r\n    kk = st == 15 ? gr : gr + ch;\r\n    if (!this._cc[kk]) this._cc[kk] = {};\r\n    if (st == 12) {\r\n      mmm._bm = this._cc[kk].bm;\r\n      mmm._bl = this._cc[kk].bl;\r\n      if (JZZ.MIDI.programName) msg.label(JZZ.MIDI.programName(mmm[1], mmm._bm, mmm._bl));\r\n    }\r\n    else if (st == 11) {\r\n      switch (mmm[1]) {\r\n        case 0: this._cc[kk].bm = mmm[2]; break;\r\n        case 32: this._cc[kk].bl = mmm[2]; break;\r\n        case 98: this._cc[kk].nl = mmm[2]; this._cc[kk].rn = 'n'; break;\r\n        case 99: this._cc[kk].nm = mmm[2]; this._cc[kk].rn = 'n'; break;\r\n        case 100: this._cc[kk].rl = mmm[2]; this._cc[kk].rn = 'r'; break;\r\n        case 101: this._cc[kk].rm = mmm[2]; this._cc[kk].rn = 'r'; break;\r\n        case 6: case 38: case 96: case 97:\r\n          if (this._cc[kk].rn == 'r') {\r\n            mmm._rm = this._cc[kk].rm;\r\n            mmm._rl = this._cc[kk].rl;\r\n            msg.label(_rpn_txt(this._cc[kk].rm, this._cc[kk].rl));\r\n          }\r\n          if (this._cc[kk].rn == 'n') {\r\n            mmm._nm = this._cc[kk].rm;\r\n            mmm._nl = this._cc[kk].nl;\r\n            msg.label(_nrpn_txt(this._cc[kk].nm, this._cc[kk].nl));\r\n          }\r\n          break;\r\n      }\r\n    }\r\n    else if (mmm.isFullSysEx()) {\r\n      if (mmm[1] == 0x7f) {\r\n        if (mmm[3] == 4) {\r\n          s = { 1: 'Master Volume', 2: 'Master Balance', 3: 'Master Fine Tuning', 4: 'Master Coarse Tuning' }[mmm[4]];\r\n          if (s) msg.label(s);\r\n        }\r\n        else if (mmm[3] == 8) {\r\n          s = { 2: 'Note Tuning', 7: 'Note Tuning, Bank', 8: 'Scale Tuning, 1 byte format', 9: 'Scale Tuning, 2 byte format' }[mmm[4]];\r\n          if (s) msg.label(s);\r\n        }\r\n      }\r\n      else if (mmm[1] == 0x7e) {\r\n        if (mmm[3] == 6) {\r\n          if (mmm[4] == 1) msg.label('Device ID Request');\r\n          else if (mmm[4] == 2) {\r\n            msg.label('Device ID Response');\r\n          }\r\n        }\r\n        else if (mmm[3] == 8) {\r\n          s = {\r\n            0: 'Bulk Tuning Dump Request', 1: 'Bulk Tuning Dump', 3: 'Bulk Tuning Dump Request, Bank', 4: 'Bulk Tuning Dump, Bank',\r\n            5: 'Scale Tuning Dump, 1 byte format', 6: 'Scale Tuning Dump, 2 byte format',\r\n            7: 'Note Tuning, Bank', 8: 'Scale Tuning, 1 byte format', 9: 'Scale Tuning, 2 byte format'\r\n          }[mmm[4]];\r\n          if (s) msg.label(s);\r\n        }\r\n        else if (mmm[3] == 9) {\r\n          if (mmm[4] == 1) { msg.label('GM1 System On'); this._clear(gr); this._cc[gr].gm = '1'; }\r\n          else if (mmm[4] == 2) { msg.label('GM System Off'); this._clear(gr); this._cc[gr].gm = '0'; }\r\n          else if (mmm[4] == 3) { msg.label('GM2 System On'); this._clear(gr); this._cc[gr].gm = '2'; }\r\n        }\r\n      }\r\n      else if (mmm[1] == 0x43) {\r\n        if ((mmm[2] & 0xf0) == 0x10 && mmm[3] == 0x4c) {\r\n          if (mmm[4] == 0 && mmm[5] == 0 && mmm[6] == 0x7e && mmm[7] == 0) {\r\n            msg.label('XG System On'); this._clear(gr); this._cc[gr].gm = 'Y';\r\n          }\r\n          else if (mmm[4] == 0 && mmm[5] == 0 && mmm[6] == 0) msg.label('XG Master Tuning');\r\n          else if (mmm[4] == 0 && mmm[5] == 0 && mmm[6] == 4) msg.label('XG Master Volume');\r\n          else if (mmm[4] == 0 && mmm[5] == 0 && mmm[6] == 6) msg.label('XG Master Transpose');\r\n          else if (mmm[4] == 8 && mmm[5] < 16 && mmm[6] >= 0x41 && mmm[6] <= 0x4c) msg.label('XG Scale Tuning');\r\n          else  msg.label('XG Parameter');\r\n        }\r\n      }\r\n      else if (mmm[1] == 0x41) {\r\n        if (mmm[3] == 0x42 && mmm[4] == 0x12) {\r\n          if (mmm[5] == 0x40) {\r\n            if (mmm[6] == 0) {\r\n              if (mmm[7] == 0x7f && mmm[8] == 0 && mmm[9] == 0x41) {\r\n                msg.label('GS Reset'); this._clear(gr); this._cc[gr].gm = 'R';\r\n              }\r\n              else if (mmm[7] == 0) msg.label('GS Master Tuning');\r\n              else if (mmm[7] == 4) msg.label('GS Master Volume');\r\n              else if (mmm[7] == 5) msg.label('GS Master Transpose');\r\n              else msg.label('GS Parameter');\r\n            }\r\n            else if ((mmm[6] & 0xf0) == 0x10 && mmm[7] == 0x15) msg.label('GS Drum Part Change');\r\n            else if ((mmm[6] & 0xf0) == 0x10 && mmm[7] >= 0x40 && mmm[7] <= 0x4b) msg.label('GS Scale Tuning');\r\n            else msg.label('GS Parameter');\r\n          }\r\n          if (mmm[5] == 0x41) msg.label('GS Parameter');\r\n        }\r\n      }\r\n    }\r\n    return msg;\r\n  }\r\n  function Context() {\r\n    var self = new _M();\r\n    self._clear = _clear_ctxt;\r\n    self._read = _read_ctxt;\r\n    self._receive = function(msg) { this._emit(this._read(msg)); };\r\n    self.gm = function(g) {\r\n      if (typeof g == 'undefined') g = 'x';\r\n      if (this._cc[g]) return this._cc[g].gm || 0;\r\n      return 0;\r\n    };\r\n    self._clear();\r\n    self._resume();\r\n    return self;\r\n  }\r\n  JZZ.Context = Context;\r\n  _J.prototype.Context = Context;\r\n\r\n  function MPE() {\r\n    var self = this instanceof MPE ? this : self = new MPE();\r\n    self.reset();\r\n    if (arguments.length) MPE.prototype.setup.apply(self, arguments);\r\n    return self;\r\n  }\r\n  MPE.validate = function(arg) {\r\n    var a = arg instanceof Array ? arg : arguments;\r\n    if (a[0] != parseInt(a[0]) || a[0] < 0 || a[0] > 14) throw RangeError('Bad master channel value: ' + a[0]);\r\n    if (a[1] != parseInt(a[1]) || a[1] < 0 || a[0] + a[1] > 15) throw RangeError('Bad zone size value: ' + a[1]);\r\n  };\r\n  MPE.prototype.reset = function() { for (var n = 0; n < 16; n++) this[n] = { band: 0, master: n }; };\r\n  MPE.prototype.setup = function(m, n) {\r\n    MPE.validate(m, n);\r\n    var k;\r\n    var last = m + n;\r\n    if (this[m].master == m && this[m].band == n) return;\r\n    if (!n && !this[m].band) return;\r\n    if (this[m].band) {\r\n      k = m + this[m].band;\r\n      if (last < k) last = k;\r\n    }\r\n    else if (this[m].master == m - 1) {\r\n      k = m - 1;\r\n      k = k + this[k].band;\r\n      if (last < k) last = k;\r\n      this[m - 1] = { band: 0, master: m - 1 };\r\n    }\r\n    else if (this[m].master != m) {\r\n      k = this[m].master;\r\n      k = k + this[k].band;\r\n      if (last < k) last = k;\r\n      this[this[m].master].band = m - this[m].master - 1;\r\n    }\r\n    this[m].master = m;\r\n    this[m].band = n;\r\n    for (k = m + 1; k <= m + n; k++) {\r\n      if (this[k].band && last < k + this[k].band) last = k + this[k].band;\r\n      this[k] = { band: 0, master: m };\r\n    }\r\n    for (; k <= last; k++) this[k] = { band: 0, master: k };\r\n  };\r\n  MPE.prototype.filter = function(msg) {\r\n    var c = msg.getChannel();\r\n    if (!this[c] || !this[this[c].master].band) return msg;\r\n    var m = this[c].master;\r\n    var n = this[m].band;\r\n    var i, j, k;\r\n    if (typeof msg._mpe != 'undefined') {\r\n      k = 256;\r\n      for (i = m + 1; i <= m + n; i++) {\r\n        if (!this[i].notes) {\r\n          if (k > 0) { c = i; k = 0; }\r\n        }\r\n        else {\r\n          if (k > this[i].notes.length) { c = i; k = this[i].notes.length; }\r\n          for (j = 0; j < this[i].notes.length; j++) {\r\n            if (this[i].notes[j] == msg._mpe) { c = i; k = -1; break; }\r\n          }\r\n        }\r\n      }\r\n      msg.setChannel(c);\r\n      msg._mpe = undefined;\r\n    }\r\n    if (c == m) return msg; // bad mpe\r\n    if (msg.isNoteOn()) {\r\n      if (!this[c].notes) this[c].notes = [];\r\n      _push(this[c].notes, msg.getNote());\r\n    }\r\n    else if (msg.isNoteOff()) {\r\n      if (this[c].notes) _pop(this[c].notes, msg.getNote());\r\n    }\r\n    return msg;\r\n  };\r\n  JZZ.MPE = MPE;\r\n\r\n  // JZZ.UMP\r\n\r\n  function UMP(arg) {\r\n    var self = this instanceof UMP ? this : self = new UMP();\r\n    var i;\r\n    if (arg instanceof UMP) {\r\n      self._from = arg._from.slice();\r\n      _for(arg, function(i) { if (i != '_from') self[i] = arg[i]; });\r\n      return self;\r\n    }\r\n    else self._from = [];\r\n    if (typeof arg == 'undefined') arg = [0, 0, 0, 0];\r\n    var arr = arg instanceof Array ? arg : arguments;\r\n    self.length = 0;\r\n    for (i = 0; i < arr.length; i++) {\r\n      n = arr[i];\r\n      if (n != parseInt(n) || n < 0 || n > 255) _throw(arr[i]);\r\n      self.push(n);\r\n    }\r\n    if (self.length != [4, 4, 4, 8, 8, 16, 4, 4, 8, 8, 8, 12, 12, 16, 16, 16][self[0] >> 4]) throw RangeError('Wrong UMP size');\r\n    return self;\r\n  }\r\n  UMP.prototype = [];\r\n  UMP.prototype.constructor = UMP;\r\n  UMP.prototype.isMidi = function() { return 2; };\r\n  UMP.prototype.isMidi2 = true;\r\n  UMP.prototype.dump = function() {\r\n    var i;\r\n    var s = '';\r\n    for (i = 0; i < this.length; i++) s += String.fromCharCode(this[i]);\r\n    return s;\r\n  };\r\n\r\n  function _UMP() {}\r\n  _UMP.prototype = UMP;\r\n  UMP._sxid = 0x7f;\r\n  UMP.sxId = function(id) {\r\n    if (typeof id == 'undefined') id = UMP._sxid;\r\n    if (id == this._sxid) return this;\r\n    id = _7b(id);\r\n    var ret = new _UMP();\r\n    ret._ch = this._ch;\r\n    ret._gr = this._gr;\r\n    ret._sxid = id;\r\n    return ret;\r\n  };\r\n  UMP.ch = function(c) {\r\n    if (c == this._ch || typeof c == 'undefined' && typeof this._ch == 'undefined') return this;\r\n    var ret = new _UMP();\r\n    if (typeof c != 'undefined') c = _ch(c);\r\n    ret._ch = c;\r\n    ret._gr = this._gr;\r\n    ret._sxid = this._sxid;\r\n    return ret;\r\n  };\r\n  UMP.gr = function(g) {\r\n    if (g == this._gr || typeof g == 'undefined' && typeof this._gr == 'undefined') return this;\r\n    var ret = new _UMP();\r\n    if (typeof g != 'undefined') g = _4b(g);\r\n    ret._ch = this._ch;\r\n    ret._gr = g;\r\n    ret._sxid = this._sxid;\r\n    return ret;\r\n  };\r\n  UMP.prototype.getGroup = function() {\r\n    if (!this[0]) return;\r\n    var m = this[0] >> 4;\r\n    if (m == 1 || m == 2 || m == 3 || m == 4 || m == 5 || m == 13) return this[0] & 15;\r\n  };\r\n  var _zeros = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];\r\n  function _32a(a, b, c, d) {\r\n    if (typeof b != 'undefined') return [_8b(a), _8b(b), _8b(c), _8b(d)];\r\n    a = _32b(a);\r\n    return [(a >> 24) & 255, (a >> 16) & 255, (a >> 8) & 255, a & 255];\r\n  }\r\n  function _f_32(x) {\r\n    x = Math.floor(x * 0x100000000);\r\n    return x > 0xffffffff ? 0xffffffff : x < 0 ? 0 : x;\r\n  }\r\n  var _helperNN = {\r\n    noop: function() { return [0, 0, 0, 0]; },\r\n    umpClock: function(n) { n = _16b(n); return [0, 0x10, n >> 8, n & 0xff]; },\r\n    umpTimestamp: function(n) { n = _16b(n); return [0, 0x20, n >> 8, n & 0xff]; },\r\n    umpTicksPQN: function(n) { n = _16b(n); return [0, 0x30, n >> 8, n & 0xff]; },\r\n    umpDelta: function(n) { n = n || 0; n = _20b(n); return [0, 0x40 + (n >> 16), (n >> 8) & 0xff, n & 0xff]; },\r\n    umpStartClip: function() { return [0xf0, 0x20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]; },\r\n    umpEndClip: function() { return [0xf0, 0x21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]; }\r\n  };\r\n  var _helperGN = {\r\n    umpTempo: function(g, n) { return [0xd0 + _4b(g), 0x10, 0, 0].concat(_32a(n), [0, 0, 0, 0, 0, 0, 0, 0]); },\r\n    umpBPM: function(g, n) { return _helperGN.umpTempo(g, Math.round(6000000000 / n)); },\r\n    umpTimeSignature: function(g, a, b) {\r\n      var nn, cc, dd;\r\n      var m = ('' + a ).match(/^\\s*(\\d+)\\s*\\/\\s*(\\d+)\\s*$/);\r\n      if (m) {\r\n        nn = parseInt(m[1]);\r\n        cc = parseInt(m[2]);\r\n      }\r\n      else if (a == parseInt(a) && b == parseInt(b)) {\r\n        nn = parseInt(a);\r\n        cc = parseInt(b);\r\n      }\r\n      if (nn > 0 && nn < 0x100 && cc > 0 && !(cc & (cc - 1))) {\r\n        dd = 0;\r\n        for (cc >>= 1; cc; cc >>= 1) dd++;\r\n        cc = Math.round(nn * 32 / (1 << dd));\r\n        if (cc < 0x100) return [0xd0 + _4b(g), 0x10, 0, 1, nn, dd, cc, 0, 0, 0, 0, 0, 0, 0, 0, 0];\r\n      }\r\n      throw RangeError('Wrong time signature ' + a + (typeof b == 'undefined' ? '' : '/' + b));\r\n    }\r\n  };\r\n  var _helperGNX = {\r\n    umpMetadata: function(g, t) { return _helperGCX.umpCustomText(g, 0, 1, 1, 0, t); },\r\n    umpProjectName: function(g, t) { return _helperGCX.umpCustomText(g, 0, 1, 1, 1, t); },\r\n    umpCompositionName: function(g, t) { return _helperGCX.umpCustomText(g, 0, 1, 1, 2, t); },\r\n    umpClipName: function(g, t) { return _helperGCX.umpCustomText(g, 0, 1, 1, 3, t); },\r\n    umpCopyright: function(g, t) { return _helperGCX.umpCustomText(g, 0, 1, 1, 4, t); },\r\n    umpComposerName: function(g, t) { return _helperGCX.umpCustomText(g, 0, 1, 1, 5, t); },\r\n    umpLyricistName: function(g, t) { return _helperGCX.umpCustomText(g, 0, 1, 1, 6, t); },\r\n    umpArrangerName: function(g, t) { return _helperGCX.umpCustomText(g, 0, 1, 1, 7, t); },\r\n    umpPublisherName: function(g, t) { return _helperGCX.umpCustomText(g, 0, 1, 1, 8, t); },\r\n    umpPerformerName: function(g, t) { return _helperGCX.umpCustomText(g, 0, 1, 1, 9, t); },\r\n    umpAccPerformerName: function(g, t) { return _helperGCX.umpCustomText(g, 0, 1, 1, 10, t); },\r\n    umpRecordingDate: function(g, t) { return _helperGCX.umpCustomText(g, 0, 1, 1, 11, t); },\r\n    umpRecordingLocation: function(g, t) { return _helperGCX.umpCustomText(g, 0, 1, 1, 12, t); },\r\n    umpText: function(g, t) { return _helperGCX.umpCustomText(g, 0, 1, 2, 0, t); },\r\n    umpLyrics: function(g, t) { return _helperGCX.umpCustomText(g, 0, 1, 2, 1, t); },\r\n    umpLyricsLanguage: function(g, t) { return _helperGCX.umpCustomText(g, 0, 1, 2, 2, t); },\r\n    umpRuby: function(g, t) { return _helperGCX.umpCustomText(g, 0, 1, 2, 3, t); },\r\n    umpRubyLanguage: function(g, t) { return _helperGCX.umpCustomText(g, 0, 1, 2, 4, t); },\r\n    umpData: function(g, x, y) {\r\n      if (typeof y == 'undefined') { y = x; x = 0; }\r\n      var i;\r\n      var a = _slice(_bytes(y), 13);\r\n      for (i = 0; i < a.length; i++) a[i] = [0x50 + _4b(g), _umpseqstat(a.length, i) * 16 + a[i].length, _8b(x)].concat(a[i], _zeros).slice(0, 16);\r\n      return a;\r\n    }\r\n  };\r\n  var _noctrl = [0, 6, 32, 38, 98, 99, 100, 101];\r\n  var _helperGC = {\r\n    umpNoteOn: function(g, c, n, v, t, a) {\r\n      if (typeof v == 'undefined')  v = 0xffff;\r\n      t = t || 0; a = a || 0;\r\n      v = _16b(v); a = _16b(a);\r\n      return [0x40 + _4b(g), 0x90 + _ch(c), _7bn(n), _8b(t), v >> 8, v & 255, a >> 8, a & 255];\r\n    },\r\n    umpNoteOff: function(g, c, n, v, t, a) {\r\n      v = v || 0; t = t || 0; a = a || 0;\r\n      v = _16b(v); a = _16b(a);\r\n      return [0x40 + _4b(g), 0x80 + _ch(c), _7bn(n), _8b(t), v >> 8, v & 255, a >> 8, a & 255];\r\n    },\r\n    umpAftertouch: function(g, c, n, x, y, z, w) {\r\n      return [0x40 + _4b(g), 0xa0 + _ch(c), _7bn(n), 0].concat(_32a(x, y, z, w));\r\n    },\r\n    umpAftertouchF: function(g, c, n, x) {\r\n      return _helperGC.umpAftertouch(g, c, n, _f_32(x));\r\n    },\r\n    umpControl: function(g, c, n, x, y, z, w) {\r\n      if (_noctrl.includes(n)) _throw(n);\r\n      return [0x40 + _4b(g), 0xb0 + _ch(c), _7b(n), 0].concat(_32a(x, y, z, w));\r\n    },\r\n    umpPortamento: function(g, c, n) {\r\n      return [0x40 + _4b(g), 0xb0 + _ch(c), 0x54, 0, _7bn(n), 0, 0, 0];\r\n    },\r\n    umpPressure: function(g, c, x, y, z, w) {\r\n      return [0x40 + _4b(g), 0xd0 + _ch(c), 0, 0].concat(_32a(x, y, z, w));\r\n    },\r\n    umpPressureF: function(g, c, x) {\r\n      return _helperGC.umpPressure(g, c, _f_32(x));\r\n    },\r\n    umpProgram: function(g, c, n, msb, lsb) {\r\n      return typeof msb == 'undefined' && typeof lsb == 'undefined' ?\r\n        [0x40 + _4b(g), 0xc0 + _ch(c), 0, 0, _7bn(n), 0, 0, 0] : typeof lsb == 'undefined' ?\r\n        [0x40 + _4b(g), 0xc0 + _ch(c), 0, 1, _7bn(n), 0, _msb(msb), _lsb(msb)] :\r\n        [0x40 + _4b(g), 0xc0 + _ch(c), 0, 1, _7bn(n), 0, _7b(msb), _7b(lsb)];\r\n    },\r\n    umpPitchBend: function(g, c, x, y, z, w) {\r\n      return [0x40 + _4b(g), 0xe0 + _ch(c), 0, 0].concat(_32a(x, y, z, w));\r\n    },\r\n    umpPitchBendF: function(g, c, x) {\r\n      return _helperGC.umpPitchBend(g, c, _f_32((x + 1) / 2));\r\n    },\r\n    umpPnPitchBend: function(g, c, n, x, y, z, w) {\r\n      return [0x40 + _4b(g), 0x60 + _ch(c), _7bn(n), 0].concat(_32a(x, y, z, w));\r\n    },\r\n    umpPnPitchBendF: function(g, c, n, x) {\r\n      return _helperGC.umpPnPitchBend(g, c, n, _f_32((x + 1) / 2));\r\n    },\r\n    umpRPN: function(g, c, b, n, x, y, z, w) {\r\n      return [0x40 + _4b(g), 0x20 + _ch(c), _7b(b), _7b(n)].concat(_32a(x, y, z, w));\r\n    },\r\n    umpNRPN: function(g, c, b, n, x, y, z, w) {\r\n      return [0x40 + _4b(g), 0x30 + _ch(c), _7b(b), _7b(n)].concat(_32a(x, y, z, w));\r\n    },\r\n    umpPnRPN: function(g, c, n, i, x, y, z, w) {\r\n      return [0x40 + _4b(g), 0x00 + _ch(c), _7bn(n), _8b(i)].concat(_32a(x, y, z, w));\r\n    },\r\n    umpPnNRPN: function(g, c, n, i, x, y, z, w) {\r\n      return [0x40 + _4b(g), 0x10 + _ch(c), _7bn(n), _8b(i)].concat(_32a(x, y, z, w));\r\n    },\r\n    umpFineTuning: function(g, c, x, y, z, w) {\r\n      return _helperGC.umpRPN(g, c, 0, 1, x, y, z, w);\r\n    },\r\n    umpFineTuningF: function(g, c, x) {\r\n      return _helperGC.umpFineTuning(g, c, MIDI.to32b(_01((x % 1 + 1) / 2, x)));\r\n    },\r\n    umpCoarseTuning: function(g, c, n) {\r\n      return [0x40 + _4b(g), 0x20 + _ch(c), 0, 2, _7b(n) * 2, 0, 0, 0];\r\n    },\r\n    umpCoarseTuningF: function(g, c, x) {\r\n      return _helperGC.umpCoarseTuning(g, c, 0x40 + (x - x % 1));\r\n    },\r\n    umpTuningProgram: function(g, c, n) {\r\n      return [0x40 + _4b(g), 0x20 + _ch(c), 0, 3, _7b(n) * 2, 0, 0, 0];\r\n    },\r\n    umpTuningBank: function(g, c, n) {\r\n      return [0x40 + _4b(g), 0x20 + _ch(c), 0, 4, _7b(n) * 2, 0, 0, 0];\r\n    },\r\n    umpPnManagement: function(g, c, n, m) {\r\n      var a = m.toString().split('');\r\n      var x = 0;\r\n      for (var i = 0; i < a.length; i++) {\r\n        if (a[i] == 'S' && !(x & 1)) x |= 1;\r\n        else if (a[i] == 'D' && !(x & 2)) x |= 2;\r\n        else { x = m; break; }\r\n      }\r\n      return [0x40 + _4b(g), 0xf0 + _ch(c), _7bn(n), _8b(x), 0, 0, 0, 0];\r\n    }\r\n  };\r\n  _helperGC.umpPnPressure = _helperGC.umpAftertouch;\r\n  _helperGC.umpPnPressureF = _helperGC.umpAftertouchF;\r\n  _helperGC.umpTranspose = _helperGC.umpCoarseTuningF;\r\n  var _helperGCX = {\r\n    umpTuningF: function(g, c, x) { return [_helperGC.umpCoarseTuningF(g, c, x), _helperGC.umpFineTuningF(g, c, x)]; },\r\n    umpTuningA: function(g, c, a) { return _helperGCX.umpTuningF(g, c, MIDI.shift(a)); },\r\n    umpCustomText: function(g, c, d, b, s, t) {\r\n      var i;\r\n      var a = [];\r\n      t = JZZ.lib.toUTF8('' + t);\r\n      for (i = 0; i < t.length; i++) a.push(t.charCodeAt(i));\r\n      a = _slice(a, 12);\r\n      for (i = 0; i < a.length; i++) a[i] = [0xd0 + _4b(g), _umpseqstat(a.length, i) * 64 + (d ? 16 : 0) + _ch(c), b, s].concat(a[i], _zeros).slice(0, 16);\r\n      return a;\r\n    },\r\n    umpCMetadata: function(g, c, t) { return _helperGCX.umpCustomText(g, c, 0, 1, 0, t); },\r\n    umpCProjectName: function(g, c, t) { return _helperGCX.umpCustomText(g, c, 0, 1, 1, t); },\r\n    umpCCompositionName: function(g, c, t) { return _helperGCX.umpCustomText(g, c, 0, 1, 2, t); },\r\n    umpCClipName: function(g, c, t) { return _helperGCX.umpCustomText(g, c, 0, 1, 3, t); },\r\n    umpCCopyright: function(g, c, t) { return _helperGCX.umpCustomText(g, c, 0, 1, 4, t); },\r\n    umpCComposerName: function(g, c, t) { return _helperGCX.umpCustomText(g, c, 0, 1, 5, t); },\r\n    umpCLyricistName: function(g, c, t) { return _helperGCX.umpCustomText(g, c, 0, 1, 6, t); },\r\n    umpCArrangerName: function(g, c, t) { return _helperGCX.umpCustomText(g, c, 0, 1, 7, t); },\r\n    umpCPublisherName: function(g, c, t) { return _helperGCX.umpCustomText(g, c, 0, 1, 8, t); },\r\n    umpCPerformerName: function(g, c, t) { return _helperGCX.umpCustomText(g, c, 0, 1, 9, t); },\r\n    umpCAccPerformerName: function(g, c, t) { return _helperGCX.umpCustomText(g, c, 0, 1, 10, t); },\r\n    umpCRecordingDate: function(g, c, t) { return _helperGCX.umpCustomText(g, c, 0, 1, 11, t); },\r\n    umpCRecordingLocation: function(g, c, t) { return _helperGCX.umpCustomText(g, c, 0, 1, 12, t); },\r\n    umpCText: function(g, c, t) { return _helperGCX.umpCustomText(g, c, 0, 2, 0, t); },\r\n    umpCLyrics: function(g, c, t) { return _helperGCX.umpCustomText(g, c, 0, 2, 1, t); },\r\n    umpCLyricsLanguage: function(g, c, t) { return _helperGCX.umpCustomText(g, c, 0, 2, 2, t); },\r\n    umpCRuby: function(g, c, t) { return _helperGCX.umpCustomText(g, c, 0, 2, 3, t); },\r\n    umpCRubyLanguage: function(g, c, t) { return _helperGCX.umpCustomText(g, c, 0, 2, 4, t); }\r\n  };\r\n\r\n  var _helpersUmp = {};\r\n  function _copyHelperNN(name, func) {\r\n    UMP[name] = function() { return new UMP(func.apply(this, arguments));};\r\n    _helpersUmp[name] = function() { return this.send(func.apply(this, arguments)); };\r\n  }\r\n  function _copyHelperGN(name, func) {\r\n    UMP[name] = function() {\r\n      var args = Array.prototype.slice.call(arguments);\r\n      if (typeof this._gr != 'undefined') args = [this._gr].concat(args);\r\n      return new UMP(func.apply(this, args));\r\n    };\r\n    _helpersUmp[name] = function() {\r\n      var args = Array.prototype.slice.call(arguments);\r\n      if (typeof this._gr != 'undefined') args = [this._gr].concat(args);\r\n      return this.send(func.apply(this, args));\r\n    };\r\n  }\r\n  function _copyHelperGNX(name, func) {\r\n    UMP[name] = function() {\r\n      var args = Array.prototype.slice.call(arguments);\r\n      if (typeof this._gr != 'undefined') args = [this._gr].concat(args);\r\n      var a = func.apply(this, args);\r\n      for (var i = 0; i < a.length; i++) a[i] = new UMP(a[i]);\r\n      return a;\r\n    };\r\n    _helpersUmp[name] = function() {\r\n      var args = Array.prototype.slice.call(arguments);\r\n      if (typeof this._gr != 'undefined') args = [this._gr].concat(args);\r\n      var a = func.apply(this, args);\r\n      for (var i = 0; i < a.length; i++) this.send(a[i]);\r\n      return this;\r\n    };\r\n  }\r\n  function _copyHelperGC(name, func) {\r\n    UMP[name] = function() {\r\n      var args = Array.prototype.slice.call(arguments);\r\n      if (typeof this._gr != 'undefined') args = [this._gr].concat(args);\r\n      if (typeof this._ch != 'undefined') args = [args[0]].concat([this._ch]).concat(args.slice(1));\r\n      return new UMP(func.apply(this, args));\r\n    };\r\n    _helpersUmp[name] = function() {\r\n      var args = Array.prototype.slice.call(arguments);\r\n      if (typeof this._gr != 'undefined') args = [this._gr].concat(args);\r\n      if (typeof this._ch != 'undefined') args = [args[0]].concat([this._ch]).concat(args.slice(1));\r\n      return this.send(func.apply(this, args));\r\n    };\r\n  }\r\n  function _copyHelperGCX(name, func) {\r\n    UMP[name] = function() {\r\n      var args = Array.prototype.slice.call(arguments);\r\n      if (typeof this._gr != 'undefined') args = [this._gr].concat(args);\r\n      if (typeof this._ch != 'undefined') args = [args[0]].concat([this._ch]).concat(args.slice(1));\r\n      var a = func.apply(this, args);\r\n      for (var i = 0; i < a.length; i++) a[i] = new UMP(a[i]);\r\n      return a;\r\n    };\r\n    _helpersUmp[name] = function() {\r\n      var args = Array.prototype.slice.call(arguments);\r\n      if (typeof this._gr != 'undefined') args = [this._gr].concat(args);\r\n      if (typeof this._ch != 'undefined') args = [args[0]].concat([this._ch]).concat(args.slice(1));\r\n      var a = func.apply(this, args);\r\n      for (var i = 0; i < a.length; i++) this.send(a[i]);\r\n      return this;\r\n    };\r\n  }\r\n  function _umpseqstat(n, i) { return n == 1 ? 0 : i == 0 ? 0x1 : i == n - 1 ? 0x3 : 0x2; }\r\n  function _slice(m, n) {\r\n    var a = [];\r\n    for (var x = m; x.length; x = x.slice(n)) a.push(x.slice(0, n));\r\n    return a.length ? a : [[]];\r\n  }\r\n  function _sliceSX(gr, m) {\r\n    var a = _slice(m.slice(1, m.length - 1), 6);\r\n    for (var i = 0; i < a.length; i++) a[i] = new UMP([0x30 + gr, _umpseqstat(a.length, i) * 16 + a[i].length].concat(a[i], _zeros).slice(0, 8));\r\n    return a;\r\n  }\r\n  function _bytes(s) {\r\n    var i;\r\n    var a = [];\r\n    if (typeof s == 'string') for (i = 0; i < s.length; i++) a.push(s.charCodeAt(i));\r\n    else for (i = 0; i < s.length; i++) a.push(s[i]);\r\n    for (i = 0; i < a.length; i++) if (a[i] != parseInt(a[i]) || a[i] < 0 || a[i] > 255) throw RangeError('Bad data');\r\n    return a;\r\n  }\r\n  function _copyHelperSX(name, func) {\r\n    UMP[name] = function() {\r\n      var args = Array.prototype.slice.call(arguments);\r\n      if (typeof this._gr != 'undefined') args = [this._gr].concat(args);\r\n      return _sliceSX(_4b(args[0]), func.apply(this, args.slice(1)));\r\n    };\r\n    _helpersUmp[name] = function() {\r\n      var args = Array.prototype.slice.call(arguments);\r\n      if (typeof this._gr != 'undefined') args = [this._gr].concat(args);\r\n      var a = _sliceSX(_4b(args[0]), func.apply(this, args.slice(1)));\r\n      var g = this;\r\n      for (var i = 0; i < a.length; i++) g = g.send(a[i]);\r\n      return g;\r\n    };\r\n  }\r\n  function _copyHelperSXX(name, func) {\r\n    UMP[name] = function() {\r\n      var args = Array.prototype.slice.call(arguments);\r\n      if (typeof this._gr != 'undefined') args = [this._gr].concat(args);\r\n      var m = func.apply(this, args.slice(1));\r\n      var a = [];\r\n      for (var i = 0; i < m.length; i++) a = a.concat(_sliceSX(_4b(args[0]), m[i]));\r\n      return a;\r\n    };\r\n    _helpersUmp[name] = function() {\r\n      var args = Array.prototype.slice.call(arguments);\r\n      if (typeof this._gr != 'undefined') args = [this._gr].concat(args);\r\n      var m = func.apply(this, args.slice(1));\r\n      var g = this;\r\n      for (var i = 0; i < m.length; i++) {\r\n        var a = _sliceSX(_4b(args[0]), m[i]);\r\n        for (var j = 0; j < a.length; j++) g = g.send(a[j]);\r\n      }\r\n      return g;\r\n    };\r\n  }\r\n  function _copyHelperM1N(name, func) {\r\n    UMP[name] = function() {\r\n      var args = Array.prototype.slice.call(arguments);\r\n      if (typeof this._gr != 'undefined') args = [this._gr].concat(args);\r\n      return new UMP([0x10 + _4b(args[0])].concat(func.apply(this, args.slice(1)), _zeros).slice(0, 4));\r\n    };\r\n    _helpersUmp[name] = function() {\r\n      var args = Array.prototype.slice.call(arguments);\r\n      if (typeof this._gr != 'undefined') args = [this._gr].concat(args);\r\n      return this.send([0x10 + _4b(args[0])].concat(func.apply(this, args.slice(1)), _zeros).slice(0, 4));\r\n    };\r\n  }\r\n  function _copyHelperM1C(name, func) {\r\n    UMP[name] = function() {\r\n      var args = Array.prototype.slice.call(arguments);\r\n      if (typeof this._gr != 'undefined') args = [this._gr].concat(args);\r\n      if (typeof this._ch != 'undefined') args = [args[0]].concat([this._ch]).concat(args.slice(1));\r\n      return new UMP([0x20 + _4b(args[0])].concat(func.apply(this, args.slice(1)), _zeros).slice(0, 4));\r\n    };\r\n    _helpersUmp[name] = function() {\r\n      var args = Array.prototype.slice.call(arguments);\r\n      if (typeof this._gr != 'undefined') args = [this._gr].concat(args);\r\n      if (typeof this._ch != 'undefined') args = [args[0]].concat([this._ch]).concat(args.slice(1));\r\n      return this.send([0x20 + _4b(args[0])].concat(func.apply(this, args.slice(1)), _zeros).slice(0, 4));\r\n    };\r\n  }\r\n  function _copyHelperM1CX(name, func) {\r\n    UMP[name] = function() {\r\n      var args = Array.prototype.slice.call(arguments);\r\n      if (typeof this._gr != 'undefined') args = [this._gr].concat(args);\r\n      if (typeof this._ch != 'undefined') args = [args[0]].concat([this._ch]).concat(args.slice(1));\r\n      var a = func.apply(this, args.slice(1));\r\n      for (var i = 0; i < a.length; i++) a[i] = new UMP([0x20 + _4b(args[0])].concat(a[i], _zeros).slice(0, 4));\r\n      return a;\r\n    };\r\n    _helpersUmp[name] = function() {\r\n      var args = Array.prototype.slice.call(arguments);\r\n      if (typeof this._gr != 'undefined') args = [this._gr].concat(args);\r\n      if (typeof this._ch != 'undefined') args = [args[0]].concat([this._ch]).concat(args.slice(1));\r\n      var a = func.apply(this, args.slice(1));\r\n      var g = this;\r\n      for (var i = 0; i < a.length; i++) g = g.send([0x20 + _4b(args[0])].concat(a[i], _zeros).slice(0, 4));\r\n      return g;\r\n    };\r\n  }\r\n  _for(_helperNN, function(n) { _copyHelperNN(n, _helperNN[n]); });\r\n  _for(_helperGN, function(n) { _copyHelperGN(n, _helperGN[n]); });\r\n  _for(_helperGNX, function(n) { _copyHelperGNX(n, _helperGNX[n]); });\r\n  _for(_helperGC, function(n) { _copyHelperGC(n, _helperGC[n]); });\r\n  _for(_helperGCX, function(n) { _copyHelperGCX(n, _helperGCX[n]); });\r\n  _for(_helperNC, function(n) { _copyHelperM1N(n, _helperNC[n]); });\r\n  _for(_helperMPE, function(n) { _copyHelperM1C(n, _helperMPE[n]); });\r\n  _for(_helperCH, function(n) { _copyHelperM1C(n, _helperCH[n]); });\r\n  _for(_helperGCH, function(n) { _copyHelperM1CX(n, _helperGCH[n]); });\r\n  _for(_helperSX, function(n) { _copyHelperSX(n, _helperSX[n]); });\r\n  _for(_helperSXX, function(n) { _copyHelperSXX(n, _helperSXX[n]); });\r\n\r\n  function _copyUmpHelpers(M) {\r\n    _for(_helpersUmp, function(n) { M.prototype[n] = _helpersUmp[n]; });\r\n  }\r\n  _copyUmpHelpers(_M2);\r\n\r\n  UMP.prototype.getTempo = function() {\r\n    if (this.isTempo()) return (this[4] << 24) + (this[5] << 16) + (this[6] << 8) + this[7];\r\n  };\r\n  UMP.prototype.getBPM = function() {\r\n    var n = this.getTempo();\r\n    if (n) return Math.round(6000000000 / n);\r\n  };\r\n  UMP.prototype.getTimeSignature = function() {\r\n    if (this.isTimeSignature()) return [this[4], 1 << this[5]];\r\n  };\r\n  UMP.prototype.getTicksPQN = function() {\r\n    if (this.isTicksPQN()) return (this[2] << 8) + this[3];\r\n  };\r\n  UMP.prototype.getDelta = function() {\r\n    if (this.isDelta()) return ((this[1] & 15) << 16) + (this[2] << 8) + this[3];\r\n  };\r\n  UMP.prototype.getStatus = function() {\r\n    if (this.isFlex()) return this[1] >> 6;\r\n    if (this.isData() || this.isSX()) return this[1] >> 4;\r\n  };\r\n\r\n  UMP.prototype.isTempo = function() {\r\n    return (this[0] >> 4) == 13 && (this[1] >> 4) == 1 &&  this[2] == 0 &&  this[3] == 0;\r\n  };\r\n  UMP.prototype.isTimeSignature = function() {\r\n    return (this[0] >> 4) == 13 && (this[1] >> 4) == 1 &&  this[2] == 0 &&  this[3] == 1;\r\n  };\r\n  UMP.prototype.isTicksPQN = function() { return this[0] == 0 && (this[1] >> 4) == 3; };\r\n  UMP.prototype.isDelta = function() { return this[0] == 0 && (this[1] >> 4) == 4; };\r\n  UMP.prototype.isStartClip = function() { return this.match([0xf0, 0x20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); };\r\n  UMP.prototype.isEndClip = function() { return this.match([0xf0, 0x21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); };\r\n  UMP.prototype.isData = function() { return (this[0] & 0xf0) == 0x50; };\r\n  UMP.prototype.isFlex = function() { return (this[0] & 0xf0) == 0xd0; };\r\n  UMP.prototype.isText = function() { return (this[0] & 0xf0) == 0xd0 && (this[2] == 1 || this[2] == 2); };\r\n  UMP.prototype.isSX = function() { return (this[0] & 0xf0) == 0x30; };\r\n  UMP.prototype.isNoteOn = function() {\r\n    var c = (this[0] || 0) >> 4;\r\n    var d = (this[1] || 0) >> 4;\r\n    if (c == 4) return d == 9;\r\n    else if (c == 2) return d == 9 && !!this[3];\r\n    return false;\r\n  };\r\n  UMP.prototype.isNoteOff = function() {\r\n    var c = (this[0] || 0) >> 4;\r\n    var d = (this[1] || 0) >> 4;\r\n    if (c == 4) return d == 8;\r\n    else if (c == 2) return d == 8 || (d == 9 && !this[3]);\r\n    return false;\r\n  };\r\n  UMP.prototype.label = MIDI.prototype.label;\r\n  UMP.prototype.toString = MIDI.prototype.toString;\r\n  UMP.prototype._str = function() {\r\n    var t = this._string();\r\n    return t ? _hexx(this) + ' -- ' + t : _hexx(this);\r\n  };\r\n  UMP.prototype._string = function() {\r\n    var n, s, ss;\r\n    var t = this[0] >> 4;\r\n    if (t == 1 || t == 2) return new MIDI(this.slice(1))._string();\r\n    else if (t == 0) {\r\n      n = this[1] >> 4;\r\n      s = ['NOOP', 'JR Clock', 'JR Timestamp', 'Ticks Per Quarter Note', 'Delta Ticks'][n];\r\n    }\r\n    else if (t == 3) {\r\n      s = 'SysEx';\r\n    }\r\n    else if (t == 4) {\r\n      n = this[1] >> 4;\r\n      s = {\r\n        0: 'Registered Per-Note Controller',\r\n        1: 'Assignable Per-Note Controller',\r\n        2: 'Registered Controller',\r\n        3: 'Assignable Controller',\r\n        4: 'Relative Registered Controller',\r\n        5: 'Relative Assignable Controller',\r\n        6: 'Per-Note Pitch Bend',\r\n        8: 'Note Off',\r\n        9: 'Note On',\r\n        10: 'Poly Pressure',\r\n        11: 'Control Change',\r\n        12: 'Program Change',\r\n        13: 'Channel Pressure',\r\n        14: 'Pitch Bend',\r\n        15: 'Per-Note Management'\r\n      }[n];\r\n      if (n == 11) {\r\n        s = {\r\n          84: 'Portamento'\r\n        }[this[2]] || s;\r\n      }\r\n      if (n == 2) {\r\n        ss = {\r\n          '0000': 'Pitch Bend Sensitivity',\r\n          '0001': 'Fine Tuning',\r\n          '0002': 'Coarse Tuning',\r\n          '0003': 'Select Tuning Program',\r\n          '0004': 'Select Tuning Bank',\r\n          '0005': 'Vibrato Depth Range',\r\n          '7f7f': 'NONE'\r\n        }[__hex(this[2]) + '' + __hex(this[3])];\r\n        if (ss) s += ': ' + ss;\r\n      }\r\n    }\r\n    else if (t == 5) {\r\n      s = 'Data';\r\n    }\r\n    else if (t == 13) {\r\n      n = this[2];\r\n      if (n == 0) {\r\n        n = this[3];\r\n        s = {\r\n          0: 'Tempo ',\r\n          1: 'Time Signature ',\r\n          2: 'Metronome',\r\n          5: 'Key Signature',\r\n          6: 'Chord Name'\r\n        }[n];\r\n        if (n == 0) s += this.getBPM() + ' BPM';\r\n        else if (n == 1) s += this.getTimeSignature().join('/');\r\n      }\r\n      else if (n == 1) {\r\n        n = this[3];\r\n        s = {\r\n          0: 'Metadata',\r\n          1: 'Project Name',\r\n          2: 'Composition Name',\r\n          3: 'Clip Name',\r\n          4: 'Copyright',\r\n          5: 'Composer Name',\r\n          6: 'Lyricist Name',\r\n          7: 'Arranger Name',\r\n          8: 'Publisher Name',\r\n          9: 'Primary Performer Name',\r\n          10: 'Accompanying Performer Name',\r\n          11: 'Recording Date',\r\n          12: 'Recording Location'\r\n        }[n] || 'Unknown Text';\r\n      }\r\n      else if (n == 2) {\r\n        n = this[3];\r\n        s = {\r\n          0: 'Text',\r\n          1: 'Lyrics',\r\n          2: 'Lyrics Language',\r\n          3: 'Ruby',\r\n          4: 'Ruby Language',\r\n        }[n] || 'Unknown Text';\r\n      }\r\n    }\r\n    if (t == 15) {\r\n      s = { 0x20: 'Start of Clip', 0x21: 'End of Clip' }[this[1]];\r\n    }\r\n    return s;\r\n  };\r\n\r\n  UMP.prototype._stamp = MIDI.prototype._stamp;\r\n  UMP.prototype._unstamp = MIDI.prototype._unstamp;\r\n  UMP.prototype._stamped = MIDI.prototype._stamped;\r\n  UMP.prototype.match = MIDI.prototype.match;\r\n\r\n  JZZ.UMP = UMP;\r\n  _J.prototype.UMP = UMP;\r\n  JZZ.MIDI2 = UMP;\r\n  _J.prototype.MIDI2 = UMP;\r\n\r\n  function _16_7(a, b) {\r\n    var n = a * 0x100 + b;\r\n    return n ? (n >> 9) || 1 : 0;\r\n  }\r\n  function _32_7(a, b, c, d) {\r\n    var n = a * 0x1000000 + b * 0x10000 + c * 0x100 + d;\r\n    return (n >> 25) & 127;\r\n  }\r\n  function _grp(m, g) { m.gr = g; return m; }\r\n  function _m2m1(msg) {\r\n    if (msg.isMidi2) {\r\n      var n, c, x;\r\n      var t = msg[0] >> 4;\r\n      var g = msg[0] & 15;\r\n      if (t == 1 || t == 2) {\r\n        this._emit(_grp(new MIDI(msg.slice(1)), g));\r\n      }\r\n      else if (t == 3) {\r\n        c = msg[1] >> 4;\r\n        n = msg[1] & 15;\r\n        if (c == 0) {\r\n          this._emit(_grp(new MIDI([0xf0].concat(msg.slice(2, 2 + n), [0xf7])), g));\r\n          this._sx[g] = undefined;\r\n        }\r\n        else if (c == 1) {\r\n          this._sx[g] = msg.slice(2, 2 + n);\r\n        }\r\n        else if (c == 2) {\r\n          if (this._sx[g]) this._sx[g] = this._sx[g].concat(msg.slice(2, 2 + n));\r\n        }\r\n        else if (c == 3) {\r\n          if (this._sx[g]) this._emit(_grp(new MIDI([0xf0].concat(this._sx[g], msg.slice(2, 2 + n), [0xf7])), g));\r\n          this._sx[g] = undefined;\r\n        }\r\n      }\r\n      else if (t == 4) {\r\n        n = msg[1] >> 4;\r\n        c = msg[1] & 15;\r\n        if (n == 2 || n == 3) {\r\n          this._emit(_grp(new MIDI([0xb0 + c, n == 2 ? 101 : 99, msg[2]]), g));\r\n          this._emit(_grp(new MIDI([0xb0 + c, n == 2 ? 100 : 98, msg[3]]), g));\r\n          this._emit(_grp(new MIDI([0xb0 + c, 6, msg[4] >> 1]), g));\r\n          this._emit(_grp(new MIDI([0xb0 + c, 38, (msg[4] & 1) * 64 + (msg[4] >> 2)]), g));\r\n        }\r\n        else if (n == 8 || n == 9) {\r\n          this._emit(_grp(new MIDI([msg[1], msg[2], _16_7(msg[4], msg[5])]), g));\r\n        }\r\n        if (n == 10) {\r\n          this._emit(_grp(new MIDI([msg[1], msg[2], _32_7(msg[4], msg[5], msg[6], msg[7])]), g));\r\n        }\r\n        if (n == 11) {\r\n          if (_noctrl.includes(msg[2])) return;\r\n          this._emit(_grp(new MIDI([msg[1], msg[2], _32_7(msg[4], msg[5], msg[6], msg[7])]), g));\r\n        }\r\n        if (n == 13) {\r\n          this._emit(_grp(new MIDI([msg[1], _32_7(msg[4], msg[5], msg[6], msg[7])]), g));\r\n        }\r\n        if (n == 14) {\r\n          x = (msg[4] * 0x1000000 + msg[5] * 0x10000 + msg[6] * 0x100 + msg[4]) >> 18;\r\n          this._emit(_grp(new MIDI([msg[1], x & 127, (x >> 7) & 127]), g));\r\n        }\r\n        else if (n == 12) {\r\n          if (msg[3]) {\r\n            this._emit(_grp(new MIDI([0xb0 + c, 0, msg[6]]), g));\r\n            this._emit(_grp(new MIDI([0xb0 + c, 32, msg[7]]), g));\r\n          }\r\n          this._emit(_grp(new MIDI([msg[1], msg[4]]), g));\r\n        }\r\n      }\r\n    }\r\n    else this._emit(msg);\r\n  }\r\n  function M2M1() {\r\n    var self = new _M();\r\n    self._sx = [];\r\n    self._receive = _m2m1;\r\n    self._resume();\r\n    return self.MIDI2();\r\n  }\r\n  JZZ.M2M1 = M2M1;\r\n  _J.prototype.M2M1 = JZZ.M2M1;\r\n\r\n  function _m1m2(msg) {\r\n    if (!msg.isMidi2) {\r\n      var gr = msg.gr >= 0 && msg.gr <= 15 ? msg.gr : 0;\r\n      if (msg[0] >= 0x80 && msg[0] < 0xf0) {\r\n        this._emit(JZZ.MIDI2([0x20 + gr].concat(msg.slice(), _zeros).slice(0, 4)));\r\n      }\r\n      else if (msg[0] > 0xf0 && msg[0] <= 0xff && msg[0] != 0xf7) {\r\n        this._emit(JZZ.MIDI2([0x10 + gr].concat(msg.slice(), _zeros).slice(0, 4)));\r\n      }\r\n      else if (msg.isFullSysEx()) {\r\n        var a = _sliceSX(gr, msg.slice());\r\n        for (var i = 0; i < a.length; i++) this._emit(JZZ.MIDI2(a[i]));\r\n      }\r\n    }\r\n    else this._emit(msg);\r\n  }\r\n  function M1M2() {\r\n    var self = new _M();\r\n    self._receive = _m1m2;\r\n    self._resume();\r\n    return self;\r\n  }\r\n  JZZ.M1M2 = M1M2;\r\n  _J.prototype.M1M2 = JZZ.M1M2;\r\n\r\n  JZZ.lib = {};\r\n  JZZ.lib.now = _now;\r\n  JZZ.lib.schedule = _schedule;\r\n  JZZ.lib.R = _R;\r\n  var _sch_list = [];\r\n  var _sch_worker;\r\n  var _sch_count = 0;\r\n  try {\r\n    var _blob = URL.createObjectURL(new Blob(['(', function() {\r\n      function tick() {\r\n        postMessage({});\r\n        setTimeout(tick, 0);\r\n      }\r\n      tick();\r\n    }.toString(), ')()'], { type: 'application/javascript' }));\r\n    var _sch_tick = function() {\r\n      var n = _sch_list.length;\r\n      // cannot use i < _sch_list.length !\r\n      for (var i = 0; i < n; i++) _sch_list.shift()();\r\n      _sch_count++;\r\n      if (_sch_count > 20 && _sch_worker) {\r\n        _sch_worker.terminate();\r\n        _sch_worker = undefined;\r\n      }\r\n    };\r\n    var _sch = function(x) {\r\n      _sch_list.push(x);\r\n      _sch_count = 0;\r\n      if (!_sch_worker) {\r\n        _sch_worker = new Worker(_blob);\r\n        _sch_worker.onmessage = _sch_tick;\r\n      }\r\n    };\r\n    _sch(function() { JZZ.lib.schedule = _sch; });\r\n  }\r\n  catch (e) {}\r\n\r\n  JZZ.lib.openMidiOut = function(name, engine) {\r\n    var port = new _M();\r\n    engine._openOut(port);\r\n    port._info = engine._info(name);\r\n    return port;\r\n  };\r\n  JZZ.lib.openMidiIn = function(name, engine) {\r\n    var port = new _M();\r\n    engine._openIn(port);\r\n    port._info = engine._info(name);\r\n    return port;\r\n  };\r\n  JZZ.lib.registerMidiOut = function(name, engine) {\r\n    var x = engine._info(name);\r\n    for (var i = 0; i < _virtual._outs.length; i++) if (_virtual._outs[i].name == x.name) return false;\r\n    x.engine = engine;\r\n    _virtual._outs.push(x);\r\n    if (_jzz) {\r\n      _postRefresh();\r\n      if (_jzz._bad) { _jzz._repair(); _jzz._resume(); }\r\n    }\r\n    return true;\r\n  };\r\n  JZZ.lib.registerMidiIn = function(name, engine) {\r\n    var x = engine._info(name);\r\n    for (var i = 0; i < _virtual._ins.length; i++) if (_virtual._ins[i].name == x.name) return false;\r\n    x.engine = engine;\r\n    _virtual._ins.push(x);\r\n    if (_jzz) {\r\n      _postRefresh();\r\n      if (_jzz._bad) { _jzz._repair(); _jzz._resume(); }\r\n    }\r\n    return true;\r\n  };\r\n  JZZ.lib.unregisterMidiOut = function(name) {\r\n    for (var i = 0; i < _virtual._outs.length; i++) if (_virtual._outs[i].name == name) {\r\n      _virtual._outs.splice(i, i + 1);\r\n      if (_jzz) _postRefresh();\r\n      return true;\r\n    }\r\n    return false;\r\n  };\r\n  JZZ.lib.unregisterMidiIn = function(name) {\r\n    for (var i = 0; i < _virtual._ins.length; i++) if (_virtual._ins[i].name == name) {\r\n      _virtual._ins.splice(i, i + 1);\r\n      if (_jzz) _postRefresh();\r\n      return true;\r\n    }\r\n    return false;\r\n  };\r\n  JZZ.lib.plug = function(x) {\r\n    for (var i = 0; i < _plugged.length; i++) if (_plugged[i] == x) return;\r\n    _plugged.push(x);\r\n  };\r\n  JZZ.lib.unplug = function(x) {\r\n    for (var i = 0; i < _plugged.length; i++) if (_plugged[i] == x) {\r\n      _plugged.splice(i, 1);\r\n      return;\r\n    }\r\n  };\r\n  var _ac;\r\n  function _initAudioContext() {\r\n    if (!_ac && typeof window !== 'undefined') {\r\n      var AudioContext = window.AudioContext || window.webkitAudioContext;\r\n      if (AudioContext) {\r\n        _ac = new AudioContext();\r\n        if (_ac && !_ac.createGain) _ac.createGain = _ac.createGainNode;\r\n        var _activateAudioContext = function() {\r\n          if (_ac.state != 'running') {\r\n            _ac.resume();\r\n            var osc = _ac.createOscillator();\r\n            var gain = _ac.createGain();\r\n            try { gain.gain.value = 0; } catch (err) {}\r\n            gain.gain.setTargetAtTime(0, _ac.currentTime, 0.01);\r\n            osc.connect(gain);\r\n            gain.connect(_ac.destination);\r\n            if (!osc.start) osc.start = osc.noteOn;\r\n            if (!osc.stop) osc.stop = osc.noteOff;\r\n            osc.start(0.1); osc.stop(0.11);\r\n          }\r\n          else if (typeof document != 'undefined') {\r\n            document.removeEventListener('touchstart', _activateAudioContext);\r\n            document.removeEventListener('touchend', _activateAudioContext);\r\n            document.removeEventListener('mousedown', _activateAudioContext);\r\n            document.removeEventListener('keydown', _activateAudioContext);\r\n          }\r\n        };\r\n        if (typeof document != 'undefined') {\r\n          document.addEventListener('touchstart', _activateAudioContext);\r\n          document.addEventListener('touchend', _activateAudioContext);\r\n          document.addEventListener('mousedown', _activateAudioContext);\r\n          document.addEventListener('keydown', _activateAudioContext);\r\n        }\r\n        _activateAudioContext();\r\n      }\r\n    }\r\n  }\r\n  JZZ.lib.copyMidiHelpers = _copyMidiHelpers;\r\n  JZZ.lib.copyMidi2Helpers = _copyUmpHelpers;\r\n  JZZ.lib.copyUmpHelpers = _copyUmpHelpers;\r\n  JZZ.lib.getAudioContext = function() { _initAudioContext(); return _ac; };\r\n  JZZ.lib.closeAudioContext = function() { if (_ac) _ac.close(); _ac = undefined; };\r\n  var _b64 = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';\r\n  JZZ.lib.fromBase64 = function(input) {\r\n    var output = '';\r\n    var chr1, chr2, chr3;\r\n    var enc1, enc2, enc3, enc4;\r\n    var i = 0;\r\n    input = input.replace(/[^A-Za-z0-9+/=]/g, '');\r\n    while (i < input.length) {\r\n      enc1 = _b64.indexOf(input.charAt(i++));\r\n      enc2 = _b64.indexOf(input.charAt(i++));\r\n      enc3 = _b64.indexOf(input.charAt(i++));\r\n      enc4 = _b64.indexOf(input.charAt(i++));\r\n      chr1 = (enc1 << 2) | (enc2 >> 4);\r\n      chr2 = ((enc2 & 15) << 4) | (enc3 >> 2);\r\n      chr3 = ((enc3 & 3) << 6) | enc4;\r\n      output = output + String.fromCharCode(chr1);\r\n      if (enc3 != 64) {\r\n        output = output + String.fromCharCode(chr2);\r\n      }\r\n      if (enc4 != 64) {\r\n        output = output + String.fromCharCode(chr3);\r\n      }\r\n    }\r\n    return output;\r\n  };\r\n  JZZ.lib.toBase64 = function(data) {\r\n    var o1, o2, o3, h1, h2, h3, h4, bits, i = 0, ac = 0, enc = '', arr = [];\r\n    if (!data) return data;\r\n    do {\r\n      o1 = data.charCodeAt(i++);\r\n      o2 = data.charCodeAt(i++);\r\n      o3 = data.charCodeAt(i++);\r\n      bits = o1 << 16 | o2 << 8 | o3;\r\n      h1 = bits >> 18 & 0x3f;\r\n      h2 = bits >> 12 & 0x3f;\r\n      h3 = bits >> 6 & 0x3f;\r\n      h4 = bits & 0x3f;\r\n      arr[ac++] = _b64.charAt(h1) + _b64.charAt(h2) + _b64.charAt(h3) + _b64.charAt(h4);\r\n    } while(i < data.length);\r\n    enc = arr.join('');\r\n    var r = data.length % 3;\r\n    return (r ? enc.slice(0, r - 3) + '==='.slice(r) : enc);\r\n  };\r\n  JZZ.lib.fromUTF8 = function(data) {\r\n    data = typeof data == 'undefined' ? '' : '' + data;\r\n    var out = '';\r\n    var i, n, m;\r\n    for (i = 0; i < data.length; i++) {\r\n      n = data.charCodeAt(i);\r\n      if (n > 0xff) return data;\r\n      if (n < 0x80) out += data[i];\r\n      else if ((n & 0xe0) == 0xc0) {\r\n        n = (n & 0x1f) << 6;\r\n        i++; if (i >= data.length) return data;\r\n        m = data.charCodeAt(i);\r\n        if ((m & 0xc0) != 0x80) return data;\r\n        n += (m & 0x3f);\r\n        out += String.fromCharCode(n);\r\n      }\r\n      else if ((n & 0xf0) == 0xe0) {\r\n        n = (n & 0x0f) << 12;\r\n        i++; if (i >= data.length) return data;\r\n        m = data.charCodeAt(i);\r\n        if ((m & 0xc0) != 0x80) return data;\r\n        n += (m & 0x3f) << 6;\r\n        i++; if (i >= data.length) return data;\r\n        m = data.charCodeAt(i);\r\n        if ((m & 0xc0) != 0x80) return data;\r\n        n += (m & 0x3f);\r\n        out += String.fromCharCode(n);\r\n      }\r\n      else if ((n & 0xf8) == 0xf0) {\r\n        n = (n & 0x07) << 18;\r\n        i++; if (i >= data.length) return data;\r\n        m = data.charCodeAt(i);\r\n        if ((m & 0xc0) != 0x80) return data;\r\n        n += (m & 0x3f) << 12;\r\n        i++; if (i >= data.length) return data;\r\n        m = data.charCodeAt(i);\r\n        if ((m & 0xc0) != 0x80) return data;\r\n        n += (m & 0x3f) << 6;\r\n        i++; if (i >= data.length) return data;\r\n        m = data.charCodeAt(i);\r\n        if ((m & 0xc0) != 0x80) return data;\r\n        n += (m & 0x3f);\r\n        if (n > 0x10ffff) return data;\r\n        n -= 0x10000;\r\n        out += String.fromCharCode(0xd800 + (n >> 10));\r\n        out += String.fromCharCode(0xdc00 + (n & 0x3ff));\r\n      }\r\n    }\r\n    return out;\r\n  };\r\n  JZZ.lib.toUTF8 = function(data) {\r\n    data = typeof data == 'undefined' ? '' : '' + data;\r\n    var out = '';\r\n    var i, n;\r\n    for (i = 0; i < data.length; i++) {\r\n      n = data.charCodeAt(i);\r\n      if (n < 0x80) out += data[i];\r\n      else if (n < 0x800) {\r\n        out += String.fromCharCode(0xc0 + (n >> 6));\r\n        out += String.fromCharCode(0x80 + (n & 0x3f));\r\n      }\r\n      else if (n < 0x10000) {\r\n        out += String.fromCharCode(0xe0 + (n >> 12));\r\n        out += String.fromCharCode(0x80 + ((n >> 6) & 0x3f));\r\n        out += String.fromCharCode(0x80 + (n & 0x3f));\r\n      }\r\n      /* istanbul ignore next */\r\n      else {\r\n        out += String.fromCharCode(0xf0 + (n >> 18));\r\n        out += String.fromCharCode(0x80 + ((n >> 12) & 0x3f));\r\n        out += String.fromCharCode(0x80 + ((n >> 6) & 0x3f));\r\n        out += String.fromCharCode(0x80 + (n & 0x3f));\r\n      }\r\n    }\r\n    return out;\r\n  };\r\n\r\n  // Web MIDI API\r\n  var _wma = [];\r\n  var _outputMap = {};\r\n  var _inputMap = {};\r\n\r\n  var Promise = _scope.Promise;\r\n  /* istanbul ignore next */\r\n  if (typeof Promise !== 'function') {\r\n    Promise = function(executor) {\r\n      this.executor = executor;\r\n    };\r\n    Promise.prototype.then = function(resolve, reject) {\r\n      if (typeof resolve !== 'function') {\r\n        resolve = _nop;\r\n      }\r\n      if (typeof reject !== 'function') {\r\n        reject = _nop;\r\n      }\r\n      this.executor(resolve, reject);\r\n    };\r\n  }\r\n  function DOMException(name, message, code) {\r\n    this.name = name;\r\n    this.message = message;\r\n    this.code = code;\r\n  }\r\n\r\n  function MIDIConnectionEvent(port, target) {\r\n    this.bubbles = false;\r\n    this.cancelBubble = false;\r\n    this.cancelable = false;\r\n    this.currentTarget = target;\r\n    this.defaultPrevented = false;\r\n    this.eventPhase = 0;\r\n    this.path = [];\r\n    this.port = port;\r\n    this.returnValue = true;\r\n    this.srcElement = target;\r\n    this.target = target;\r\n    this.timeStamp = _now();\r\n    this.type = 'statechange';\r\n  }\r\n\r\n  function MIDIMessageEvent(port, data) {\r\n    this.bubbles = false;\r\n    this.cancelBubble = false;\r\n    this.cancelable = false;\r\n    this.currentTarget = port;\r\n    this.data = data;\r\n    this.defaultPrevented = false;\r\n    this.eventPhase = 0;\r\n    this.path = [];\r\n    this.receivedTime = _now();\r\n    this.returnValue = true;\r\n    this.srcElement = port;\r\n    this.target = port;\r\n    this.timeStamp = this.receivedTime;\r\n    this.type = 'midimessage';\r\n  }\r\n\r\n  function _statechange(p, a) {\r\n    if (p) {\r\n      if (p.onstatechange) p.onstatechange(new MIDIConnectionEvent(p, p));\r\n      if (a.onstatechange) a.onstatechange(new MIDIConnectionEvent(p, a));\r\n    }\r\n  }\r\n\r\n  function MIDIInput(a, p) {\r\n    var self = this;\r\n    var _open = false;\r\n    var _ochng = null;\r\n    var _onmsg = null;\r\n    this.type = 'input';\r\n    this.id = p.id;\r\n    this.name = p.name;\r\n    this.manufacturer = p.man;\r\n    this.version = p.ver;\r\n    Object.defineProperty(this, 'state', { get: function() { return p.connected ? 'connected' : 'disconnected'; }, enumerable: true });\r\n    Object.defineProperty(this, 'connection', { get: function() {\r\n      return _open ? p.proxy ? 'open' : 'pending' : 'closed';\r\n    }, enumerable: true });\r\n    Object.defineProperty(this, 'onmidimessage', {\r\n      get: function() { return _onmsg; },\r\n      set: function(value) {\r\n        if (_func(value)) {\r\n          _onmsg = value;\r\n          if (!_open) self.open().then(_nop, _nop);\r\n        }\r\n        else _onmsg = null;\r\n      },\r\n      enumerable: true\r\n    });\r\n    Object.defineProperty(this, 'onstatechange', {\r\n      get: function() { return _ochng; },\r\n      set: function(value) {\r\n        if (_func(value)) _ochng = value;\r\n        else _ochng = null;\r\n      },\r\n      enumerable: true\r\n    });\r\n    this.open = function() {\r\n      return new Promise(function(resolve, reject) {\r\n        if (_open) resolve(self);\r\n        else {\r\n          p.open().then(function() {\r\n            if (!_open) {\r\n              _open = true;\r\n              _statechange(self, a);\r\n            }\r\n            resolve(self);\r\n          }, function() {\r\n            reject(new DOMException('InvalidAccessError', 'Port is not available', 15));\r\n          });\r\n        }\r\n      });\r\n    };\r\n    this.close = function() {\r\n      return new Promise(function(resolve/*, reject*/) {\r\n        if (_open) {\r\n          _open = false;\r\n          p.close();\r\n          _statechange(self, a);\r\n        }\r\n        resolve(self);\r\n      });\r\n    };\r\n    Object.freeze(this);\r\n  }\r\n\r\n  function _split(q) {\r\n    var i, k;\r\n    while (q.length) {\r\n      for (i = 0; i < q.length; i++) if (q[i] == parseInt(q[i]) && q[i] >= 0x80 && q[i] <= 0xff && q[i] != 0xf7) break;\r\n      q.splice(0, i);\r\n      if (!q.length) return;\r\n      if (q[0] == 0xf0) {\r\n        for (i = 1; i < q.length; i++) if (q[i] == 0xf7) break;\r\n        if (i == q.length) return;\r\n        return q.splice(0, i + 1);\r\n      }\r\n      else {\r\n        k = _datalen(q[0]) + 1;\r\n        if (k > q.length) return;\r\n        for (i = 1; i < k; i++) if (q[i] != parseInt(q[i]) || q[i] < 0 || q[i] >= 0x80) break;\r\n        if (i == k) return q.splice(0, i);\r\n        else q.splice(0, i);\r\n      }\r\n    }\r\n  }\r\n\r\n  function _InputProxy(id, name, man, ver) {\r\n    var self = this;\r\n    this.id = id;\r\n    this.name = name;\r\n    this.man = man;\r\n    this.ver = ver;\r\n    this.connected = true;\r\n    this.ports = [];\r\n    this.pending = [];\r\n    this.proxy = undefined;\r\n    this.queue = [];\r\n    this.onmidi = function(msg) {\r\n      var m;\r\n      self.queue = self.queue.concat(msg.slice());\r\n      for (m = _split(self.queue); m; m = _split(self.queue)) {\r\n        for (i = 0; i < self.ports.length; i++) {\r\n          if (self.ports[i][0].onmidimessage && (m[0] != 0xf0 || self.ports[i][1])) {\r\n            self.ports[i][0].onmidimessage(new MIDIMessageEvent(self, new Uint8Array(m)));\r\n          }\r\n        }\r\n      }\r\n    };\r\n  }\r\n  _InputProxy.prototype.open = function() {\r\n    var self = this;\r\n    return new Promise(function(resolve, reject) {\r\n      var i;\r\n      if (self.proxy || !self.connected) resolve();\r\n      else {\r\n        self.pending.push([resolve, reject]);\r\n        if (self.pending.length == 1) {\r\n          JZZ().openMidiIn(self.name).or(function() {\r\n            for (i = 0; i < self.pending.length; i++) self.pending[i][1]();\r\n            self.pending = [];\r\n          }).and(function() {\r\n            self.proxy = this;\r\n            self.proxy.connect(self.onmidi);\r\n            for (i = 0; i < self.pending.length; i++) self.pending[i][0]();\r\n            self.pending = [];\r\n          });\r\n        }\r\n      }\r\n    });\r\n  };\r\n  _InputProxy.prototype.close = function() {\r\n    var i;\r\n    if (this.proxy) {\r\n      for (i = 0; i < this.ports.length; i++) if (this.ports[i].connection == 'open') return;\r\n      this.proxy.close();\r\n      this.proxy = undefined;\r\n    }\r\n  };\r\n  _InputProxy.prototype.disconnect = function() {\r\n    this.connected = false;\r\n    if (this.proxy) {\r\n      this.proxy.close();\r\n      this.proxy = undefined;\r\n    }\r\n  };\r\n  _InputProxy.prototype.reconnect = function() {\r\n    var self = this;\r\n    var i, p;\r\n    var a = [];\r\n    this.connected = true;\r\n    for (i = 0; i < _wma.length; i++) {\r\n      p = _wma[i].inputs.get(this.id);\r\n      if (p.connection == 'closed') _statechange(p, _wma[i]);\r\n      else a.push([p, _wma[i]]);\r\n    }\r\n    if (a.length) {\r\n      JZZ()._openMidiInNR(self.name).or(function() {\r\n        for (i = 0; i < a.length; i++) a[i][0].close();\r\n      }).and(function() {\r\n        self.proxy = this;\r\n        self.proxy.connect(self.onmidi);\r\n        for (i = 0; i < a.length; i++) _statechange(a[i][0], a[i][1]);\r\n      });\r\n    }\r\n  };\r\n\r\n  function _datalen(x) {\r\n    if (x >= 0x80 && x <= 0xbf || x >= 0xe0 && x <= 0xef || x == 0xf2) return 2;\r\n    if (x >= 0xc0 && x <= 0xdf || x == 0xf1 || x == 0xf3) return 1;\r\n    return 0;\r\n  }\r\n\r\n  var _epr = \"Failed to execute 'send' on 'MIDIOutput': \";\r\n\r\n  function _validate(arr, sysex) {\r\n    var i, k;\r\n    var msg;\r\n    var data = [];\r\n    for (i = 0; i < arr.length; i++) {\r\n      if (arr[i] != parseInt(arr[i]) || arr[i] < 0 || arr[i] > 255) throw TypeError(_epr + arr[i] + ' is not a UInt8 value.');\r\n    }\r\n    k = 0;\r\n    for (i = 0; i < arr.length; i++) {\r\n      if (!k) {\r\n        if (arr[i] < 0x80) throw TypeError(_epr + 'Running status is not allowed at index ' + i + ' (' + arr[i] + ').');\r\n        if (arr[i] == 0xf7) throw TypeError(_epr + 'Unexpected end of system exclusive message at index ' + i + ' (' + arr[i] + ').');\r\n        msg = [arr[i]];\r\n        data.push(msg);\r\n        if (arr[i] == 0xf0) {\r\n          if (!sysex) throw new DOMException('InvalidAccessError', _epr + 'System exclusive messag is not allowed at index ' + i + ' (' + arr[i] + ').', 15);\r\n          k = -1;\r\n          for (; i < arr.length; i++) {\r\n            msg.push(arr[i]);\r\n            if (arr[i] == 0xf7) {\r\n              k = 0;\r\n              break;\r\n            }\r\n          }\r\n        }\r\n        else {\r\n          k = _datalen(arr[i]);\r\n        }\r\n      }\r\n      else {\r\n        if (arr[i] > 0x7f) throw TypeError(_epr + 'Unexpected status byte at index ' + i + ' (' + arr[i] + ').');\r\n        msg.push(arr[i]);\r\n        k--;\r\n      }\r\n    }\r\n    if (k) throw TypeError(_epr + 'Message is incomplete');\r\n    return [data];\r\n  }\r\n\r\n  function MIDIOutput(a, p) {\r\n    var self = this;\r\n    var _open = false;\r\n    var _ochng = null;\r\n    this.type = 'output';\r\n    this.id = p.id;\r\n    this.name = p.name;\r\n    this.manufacturer = p.man;\r\n    this.version = p.ver;\r\n    Object.defineProperty(this, 'state', { get: function() { return p.connected ? 'connected' : 'disconnected'; }, enumerable: true });\r\n    Object.defineProperty(this, 'connection', { get: function() {\r\n      return _open ? p.proxy ? 'open' : 'pending' : 'closed';\r\n    }, enumerable: true });\r\n    Object.defineProperty(this, 'onstatechange', {\r\n      get: function() { return _ochng; },\r\n      set: function(value) {\r\n        if (_func(value)) _ochng = value;\r\n        else _ochng = null;\r\n      },\r\n      enumerable: true\r\n    });\r\n    this.open = function() {\r\n      return new Promise(function(resolve, reject) {\r\n        if (_open) resolve(self);\r\n        else {\r\n          p.open().then(function() {\r\n            if (!_open) {\r\n              _open = true;\r\n              _statechange(self, a);\r\n            }\r\n            resolve(self);\r\n          }, function() {\r\n            reject(new DOMException('InvalidAccessError', 'Port is not available', 15));\r\n          });\r\n        }\r\n      });\r\n    };\r\n    this.close = function() {\r\n      return new Promise(function(resolve/*, reject*/) {\r\n        if (_open) {\r\n          _open = false;\r\n          self.clear();\r\n          p.close();\r\n          _statechange(self, a);\r\n        }\r\n        resolve(self);\r\n      });\r\n    };\r\n    this.clear = function() {\r\n    };\r\n    this.send = function(data, timestamp) {\r\n      _validate(data, a.sysexEnabled);\r\n      if (!p.connected) throw new DOMException('InvalidStateError', 'Port is not connected', 11);\r\n      if (_open) {\r\n        var now = _now();\r\n        if (timestamp > now) setTimeout(function() { p.proxy.send(data); }, timestamp - now);\r\n        else p.proxy.send(data);\r\n      }\r\n      else this.open().then(function() { self.send(data, timestamp); }, _nop);\r\n    };\r\n    Object.freeze(this);\r\n  }\r\n\r\n  function _OutputProxy(id, name, man, ver) {\r\n    this.id = id;\r\n    this.name = name;\r\n    this.man = man;\r\n    this.ver = ver;\r\n    this.connected = true;\r\n    this.ports = [];\r\n    this.pending = [];\r\n    this.proxy = undefined;\r\n  }\r\n  _OutputProxy.prototype.open = function() {\r\n    var self = this;\r\n    return new Promise(function(resolve, reject) {\r\n      var i;\r\n      if (self.proxy || !self.connected) resolve();\r\n      else {\r\n        self.pending.push([resolve, reject]);\r\n        if (self.pending.length == 1) {\r\n          JZZ().openMidiOut(self.name).or(function() {\r\n            for (i = 0; i < self.pending.length; i++) self.pending[i][1]();\r\n            self.pending = [];\r\n          }).and(function() {\r\n            self.proxy = this;\r\n            for (i = 0; i < self.pending.length; i++) self.pending[i][0]();\r\n            self.pending = [];\r\n          });\r\n        }\r\n      }\r\n    });\r\n  };\r\n  _OutputProxy.prototype.close = function() {\r\n    var i;\r\n    if (this.proxy) {\r\n      for (i = 0; i < this.ports.length; i++) if (this.ports[i].connection == 'open') return;\r\n      this.proxy.close();\r\n      this.proxy = undefined;\r\n    }\r\n  };\r\n  _OutputProxy.prototype.disconnect = function() {\r\n    this.connected = false;\r\n    if (this.proxy) {\r\n      this.proxy.close();\r\n      this.proxy = undefined;\r\n    }\r\n  };\r\n  _OutputProxy.prototype.reconnect = function() {\r\n    var self = this;\r\n    var i, p;\r\n    var a = [];\r\n    this.connected = true;\r\n    for (i = 0; i < _wma.length; i++) {\r\n      p = _wma[i].outputs.get(this.id);\r\n      if (p.connection == 'closed') _statechange(p, _wma[i]);\r\n      else a.push([p, _wma[i]]);\r\n    }\r\n    if (a.length) {\r\n      JZZ()._openMidiOutNR(self.name).or(function() {\r\n        for (i = 0; i < a.length; i++) a[i][0].close();\r\n      }).and(function() {\r\n        self.proxy = this;\r\n        for (i = 0; i < a.length; i++) _statechange(a[i][0], a[i][1]);\r\n      });\r\n    }\r\n  };\r\n\r\n  function _Maplike(data) {\r\n    this.has = function(id) {\r\n      return data.hasOwnProperty(id) && data[id].connected;\r\n    };\r\n    this.keys = function() {\r\n      try { // some old browsers may have no Map object\r\n        var m = new Map();\r\n        for (var id in data) if (this.has(id)) m.set(id, this.get(id));\r\n        return m.keys();\r\n      } catch (e) {}\r\n    };\r\n    this.values = function() {\r\n      try {\r\n        var m = new Map();\r\n        for (var id in data) if (this.has(id)) m.set(id, this.get(id));\r\n        return m.values();\r\n      } catch (e) {}\r\n    };\r\n    this.entries = function() {\r\n      try {\r\n        var m = new Map();\r\n        for (var id in data) if (this.has(id)) m.set(id, this.get(id));\r\n        return m.entries();\r\n      } catch (e) {}\r\n    };\r\n    this.forEach = function(fun, self) {\r\n      if (typeof self == 'undefined') self = this;\r\n      for (var id in data) if (this.has(id)) fun.call(self, this.get(id), id, this);\r\n    };\r\n    Object.defineProperty(this, 'size', {\r\n      get: function() {\r\n        var len = 0;\r\n        for (var id in data) if (this.has(id)) len++;\r\n        return len;\r\n      },\r\n      enumerable: true\r\n    });\r\n  }\r\n\r\n  function MIDIInputMap(_access, _inputs) {\r\n    this.get = function(id) {\r\n      if (_inputMap.hasOwnProperty(id) && _inputMap[id].connected) {\r\n        if (!_inputs[id]) {\r\n          _inputs[id] = new MIDIInput(_access, _inputMap[id]);\r\n          _inputMap[id].ports.push([_inputs[id], _access.sysexEnabled]);\r\n        }\r\n        return _inputs[id];\r\n      }\r\n    };\r\n    Object.freeze(this);\r\n  }\r\n  MIDIInputMap.prototype = new _Maplike(_inputMap);\r\n  MIDIInputMap.prototype.constructor = MIDIInputMap;\r\n\r\n  function MIDIOutputMap(_access, _outputs) {\r\n    this.get = function(id) {\r\n      if (_outputMap.hasOwnProperty(id) && _outputMap[id].connected) {\r\n        if (!_outputs[id]) {\r\n          _outputs[id] = new MIDIOutput(_access, _outputMap[id]);\r\n          _outputMap[id].ports.push([_outputs[id], _access.sysexEnabled]);\r\n        }\r\n        return _outputs[id];\r\n      }\r\n    };\r\n    Object.freeze(this);\r\n  }\r\n  MIDIOutputMap.prototype = new _Maplike(_outputMap);\r\n  MIDIOutputMap.prototype.constructor = MIDIOutputMap;\r\n\r\n  function _wm_watch(x) {\r\n    var i, k, p, a;\r\n    for (i = 0; i < x.inputs.added.length; i++) {\r\n      p = x.inputs.added[i];\r\n      if (!_inputMap.hasOwnProperty(p.id)) _inputMap[p.id] = new _InputProxy(p.id, p.name, p.manufacturer, p.version);\r\n      _inputMap[p.id].reconnect();\r\n    }\r\n    for (i = 0; i < x.outputs.added.length; i++) {\r\n      p = x.outputs.added[i];\r\n      if (!_outputMap.hasOwnProperty(p.id)) _outputMap[p.id] = new _OutputProxy(p.id, p.name, p.manufacturer, p.version);\r\n      _outputMap[p.id].reconnect();\r\n    }\r\n    for (i = 0; i < x.inputs.removed.length; i++) {\r\n      p = x.inputs.removed[i];\r\n      if (_inputMap.hasOwnProperty(p.id)) {\r\n        a = [];\r\n        for (k = 0; k < _wma.length; k++) a.push([_wma[k].inputs.get(p.id), _wma[k]]);\r\n        _inputMap[p.id].disconnect();\r\n        for (k = 0; k < a.length; k++) _statechange(a[k][0], a[k][1]);\r\n      }\r\n    }\r\n    for (i = 0; i < x.outputs.removed.length; i++) {\r\n      p = x.outputs.removed[i];\r\n      if (_outputMap.hasOwnProperty(p.id)) {\r\n        a = [];\r\n        for (k = 0; k < _wma.length; k++) a.push([_wma[k].outputs.get(p.id), _wma[k]]);\r\n        _outputMap[p.id].disconnect();\r\n        for (k = 0; k < a.length; k++) _statechange(a[k][0], a[k][1]);\r\n      }\r\n    }\r\n  }\r\n\r\n  function MIDIAccess(sysex) {\r\n    var _inputs = {};\r\n    var _outputs = {};\r\n    var _onstatechange = null;\r\n    var self = this;\r\n    this.sysexEnabled = sysex;\r\n    this.inputs = new MIDIInputMap(self, _inputs);\r\n    this.outputs = new MIDIOutputMap(self, _outputs);\r\n    Object.defineProperty(this, 'onstatechange', {\r\n      get: function() { return _onstatechange; },\r\n      set: function(f) { _onstatechange = _func(f) ? f : null; },\r\n      enumerable: true\r\n    });\r\n    Object.freeze(this);\r\n    var i;\r\n    var p;\r\n    var info = _jzz._info;\r\n    for (i = 0; i < info.inputs.length; i++) {\r\n      p = info.inputs[i];\r\n      if (!_inputMap.hasOwnProperty(p.id)) _inputMap[p.id] = new _InputProxy(p.id, p.name, p.manufacturer, p.version);\r\n    }\r\n    for (i = 0; i < info.outputs.length; i++) {\r\n      p = info.outputs[i];\r\n      if (!_outputMap.hasOwnProperty(p.id)) _outputMap[p.id] = new _OutputProxy(p.id, p.name, p.manufacturer, p.version);\r\n    }\r\n    if (!_wma.length) JZZ().onChange(_wm_watch);\r\n    _wma.push(this);\r\n  }\r\n\r\n  JZZ.requestMIDIAccess = function(opt) {\r\n    return new Promise(function(resolve, reject) {\r\n      JZZ.JZZ(opt).or(function() {\r\n      }).and(function() {\r\n        var sysex = !!(opt && opt.sysex);\r\n        if (sysex && !this.info().sysex) reject(new DOMException('SecurityError', 'Sysex is not allowed', 18));\r\n        else {\r\n          var wma = new MIDIAccess(sysex);\r\n          resolve(wma);\r\n        }\r\n      });\r\n    });\r\n  };\r\n  if (typeof navigator !== 'undefined' && !navigator.requestMIDIAccess) navigator.requestMIDIAccess = JZZ.requestMIDIAccess;\r\n  JZZ.close = function() { if (_engine._close) _engine._close(); };\r\n\r\n  return JZZ;\r\n});\r\n"]}