/*! p5.sound.min.js v0.3.8 2018-06-15 */ /** * p5.sound * https://p5js.org/reference/#/libraries/p5.sound * * From the Processing Foundation and contributors * https://github.com/processing/p5.js-sound/graphs/contributors * * MIT License (MIT) * https://github.com/processing/p5.js-sound/blob/master/LICENSE * * Some of the many audio libraries & resources that inspire p5.sound: * - TONE.js (c) Yotam Mann. Licensed under The MIT License (MIT). https://github.com/TONEnoTONE/Tone.js * - buzz.js (c) Jay Salvat. Licensed under The MIT License (MIT). http://buzz.jaysalvat.com/ * - Boris Smus Web Audio API book, 2013. Licensed under the Apache License http://www.apache.org/licenses/LICENSE-2.0 * - wavesurfer.js https://github.com/katspaugh/wavesurfer.js * - Web Audio Components by Jordan Santell https://github.com/web-audio-components * - Wilm Thoben's Sound library for Processing https://github.com/processing/processing/tree/master/java/libraries/sound * * Web Audio API: http://w3.org/TR/webaudio/ */ !(function (t, e) { 'function' == typeof define && define.amd ? define('p5.sound', ['p5'], function (t) { e(t); }) : e('object' == typeof exports ? require('../p5') : t.p5); })(this, function (t) { var e; e = (function () { !(function () { function t(t) { t && (t.setTargetAtTime || (t.setTargetAtTime = t.setTargetValueAtTime)); } window.hasOwnProperty('webkitAudioContext') && !window.hasOwnProperty('AudioContext') && ((window.AudioContext = window.webkitAudioContext), 'function' != typeof AudioContext.prototype.createGain && (AudioContext.prototype.createGain = AudioContext.prototype.createGainNode), 'function' != typeof AudioContext.prototype.createDelay && (AudioContext.prototype.createDelay = AudioContext.prototype.createDelayNode), 'function' != typeof AudioContext.prototype.createScriptProcessor && (AudioContext.prototype.createScriptProcessor = AudioContext.prototype.createJavaScriptNode), 'function' != typeof AudioContext.prototype.createPeriodicWave && (AudioContext.prototype.createPeriodicWave = AudioContext.prototype.createWaveTable), (AudioContext.prototype.internal_createGain = AudioContext.prototype.createGain), (AudioContext.prototype.createGain = function () { var e = this.internal_createGain(); return t(e.gain), e; }), (AudioContext.prototype.internal_createDelay = AudioContext.prototype.createDelay), (AudioContext.prototype.createDelay = function (e) { var i = e ? this.internal_createDelay(e) : this.internal_createDelay(); return t(i.delayTime), i; }), (AudioContext.prototype.internal_createBufferSource = AudioContext.prototype.createBufferSource), (AudioContext.prototype.createBufferSource = function () { var e = this.internal_createBufferSource(); return ( e.start ? ((e.internal_start = e.start), (e.start = function (t, i, n) { 'undefined' != typeof n ? e.internal_start(t || 0, i, n) : e.internal_start(t || 0, i || 0); })) : (e.start = function (t, e, i) { e || i ? this.noteGrainOn(t || 0, e, i) : this.noteOn(t || 0); }), e.stop ? ((e.internal_stop = e.stop), (e.stop = function (t) { e.internal_stop(t || 0); })) : (e.stop = function (t) { this.noteOff(t || 0); }), t(e.playbackRate), e ); }), (AudioContext.prototype.internal_createDynamicsCompressor = AudioContext.prototype.createDynamicsCompressor), (AudioContext.prototype.createDynamicsCompressor = function () { var e = this.internal_createDynamicsCompressor(); return ( t(e.threshold), t(e.knee), t(e.ratio), t(e.reduction), t(e.attack), t(e.release), e ); }), (AudioContext.prototype.internal_createBiquadFilter = AudioContext.prototype.createBiquadFilter), (AudioContext.prototype.createBiquadFilter = function () { var e = this.internal_createBiquadFilter(); return t(e.frequency), t(e.detune), t(e.Q), t(e.gain), e; }), 'function' != typeof AudioContext.prototype.createOscillator && ((AudioContext.prototype.internal_createOscillator = AudioContext.prototype.createOscillator), (AudioContext.prototype.createOscillator = function () { var e = this.internal_createOscillator(); return ( e.start ? ((e.internal_start = e.start), (e.start = function (t) { e.internal_start(t || 0); })) : (e.start = function (t) { this.noteOn(t || 0); }), e.stop ? ((e.internal_stop = e.stop), (e.stop = function (t) { e.internal_stop(t || 0); })) : (e.stop = function (t) { this.noteOff(t || 0); }), e.setPeriodicWave || (e.setPeriodicWave = e.setWaveTable), t(e.frequency), t(e.detune), e ); }))), window.hasOwnProperty('webkitOfflineAudioContext') && !window.hasOwnProperty('OfflineAudioContext') && (window.OfflineAudioContext = window.webkitOfflineAudioContext); })(window), (navigator.getUserMedia = navigator.getUserMedia || navigator.webkitGetUserMedia || navigator.mozGetUserMedia || navigator.msGetUserMedia); var e = document.createElement('audio'); t.prototype.isSupported = function () { return !!e.canPlayType; }; var i = function () { return ( !!e.canPlayType && e.canPlayType('audio/ogg; codecs="vorbis"') ); }, n = function () { return !!e.canPlayType && e.canPlayType('audio/mpeg;'); }, o = function () { return ( !!e.canPlayType && e.canPlayType('audio/wav; codecs="1"') ); }, r = function () { return ( !!e.canPlayType && (e.canPlayType('audio/x-m4a;') || e.canPlayType('audio/aac;')) ); }, s = function () { return !!e.canPlayType && e.canPlayType('audio/x-aiff;'); }; t.prototype.isFileSupported = function (t) { switch (t.toLowerCase()) { case 'mp3': return n(); case 'wav': return o(); case 'ogg': return i(); case 'aac': case 'm4a': case 'mp4': return r(); case 'aif': case 'aiff': return s(); default: return !1; } }; })(); var i; i = (function () { var e = new window.AudioContext(); t.prototype.getAudioContext = function () { return e; }; var i = navigator.userAgent.match(/(iPad|iPhone|iPod)/g) ? !0 : !1; if (i) { var n = !1, o = function () { if (!n) { var t = e.createBuffer(1, 1, 22050), i = e.createBufferSource(); (i.buffer = t), i.connect(e.destination), i.start(0), console.log('start ios!'), 'running' === e.state && (n = !0); } }; document.addEventListener('touchend', o, !1), document.addEventListener('touchstart', o, !1); } return e; })(); var n; n = (function () { var e = function () { var e = t.prototype.getAudioContext(); (this.input = e.createGain()), (this.output = e.createGain()), (this.limiter = e.createDynamicsCompressor()), (this.limiter.threshold.value = 0), (this.limiter.ratio.value = 20), (this.audiocontext = e), this.output.disconnect(), this.input.connect(this.limiter), this.limiter.connect(this.output), (this.meter = e.createGain()), (this.fftMeter = e.createGain()), this.output.connect(this.meter), this.output.connect(this.fftMeter), this.output.connect(this.audiocontext.destination), (this.soundArray = []), (this.parts = []), (this.extensions = []); }, i = new e(); return ( (t.prototype.getMasterVolume = function () { return i.output.gain.value; }), (t.prototype.masterVolume = function (t, e, n) { if ('number' == typeof t) { var e = e || 0, n = n || 0, o = i.audiocontext.currentTime, r = i.output.gain.value; i.output.gain.cancelScheduledValues(o + n), i.output.gain.linearRampToValueAtTime(r, o + n), i.output.gain.linearRampToValueAtTime(t, o + n + e); } else { if (!t) return i.output.gain; t.connect(i.output.gain); } }), (t.prototype.soundOut = t.soundOut = i), (t.soundOut._silentNode = i.audiocontext.createGain()), (t.soundOut._silentNode.gain.value = 0), t.soundOut._silentNode.connect(i.audiocontext.destination), i ); })(); var o; o = (function () { var e = n; (t.prototype.sampleRate = function () { return e.audiocontext.sampleRate; }), (t.prototype.freqToMidi = function (t) { var e = Math.log(t / 440) / Math.log(2), i = Math.round(12 * e) + 69; return i; }); var i = (t.prototype.midiToFreq = function (t) { return 440 * Math.pow(2, (t - 69) / 12); }); return ( (noteToFreq = function (t) { if ('string' != typeof t) return t; var e = {A: 21, B: 23, C: 24, D: 26, E: 28, F: 29, G: 31}, n = e[t[0].toUpperCase()], o = ~~t.slice(-1); switch (((n += 12 * (o - 1)), t[1])) { case '#': n += 1; break; case 'b': n -= 1; } return i(n); }), (t.prototype.soundFormats = function () { e.extensions = []; for (var t = 0; t < arguments.length; t++) { if ( ((arguments[t] = arguments[t].toLowerCase()), !( ['mp3', 'wav', 'ogg', 'm4a', 'aac'].indexOf( arguments[t], ) > -1 )) ) throw arguments[t] + ' is not a valid sound format!'; e.extensions.push(arguments[t]); } }), (t.prototype.disposeSound = function () { for (var t = 0; t < e.soundArray.length; t++) e.soundArray[t].dispose(); }), t.prototype.registerMethod('remove', t.prototype.disposeSound), (t.prototype._checkFileFormats = function (i) { var n; if ('string' == typeof i) { n = i; var o = n.split('.').pop(); if (['mp3', 'wav', 'ogg', 'm4a', 'aac'].indexOf(o) > -1) if (t.prototype.isFileSupported(o)) n = n; else for ( var r = n.split('.'), s = r[r.length - 1], a = 0; a < e.extensions.length; a++ ) { var u = e.extensions[a], c = t.prototype.isFileSupported(u); if (c) { (s = ''), 2 === r.length && (s += r[0]); for (var a = 1; a <= r.length - 2; a++) { var p = r[a]; s += '.' + p; } (n = s += '.'), (n = n += u); break; } } else for (var a = 0; a < e.extensions.length; a++) { var u = e.extensions[a], c = t.prototype.isFileSupported(u); if (c) { n = n + '.' + u; break; } } } else if ('object' == typeof i) for (var a = 0; a < i.length; a++) { var u = i[a].split('.').pop(), c = t.prototype.isFileSupported(u); if (c) { n = i[a]; break; } } return n; }), (t.prototype._mathChain = function (t, e, i, n, o) { for (var r in t.mathOps) t.mathOps[r] instanceof o && (t.mathOps[r].dispose(), (i = r), i < t.mathOps.length - 1 && (n = t.mathOps[r + 1])); return ( t.mathOps[i - 1].disconnect(), t.mathOps[i - 1].connect(e), e.connect(n), (t.mathOps[i] = e), t ); }), {midiToFreq: i, noteToFreq: noteToFreq} ); })(n); var r; r = (function () { var t = function (t, e, i) { var n, o, r = new Error(); (r.name = t), (r.originalStack = r.stack + e), (n = r.stack + e), (r.failedPath = i); var o = n.split('\n'); return ( (o = o.filter(function (t) { return !t.match(/(p5.|native code|globalInit)/g); })), (r.stack = o.join('\n')), r ); }; return t; })(); var s; s = (function () { var e = n, i = e.audiocontext; 'undefined' != typeof i.createStereoPanner ? ((t.Panner = function (t, e) { (this.stereoPanner = this.input = i.createStereoPanner()), t.connect(this.stereoPanner), this.stereoPanner.connect(e); }), (t.Panner.prototype.pan = function (t, e) { var n = e || 0, o = i.currentTime + n; this.stereoPanner.pan.linearRampToValueAtTime(t, o); }), (t.Panner.prototype.inputChannels = function () {}), (t.Panner.prototype.connect = function (t) { this.stereoPanner.connect(t); }), (t.Panner.prototype.disconnect = function () { this.stereoPanner && this.stereoPanner.disconnect(); })) : ((t.Panner = function (t, e, n) { (this.input = i.createGain()), t.connect(this.input), (this.left = i.createGain()), (this.right = i.createGain()), (this.left.channelInterpretation = 'discrete'), (this.right.channelInterpretation = 'discrete'), n > 1 ? ((this.splitter = i.createChannelSplitter(2)), this.input.connect(this.splitter), this.splitter.connect(this.left, 1), this.splitter.connect(this.right, 0)) : (this.input.connect(this.left), this.input.connect(this.right)), (this.output = i.createChannelMerger(2)), this.left.connect(this.output, 0, 1), this.right.connect(this.output, 0, 0), this.output.connect(e); }), (t.Panner.prototype.pan = function (t, e) { var n = e || 0, o = i.currentTime + n, r = (t + 1) / 2, s = Math.cos((r * Math.PI) / 2), a = Math.sin((r * Math.PI) / 2); this.left.gain.linearRampToValueAtTime(a, o), this.right.gain.linearRampToValueAtTime(s, o); }), (t.Panner.prototype.inputChannels = function (t) { 1 === t ? (this.input.disconnect(), this.input.connect(this.left), this.input.connect(this.right)) : 2 === t && ((this.splitter = i.createChannelSplitter(2)), this.input.disconnect(), this.input.connect(this.splitter), this.splitter.connect(this.left, 1), this.splitter.connect(this.right, 0)); }), (t.Panner.prototype.connect = function (t) { this.output.connect(t); }), (t.Panner.prototype.disconnect = function () { this.output && this.output.disconnect(); })); })(n); var a; a = (function () { function e(t, e) { for (var i = {}, n = t.length, o = 0; n > o; o++) { if (t[o] > e) { var r = t[o], s = new d(r, o); (i[o] = s), (o += 6e3); } o++; } return i; } function i(t) { for ( var e = [], i = Object.keys(t).sort(), n = 0; n < i.length; n++ ) for (var o = 0; 10 > o; o++) { var r = t[i[n]], s = t[i[n + o]]; if (r && s) { var a = r.sampleIndex, u = s.sampleIndex, c = u - a; c > 0 && r.intervals.push(c); var p = e.some(function (t) { return t.interval === c ? (t.count++, t) : void 0; }); p || e.push({interval: c, count: 1}); } } return e; } function s(t, e) { var i = []; return ( t.forEach(function (t) { try { var n = Math.abs(60 / (t.interval / e)); n = u(n); var o = i.some(function (e) { return e.tempo === n ? (e.count += t.count) : void 0; }); if (!o) { if (isNaN(n)) return; i.push({tempo: Math.round(n), count: t.count}); } } catch (r) { throw r; } }), i ); } function a(t, e, i, n) { for ( var o = [], r = Object.keys(t).sort(), s = 0; s < r.length; s++ ) for ( var a = r[s], c = t[a], p = 0; p < c.intervals.length; p++ ) { var h = Math.round(Math.abs(60 / (c.intervals[p] / i))); (h = u(h)), Math.abs(h - e) < n && o.push(c.sampleIndex / i); } return (o = o.filter(function (t, e, i) { var n = i[e + 1] - t; return n > 0.01 ? !0 : void 0; })); } function u(t) { if (isFinite(t) && 0 !== t) { for (; 90 > t; ) t *= 2; for (; t > 180 && t > 90; ) t /= 2; return t; } } var c = r, p = n, h = p.audiocontext, l = o.midiToFreq; (t.SoundFile = function (e, i, n, o) { if ('undefined' != typeof e) { if ('string' == typeof e || 'string' == typeof e[0]) { var r = t.prototype._checkFileFormats(e); this.url = r; } else if ( 'object' == typeof e && !( window.File && window.FileReader && window.FileList && window.Blob ) ) throw 'Unable to load file because the File API is not supported'; e.file && (e = e.file), (this.file = e); } (this._onended = function () {}), (this._looping = !1), (this._playing = !1), (this._paused = !1), (this._pauseTime = 0), (this._cues = []), (this._lastPos = 0), (this._counterNode = null), (this._scopeNode = null), (this.bufferSourceNodes = []), (this.bufferSourceNode = null), (this.buffer = null), (this.playbackRate = 1), (this.input = p.audiocontext.createGain()), (this.output = p.audiocontext.createGain()), (this.reversed = !1), (this.startTime = 0), (this.endTime = null), (this.pauseTime = 0), (this.mode = 'sustain'), (this.startMillis = null), (this.panPosition = 0), (this.panner = new t.Panner(this.output, p.input, 2)), (this.url || this.file) && this.load(i, n), p.soundArray.push(this), 'function' == typeof o ? (this._whileLoading = o) : (this._whileLoading = function () {}); }), t.prototype.registerPreloadMethod('loadSound', t.prototype), (t.prototype.loadSound = function (e, i, n, o) { window.location.origin.indexOf('file://') > -1 && 'undefined' === window.cordova && window.alert( 'This sketch may require a server to load external files. Please see http://bit.ly/1qcInwS', ); var r = this, s = new t.SoundFile( e, function () { 'function' == typeof i && i.apply(r, arguments), 'function' == typeof r._decrementPreload && r._decrementPreload(); }, n, o, ); return s; }), (t.SoundFile.prototype.load = function (t, e) { var i = this, n = new Error().stack; if (void 0 !== this.url && '' !== this.url) { var o = new XMLHttpRequest(); o.addEventListener( 'progress', function (t) { i._updateProgress(t); }, !1, ), o.open('GET', this.url, !0), (o.responseType = 'arraybuffer'), (o.onload = function () { if (200 === o.status) h.decodeAudioData( o.response, function (e) { (i.buffer = e), i.panner.inputChannels( e.numberOfChannels, ), t && t(i); }, function () { var t = new c( 'decodeAudioData', n, i.url, ), o = 'AudioContext error at decodeAudioData for ' + i.url; e ? ((t.msg = o), e(t)) : console.error( o + '\n The error stack trace includes: \n' + t.stack, ); }, ); else { var r = new c('loadSound', n, i.url), s = 'Unable to load ' + i.url + '. The request status was: ' + o.status + ' (' + o.statusText + ')'; e ? ((r.message = s), e(r)) : console.error( s + '\n The error stack trace includes: \n' + r.stack, ); } }), (o.onerror = function () { var t = new c('loadSound', n, i.url), o = 'There was no response from the server at ' + i.url + '. Check the url and internet connectivity.'; e ? ((t.message = o), e(t)) : console.error( o + '\n The error stack trace includes: \n' + t.stack, ); }), o.send(); } else if (void 0 !== this.file) { var r = new FileReader(); (r.onload = function () { h.decodeAudioData(r.result, function (e) { (i.buffer = e), i.panner.inputChannels(e.numberOfChannels), t && t(i); }); }), (r.onerror = function (t) { onerror && onerror(t); }), r.readAsArrayBuffer(this.file); } }), (t.SoundFile.prototype._updateProgress = function (t) { if (t.lengthComputable) { var e = (t.loaded / t.total) * 0.99; this._whileLoading(e, t); } else this._whileLoading('size unknown'); }), (t.SoundFile.prototype.isLoaded = function () { return this.buffer ? !0 : !1; }), (t.SoundFile.prototype.play = function (t, e, i, n, o) { if (!this.output) return void console.warn( 'SoundFile.play() called after dispose', ); var r, s, a = this, u = p.audiocontext.currentTime, c = t || 0; if ( (0 > c && (c = 0), (c += u), 'undefined' != typeof e && this.rate(e), 'undefined' != typeof i && this.setVolume(i), !this.buffer) ) throw 'not ready to play file, buffer has yet to load. Try preload()'; if ( ((this._pauseTime = 0), 'restart' === this.mode && this.buffer && this.bufferSourceNode && (this.bufferSourceNode.stop(c), this._counterNode.stop(c)), 'untildone' !== this.mode || !this.isPlaying()) ) { if ( ((this.bufferSourceNode = this._initSourceNode()), delete this._counterNode, (this._counterNode = this._initCounterNode()), n) ) { if (!(n >= 0 && n < this.buffer.duration)) throw 'start time out of range'; r = n; } else r = 0; o && (o = o <= this.buffer.duration - r ? o : this.buffer.duration), this._paused ? (this.bufferSourceNode.start( c, this.pauseTime, o, ), this._counterNode.start(c, this.pauseTime, o)) : (this.bufferSourceNode.start(c, r, o), this._counterNode.start(c, r, o)), (this._playing = !0), (this._paused = !1), this.bufferSourceNodes.push(this.bufferSourceNode), (this.bufferSourceNode._arrayIndex = this.bufferSourceNodes.length - 1); var h = function () { (this._playing = !1), this.removeEventListener('ended', h, !1), a._onended(a), a.bufferSourceNodes.forEach(function (t, e) { t._playing === !1 && a.bufferSourceNodes.splice(e); }), 0 === a.bufferSourceNodes.length && (a._playing = !1); }; (this.bufferSourceNode.onended = h), (this.bufferSourceNode.loop = this._looping), (this._counterNode.loop = this._looping), this._looping === !0 && ((s = o ? o : r - 1e-15), (this.bufferSourceNode.loopStart = r), (this.bufferSourceNode.loopEnd = s), (this._counterNode.loopStart = r), (this._counterNode.loopEnd = s)); } }), (t.SoundFile.prototype.playMode = function (t) { var e = t.toLowerCase(); if ('restart' === e && this.buffer && this.bufferSourceNode) for ( var i = 0; i < this.bufferSourceNodes.length - 1; i++ ) { var n = p.audiocontext.currentTime; this.bufferSourceNodes[i].stop(n); } if ('restart' !== e && 'sustain' !== e && 'untildone' !== e) throw 'Invalid play mode. Must be either "restart" or "sustain"'; this.mode = e; }), (t.SoundFile.prototype.pause = function (t) { var e = p.audiocontext.currentTime, i = t || 0, n = i + e; this.isPlaying() && this.buffer && this.bufferSourceNode ? ((this.pauseTime = this.currentTime()), this.bufferSourceNode.stop(n), this._counterNode.stop(n), (this._paused = !0), (this._playing = !1), (this._pauseTime = this.currentTime())) : (this._pauseTime = 0); }), (t.SoundFile.prototype.loop = function (t, e, i, n, o) { (this._looping = !0), this.play(t, e, i, n, o); }), (t.SoundFile.prototype.setLoop = function (t) { if (t === !0) this._looping = !0; else { if (t !== !1) throw 'Error: setLoop accepts either true or false'; this._looping = !1; } this.bufferSourceNode && ((this.bufferSourceNode.loop = this._looping), (this._counterNode.loop = this._looping)); }), (t.SoundFile.prototype.isLooping = function () { return this.bufferSourceNode && this._looping === !0 && this.isPlaying() === !0 ? !0 : !1; }), (t.SoundFile.prototype.isPlaying = function () { return this._playing; }), (t.SoundFile.prototype.isPaused = function () { return this._paused; }), (t.SoundFile.prototype.stop = function (t) { var e = t || 0; if ('sustain' === this.mode || 'untildone' === this.mode) this.stopAll(e), (this._playing = !1), (this.pauseTime = 0), (this._paused = !1); else if (this.buffer && this.bufferSourceNode) { var i = p.audiocontext.currentTime, n = e || 0; (this.pauseTime = 0), this.bufferSourceNode.stop(i + n), this._counterNode.stop(i + n), (this._playing = !1), (this._paused = !1); } }), (t.SoundFile.prototype.stopAll = function (t) { var e = p.audiocontext.currentTime, i = t || 0; if (this.buffer && this.bufferSourceNode) { for (var n = 0; n < this.bufferSourceNodes.length; n++) if (void 0 !== typeof this.bufferSourceNodes[n]) try { (this.bufferSourceNodes[n].onended = function () {}), this.bufferSourceNodes[n].stop(e + i); } catch (o) {} this._counterNode.stop(e + i), this._onended(this); } }), (t.SoundFile.prototype.setVolume = function (t, e, i) { if ('number' == typeof t) { var n = e || 0, o = i || 0, r = p.audiocontext.currentTime, s = this.output.gain.value; this.output.gain.cancelScheduledValues(r + o), this.output.gain.linearRampToValueAtTime(s, r + o), this.output.gain.linearRampToValueAtTime(t, r + o + n); } else { if (!t) return this.output.gain; t.connect(this.output.gain); } }), (t.SoundFile.prototype.amp = t.SoundFile.prototype.setVolume), (t.SoundFile.prototype.fade = t.SoundFile.prototype.setVolume), (t.SoundFile.prototype.getVolume = function () { return this.output.gain.value; }), (t.SoundFile.prototype.pan = function (t, e) { (this.panPosition = t), this.panner.pan(t, e); }), (t.SoundFile.prototype.getPan = function () { return this.panPosition; }), (t.SoundFile.prototype.rate = function (t) { var e = !1; if ('undefined' == typeof t) return this.playbackRate; if ( ((this.playbackRate = t), 0 === t ? (t = 1e-13) : 0 > t && !this.reversed ? ((t = Math.abs(t)), (e = !0)) : t > 0 && this.reversed && (e = !0), this.bufferSourceNode) ) { var i = p.audiocontext.currentTime; this.bufferSourceNode.playbackRate.cancelScheduledValues(i), this.bufferSourceNode.playbackRate.linearRampToValueAtTime( Math.abs(t), i, ), this._counterNode.playbackRate.cancelScheduledValues(i), this._counterNode.playbackRate.linearRampToValueAtTime( Math.abs(t), i, ); } return e && this.reverseBuffer(), this.playbackRate; }), (t.SoundFile.prototype.setPitch = function (t) { var e = l(t) / l(60); this.rate(e); }), (t.SoundFile.prototype.getPlaybackRate = function () { return this.playbackRate; }), (t.SoundFile.prototype.duration = function () { return this.buffer ? this.buffer.duration : 0; }), (t.SoundFile.prototype.currentTime = function () { return this.reversed ? Math.abs(this._lastPos - this.buffer.length) / h.sampleRate : this._lastPos / h.sampleRate; }), (t.SoundFile.prototype.jump = function (t, e) { if (0 > t || t > this.buffer.duration) throw 'jump time out of range'; if (e > this.buffer.duration - t) throw 'end time out of range'; var i = t || 0, n = e || void 0; this.isPlaying() && this.stop(0), this.play( 0, this.playbackRate, this.output.gain.value, i, n, ); }), (t.SoundFile.prototype.channels = function () { return this.buffer.numberOfChannels; }), (t.SoundFile.prototype.sampleRate = function () { return this.buffer.sampleRate; }), (t.SoundFile.prototype.frames = function () { return this.buffer.length; }), (t.SoundFile.prototype.getPeaks = function (t) { if (!this.buffer) throw 'Cannot load peaks yet, buffer is not loaded'; if ((t || (t = 5 * window.width), this.buffer)) { for ( var e = this.buffer, i = e.length / t, n = ~~(i / 10) || 1, o = e.numberOfChannels, r = new Float32Array(Math.round(t)), s = 0; o > s; s++ ) for (var a = e.getChannelData(s), u = 0; t > u; u++) { for ( var c = ~~(u * i), p = ~~(c + i), h = 0, l = c; p > l; l += n ) { var f = a[l]; f > h ? (h = f) : -f > h && (h = f); } (0 === s || Math.abs(h) > r[u]) && (r[u] = h); } return r; } }), (t.SoundFile.prototype.reverseBuffer = function () { if (!this.buffer) throw 'SoundFile is not done loading'; var t = this._lastPos / h.sampleRate, e = this.getVolume(); this.setVolume(0, 0.001); const i = this.buffer.numberOfChannels; for (var n = 0; i > n; n++) this.buffer.getChannelData(n).reverse(); (this.reversed = !this.reversed), t && this.jump(this.duration() - t), this.setVolume(e, 0.001); }), (t.SoundFile.prototype.onended = function (t) { return (this._onended = t), this; }), (t.SoundFile.prototype.add = function () {}), (t.SoundFile.prototype.dispose = function () { var t = p.audiocontext.currentTime, e = p.soundArray.indexOf(this); if ( (p.soundArray.splice(e, 1), this.stop(t), this.buffer && this.bufferSourceNode) ) { for (var i = 0; i < this.bufferSourceNodes.length - 1; i++) if (null !== this.bufferSourceNodes[i]) { this.bufferSourceNodes[i].disconnect(); try { this.bufferSourceNodes[i].stop(t); } catch (n) { console.warning( 'no buffer source node to dispose', ); } this.bufferSourceNodes[i] = null; } if (this.isPlaying()) { try { this._counterNode.stop(t); } catch (n) { console.log(n); } this._counterNode = null; } } this.output && (this.output.disconnect(), (this.output = null)), this.panner && (this.panner.disconnect(), (this.panner = null)); }), (t.SoundFile.prototype.connect = function (t) { t ? t.hasOwnProperty('input') ? this.panner.connect(t.input) : this.panner.connect(t) : this.panner.connect(p.input); }), (t.SoundFile.prototype.disconnect = function () { this.panner && this.panner.disconnect(); }), (t.SoundFile.prototype.getLevel = function () { console.warn( 'p5.SoundFile.getLevel has been removed from the library. Use p5.Amplitude instead', ); }), (t.SoundFile.prototype.setPath = function (e, i) { var n = t.prototype._checkFileFormats(e); (this.url = n), this.load(i); }), (t.SoundFile.prototype.setBuffer = function (t) { var e = t.length, i = t[0].length, n = h.createBuffer(e, i, h.sampleRate); t[0] instanceof Float32Array || (t[0] = new Float32Array(t[0])); for (var o = 0; e > o; o++) { var r = n.getChannelData(o); r.set(t[o]); } (this.buffer = n), this.panner.inputChannels(e); }); var f = function (t) { const e = t.length, i = h.createBuffer(1, t.length, h.sampleRate), n = i.getChannelData(0); for (var o = 0; e > o; o++) n[o] = o; return i; }; (t.SoundFile.prototype._initCounterNode = function () { var e = this, i = h.currentTime, n = h.createBufferSource(); return ( e._scopeNode && (e._scopeNode.disconnect(), delete e._scopeNode.onaudioprocess, delete e._scopeNode), (e._scopeNode = h.createScriptProcessor(256, 1, 1)), (n.buffer = f(e.buffer)), n.playbackRate.setValueAtTime(e.playbackRate, i), n.connect(e._scopeNode), e._scopeNode.connect(t.soundOut._silentNode), (e._scopeNode.onaudioprocess = function (t) { var i = t.inputBuffer.getChannelData(0); (e._lastPos = i[i.length - 1] || 0), e._onTimeUpdate(e._lastPos); }), n ); }), (t.SoundFile.prototype._initSourceNode = function () { var t = h.createBufferSource(); return ( (t.buffer = this.buffer), (t.playbackRate.value = this.playbackRate), t.connect(this.output), t ); }), (t.SoundFile.prototype.processPeaks = function (t, n, o, r) { var u = this.buffer.length, c = this.buffer.sampleRate, p = this.buffer, h = [], l = n || 0.9, f = l, d = o || 0.22, m = r || 200, y = new window.OfflineAudioContext(1, u, c), v = y.createBufferSource(); v.buffer = p; var g = y.createBiquadFilter(); (g.type = 'lowpass'), v.connect(g), g.connect(y.destination), v.start(0), y.startRendering(), (y.oncomplete = function (n) { var o = n.renderedBuffer, r = o.getChannelData(0); do (h = e(r, f)), (f -= 0.005); while (Object.keys(h).length < m && f >= d); var u = i(h), c = s(u, o.sampleRate), p = c .sort(function (t, e) { return e.count - t.count; }) .splice(0, 5); this.tempo = p[0].tempo; var l = 5, y = a(h, p[0].tempo, o.sampleRate, l); t(y); }); }); var d = function (t, e) { (this.sampleIndex = e), (this.amplitude = t), (this.tempos = []), (this.intervals = []); }, m = function (t, e, i, n) { (this.callback = t), (this.time = e), (this.id = i), (this.val = n); }; (t.SoundFile.prototype.addCue = function (t, e, i) { var n = this._cueIDCounter++, o = new m(e, t, n, i); return this._cues.push(o), n; }), (t.SoundFile.prototype.removeCue = function (t) { for (var e = this._cues.length, i = 0; e > i; i++) { var n = this._cues[i]; n.id === t && this.cues.splice(i, 1); } 0 === this._cues.length; }), (t.SoundFile.prototype.clearCues = function () { this._cues = []; }), (t.SoundFile.prototype._onTimeUpdate = function (t) { for ( var e = t / this.buffer.sampleRate, i = this._cues.length, n = 0; i > n; n++ ) { var o = this._cues[n], r = o.time, s = o.val; this._prevTime < r && e >= r && o.callback(s); } this._prevTime = e; }); })(r, n, o); var u; u = (function () { var e = n; (t.Amplitude = function (t) { (this.bufferSize = 2048), (this.audiocontext = e.audiocontext), (this.processor = this.audiocontext.createScriptProcessor( this.bufferSize, 2, 1, )), (this.input = this.processor), (this.output = this.audiocontext.createGain()), (this.smoothing = t || 0), (this.volume = 0), (this.average = 0), (this.stereoVol = [0, 0]), (this.stereoAvg = [0, 0]), (this.stereoVolNorm = [0, 0]), (this.volMax = 0.001), (this.normalize = !1), (this.processor.onaudioprocess = this._audioProcess.bind(this)), this.processor.connect(this.output), (this.output.gain.value = 0), this.output.connect(this.audiocontext.destination), e.meter.connect(this.processor), e.soundArray.push(this); }), (t.Amplitude.prototype.setInput = function (i, n) { e.meter.disconnect(), n && (this.smoothing = n), null == i ? (console.log( 'Amplitude input source is not ready! Connecting to master output instead', ), e.meter.connect(this.processor)) : i instanceof t.Signal ? i.output.connect(this.processor) : i ? (i.connect(this.processor), this.processor.disconnect(), this.processor.connect(this.output)) : e.meter.connect(this.processor); }), (t.Amplitude.prototype.connect = function (t) { t ? t.hasOwnProperty('input') ? this.output.connect(t.input) : this.output.connect(t) : this.output.connect(this.panner.connect(e.input)); }), (t.Amplitude.prototype.disconnect = function () { this.output && this.output.disconnect(); }), (t.Amplitude.prototype._audioProcess = function (t) { for (var e = 0; e < t.inputBuffer.numberOfChannels; e++) { for ( var i, n = t.inputBuffer.getChannelData(e), o = n.length, r = 0, s = 0, a = 0; o > a; a++ ) (i = n[a]), this.normalize ? ((r += Math.max( Math.min(i / this.volMax, 1), -1, )), (s += Math.max( Math.min(i / this.volMax, 1), -1, ) * Math.max( Math.min(i / this.volMax, 1), -1, ))) : ((r += i), (s += i * i)); var u = r / o, c = Math.sqrt(s / o); (this.stereoVol[e] = Math.max( c, this.stereoVol[e] * this.smoothing, )), (this.stereoAvg[e] = Math.max( u, this.stereoVol[e] * this.smoothing, )), (this.volMax = Math.max( this.stereoVol[e], this.volMax, )); } var p = this, h = this.stereoVol.reduce(function (t, e, i) { return ( (p.stereoVolNorm[i - 1] = Math.max( Math.min(p.stereoVol[i - 1] / p.volMax, 1), 0, )), (p.stereoVolNorm[i] = Math.max( Math.min(p.stereoVol[i] / p.volMax, 1), 0, )), t + e ); }); (this.volume = h / this.stereoVol.length), (this.volNorm = Math.max( Math.min(this.volume / this.volMax, 1), 0, )); }), (t.Amplitude.prototype.getLevel = function (t) { return 'undefined' != typeof t ? this.normalize ? this.stereoVolNorm[t] : this.stereoVol[t] : this.normalize ? this.volNorm : this.volume; }), (t.Amplitude.prototype.toggleNormalize = function (t) { 'boolean' == typeof t ? (this.normalize = t) : (this.normalize = !this.normalize); }), (t.Amplitude.prototype.smooth = function (t) { t >= 0 && 1 > t ? (this.smoothing = t) : console.log('Error: smoothing must be between 0 and 1'); }), (t.Amplitude.prototype.dispose = function () { var t = e.soundArray.indexOf(this); e.soundArray.splice(t, 1), this.input && (this.input.disconnect(), delete this.input), this.output && (this.output.disconnect(), delete this.output), delete this.processor; }); })(n); var c; c = (function () { var e = n; (t.FFT = function (t, i) { (this.input = this.analyser = e.audiocontext.createAnalyser()), Object.defineProperties(this, { bins: { get: function () { return this.analyser.fftSize / 2; }, set: function (t) { this.analyser.fftSize = 2 * t; }, configurable: !0, enumerable: !0, }, smoothing: { get: function () { return this.analyser.smoothingTimeConstant; }, set: function (t) { this.analyser.smoothingTimeConstant = t; }, configurable: !0, enumerable: !0, }, }), this.smooth(t), (this.bins = i || 1024), e.fftMeter.connect(this.analyser), (this.freqDomain = new Uint8Array( this.analyser.frequencyBinCount, )), (this.timeDomain = new Uint8Array( this.analyser.frequencyBinCount, )), (this.bass = [20, 140]), (this.lowMid = [140, 400]), (this.mid = [400, 2600]), (this.highMid = [2600, 5200]), (this.treble = [5200, 14e3]), e.soundArray.push(this); }), (t.FFT.prototype.setInput = function (t) { t ? (t.output ? t.output.connect(this.analyser) : t.connect && t.connect(this.analyser), e.fftMeter.disconnect()) : e.fftMeter.connect(this.analyser); }), (t.FFT.prototype.waveform = function () { for (var e, i, n, o = 0; o < arguments.length; o++) 'number' == typeof arguments[o] && ((e = arguments[o]), (this.analyser.fftSize = 2 * e)), 'string' == typeof arguments[o] && (i = arguments[o]); if (i && !t.prototype._isSafari()) return ( r(this, this.timeDomain), this.analyser.getFloatTimeDomainData(this.timeDomain), this.timeDomain ); s(this, this.timeDomain), this.analyser.getByteTimeDomainData(this.timeDomain); for ( var n = new Array(), a = 0; a < this.timeDomain.length; a++ ) { var u = t.prototype.map(this.timeDomain[a], 0, 255, -1, 1); n.push(u); } return n; }), (t.FFT.prototype.analyze = function () { for (var t, e = 0; e < arguments.length; e++) 'number' == typeof arguments[e] && ((this.bins = arguments[e]), (this.analyser.fftSize = 2 * this.bins)), 'string' == typeof arguments[e] && (t = arguments[e]); if (t && 'db' === t.toLowerCase()) return ( i(this), this.analyser.getFloatFrequencyData(this.freqDomain), this.freqDomain ); o(this, this.freqDomain), this.analyser.getByteFrequencyData(this.freqDomain); var n = Array.apply([], this.freqDomain); return ( n.length === this.analyser.fftSize, n.constructor === Array, n ); }), (t.FFT.prototype.getEnergy = function (t, i) { var n = e.audiocontext.sampleRate / 2; if ( ('bass' === t ? ((t = this.bass[0]), (i = this.bass[1])) : 'lowMid' === t ? ((t = this.lowMid[0]), (i = this.lowMid[1])) : 'mid' === t ? ((t = this.mid[0]), (i = this.mid[1])) : 'highMid' === t ? ((t = this.highMid[0]), (i = this.highMid[1])) : 'treble' === t && ((t = this.treble[0]), (i = this.treble[1])), 'number' != typeof t) ) throw 'invalid input for getEnergy()'; if (i) { if (t && i) { if (t > i) { var o = i; (i = t), (t = o); } for ( var r = Math.round( (t / n) * this.freqDomain.length, ), s = Math.round( (i / n) * this.freqDomain.length, ), a = 0, u = 0, c = r; s >= c; c++ ) (a += this.freqDomain[c]), (u += 1); var p = a / u; return p; } throw 'invalid input for getEnergy()'; } var h = Math.round((t / n) * this.freqDomain.length); return this.freqDomain[h]; }), (t.FFT.prototype.getFreq = function (t, e) { console.log( 'getFreq() is deprecated. Please use getEnergy() instead.', ); var i = this.getEnergy(t, e); return i; }), (t.FFT.prototype.getCentroid = function () { for ( var t = e.audiocontext.sampleRate / 2, i = 0, n = 0, o = 0; o < this.freqDomain.length; o++ ) (i += o * this.freqDomain[o]), (n += this.freqDomain[o]); var r = 0; 0 !== n && (r = i / n); var s = r * (t / this.freqDomain.length); return s; }), (t.FFT.prototype.smooth = function (t) { return ( 'undefined' != typeof t && (this.smoothing = t), this.smoothing ); }), (t.FFT.prototype.dispose = function () { var t = e.soundArray.indexOf(this); e.soundArray.splice(t, 1), this.analyser && (this.analyser.disconnect(), delete this.analyser); }), (t.FFT.prototype.linAverages = function (t) { for ( var t = t || 16, e = this.freqDomain, i = e.length, n = Math.floor(i / t), o = new Array(t), r = 0, s = 0; i > s; s++ ) (o[r] = void 0 !== o[r] ? (o[r] + e[s]) / 2 : e[s]), s % n === n - 1 && r++; return o; }), (t.FFT.prototype.logAverages = function (t) { for ( var i = e.audiocontext.sampleRate / 2, n = this.freqDomain, o = n.length, r = new Array(t.length), s = 0, a = 0; o > a; a++ ) { var u = Math.round((a * i) / this.freqDomain.length); u > t[s].hi && s++, (r[s] = void 0 !== r[s] ? (r[s] + n[a]) / 2 : n[a]); } return r; }), (t.FFT.prototype.getOctaveBands = function (t, i) { var t = t || 3, i = i || 15.625, n = [], o = { lo: i / Math.pow(2, 1 / (2 * t)), ctr: i, hi: i * Math.pow(2, 1 / (2 * t)), }; n.push(o); for (var r = e.audiocontext.sampleRate / 2; o.hi < r; ) { var s = {}; (s.lo = o.hi), (s.ctr = o.ctr * Math.pow(2, 1 / t)), (s.hi = s.ctr * Math.pow(2, 1 / (2 * t))), n.push(s), (o = s); } return n; }); var i = function (t) { t.freqDomain instanceof Float32Array == !1 && (t.freqDomain = new Float32Array( t.analyser.frequencyBinCount, )); }, o = function (t) { t.freqDomain instanceof Uint8Array == !1 && (t.freqDomain = new Uint8Array( t.analyser.frequencyBinCount, )); }, r = function (t) { t.timeDomain instanceof Float32Array == !1 && (t.timeDomain = new Float32Array( t.analyser.frequencyBinCount, )); }, s = function (t) { t.timeDomain instanceof Uint8Array == !1 && (t.timeDomain = new Uint8Array( t.analyser.frequencyBinCount, )); }; })(n); var p; p = (function () { 'use strict'; var t = function (t, e) { this.isUndef(t) || 1 === t ? (this.input = this.context.createGain()) : t > 1 && (this.input = new Array(t)), this.isUndef(e) || 1 === e ? (this.output = this.context.createGain()) : e > 1 && (this.output = new Array(t)); }; (t.prototype.set = function (e, i, n) { if (this.isObject(e)) n = i; else if (this.isString(e)) { var o = {}; (o[e] = i), (e = o); } t: for (var r in e) { i = e[r]; var s = this; if (-1 !== r.indexOf('.')) { for (var a = r.split('.'), u = 0; u < a.length - 1; u++) if (((s = s[a[u]]), s instanceof t)) { a.splice(0, u + 1); var c = a.join('.'); s.set(c, i); continue t; } r = a[a.length - 1]; } var p = s[r]; this.isUndef(p) || ((t.Signal && p instanceof t.Signal) || (t.Param && p instanceof t.Param) ? p.value !== i && (this.isUndef(n) ? (p.value = i) : p.rampTo(i, n)) : p instanceof AudioParam ? p.value !== i && (p.value = i) : p instanceof t ? p.set(i) : p !== i && (s[r] = i)); } return this; }), (t.prototype.get = function (e) { this.isUndef(e) ? (e = this._collectDefaults(this.constructor)) : this.isString(e) && (e = [e]); for (var i = {}, n = 0; n < e.length; n++) { var o = e[n], r = this, s = i; if (-1 !== o.indexOf('.')) { for ( var a = o.split('.'), u = 0; u < a.length - 1; u++ ) { var c = a[u]; (s[c] = s[c] || {}), (s = s[c]), (r = r[c]); } o = a[a.length - 1]; } var p = r[o]; this.isObject(e[o]) ? (s[o] = p.get()) : t.Signal && p instanceof t.Signal ? (s[o] = p.value) : t.Param && p instanceof t.Param ? (s[o] = p.value) : p instanceof AudioParam ? (s[o] = p.value) : p instanceof t ? (s[o] = p.get()) : this.isFunction(p) || this.isUndef(p) || (s[o] = p); } return i; }), (t.prototype._collectDefaults = function (t) { var e = []; if ( (this.isUndef(t.defaults) || (e = Object.keys(t.defaults)), !this.isUndef(t._super)) ) for ( var i = this._collectDefaults(t._super), n = 0; n < i.length; n++ ) -1 === e.indexOf(i[n]) && e.push(i[n]); return e; }), (t.prototype.toString = function () { for (var e in t) { var i = e[0].match(/^[A-Z]$/), n = t[e] === this.constructor; if (this.isFunction(t[e]) && i && n) return e; } return 'Tone'; }), Object.defineProperty(t.prototype, 'numberOfInputs', { get: function () { return this.input ? this.isArray(this.input) ? this.input.length : 1 : 0; }, }), Object.defineProperty(t.prototype, 'numberOfOutputs', { get: function () { return this.output ? this.isArray(this.output) ? this.output.length : 1 : 0; }, }), (t.prototype.dispose = function () { return ( this.isUndef(this.input) || (this.input instanceof AudioNode && this.input.disconnect(), (this.input = null)), this.isUndef(this.output) || (this.output instanceof AudioNode && this.output.disconnect(), (this.output = null)), this ); }), (t.prototype.connect = function (t, e, i) { return ( Array.isArray(this.output) ? ((e = this.defaultArg(e, 0)), this.output[e].connect(t, 0, i)) : this.output.connect(t, e, i), this ); }), (t.prototype.disconnect = function (t, e, i) { this.isArray(this.output) ? this.isNumber(t) ? this.output[t].disconnect() : ((e = this.defaultArg(e, 0)), this.output[e].disconnect(t, 0, i)) : this.output.disconnect.apply(this.output, arguments); }), (t.prototype.connectSeries = function () { if (arguments.length > 1) for ( var t = arguments[0], e = 1; e < arguments.length; e++ ) { var i = arguments[e]; t.connect(i), (t = i); } return this; }), (t.prototype.chain = function () { if (arguments.length > 0) for (var t = this, e = 0; e < arguments.length; e++) { var i = arguments[e]; t.connect(i), (t = i); } return this; }), (t.prototype.fan = function () { if (arguments.length > 0) for (var t = 0; t < arguments.length; t++) this.connect(arguments[t]); return this; }), (AudioNode.prototype.chain = t.prototype.chain), (AudioNode.prototype.fan = t.prototype.fan), (t.prototype.defaultArg = function (t, e) { if (this.isObject(t) && this.isObject(e)) { var i = {}; for (var n in t) i[n] = this.defaultArg(e[n], t[n]); for (var o in e) i[o] = this.defaultArg(t[o], e[o]); return i; } return this.isUndef(t) ? e : t; }), (t.prototype.optionsObject = function (t, e, i) { var n = {}; if (1 === t.length && this.isObject(t[0])) n = t[0]; else for (var o = 0; o < e.length; o++) n[e[o]] = t[o]; return this.isUndef(i) ? n : this.defaultArg(n, i); }), (t.prototype.isUndef = function (t) { return 'undefined' == typeof t; }), (t.prototype.isFunction = function (t) { return 'function' == typeof t; }), (t.prototype.isNumber = function (t) { return 'number' == typeof t; }), (t.prototype.isObject = function (t) { return ( '[object Object]' === Object.prototype.toString.call(t) && t.constructor === Object ); }), (t.prototype.isBoolean = function (t) { return 'boolean' == typeof t; }), (t.prototype.isArray = function (t) { return Array.isArray(t); }), (t.prototype.isString = function (t) { return 'string' == typeof t; }), (t.noOp = function () {}), (t.prototype._readOnly = function (t) { if (Array.isArray(t)) for (var e = 0; e < t.length; e++) this._readOnly(t[e]); else Object.defineProperty(this, t, { writable: !1, enumerable: !0, }); }), (t.prototype._writable = function (t) { if (Array.isArray(t)) for (var e = 0; e < t.length; e++) this._writable(t[e]); else Object.defineProperty(this, t, {writable: !0}); }), (t.State = { Started: 'started', Stopped: 'stopped', Paused: 'paused', }), (t.prototype.equalPowerScale = function (t) { var e = 0.5 * Math.PI; return Math.sin(t * e); }), (t.prototype.dbToGain = function (t) { return Math.pow(2, t / 6); }), (t.prototype.gainToDb = function (t) { return 20 * (Math.log(t) / Math.LN10); }), (t.prototype.intervalToFrequencyRatio = function (t) { return Math.pow(2, t / 12); }), (t.prototype.now = function () { return t.context.now(); }), (t.now = function () { return t.context.now(); }), (t.extend = function (e, i) { function n() {} t.prototype.isUndef(i) && (i = t), (n.prototype = i.prototype), (e.prototype = new n()), (e.prototype.constructor = e), (e._super = i); }); var e; return ( Object.defineProperty(t, 'context', { get: function () { return e; }, set: function (i) { (e = t.Context && i instanceof t.Context ? i : new t.Context(i)), t.Context && t.Context.emit('init', e); }, }), Object.defineProperty(t.prototype, 'context', { get: function () { return t.context; }, }), (t.setContext = function (e) { t.context = e; }), Object.defineProperty(t.prototype, 'blockTime', { get: function () { return 128 / this.context.sampleRate; }, }), Object.defineProperty(t.prototype, 'sampleTime', { get: function () { return 1 / this.context.sampleRate; }, }), Object.defineProperty(t, 'supported', { get: function () { var t = window.hasOwnProperty('AudioContext') || window.hasOwnProperty('webkitAudioContext'), e = window.hasOwnProperty('Promise'), i = window.hasOwnProperty('Worker'); return t && e && i; }, }), (t.version = 'r10'), !window.TONE_SILENCE_VERSION_LOGGING, t ); })(); var h; h = (function (t) { 'use strict'; return ( (t.SignalBase = function () {}), t.extend(t.SignalBase), (t.SignalBase.prototype.connect = function (e, i, n) { return ( (t.Signal && t.Signal === e.constructor) || (t.Param && t.Param === e.constructor) || (t.TimelineSignal && t.TimelineSignal === e.constructor) ? (e._param.cancelScheduledValues(0), (e._param.value = 0), (e.overridden = !0)) : e instanceof AudioParam && (e.cancelScheduledValues(0), (e.value = 0)), t.prototype.connect.call(this, e, i, n), this ); }), t.SignalBase ); })(p); var l; l = (function (t) { 'use strict'; return ( (t.WaveShaper = function (t, e) { (this._shaper = this.input = this.output = this.context.createWaveShaper()), (this._curve = null), Array.isArray(t) ? (this.curve = t) : isFinite(t) || this.isUndef(t) ? (this._curve = new Float32Array( this.defaultArg(t, 1024), )) : this.isFunction(t) && ((this._curve = new Float32Array( this.defaultArg(e, 1024), )), this.setMap(t)); }), t.extend(t.WaveShaper, t.SignalBase), (t.WaveShaper.prototype.setMap = function (t) { for (var e = 0, i = this._curve.length; i > e; e++) { var n = (e / (i - 1)) * 2 - 1; this._curve[e] = t(n, e); } return (this._shaper.curve = this._curve), this; }), Object.defineProperty(t.WaveShaper.prototype, 'curve', { get: function () { return this._shaper.curve; }, set: function (t) { (this._curve = new Float32Array(t)), (this._shaper.curve = this._curve); }, }), Object.defineProperty(t.WaveShaper.prototype, 'oversample', { get: function () { return this._shaper.oversample; }, set: function (t) { if (-1 === ['none', '2x', '4x'].indexOf(t)) throw new RangeError( "Tone.WaveShaper: oversampling must be either 'none', '2x', or '4x'", ); this._shaper.oversample = t; }, }), (t.WaveShaper.prototype.dispose = function () { return ( t.prototype.dispose.call(this), this._shaper.disconnect(), (this._shaper = null), (this._curve = null), this ); }), t.WaveShaper ); })(p); var f; f = (function (t) { return ( (t.TimeBase = function (e, i) { if (!(this instanceof t.TimeBase)) return new t.TimeBase(e, i); if (((this._expr = this._noOp), e instanceof t.TimeBase)) this.copy(e); else if (!this.isUndef(i) || this.isNumber(e)) { i = this.defaultArg(i, this._defaultUnits); var n = this._primaryExpressions[i].method; this._expr = n.bind(this, e); } else this.isString(e) ? this.set(e) : this.isUndef(e) && (this._expr = this._defaultExpr()); }), t.extend(t.TimeBase), (t.TimeBase.prototype.set = function (t) { return (this._expr = this._parseExprString(t)), this; }), (t.TimeBase.prototype.clone = function () { var t = new this.constructor(); return t.copy(this), t; }), (t.TimeBase.prototype.copy = function (t) { var e = t._expr(); return this.set(e); }), (t.TimeBase.prototype._primaryExpressions = { n: { regexp: /^(\d+)n/i, method: function (t) { return ( (t = parseInt(t)), 1 === t ? this._beatsToUnits(this._timeSignature()) : this._beatsToUnits(4 / t) ); }, }, t: { regexp: /^(\d+)t/i, method: function (t) { return ( (t = parseInt(t)), this._beatsToUnits(8 / (3 * parseInt(t))) ); }, }, m: { regexp: /^(\d+)m/i, method: function (t) { return this._beatsToUnits( parseInt(t) * this._timeSignature(), ); }, }, i: { regexp: /^(\d+)i/i, method: function (t) { return this._ticksToUnits(parseInt(t)); }, }, hz: { regexp: /^(\d+(?:\.\d+)?)hz/i, method: function (t) { return this._frequencyToUnits(parseFloat(t)); }, }, tr: { regexp: /^(\d+(?:\.\d+)?):(\d+(?:\.\d+)?):?(\d+(?:\.\d+)?)?/, method: function (t, e, i) { var n = 0; return ( t && '0' !== t && (n += this._beatsToUnits( this._timeSignature() * parseFloat(t), )), e && '0' !== e && (n += this._beatsToUnits(parseFloat(e))), i && '0' !== i && (n += this._beatsToUnits(parseFloat(i) / 4)), n ); }, }, s: { regexp: /^(\d+(?:\.\d+)?s)/, method: function (t) { return this._secondsToUnits(parseFloat(t)); }, }, samples: { regexp: /^(\d+)samples/, method: function (t) { return parseInt(t) / this.context.sampleRate; }, }, default: { regexp: /^(\d+(?:\.\d+)?)/, method: function (t) { return this._primaryExpressions[ this._defaultUnits ].method.call(this, t); }, }, }), (t.TimeBase.prototype._binaryExpressions = { '+': { regexp: /^\+/, precedence: 2, method: function (t, e) { return t() + e(); }, }, '-': { regexp: /^\-/, precedence: 2, method: function (t, e) { return t() - e(); }, }, '*': { regexp: /^\*/, precedence: 1, method: function (t, e) { return t() * e(); }, }, '/': { regexp: /^\//, precedence: 1, method: function (t, e) { return t() / e(); }, }, }), (t.TimeBase.prototype._unaryExpressions = { neg: { regexp: /^\-/, method: function (t) { return -t(); }, }, }), (t.TimeBase.prototype._syntaxGlue = { '(': {regexp: /^\(/}, ')': {regexp: /^\)/}, }), (t.TimeBase.prototype._tokenize = function (t) { function e(t, e) { for ( var i = [ '_binaryExpressions', '_unaryExpressions', '_primaryExpressions', '_syntaxGlue', ], n = 0; n < i.length; n++ ) { var o = e[i[n]]; for (var r in o) { var s = o[r], a = s.regexp, u = t.match(a); if (null !== u) return { method: s.method, precedence: s.precedence, regexp: s.regexp, value: u[0], }; } } throw new SyntaxError( 'Tone.TimeBase: Unexpected token ' + t, ); } for (var i = -1, n = []; t.length > 0; ) { t = t.trim(); var o = e(t, this); n.push(o), (t = t.substr(o.value.length)); } return { next: function () { return n[++i]; }, peek: function () { return n[i + 1]; }, }; }), (t.TimeBase.prototype._matchGroup = function (t, e, i) { var n = !1; if (!this.isUndef(t)) for (var o in e) { var r = e[o]; if (r.regexp.test(t.value)) { if (this.isUndef(i)) return r; if (r.precedence === i) return r; } } return n; }), (t.TimeBase.prototype._parseBinary = function (t, e) { this.isUndef(e) && (e = 2); var i; i = 0 > e ? this._parseUnary(t) : this._parseBinary(t, e - 1); for ( var n = t.peek(); n && this._matchGroup(n, this._binaryExpressions, e); ) (n = t.next()), (i = n.method.bind( this, i, this._parseBinary(t, e - 1), )), (n = t.peek()); return i; }), (t.TimeBase.prototype._parseUnary = function (t) { var e, i; e = t.peek(); var n = this._matchGroup(e, this._unaryExpressions); return n ? ((e = t.next()), (i = this._parseUnary(t)), n.method.bind(this, i)) : this._parsePrimary(t); }), (t.TimeBase.prototype._parsePrimary = function (t) { var e, i; if (((e = t.peek()), this.isUndef(e))) throw new SyntaxError( 'Tone.TimeBase: Unexpected end of expression', ); if (this._matchGroup(e, this._primaryExpressions)) { e = t.next(); var n = e.value.match(e.regexp); return e.method.bind(this, n[1], n[2], n[3]); } if (e && '(' === e.value) { if ( (t.next(), (i = this._parseBinary(t)), (e = t.next()), !e || ')' !== e.value) ) throw new SyntaxError('Expected )'); return i; } throw new SyntaxError( 'Tone.TimeBase: Cannot process token ' + e.value, ); }), (t.TimeBase.prototype._parseExprString = function (t) { this.isString(t) || (t = t.toString()); var e = this._tokenize(t), i = this._parseBinary(e); return i; }), (t.TimeBase.prototype._noOp = function () { return 0; }), (t.TimeBase.prototype._defaultExpr = function () { return this._noOp; }), (t.TimeBase.prototype._defaultUnits = 's'), (t.TimeBase.prototype._frequencyToUnits = function (t) { return 1 / t; }), (t.TimeBase.prototype._beatsToUnits = function (e) { return (60 / t.Transport.bpm.value) * e; }), (t.TimeBase.prototype._secondsToUnits = function (t) { return t; }), (t.TimeBase.prototype._ticksToUnits = function (e) { return e * (this._beatsToUnits(1) / t.Transport.PPQ); }), (t.TimeBase.prototype._timeSignature = function () { return t.Transport.timeSignature; }), (t.TimeBase.prototype._pushExpr = function (e, i, n) { return ( e instanceof t.TimeBase || (e = new this.constructor(e, n)), (this._expr = this._binaryExpressions[i].method.bind( this, this._expr, e._expr, )), this ); }), (t.TimeBase.prototype.add = function (t, e) { return this._pushExpr(t, '+', e); }), (t.TimeBase.prototype.sub = function (t, e) { return this._pushExpr(t, '-', e); }), (t.TimeBase.prototype.mult = function (t, e) { return this._pushExpr(t, '*', e); }), (t.TimeBase.prototype.div = function (t, e) { return this._pushExpr(t, '/', e); }), (t.TimeBase.prototype.valueOf = function () { return this._expr(); }), (t.TimeBase.prototype.dispose = function () { this._expr = null; }), t.TimeBase ); })(p); var d; d = (function (t) { return ( (t.Time = function (e, i) { return this instanceof t.Time ? ((this._plusNow = !1), void t.TimeBase.call(this, e, i)) : new t.Time(e, i); }), t.extend(t.Time, t.TimeBase), (t.Time.prototype._unaryExpressions = Object.create( t.TimeBase.prototype._unaryExpressions, )), (t.Time.prototype._unaryExpressions.quantize = { regexp: /^@/, method: function (e) { return t.Transport.nextSubdivision(e()); }, }), (t.Time.prototype._unaryExpressions.now = { regexp: /^\+/, method: function (t) { return (this._plusNow = !0), t(); }, }), (t.Time.prototype.quantize = function (t, e) { return ( (e = this.defaultArg(e, 1)), (this._expr = function (t, e, i) { (t = t()), (e = e.toSeconds()); var n = Math.round(t / e), o = n * e, r = o - t; return t + r * i; }.bind(this, this._expr, new this.constructor(t), e)), this ); }), (t.Time.prototype.addNow = function () { return (this._plusNow = !0), this; }), (t.Time.prototype._defaultExpr = function () { return (this._plusNow = !0), this._noOp; }), (t.Time.prototype.copy = function (e) { return ( t.TimeBase.prototype.copy.call(this, e), (this._plusNow = e._plusNow), this ); }), (t.Time.prototype.toNotation = function () { var t = this.toSeconds(), e = ['1m', '2n', '4n', '8n', '16n', '32n', '64n', '128n'], i = this._toNotationHelper(t, e), n = [ '1m', '2n', '2t', '4n', '4t', '8n', '8t', '16n', '16t', '32n', '32t', '64n', '64t', '128n', ], o = this._toNotationHelper(t, n); return o.split('+').length < i.split('+').length ? o : i; }), (t.Time.prototype._toNotationHelper = function (t, e) { for ( var i = this._notationToUnits(e[e.length - 1]), n = '', o = 0; o < e.length; o++ ) { var r = this._notationToUnits(e[o]), s = t / r, a = 1e-6; if ( (a > 1 - (s % 1) && (s += a), (s = Math.floor(s)), s > 0) ) { if ( ((n += 1 === s ? e[o] : s.toString() + '*' + e[o]), (t -= s * r), i > t) ) break; n += ' + '; } } return '' === n && (n = '0'), n; }), (t.Time.prototype._notationToUnits = function (t) { for ( var e = this._primaryExpressions, i = [e.n, e.t, e.m], n = 0; n < i.length; n++ ) { var o = i[n], r = t.match(o.regexp); if (r) return o.method.call(this, r[1]); } }), (t.Time.prototype.toBarsBeatsSixteenths = function () { var t = this._beatsToUnits(1), e = this.toSeconds() / t, i = Math.floor(e / this._timeSignature()), n = (e % 1) * 4; (e = Math.floor(e) % this._timeSignature()), (n = n.toString()), n.length > 3 && (n = parseFloat(n).toFixed(3)); var o = [i, e, n]; return o.join(':'); }), (t.Time.prototype.toTicks = function () { var e = this._beatsToUnits(1), i = this.valueOf() / e; return Math.floor(i * t.Transport.PPQ); }), (t.Time.prototype.toSamples = function () { return this.toSeconds() * this.context.sampleRate; }), (t.Time.prototype.toFrequency = function () { return 1 / this.toSeconds(); }), (t.Time.prototype.toSeconds = function () { return this.valueOf(); }), (t.Time.prototype.toMilliseconds = function () { return 1e3 * this.toSeconds(); }), (t.Time.prototype.valueOf = function () { var t = this._expr(); return t + (this._plusNow ? this.now() : 0); }), t.Time ); })(p); var m; m = (function (t) { (t.Frequency = function (e, i) { return this instanceof t.Frequency ? void t.TimeBase.call(this, e, i) : new t.Frequency(e, i); }), t.extend(t.Frequency, t.TimeBase), (t.Frequency.prototype._primaryExpressions = Object.create( t.TimeBase.prototype._primaryExpressions, )), (t.Frequency.prototype._primaryExpressions.midi = { regexp: /^(\d+(?:\.\d+)?midi)/, method: function (t) { return this.midiToFrequency(t); }, }), (t.Frequency.prototype._primaryExpressions.note = { regexp: /^([a-g]{1}(?:b|#|x|bb)?)(-?[0-9]+)/i, method: function (t, i) { var n = e[t.toLowerCase()], o = n + 12 * (parseInt(i) + 1); return this.midiToFrequency(o); }, }), (t.Frequency.prototype._primaryExpressions.tr = { regexp: /^(\d+(?:\.\d+)?):(\d+(?:\.\d+)?):?(\d+(?:\.\d+)?)?/, method: function (t, e, i) { var n = 1; return ( t && '0' !== t && (n *= this._beatsToUnits( this._timeSignature() * parseFloat(t), )), e && '0' !== e && (n *= this._beatsToUnits(parseFloat(e))), i && '0' !== i && (n *= this._beatsToUnits(parseFloat(i) / 4)), n ); }, }), (t.Frequency.prototype.transpose = function (t) { return ( (this._expr = function (t, e) { var i = t(); return i * this.intervalToFrequencyRatio(e); }.bind(this, this._expr, t)), this ); }), (t.Frequency.prototype.harmonize = function (t) { return ( (this._expr = function (t, e) { for (var i = t(), n = [], o = 0; o < e.length; o++) n[o] = i * this.intervalToFrequencyRatio(e[o]); return n; }.bind(this, this._expr, t)), this ); }), (t.Frequency.prototype.toMidi = function () { return this.frequencyToMidi(this.valueOf()); }), (t.Frequency.prototype.toNote = function () { var e = this.valueOf(), n = Math.log(e / t.Frequency.A4) / Math.LN2, o = Math.round(12 * n) + 57, r = Math.floor(o / 12); 0 > r && (o += -12 * r); var s = i[o % 12]; return s + r.toString(); }), (t.Frequency.prototype.toSeconds = function () { return 1 / this.valueOf(); }), (t.Frequency.prototype.toFrequency = function () { return this.valueOf(); }), (t.Frequency.prototype.toTicks = function () { var e = this._beatsToUnits(1), i = this.valueOf() / e; return Math.floor(i * t.Transport.PPQ); }), (t.Frequency.prototype._frequencyToUnits = function (t) { return t; }), (t.Frequency.prototype._ticksToUnits = function (e) { return ( 1 / ((60 * e) / (t.Transport.bpm.value * t.Transport.PPQ)) ); }), (t.Frequency.prototype._beatsToUnits = function (e) { return 1 / t.TimeBase.prototype._beatsToUnits.call(this, e); }), (t.Frequency.prototype._secondsToUnits = function (t) { return 1 / t; }), (t.Frequency.prototype._defaultUnits = 'hz'); var e = { cbb: -2, cb: -1, c: 0, 'c#': 1, cx: 2, dbb: 0, db: 1, d: 2, 'd#': 3, dx: 4, ebb: 2, eb: 3, e: 4, 'e#': 5, ex: 6, fbb: 3, fb: 4, f: 5, 'f#': 6, fx: 7, gbb: 5, gb: 6, g: 7, 'g#': 8, gx: 9, abb: 7, ab: 8, a: 9, 'a#': 10, ax: 11, bbb: 9, bb: 10, b: 11, 'b#': 12, bx: 13, }, i = [ 'C', 'C#', 'D', 'D#', 'E', 'F', 'F#', 'G', 'G#', 'A', 'A#', 'B', ]; return ( (t.Frequency.A4 = 440), (t.Frequency.prototype.midiToFrequency = function (e) { return t.Frequency.A4 * Math.pow(2, (e - 69) / 12); }), (t.Frequency.prototype.frequencyToMidi = function (e) { return 69 + (12 * Math.log(e / t.Frequency.A4)) / Math.LN2; }), t.Frequency ); })(p); var y; y = (function (t) { return ( (t.TransportTime = function (e, i) { return this instanceof t.TransportTime ? void t.Time.call(this, e, i) : new t.TransportTime(e, i); }), t.extend(t.TransportTime, t.Time), (t.TransportTime.prototype._unaryExpressions = Object.create( t.Time.prototype._unaryExpressions, )), (t.TransportTime.prototype._unaryExpressions.quantize = { regexp: /^@/, method: function (e) { var i = this._secondsToTicks(e()), n = Math.ceil(t.Transport.ticks / i); return this._ticksToUnits(n * i); }, }), (t.TransportTime.prototype._secondsToTicks = function (e) { var i = this._beatsToUnits(1), n = e / i; return Math.round(n * t.Transport.PPQ); }), (t.TransportTime.prototype.valueOf = function () { var e = this._secondsToTicks(this._expr()); return e + (this._plusNow ? t.Transport.ticks : 0); }), (t.TransportTime.prototype.toTicks = function () { return this.valueOf(); }), (t.TransportTime.prototype.toSeconds = function () { var e = this._expr(); return e + (this._plusNow ? t.Transport.seconds : 0); }), (t.TransportTime.prototype.toFrequency = function () { return 1 / this.toSeconds(); }), t.TransportTime ); })(p); var v; v = (function (t) { 'use strict'; return ( (t.Emitter = function () { this._events = {}; }), t.extend(t.Emitter), (t.Emitter.prototype.on = function (t, e) { for (var i = t.split(/\W+/), n = 0; n < i.length; n++) { var o = i[n]; this._events.hasOwnProperty(o) || (this._events[o] = []), this._events[o].push(e); } return this; }), (t.Emitter.prototype.off = function (e, i) { for (var n = e.split(/\W+/), o = 0; o < n.length; o++) if (((e = n[o]), this._events.hasOwnProperty(e))) if (t.prototype.isUndef(i)) this._events[e] = []; else for ( var r = this._events[e], s = 0; s < r.length; s++ ) r[s] === i && r.splice(s, 1); return this; }), (t.Emitter.prototype.emit = function (t) { if (this._events) { var e = Array.apply(null, arguments).slice(1); if (this._events.hasOwnProperty(t)) for ( var i = this._events[t], n = 0, o = i.length; o > n; n++ ) i[n].apply(this, e); } return this; }), (t.Emitter.mixin = function (e) { var i = ['on', 'off', 'emit']; e._events = {}; for (var n = 0; n < i.length; n++) { var o = i[n], r = t.Emitter.prototype[o]; e[o] = r; } }), (t.Emitter.prototype.dispose = function () { return ( t.prototype.dispose.call(this), (this._events = null), this ); }), t.Emitter ); })(p); var g; g = (function (t) { function e() { function e(e, i, o) { if (e.input) Array.isArray(e.input) ? (t.prototype.isUndef(o) && (o = 0), this.connect(e.input[o])) : this.connect(e.input, i, o); else try { e instanceof AudioNode ? n.call(this, e, i, o) : n.call(this, e, i); } catch (r) { throw new Error( 'error connecting to node: ' + e + '\n' + r, ); } } function i(e, i, n) { if (e && e.input && Array.isArray(e.input)) t.prototype.isUndef(n) && (n = 0), this.disconnect(e.input[n], i, n); else if (e && e.input) this.disconnect(e.input, i, n); else try { o.apply(this, arguments); } catch (r) { throw new Error( 'error disconnecting node: ' + e + '\n' + r, ); } } var n = AudioNode.prototype.connect, o = AudioNode.prototype.disconnect; AudioNode.prototype.connect !== e && ((AudioNode.prototype.connect = e), (AudioNode.prototype.disconnect = i)); } return ( !window.hasOwnProperty('AudioContext') && window.hasOwnProperty('webkitAudioContext') && (window.AudioContext = window.webkitAudioContext), (t.Context = function (e) { t.Emitter.call(this), e || (e = new window.AudioContext()), (this._context = e); for (var i in this._context) this._defineProperty(this._context, i); (this._latencyHint = 'interactive'), (this._lookAhead = 0.1), (this._updateInterval = this._lookAhead / 3), (this._computedUpdateInterval = 0), (this._worker = this._createWorker()), (this._constants = {}); }), t.extend(t.Context, t.Emitter), t.Emitter.mixin(t.Context), (t.Context.prototype._defineProperty = function (t, e) { this.isUndef(this[e]) && Object.defineProperty(this, e, { get: function () { return 'function' == typeof t[e] ? t[e].bind(t) : t[e]; }, set: function (i) { t[e] = i; }, }); }), (t.Context.prototype.now = function () { return this._context.currentTime; }), (t.Context.prototype._createWorker = function () { window.URL = window.URL || window.webkitURL; var t = new Blob([ 'var timeoutTime = ' + (1e3 * this._updateInterval).toFixed(1) + ";self.onmessage = function(msg){ timeoutTime = parseInt(msg.data);};function tick(){ setTimeout(tick, timeoutTime); self.postMessage('tick');}tick();", ]), e = URL.createObjectURL(t), i = new Worker(e); return ( i.addEventListener( 'message', function () { this.emit('tick'); }.bind(this), ), i.addEventListener( 'message', function () { var t = this.now(); if (this.isNumber(this._lastUpdate)) { var e = t - this._lastUpdate; this._computedUpdateInterval = Math.max( e, 0.97 * this._computedUpdateInterval, ); } this._lastUpdate = t; }.bind(this), ), i ); }), (t.Context.prototype.getConstant = function (t) { if (this._constants[t]) return this._constants[t]; for ( var e = this._context.createBuffer( 1, 128, this._context.sampleRate, ), i = e.getChannelData(0), n = 0; n < i.length; n++ ) i[n] = t; var o = this._context.createBufferSource(); return ( (o.channelCount = 1), (o.channelCountMode = 'explicit'), (o.buffer = e), (o.loop = !0), o.start(0), (this._constants[t] = o), o ); }), Object.defineProperty(t.Context.prototype, 'lag', { get: function () { var t = this._computedUpdateInterval - this._updateInterval; return (t = Math.max(t, 0)); }, }), Object.defineProperty(t.Context.prototype, 'lookAhead', { get: function () { return this._lookAhead; }, set: function (t) { this._lookAhead = t; }, }), Object.defineProperty(t.Context.prototype, 'updateInterval', { get: function () { return this._updateInterval; }, set: function (e) { (this._updateInterval = Math.max(e, t.prototype.blockTime)), this._worker.postMessage(Math.max(1e3 * e, 1)); }, }), Object.defineProperty(t.Context.prototype, 'latencyHint', { get: function () { return this._latencyHint; }, set: function (t) { var e = t; if (((this._latencyHint = t), this.isString(t))) switch (t) { case 'interactive': (e = 0.1), (this._context.latencyHint = t); break; case 'playback': (e = 0.8), (this._context.latencyHint = t); break; case 'balanced': (e = 0.25), (this._context.latencyHint = t); break; case 'fastest': e = 0.01; } (this.lookAhead = e), (this.updateInterval = e / 3); }, }), t.supported ? (e(), (t.context = new t.Context())) : console.warn('This browser does not support Tone.js'), t.Context ); })(p); var _; _ = (function (t) { return ( (t.Type = { Default: 'number', Time: 'time', Frequency: 'frequency', TransportTime: 'transportTime', Ticks: 'ticks', NormalRange: 'normalRange', AudioRange: 'audioRange', Decibels: 'db', Interval: 'interval', BPM: 'bpm', Positive: 'positive', Cents: 'cents', Degrees: 'degrees', MIDI: 'midi', BarsBeatsSixteenths: 'barsBeatsSixteenths', Samples: 'samples', Hertz: 'hertz', Note: 'note', Milliseconds: 'milliseconds', Seconds: 'seconds', Notation: 'notation', }), (t.prototype.toSeconds = function (e) { return this.isNumber(e) ? e : this.isUndef(e) ? this.now() : this.isString(e) ? new t.Time(e).toSeconds() : e instanceof t.TimeBase ? e.toSeconds() : void 0; }), (t.prototype.toFrequency = function (e) { return this.isNumber(e) ? e : this.isString(e) || this.isUndef(e) ? new t.Frequency(e).valueOf() : e instanceof t.TimeBase ? e.toFrequency() : void 0; }), (t.prototype.toTicks = function (e) { return this.isNumber(e) || this.isString(e) ? new t.TransportTime(e).toTicks() : this.isUndef(e) ? t.Transport.ticks : e instanceof t.TimeBase ? e.toTicks() : void 0; }), t ); })(p, d, m, y); var T; T = (function (t) { 'use strict'; return ( (t.Param = function () { var e = this.optionsObject( arguments, ['param', 'units', 'convert'], t.Param.defaults, ); (this._param = this.input = e.param), (this.units = e.units), (this.convert = e.convert), (this.overridden = !1), (this._lfo = null), this.isObject(e.lfo) ? (this.value = e.lfo) : this.isUndef(e.value) || (this.value = e.value); }), t.extend(t.Param), (t.Param.defaults = { units: t.Type.Default, convert: !0, param: void 0, }), Object.defineProperty(t.Param.prototype, 'value', { get: function () { return this._toUnits(this._param.value); }, set: function (e) { if (this.isObject(e)) { if (this.isUndef(t.LFO)) throw new Error( "Include 'Tone.LFO' to use an LFO as a Param value.", ); this._lfo && this._lfo.dispose(), (this._lfo = new t.LFO(e).start()), this._lfo.connect(this.input); } else { var i = this._fromUnits(e); this._param.cancelScheduledValues(0), (this._param.value = i); } }, }), (t.Param.prototype._fromUnits = function (e) { if (!this.convert && !this.isUndef(this.convert)) return e; switch (this.units) { case t.Type.Time: return this.toSeconds(e); case t.Type.Frequency: return this.toFrequency(e); case t.Type.Decibels: return this.dbToGain(e); case t.Type.NormalRange: return Math.min(Math.max(e, 0), 1); case t.Type.AudioRange: return Math.min(Math.max(e, -1), 1); case t.Type.Positive: return Math.max(e, 0); default: return e; } }), (t.Param.prototype._toUnits = function (e) { if (!this.convert && !this.isUndef(this.convert)) return e; switch (this.units) { case t.Type.Decibels: return this.gainToDb(e); default: return e; } }), (t.Param.prototype._minOutput = 1e-5), (t.Param.prototype.setValueAtTime = function (t, e) { return ( (t = this._fromUnits(t)), (e = this.toSeconds(e)), e <= this.now() + this.blockTime ? (this._param.value = t) : this._param.setValueAtTime(t, e), this ); }), (t.Param.prototype.setRampPoint = function (t) { t = this.defaultArg(t, this.now()); var e = this._param.value; return ( 0 === e && (e = this._minOutput), this._param.setValueAtTime(e, t), this ); }), (t.Param.prototype.linearRampToValueAtTime = function (t, e) { return ( (t = this._fromUnits(t)), this._param.linearRampToValueAtTime(t, this.toSeconds(e)), this ); }), (t.Param.prototype.exponentialRampToValueAtTime = function (t, e) { return ( (t = this._fromUnits(t)), (t = Math.max(this._minOutput, t)), this._param.exponentialRampToValueAtTime( t, this.toSeconds(e), ), this ); }), (t.Param.prototype.exponentialRampToValue = function (t, e, i) { return ( (i = this.toSeconds(i)), this.setRampPoint(i), this.exponentialRampToValueAtTime(t, i + this.toSeconds(e)), this ); }), (t.Param.prototype.linearRampToValue = function (t, e, i) { return ( (i = this.toSeconds(i)), this.setRampPoint(i), this.linearRampToValueAtTime(t, i + this.toSeconds(e)), this ); }), (t.Param.prototype.setTargetAtTime = function (t, e, i) { return ( (t = this._fromUnits(t)), (t = Math.max(this._minOutput, t)), (i = Math.max(this._minOutput, i)), this._param.setTargetAtTime(t, this.toSeconds(e), i), this ); }), (t.Param.prototype.setValueCurveAtTime = function (t, e, i) { for (var n = 0; n < t.length; n++) t[n] = this._fromUnits(t[n]); return ( this._param.setValueCurveAtTime( t, this.toSeconds(e), this.toSeconds(i), ), this ); }), (t.Param.prototype.cancelScheduledValues = function (t) { return ( this._param.cancelScheduledValues(this.toSeconds(t)), this ); }), (t.Param.prototype.rampTo = function (e, i, n) { return ( (i = this.defaultArg(i, 0)), this.units === t.Type.Frequency || this.units === t.Type.BPM || this.units === t.Type.Decibels ? this.exponentialRampToValue(e, i, n) : this.linearRampToValue(e, i, n), this ); }), Object.defineProperty(t.Param.prototype, 'lfo', { get: function () { return this._lfo; }, }), (t.Param.prototype.dispose = function () { return ( t.prototype.dispose.call(this), (this._param = null), this._lfo && (this._lfo.dispose(), (this._lfo = null)), this ); }), t.Param ); })(p); var b; b = (function (t) { 'use strict'; return ( window.GainNode && !AudioContext.prototype.createGain && (AudioContext.prototype.createGain = AudioContext.prototype.createGainNode), (t.Gain = function () { var e = this.optionsObject( arguments, ['gain', 'units'], t.Gain.defaults, ); (this.input = this.output = this._gainNode = this.context.createGain()), (this.gain = new t.Param({ param: this._gainNode.gain, units: e.units, value: e.gain, convert: e.convert, })), this._readOnly('gain'); }), t.extend(t.Gain), (t.Gain.defaults = {gain: 1, convert: !0}), (t.Gain.prototype.dispose = function () { t.Param.prototype.dispose.call(this), this._gainNode.disconnect(), (this._gainNode = null), this._writable('gain'), this.gain.dispose(), (this.gain = null); }), (t.prototype.createInsOuts = function (e, i) { 1 === e ? (this.input = new t.Gain()) : e > 1 && (this.input = new Array(e)), 1 === i ? (this.output = new t.Gain()) : i > 1 && (this.output = new Array(e)); }), t.Gain ); })(p, T); var x; x = (function (t) { 'use strict'; return ( (t.Signal = function () { var e = this.optionsObject( arguments, ['value', 'units'], t.Signal.defaults, ); (this.output = this._gain = this.context.createGain()), (e.param = this._gain.gain), t.Param.call(this, e), (this.input = this._param = this._gain.gain), this.context.getConstant(1).chain(this._gain); }), t.extend(t.Signal, t.Param), (t.Signal.defaults = { value: 0, units: t.Type.Default, convert: !0, }), (t.Signal.prototype.connect = t.SignalBase.prototype.connect), (t.Signal.prototype.dispose = function () { return ( t.Param.prototype.dispose.call(this), (this._param = null), this._gain.disconnect(), (this._gain = null), this ); }), t.Signal ); })(p, l, _, T); var S; S = (function (t) { 'use strict'; return ( (t.Add = function (e) { this.createInsOuts(2, 0), (this._sum = this.input[0] = this.input[1] = this.output = new t.Gain()), (this._param = this.input[1] = new t.Signal(e)), this._param.connect(this._sum); }), t.extend(t.Add, t.Signal), (t.Add.prototype.dispose = function () { return ( t.prototype.dispose.call(this), this._sum.dispose(), (this._sum = null), this._param.dispose(), (this._param = null), this ); }), t.Add ); })(p, x); var w; w = (function (t) { 'use strict'; return ( (t.Multiply = function (e) { this.createInsOuts(2, 0), (this._mult = this.input[0] = this.output = new t.Gain()), (this._param = this.input[1] = this.output.gain), (this._param.value = this.defaultArg(e, 0)); }), t.extend(t.Multiply, t.Signal), (t.Multiply.prototype.dispose = function () { return ( t.prototype.dispose.call(this), this._mult.dispose(), (this._mult = null), (this._param = null), this ); }), t.Multiply ); })(p, x); var A; A = (function (t) { 'use strict'; return ( (t.Scale = function (e, i) { (this._outputMin = this.defaultArg(e, 0)), (this._outputMax = this.defaultArg(i, 1)), (this._scale = this.input = new t.Multiply(1)), (this._add = this.output = new t.Add(0)), this._scale.connect(this._add), this._setRange(); }), t.extend(t.Scale, t.SignalBase), Object.defineProperty(t.Scale.prototype, 'min', { get: function () { return this._outputMin; }, set: function (t) { (this._outputMin = t), this._setRange(); }, }), Object.defineProperty(t.Scale.prototype, 'max', { get: function () { return this._outputMax; }, set: function (t) { (this._outputMax = t), this._setRange(); }, }), (t.Scale.prototype._setRange = function () { (this._add.value = this._outputMin), (this._scale.value = this._outputMax - this._outputMin); }), (t.Scale.prototype.dispose = function () { return ( t.prototype.dispose.call(this), this._add.dispose(), (this._add = null), this._scale.dispose(), (this._scale = null), this ); }), t.Scale ); })(p, S, w); var P; P = (function () { var e = x, i = S, o = w, r = A, s = p, a = n; s.setContext(a.audiocontext), (t.Signal = function (t) { var i = new e(t); return i; }), (e.prototype.fade = e.prototype.linearRampToValueAtTime), (o.prototype.fade = e.prototype.fade), (i.prototype.fade = e.prototype.fade), (r.prototype.fade = e.prototype.fade), (e.prototype.setInput = function (t) { t.connect(this); }), (o.prototype.setInput = e.prototype.setInput), (i.prototype.setInput = e.prototype.setInput), (r.prototype.setInput = e.prototype.setInput), (e.prototype.add = function (t) { var e = new i(t); return this.connect(e), e; }), (o.prototype.add = e.prototype.add), (i.prototype.add = e.prototype.add), (r.prototype.add = e.prototype.add), (e.prototype.mult = function (t) { var e = new o(t); return this.connect(e), e; }), (o.prototype.mult = e.prototype.mult), (i.prototype.mult = e.prototype.mult), (r.prototype.mult = e.prototype.mult), (e.prototype.scale = function (e, i, n, o) { var s, a; 4 === arguments.length ? ((s = t.prototype.map(n, e, i, 0, 1) - 0.5), (a = t.prototype.map(o, e, i, 0, 1) - 0.5)) : ((s = arguments[0]), (a = arguments[1])); var u = new r(s, a); return this.connect(u), u; }), (o.prototype.scale = e.prototype.scale), (i.prototype.scale = e.prototype.scale), (r.prototype.scale = e.prototype.scale); })(x, S, w, A, p, n); var k; k = (function () { var e = n, i = S, o = w, r = A; (t.Oscillator = function (i, n) { if ('string' == typeof i) { var o = n; (n = i), (i = o); } if ('number' == typeof n) { var o = n; (n = i), (i = o); } (this.started = !1), (this.phaseAmount = void 0), (this.oscillator = e.audiocontext.createOscillator()), (this.f = i || 440), (this.oscillator.type = n || 'sine'), this.oscillator.frequency.setValueAtTime( this.f, e.audiocontext.currentTime, ), (this.output = e.audiocontext.createGain()), (this._freqMods = []), (this.output.gain.value = 0.5), this.output.gain.setValueAtTime( 0.5, e.audiocontext.currentTime, ), this.oscillator.connect(this.output), (this.panPosition = 0), (this.connection = e.input), (this.panner = new t.Panner(this.output, this.connection, 1)), (this.mathOps = [this.output]), e.soundArray.push(this); }), (t.Oscillator.prototype.start = function (t, i) { if (this.started) { var n = e.audiocontext.currentTime; this.stop(n); } if (!this.started) { var o = i || this.f, r = this.oscillator.type; this.oscillator && (this.oscillator.disconnect(), delete this.oscillator), (this.oscillator = e.audiocontext.createOscillator()), (this.oscillator.frequency.value = Math.abs(o)), (this.oscillator.type = r), this.oscillator.connect(this.output), (t = t || 0), this.oscillator.start(t + e.audiocontext.currentTime), (this.freqNode = this.oscillator.frequency); for (var s in this._freqMods) 'undefined' != typeof this._freqMods[s].connect && this._freqMods[s].connect( this.oscillator.frequency, ); this.started = !0; } }), (t.Oscillator.prototype.stop = function (t) { if (this.started) { var i = t || 0, n = e.audiocontext.currentTime; this.oscillator.stop(i + n), (this.started = !1); } }), (t.Oscillator.prototype.amp = function (t, i, n) { var o = this; if ('number' == typeof t) { var i = i || 0, n = n || 0, r = e.audiocontext.currentTime; this.output.gain.linearRampToValueAtTime(t, r + n + i); } else { if (!t) return this.output.gain; t.connect(o.output.gain); } }), (t.Oscillator.prototype.fade = t.Oscillator.prototype.amp), (t.Oscillator.prototype.getAmp = function () { return this.output.gain.value; }), (t.Oscillator.prototype.freq = function (t, i, n) { if ('number' != typeof t || isNaN(t)) { if (!t) return this.oscillator.frequency; t.output && (t = t.output), t.connect(this.oscillator.frequency), this._freqMods.push(t); } else { this.f = t; var o = e.audiocontext.currentTime, i = i || 0, n = n || 0; 0 === i ? this.oscillator.frequency.setValueAtTime(t, n + o) : t > 0 ? this.oscillator.frequency.exponentialRampToValueAtTime( t, n + i + o, ) : this.oscillator.frequency.linearRampToValueAtTime( t, n + i + o, ), this.phaseAmount && this.phase(this.phaseAmount); } }), (t.Oscillator.prototype.getFreq = function () { return this.oscillator.frequency.value; }), (t.Oscillator.prototype.setType = function (t) { this.oscillator.type = t; }), (t.Oscillator.prototype.getType = function () { return this.oscillator.type; }), (t.Oscillator.prototype.connect = function (t) { t ? t.hasOwnProperty('input') ? (this.panner.connect(t.input), (this.connection = t.input)) : (this.panner.connect(t), (this.connection = t)) : this.panner.connect(e.input); }), (t.Oscillator.prototype.disconnect = function () { this.output && this.output.disconnect(), this.panner && (this.panner.disconnect(), this.output && this.output.connect(this.panner)), (this.oscMods = []); }), (t.Oscillator.prototype.pan = function (t, e) { (this.panPosition = t), this.panner.pan(t, e); }), (t.Oscillator.prototype.getPan = function () { return this.panPosition; }), (t.Oscillator.prototype.dispose = function () { var t = e.soundArray.indexOf(this); if ((e.soundArray.splice(t, 1), this.oscillator)) { var i = e.audiocontext.currentTime; this.stop(i), this.disconnect(), (this.panner = null), (this.oscillator = null); } this.osc2 && this.osc2.dispose(); }), (t.Oscillator.prototype.phase = function (i) { var n = t.prototype.map(i, 0, 1, 0, 1 / this.f), o = e.audiocontext.currentTime; (this.phaseAmount = i), this.dNode || ((this.dNode = e.audiocontext.createDelay()), this.oscillator.disconnect(), this.oscillator.connect(this.dNode), this.dNode.connect(this.output)), this.dNode.delayTime.setValueAtTime(n, o); }); var s = function (t, e, i, n, o) { var r = t.oscillator; for (var s in t.mathOps) t.mathOps[s] instanceof o && (r.disconnect(), t.mathOps[s].dispose(), (i = s), i < t.mathOps.length - 2 && (n = t.mathOps[s + 1])); return ( i === t.mathOps.length - 1 && t.mathOps.push(n), s > 0 && (r = t.mathOps[s - 1]), r.disconnect(), r.connect(e), e.connect(n), (t.mathOps[i] = e), t ); }; (t.Oscillator.prototype.add = function (t) { var e = new i(t), n = this.mathOps.length - 1, o = this.output; return s(this, e, n, o, i); }), (t.Oscillator.prototype.mult = function (t) { var e = new o(t), i = this.mathOps.length - 1, n = this.output; return s(this, e, i, n, o); }), (t.Oscillator.prototype.scale = function (e, i, n, o) { var a, u; 4 === arguments.length ? ((a = t.prototype.map(n, e, i, 0, 1) - 0.5), (u = t.prototype.map(o, e, i, 0, 1) - 0.5)) : ((a = arguments[0]), (u = arguments[1])); var c = new r(a, u), p = this.mathOps.length - 1, h = this.output; return s(this, c, p, h, r); }), (t.SinOsc = function (e) { t.Oscillator.call(this, e, 'sine'); }), (t.SinOsc.prototype = Object.create(t.Oscillator.prototype)), (t.TriOsc = function (e) { t.Oscillator.call(this, e, 'triangle'); }), (t.TriOsc.prototype = Object.create(t.Oscillator.prototype)), (t.SawOsc = function (e) { t.Oscillator.call(this, e, 'sawtooth'); }), (t.SawOsc.prototype = Object.create(t.Oscillator.prototype)), (t.SqrOsc = function (e) { t.Oscillator.call(this, e, 'square'); }), (t.SqrOsc.prototype = Object.create(t.Oscillator.prototype)); })(n, S, w, A); var O; O = (function (t) { 'use strict'; return ( (t.Timeline = function () { var e = this.optionsObject( arguments, ['memory'], t.Timeline.defaults, ); (this._timeline = []), (this._toRemove = []), (this._iterating = !1), (this.memory = e.memory); }), t.extend(t.Timeline), (t.Timeline.defaults = {memory: 1 / 0}), Object.defineProperty(t.Timeline.prototype, 'length', { get: function () { return this._timeline.length; }, }), (t.Timeline.prototype.add = function (t) { if (this.isUndef(t.time)) throw new Error( 'Tone.Timeline: events must have a time attribute', ); if (this._timeline.length) { var e = this._search(t.time); this._timeline.splice(e + 1, 0, t); } else this._timeline.push(t); if (this.length > this.memory) { var i = this.length - this.memory; this._timeline.splice(0, i); } return this; }), (t.Timeline.prototype.remove = function (t) { if (this._iterating) this._toRemove.push(t); else { var e = this._timeline.indexOf(t); -1 !== e && this._timeline.splice(e, 1); } return this; }), (t.Timeline.prototype.get = function (t) { var e = this._search(t); return -1 !== e ? this._timeline[e] : null; }), (t.Timeline.prototype.peek = function () { return this._timeline[0]; }), (t.Timeline.prototype.shift = function () { return this._timeline.shift(); }), (t.Timeline.prototype.getAfter = function (t) { var e = this._search(t); return e + 1 < this._timeline.length ? this._timeline[e + 1] : null; }), (t.Timeline.prototype.getBefore = function (t) { var e = this._timeline.length; if (e > 0 && this._timeline[e - 1].time < t) return this._timeline[e - 1]; var i = this._search(t); return i - 1 >= 0 ? this._timeline[i - 1] : null; }), (t.Timeline.prototype.cancel = function (t) { if (this._timeline.length > 1) { var e = this._search(t); if (e >= 0) if (this._timeline[e].time === t) { for ( var i = e; i >= 0 && this._timeline[i].time === t; i-- ) e = i; this._timeline = this._timeline.slice(0, e); } else this._timeline = this._timeline.slice(0, e + 1); else this._timeline = []; } else 1 === this._timeline.length && this._timeline[0].time >= t && (this._timeline = []); return this; }), (t.Timeline.prototype.cancelBefore = function (t) { if (this._timeline.length) { var e = this._search(t); e >= 0 && (this._timeline = this._timeline.slice(e + 1)); } return this; }), (t.Timeline.prototype._search = function (t) { var e = 0, i = this._timeline.length, n = i; if (i > 0 && this._timeline[i - 1].time <= t) return i - 1; for (; n > e; ) { var o = Math.floor(e + (n - e) / 2), r = this._timeline[o], s = this._timeline[o + 1]; if (r.time === t) { for (var a = o; a < this._timeline.length; a++) { var u = this._timeline[a]; u.time === t && (o = a); } return o; } if (r.time < t && s.time > t) return o; r.time > t ? (n = o) : r.time < t && (e = o + 1); } return -1; }), (t.Timeline.prototype._iterate = function (t, e, i) { (this._iterating = !0), (e = this.defaultArg(e, 0)), (i = this.defaultArg(i, this._timeline.length - 1)); for (var n = e; i >= n; n++) t(this._timeline[n]); if (((this._iterating = !1), this._toRemove.length > 0)) { for (var o = 0; o < this._toRemove.length; o++) { var r = this._timeline.indexOf(this._toRemove[o]); -1 !== r && this._timeline.splice(r, 1); } this._toRemove = []; } }), (t.Timeline.prototype.forEach = function (t) { return this._iterate(t), this; }), (t.Timeline.prototype.forEachBefore = function (t, e) { var i = this._search(t); return -1 !== i && this._iterate(e, 0, i), this; }), (t.Timeline.prototype.forEachAfter = function (t, e) { var i = this._search(t); return this._iterate(e, i + 1), this; }), (t.Timeline.prototype.forEachFrom = function (t, e) { for ( var i = this._search(t); i >= 0 && this._timeline[i].time >= t; ) i--; return this._iterate(e, i + 1), this; }), (t.Timeline.prototype.forEachAtTime = function (t, e) { var i = this._search(t); return ( -1 !== i && this._iterate( function (i) { i.time === t && e(i); }, 0, i, ), this ); }), (t.Timeline.prototype.dispose = function () { t.prototype.dispose.call(this), (this._timeline = null), (this._toRemove = null); }), t.Timeline ); })(p); var F; F = (function (t) { 'use strict'; return ( (t.TimelineSignal = function () { var e = this.optionsObject( arguments, ['value', 'units'], t.Signal.defaults, ); (this._events = new t.Timeline(10)), t.Signal.apply(this, e), (e.param = this._param), t.Param.call(this, e), (this._initial = this._fromUnits(this._param.value)); }), t.extend(t.TimelineSignal, t.Param), (t.TimelineSignal.Type = { Linear: 'linear', Exponential: 'exponential', Target: 'target', Curve: 'curve', Set: 'set', }), Object.defineProperty(t.TimelineSignal.prototype, 'value', { get: function () { var t = this.now(), e = this.getValueAtTime(t); return this._toUnits(e); }, set: function (t) { var e = this._fromUnits(t); (this._initial = e), this.cancelScheduledValues(), (this._param.value = e); }, }), (t.TimelineSignal.prototype.setValueAtTime = function (e, i) { return ( (e = this._fromUnits(e)), (i = this.toSeconds(i)), this._events.add({ type: t.TimelineSignal.Type.Set, value: e, time: i, }), this._param.setValueAtTime(e, i), this ); }), (t.TimelineSignal.prototype.linearRampToValueAtTime = function ( e, i, ) { return ( (e = this._fromUnits(e)), (i = this.toSeconds(i)), this._events.add({ type: t.TimelineSignal.Type.Linear, value: e, time: i, }), this._param.linearRampToValueAtTime(e, i), this ); }), (t.TimelineSignal.prototype.exponentialRampToValueAtTime = function (e, i) { i = this.toSeconds(i); var n = this._searchBefore(i); n && 0 === n.value && this.setValueAtTime(this._minOutput, n.time), (e = this._fromUnits(e)); var o = Math.max(e, this._minOutput); return ( this._events.add({ type: t.TimelineSignal.Type.Exponential, value: o, time: i, }), e < this._minOutput ? (this._param.exponentialRampToValueAtTime( this._minOutput, i - this.sampleTime, ), this.setValueAtTime(0, i)) : this._param.exponentialRampToValueAtTime(e, i), this ); }), (t.TimelineSignal.prototype.setTargetAtTime = function (e, i, n) { return ( (e = this._fromUnits(e)), (e = Math.max(this._minOutput, e)), (n = Math.max(this._minOutput, n)), (i = this.toSeconds(i)), this._events.add({ type: t.TimelineSignal.Type.Target, value: e, time: i, constant: n, }), this._param.setTargetAtTime(e, i, n), this ); }), (t.TimelineSignal.prototype.setValueCurveAtTime = function ( e, i, n, o, ) { o = this.defaultArg(o, 1); for (var r = new Array(e.length), s = 0; s < r.length; s++) r[s] = this._fromUnits(e[s]) * o; (i = this.toSeconds(i)), (n = this.toSeconds(n)), this._events.add({ type: t.TimelineSignal.Type.Curve, value: r, time: i, duration: n, }), this._param.setValueAtTime(r[0], i); for (var a = 1; a < r.length; a++) { var u = i + (a / (r.length - 1)) * n; this._param.linearRampToValueAtTime(r[a], u); } return this; }), (t.TimelineSignal.prototype.cancelScheduledValues = function (t) { return ( (t = this.toSeconds(t)), this._events.cancel(t), this._param.cancelScheduledValues(t), this ); }), (t.TimelineSignal.prototype.setRampPoint = function (e) { e = this.toSeconds(e); var i = this._toUnits(this.getValueAtTime(e)), n = this._searchBefore(e); if (n && n.time === e) this.cancelScheduledValues(e + this.sampleTime); else if ( n && n.type === t.TimelineSignal.Type.Curve && n.time + n.duration > e ) this.cancelScheduledValues(e), this.linearRampToValueAtTime(i, e); else { var o = this._searchAfter(e); o && (this.cancelScheduledValues(e), o.type === t.TimelineSignal.Type.Linear ? this.linearRampToValueAtTime(i, e) : o.type === t.TimelineSignal.Type.Exponential && this.exponentialRampToValueAtTime(i, e)), this.setValueAtTime(i, e); } return this; }), (t.TimelineSignal.prototype.linearRampToValueBetween = function ( t, e, i, ) { return ( this.setRampPoint(e), this.linearRampToValueAtTime(t, i), this ); }), (t.TimelineSignal.prototype.exponentialRampToValueBetween = function (t, e, i) { return ( this.setRampPoint(e), this.exponentialRampToValueAtTime(t, i), this ); }), (t.TimelineSignal.prototype._searchBefore = function (t) { return this._events.get(t); }), (t.TimelineSignal.prototype._searchAfter = function (t) { return this._events.getAfter(t); }), (t.TimelineSignal.prototype.getValueAtTime = function (e) { e = this.toSeconds(e); var i = this._searchAfter(e), n = this._searchBefore(e), o = this._initial; if (null === n) o = this._initial; else if (n.type === t.TimelineSignal.Type.Target) { var r, s = this._events.getBefore(n.time); (r = null === s ? this._initial : s.value), (o = this._exponentialApproach( n.time, r, n.value, n.constant, e, )); } else o = n.type === t.TimelineSignal.Type.Curve ? this._curveInterpolate( n.time, n.value, n.duration, e, ) : null === i ? n.value : i.type === t.TimelineSignal.Type.Linear ? this._linearInterpolate( n.time, n.value, i.time, i.value, e, ) : i.type === t.TimelineSignal.Type.Exponential ? this._exponentialInterpolate( n.time, n.value, i.time, i.value, e, ) : n.value; return o; }), (t.TimelineSignal.prototype.connect = t.SignalBase.prototype.connect), (t.TimelineSignal.prototype._exponentialApproach = function ( t, e, i, n, o, ) { return i + (e - i) * Math.exp(-(o - t) / n); }), (t.TimelineSignal.prototype._linearInterpolate = function ( t, e, i, n, o, ) { return e + (n - e) * ((o - t) / (i - t)); }), (t.TimelineSignal.prototype._exponentialInterpolate = function ( t, e, i, n, o, ) { return ( (e = Math.max(this._minOutput, e)), e * Math.pow(n / e, (o - t) / (i - t)) ); }), (t.TimelineSignal.prototype._curveInterpolate = function ( t, e, i, n, ) { var o = e.length; if (n >= t + i) return e[o - 1]; if (t >= n) return e[0]; var r = (n - t) / i, s = Math.floor((o - 1) * r), a = Math.ceil((o - 1) * r), u = e[s], c = e[a]; return a === s ? u : this._linearInterpolate(s, u, a, c, r * (o - 1)); }), (t.TimelineSignal.prototype.dispose = function () { t.Signal.prototype.dispose.call(this), t.Param.prototype.dispose.call(this), this._events.dispose(), (this._events = null); }), t.TimelineSignal ); })(p, x); var q; q = (function () { var e = n, i = S, o = w, r = A, s = F, a = p; a.setContext(e.audiocontext), (t.Envelope = function (t, i, n, o, r, a) { (this.aTime = t || 0.1), (this.aLevel = i || 1), (this.dTime = n || 0.5), (this.dLevel = o || 0), (this.rTime = r || 0), (this.rLevel = a || 0), (this._rampHighPercentage = 0.98), (this._rampLowPercentage = 0.02), (this.output = e.audiocontext.createGain()), (this.control = new s()), this._init(), this.control.connect(this.output), (this.connection = null), (this.mathOps = [this.control]), (this.isExponential = !1), (this.sourceToClear = null), (this.wasTriggered = !1), e.soundArray.push(this); }), (t.Envelope.prototype._init = function () { var t = e.audiocontext.currentTime, i = t; this.control.setTargetAtTime(1e-5, i, 0.001), this._setRampAD(this.aTime, this.dTime); }), (t.Envelope.prototype.set = function (t, e, i, n, o, r) { (this.aTime = t), (this.aLevel = e), (this.dTime = i || 0), (this.dLevel = n || 0), (this.rTime = o || 0), (this.rLevel = r || 0), this._setRampAD(t, i); }), (t.Envelope.prototype.setADSR = function (t, e, i, n) { (this.aTime = t), (this.dTime = e || 0), (this.sPercent = i || 0), (this.dLevel = 'undefined' != typeof i ? i * (this.aLevel - this.rLevel) + this.rLevel : 0), (this.rTime = n || 0), this._setRampAD(t, e); }), (t.Envelope.prototype.setRange = function (t, e) { (this.aLevel = t || 1), (this.rLevel = e || 0); }), (t.Envelope.prototype._setRampAD = function (t, e) { (this._rampAttackTime = this.checkExpInput(t)), (this._rampDecayTime = this.checkExpInput(e)); var i = 1; (i = Math.log( 1 / this.checkExpInput(1 - this._rampHighPercentage), )), (this._rampAttackTC = t / this.checkExpInput(i)), (i = Math.log(1 / this._rampLowPercentage)), (this._rampDecayTC = e / this.checkExpInput(i)); }), (t.Envelope.prototype.setRampPercentages = function (t, e) { (this._rampHighPercentage = this.checkExpInput(t)), (this._rampLowPercentage = this.checkExpInput(e)); var i = 1; (i = Math.log( 1 / this.checkExpInput(1 - this._rampHighPercentage), )), (this._rampAttackTC = this._rampAttackTime / this.checkExpInput(i)), (i = Math.log(1 / this._rampLowPercentage)), (this._rampDecayTC = this._rampDecayTime / this.checkExpInput(i)); }), (t.Envelope.prototype.setInput = function () { for (var t = 0; t < arguments.length; t++) this.connect(arguments[t]); }), (t.Envelope.prototype.setExp = function (t) { this.isExponential = t; }), (t.Envelope.prototype.checkExpInput = function (t) { return 0 >= t && (t = 1e-8), t; }), (t.Envelope.prototype.play = function (t, e, i) { var n = e || 0, i = i || 0; t && this.connection !== t && this.connect(t), this.triggerAttack(t, n), this.triggerRelease(t, n + this.aTime + this.dTime + i); }), (t.Envelope.prototype.triggerAttack = function (t, i) { var n = e.audiocontext.currentTime, o = i || 0, r = n + o; (this.lastAttack = r), (this.wasTriggered = !0), t && this.connection !== t && this.connect(t); var s = this.control.getValueAtTime(r); this.isExponential === !0 ? this.control.exponentialRampToValueAtTime( this.checkExpInput(s), r, ) : this.control.linearRampToValueAtTime(s, r), (r += this.aTime), this.isExponential === !0 ? (this.control.exponentialRampToValueAtTime( this.checkExpInput(this.aLevel), r, ), (s = this.checkExpInput( this.control.getValueAtTime(r), )), this.control.cancelScheduledValues(r), this.control.exponentialRampToValueAtTime(s, r)) : (this.control.linearRampToValueAtTime(this.aLevel, r), (s = this.control.getValueAtTime(r)), this.control.cancelScheduledValues(r), this.control.linearRampToValueAtTime(s, r)), (r += this.dTime), this.isExponential === !0 ? (this.control.exponentialRampToValueAtTime( this.checkExpInput(this.dLevel), r, ), (s = this.checkExpInput( this.control.getValueAtTime(r), )), this.control.cancelScheduledValues(r), this.control.exponentialRampToValueAtTime(s, r)) : (this.control.linearRampToValueAtTime(this.dLevel, r), (s = this.control.getValueAtTime(r)), this.control.cancelScheduledValues(r), this.control.linearRampToValueAtTime(s, r)); }), (t.Envelope.prototype.triggerRelease = function (t, i) { if (this.wasTriggered) { var n = e.audiocontext.currentTime, o = i || 0, r = n + o; t && this.connection !== t && this.connect(t); var s = this.control.getValueAtTime(r); this.isExponential === !0 ? this.control.exponentialRampToValueAtTime( this.checkExpInput(s), r, ) : this.control.linearRampToValueAtTime(s, r), (r += this.rTime), this.isExponential === !0 ? (this.control.exponentialRampToValueAtTime( this.checkExpInput(this.rLevel), r, ), (s = this.checkExpInput( this.control.getValueAtTime(r), )), this.control.cancelScheduledValues(r), this.control.exponentialRampToValueAtTime(s, r)) : (this.control.linearRampToValueAtTime( this.rLevel, r, ), (s = this.control.getValueAtTime(r)), this.control.cancelScheduledValues(r), this.control.linearRampToValueAtTime(s, r)), (this.wasTriggered = !1); } }), (t.Envelope.prototype.ramp = function (t, i, n, o) { var r = e.audiocontext.currentTime, s = i || 0, a = r + s, u = this.checkExpInput(n), c = 'undefined' != typeof o ? this.checkExpInput(o) : void 0; t && this.connection !== t && this.connect(t); var p = this.checkExpInput(this.control.getValueAtTime(a)); u > p ? (this.control.setTargetAtTime(u, a, this._rampAttackTC), (a += this._rampAttackTime)) : p > u && (this.control.setTargetAtTime(u, a, this._rampDecayTC), (a += this._rampDecayTime)), void 0 !== c && (c > u ? this.control.setTargetAtTime( c, a, this._rampAttackTC, ) : u > c && this.control.setTargetAtTime( c, a, this._rampDecayTC, )); }), (t.Envelope.prototype.connect = function (i) { (this.connection = i), (i instanceof t.Oscillator || i instanceof t.SoundFile || i instanceof t.AudioIn || i instanceof t.Reverb || i instanceof t.Noise || i instanceof t.Filter || i instanceof t.Delay) && (i = i.output.gain), i instanceof AudioParam && i.setValueAtTime(0, e.audiocontext.currentTime), i instanceof t.Signal && i.setValue(0), this.output.connect(i); }), (t.Envelope.prototype.disconnect = function () { this.output && this.output.disconnect(); }), (t.Envelope.prototype.add = function (e) { var n = new i(e), o = this.mathOps.length, r = this.output; return t.prototype._mathChain(this, n, o, r, i); }), (t.Envelope.prototype.mult = function (e) { var i = new o(e), n = this.mathOps.length, r = this.output; return t.prototype._mathChain(this, i, n, r, o); }), (t.Envelope.prototype.scale = function (e, i, n, o) { var s = new r(e, i, n, o), a = this.mathOps.length, u = this.output; return t.prototype._mathChain(this, s, a, u, r); }), (t.Envelope.prototype.dispose = function () { var t = e.soundArray.indexOf(this); e.soundArray.splice(t, 1), this.disconnect(), this.control && (this.control.dispose(), (this.control = null)); for (var i = 1; i < this.mathOps.length; i++) this.mathOps[i].dispose(); }), (t.Env = function (e, i, n, o, r, s) { console.warn( 'WARNING: p5.Env is now deprecated and may be removed in future versions. Please use the new p5.Envelope instead.', ), t.Envelope.call(this, e, i, n, o, r, s); }), (t.Env.prototype = Object.create(t.Envelope.prototype)); })(n, S, w, A, F, p); var M; M = (function () { function e() { for ( var t = i.audiocontext, e = t.createBuffer(1, 2048, t.sampleRate), n = e.getChannelData(0), o = 0; 2048 > o; o++ ) n[o] = 1; var r = t.createBufferSource(); return (r.buffer = e), (r.loop = !0), r; } var i = n; (t.Pulse = function (n, o) { t.Oscillator.call(this, n, 'sawtooth'), (this.w = o || 0), (this.osc2 = new t.SawOsc(n)), (this.dNode = i.audiocontext.createDelay()), (this.dcOffset = e()), (this.dcGain = i.audiocontext.createGain()), this.dcOffset.connect(this.dcGain), this.dcGain.connect(this.output), (this.f = n || 440); var r = this.w / this.oscillator.frequency.value; (this.dNode.delayTime.value = r), (this.dcGain.gain.value = 1.7 * (0.5 - this.w)), this.osc2.disconnect(), this.osc2.panner.disconnect(), this.osc2.amp(-1), this.osc2.output.connect(this.dNode), this.dNode.connect(this.output), (this.output.gain.value = 1), this.output.connect(this.panner); }), (t.Pulse.prototype = Object.create(t.Oscillator.prototype)), (t.Pulse.prototype.width = function (e) { if ('number' == typeof e) { if (1 >= e && e >= 0) { this.w = e; var i = this.w / this.oscillator.frequency.value; this.dNode.delayTime.value = i; } this.dcGain.gain.value = 1.7 * (0.5 - this.w); } else { e.connect(this.dNode.delayTime); var n = new t.SignalAdd(-0.5); n.setInput(e), (n = n.mult(-1)), (n = n.mult(1.7)), n.connect(this.dcGain.gain); } }), (t.Pulse.prototype.start = function (t, n) { var o = i.audiocontext.currentTime, r = n || 0; if (!this.started) { var s = t || this.f, a = this.oscillator.type; (this.oscillator = i.audiocontext.createOscillator()), this.oscillator.frequency.setValueAtTime(s, o), (this.oscillator.type = a), this.oscillator.connect(this.output), this.oscillator.start(r + o), (this.osc2.oscillator = i.audiocontext.createOscillator()), this.osc2.oscillator.frequency.setValueAtTime(s, r + o), (this.osc2.oscillator.type = a), this.osc2.oscillator.connect(this.osc2.output), this.osc2.start(r + o), (this.freqNode = [ this.oscillator.frequency, this.osc2.oscillator.frequency, ]), (this.dcOffset = e()), this.dcOffset.connect(this.dcGain), this.dcOffset.start(r + o), void 0 !== this.mods && void 0 !== this.mods.frequency && (this.mods.frequency.connect(this.freqNode[0]), this.mods.frequency.connect(this.freqNode[1])), (this.started = !0), (this.osc2.started = !0); } }), (t.Pulse.prototype.stop = function (t) { if (this.started) { var e = t || 0, n = i.audiocontext.currentTime; this.oscillator.stop(e + n), this.osc2.oscillator && this.osc2.oscillator.stop(e + n), this.dcOffset.stop(e + n), (this.started = !1), (this.osc2.started = !1); } }), (t.Pulse.prototype.freq = function (t, e, n) { if ('number' == typeof t) { this.f = t; var o = i.audiocontext.currentTime, e = e || 0, n = n || 0, r = this.oscillator.frequency.value; this.oscillator.frequency.cancelScheduledValues(o), this.oscillator.frequency.setValueAtTime(r, o + n), this.oscillator.frequency.exponentialRampToValueAtTime( t, n + e + o, ), this.osc2.oscillator.frequency.cancelScheduledValues(o), this.osc2.oscillator.frequency.setValueAtTime(r, o + n), this.osc2.oscillator.frequency.exponentialRampToValueAtTime( t, n + e + o, ), this.freqMod && (this.freqMod.output.disconnect(), (this.freqMod = null)); } else t.output && (t.output.disconnect(), t.output.connect(this.oscillator.frequency), t.output.connect(this.osc2.oscillator.frequency), (this.freqMod = t)); }); })(n, k); var V; V = (function () { var e = n; (t.Noise = function (e) { var n; t.Oscillator.call(this), delete this.f, delete this.freq, delete this.oscillator, (n = 'brown' === e ? r : 'pink' === e ? o : i), (this.buffer = n); }), (t.Noise.prototype = Object.create(t.Oscillator.prototype)); var i = (function () { for ( var t = 2 * e.audiocontext.sampleRate, i = e.audiocontext.createBuffer( 1, t, e.audiocontext.sampleRate, ), n = i.getChannelData(0), o = 0; t > o; o++ ) n[o] = 2 * Math.random() - 1; return (i.type = 'white'), i; })(), o = (function () { var t, i, n, o, r, s, a, u = 2 * e.audiocontext.sampleRate, c = e.audiocontext.createBuffer( 1, u, e.audiocontext.sampleRate, ), p = c.getChannelData(0); t = i = n = o = r = s = a = 0; for (var h = 0; u > h; h++) { var l = 2 * Math.random() - 1; (t = 0.99886 * t + 0.0555179 * l), (i = 0.99332 * i + 0.0750759 * l), (n = 0.969 * n + 0.153852 * l), (o = 0.8665 * o + 0.3104856 * l), (r = 0.55 * r + 0.5329522 * l), (s = -0.7616 * s - 0.016898 * l), (p[h] = t + i + n + o + r + s + a + 0.5362 * l), (p[h] *= 0.11), (a = 0.115926 * l); } return (c.type = 'pink'), c; })(), r = (function () { for ( var t = 2 * e.audiocontext.sampleRate, i = e.audiocontext.createBuffer( 1, t, e.audiocontext.sampleRate, ), n = i.getChannelData(0), o = 0, r = 0; t > r; r++ ) { var s = 2 * Math.random() - 1; (n[r] = (o + 0.02 * s) / 1.02), (o = n[r]), (n[r] *= 3.5); } return (i.type = 'brown'), i; })(); (t.Noise.prototype.setType = function (t) { switch (t) { case 'white': this.buffer = i; break; case 'pink': this.buffer = o; break; case 'brown': this.buffer = r; break; default: this.buffer = i; } if (this.started) { var n = e.audiocontext.currentTime; this.stop(n), this.start(n + 0.01); } }), (t.Noise.prototype.getType = function () { return this.buffer.type; }), (t.Noise.prototype.start = function () { this.started && this.stop(), (this.noise = e.audiocontext.createBufferSource()), (this.noise.buffer = this.buffer), (this.noise.loop = !0), this.noise.connect(this.output); var t = e.audiocontext.currentTime; this.noise.start(t), (this.started = !0); }), (t.Noise.prototype.stop = function () { var t = e.audiocontext.currentTime; this.noise && (this.noise.stop(t), (this.started = !1)); }), (t.Noise.prototype.dispose = function () { var t = e.audiocontext.currentTime, i = e.soundArray.indexOf(this); e.soundArray.splice(i, 1), this.noise && (this.noise.disconnect(), this.stop(t)), this.output && this.output.disconnect(), this.panner && this.panner.disconnect(), (this.output = null), (this.panner = null), (this.buffer = null), (this.noise = null); }); })(n); var E; E = (function () { var e = n; (e.inputSources = []), (t.AudioIn = function (i) { (this.input = e.audiocontext.createGain()), (this.output = e.audiocontext.createGain()), (this.stream = null), (this.mediaStream = null), (this.currentSource = null), (this.enabled = !1), (this.amplitude = new t.Amplitude()), this.output.connect(this.amplitude.input), (window.MediaStreamTrack && window.navigator.mediaDevices && window.navigator.mediaDevices.getUserMedia) || (i ? i() : window.alert( 'This browser does not support MediaStreamTrack and mediaDevices', )), e.soundArray.push(this); }), (t.AudioIn.prototype.start = function (t, i) { var n = this; this.stream && this.stop(); var o = e.inputSources[n.currentSource], r = { audio: { sampleRate: e.audiocontext.sampleRate, echoCancellation: !1, }, }; e.inputSources[this.currentSource] && (r.audio.deviceId = o.deviceId), window.navigator.mediaDevices .getUserMedia(r) .then(function (i) { (n.stream = i), (n.enabled = !0), (n.mediaStream = e.audiocontext.createMediaStreamSource(i)), n.mediaStream.connect(n.output), n.amplitude.setInput(n.output), t && t(); }) ['catch'](function (t) { i ? i(t) : console.error(t); }); }), (t.AudioIn.prototype.stop = function () { this.stream && (this.stream.getTracks().forEach(function (t) { t.stop(); }), this.mediaStream.disconnect(), delete this.mediaStream, delete this.stream); }), (t.AudioIn.prototype.connect = function (t) { t ? t.hasOwnProperty('input') ? this.output.connect(t.input) : t.hasOwnProperty('analyser') ? this.output.connect(t.analyser) : this.output.connect(t) : this.output.connect(e.input); }), (t.AudioIn.prototype.disconnect = function () { this.output && (this.output.disconnect(), this.output.connect(this.amplitude.input)); }), (t.AudioIn.prototype.getLevel = function (t) { return ( t && (this.amplitude.smoothing = t), this.amplitude.getLevel() ); }), (t.AudioIn.prototype.amp = function (t, i) { if (i) { var n = i || 0, o = this.output.gain.value; this.output.gain.cancelScheduledValues( e.audiocontext.currentTime, ), this.output.gain.setValueAtTime( o, e.audiocontext.currentTime, ), this.output.gain.linearRampToValueAtTime( t, n + e.audiocontext.currentTime, ); } else this.output.gain.cancelScheduledValues( e.audiocontext.currentTime, ), this.output.gain.setValueAtTime( t, e.audiocontext.currentTime, ); }), (t.AudioIn.prototype.getSources = function (t, i) { return new Promise(function (n, o) { window.navigator.mediaDevices .enumerateDevices() .then(function (i) { (e.inputSources = i.filter(function (t) { return 'audioinput' === t.kind; })), n(e.inputSources), t && t(e.inputSources); }) ['catch'](function (t) { o(t), i ? i(t) : console.error( 'This browser does not support MediaStreamTrack.getSources()', ); }); }); }), (t.AudioIn.prototype.setSource = function (t) { e.inputSources.length > 0 && t < e.inputSources.length ? ((this.currentSource = t), console.log( 'set source to ', e.inputSources[this.currentSource], )) : console.log('unable to set input source'), this.stream && this.stream.active && this.start(); }), (t.AudioIn.prototype.dispose = function () { var t = e.soundArray.indexOf(this); e.soundArray.splice(t, 1), this.stop(), this.output && this.output.disconnect(), this.amplitude && this.amplitude.disconnect(), delete this.amplitude, delete this.output; }); })(n); var C; C = (function (t) { 'use strict'; return ( (t.Negate = function () { this._multiply = this.input = this.output = new t.Multiply(-1); }), t.extend(t.Negate, t.SignalBase), (t.Negate.prototype.dispose = function () { return ( t.prototype.dispose.call(this), this._multiply.dispose(), (this._multiply = null), this ); }), t.Negate ); })(p, w); var R; R = (function (t) { 'use strict'; return ( (t.Subtract = function (e) { this.createInsOuts(2, 0), (this._sum = this.input[0] = this.output = new t.Gain()), (this._neg = new t.Negate()), (this._param = this.input[1] = new t.Signal(e)), this._param.chain(this._neg, this._sum); }), t.extend(t.Subtract, t.Signal), (t.Subtract.prototype.dispose = function () { return ( t.prototype.dispose.call(this), this._neg.dispose(), (this._neg = null), this._sum.disconnect(), (this._sum = null), this._param.dispose(), (this._param = null), this ); }), t.Subtract ); })(p, S, C, x); var D; D = (function (t) { 'use strict'; return ( (t.GreaterThanZero = function () { (this._thresh = this.output = new t.WaveShaper(function (t) { return 0 >= t ? 0 : 1; }, 127)), (this._scale = this.input = new t.Multiply(1e4)), this._scale.connect(this._thresh); }), t.extend(t.GreaterThanZero, t.SignalBase), (t.GreaterThanZero.prototype.dispose = function () { return ( t.prototype.dispose.call(this), this._scale.dispose(), (this._scale = null), this._thresh.dispose(), (this._thresh = null), this ); }), t.GreaterThanZero ); })(p, x, w); var N; N = (function (t) { 'use strict'; return ( (t.GreaterThan = function (e) { this.createInsOuts(2, 0), (this._param = this.input[0] = new t.Subtract(e)), (this.input[1] = this._param.input[1]), (this._gtz = this.output = new t.GreaterThanZero()), this._param.connect(this._gtz); }), t.extend(t.GreaterThan, t.Signal), (t.GreaterThan.prototype.dispose = function () { return ( t.prototype.dispose.call(this), this._param.dispose(), (this._param = null), this._gtz.dispose(), (this._gtz = null), this ); }), t.GreaterThan ); })(p, D, R); var B; B = (function (t) { 'use strict'; return ( (t.Abs = function () { this._abs = this.input = this.output = new t.WaveShaper(function (t) { return 0 === t ? 0 : Math.abs(t); }, 127); }), t.extend(t.Abs, t.SignalBase), (t.Abs.prototype.dispose = function () { return ( t.prototype.dispose.call(this), this._abs.dispose(), (this._abs = null), this ); }), t.Abs ); })(p, l); var U; U = (function (t) { 'use strict'; return ( (t.Modulo = function (e) { this.createInsOuts(1, 0), (this._shaper = new t.WaveShaper(Math.pow(2, 16))), (this._multiply = new t.Multiply()), (this._subtract = this.output = new t.Subtract()), (this._modSignal = new t.Signal(e)), this.input.fan(this._shaper, this._subtract), this._modSignal.connect(this._multiply, 0, 0), this._shaper.connect(this._multiply, 0, 1), this._multiply.connect(this._subtract, 0, 1), this._setWaveShaper(e); }), t.extend(t.Modulo, t.SignalBase), (t.Modulo.prototype._setWaveShaper = function (t) { this._shaper.setMap(function (e) { var i = Math.floor((e + 1e-4) / t); return i; }); }), Object.defineProperty(t.Modulo.prototype, 'value', { get: function () { return this._modSignal.value; }, set: function (t) { (this._modSignal.value = t), this._setWaveShaper(t); }, }), (t.Modulo.prototype.dispose = function () { return ( t.prototype.dispose.call(this), this._shaper.dispose(), (this._shaper = null), this._multiply.dispose(), (this._multiply = null), this._subtract.dispose(), (this._subtract = null), this._modSignal.dispose(), (this._modSignal = null), this ); }), t.Modulo ); })(p, l, w); var I; I = (function (t) { 'use strict'; return ( (t.Pow = function (e) { (this._exp = this.defaultArg(e, 1)), (this._expScaler = this.input = this.output = new t.WaveShaper(this._expFunc(this._exp), 8192)); }), t.extend(t.Pow, t.SignalBase), Object.defineProperty(t.Pow.prototype, 'value', { get: function () { return this._exp; }, set: function (t) { (this._exp = t), this._expScaler.setMap(this._expFunc(this._exp)); }, }), (t.Pow.prototype._expFunc = function (t) { return function (e) { return Math.pow(Math.abs(e), t); }; }), (t.Pow.prototype.dispose = function () { return ( t.prototype.dispose.call(this), this._expScaler.dispose(), (this._expScaler = null), this ); }), t.Pow ); })(p); var G; G = (function (t) { 'use strict'; return ( (t.AudioToGain = function () { this._norm = this.input = this.output = new t.WaveShaper(function (t) { return (t + 1) / 2; }); }), t.extend(t.AudioToGain, t.SignalBase), (t.AudioToGain.prototype.dispose = function () { return ( t.prototype.dispose.call(this), this._norm.dispose(), (this._norm = null), this ); }), t.AudioToGain ); })(p, l); var L; L = (function (t) { 'use strict'; function e(t, e, i) { var n = new t(); return ( i._eval(e[0]).connect(n, 0, 0), i._eval(e[1]).connect(n, 0, 1), n ); } function i(t, e, i) { var n = new t(); return i._eval(e[0]).connect(n, 0, 0), n; } function n(t) { return t ? parseFloat(t) : void 0; } function o(t) { return t && t.args ? parseFloat(t.args) : void 0; } return ( (t.Expr = function () { var t = this._replacements( Array.prototype.slice.call(arguments), ), e = this._parseInputs(t); (this._nodes = []), (this.input = new Array(e)); for (var i = 0; e > i; i++) this.input[i] = this.context.createGain(); var n, o = this._parseTree(t); try { n = this._eval(o); } catch (r) { throw ( (this._disposeNodes(), new Error('Tone.Expr: Could evaluate expression: ' + t)) ); } this.output = n; }), t.extend(t.Expr, t.SignalBase), (t.Expr._Expressions = { value: { signal: { regexp: /^\d+\.\d+|^\d+/, method: function (e) { var i = new t.Signal(n(e)); return i; }, }, input: { regexp: /^\$\d/, method: function (t, e) { return e.input[n(t.substr(1))]; }, }, }, glue: { '(': {regexp: /^\(/}, ')': {regexp: /^\)/}, ',': {regexp: /^,/}, }, func: { abs: {regexp: /^abs/, method: i.bind(this, t.Abs)}, mod: { regexp: /^mod/, method: function (e, i) { var n = o(e[1]), r = new t.Modulo(n); return i._eval(e[0]).connect(r), r; }, }, pow: { regexp: /^pow/, method: function (e, i) { var n = o(e[1]), r = new t.Pow(n); return i._eval(e[0]).connect(r), r; }, }, a2g: { regexp: /^a2g/, method: function (e, i) { var n = new t.AudioToGain(); return i._eval(e[0]).connect(n), n; }, }, }, binary: { '+': { regexp: /^\+/, precedence: 1, method: e.bind(this, t.Add), }, '-': { regexp: /^\-/, precedence: 1, method: function (n, o) { return 1 === n.length ? i(t.Negate, n, o) : e(t.Subtract, n, o); }, }, '*': { regexp: /^\*/, precedence: 0, method: e.bind(this, t.Multiply), }, }, unary: { '-': {regexp: /^\-/, method: i.bind(this, t.Negate)}, '!': {regexp: /^\!/, method: i.bind(this, t.NOT)}, }, }), (t.Expr.prototype._parseInputs = function (t) { var e = t.match(/\$\d/g), i = 0; if (null !== e) for (var n = 0; n < e.length; n++) { var o = parseInt(e[n].substr(1)) + 1; i = Math.max(i, o); } return i; }), (t.Expr.prototype._replacements = function (t) { for (var e = t.shift(), i = 0; i < t.length; i++) e = e.replace(/\%/i, t[i]); return e; }), (t.Expr.prototype._tokenize = function (e) { function i(e) { for (var i in t.Expr._Expressions) { var n = t.Expr._Expressions[i]; for (var o in n) { var r = n[o], s = r.regexp, a = e.match(s); if (null !== a) return {type: i, value: a[0], method: r.method}; } } throw new SyntaxError('Tone.Expr: Unexpected token ' + e); } for (var n = -1, o = []; e.length > 0; ) { e = e.trim(); var r = i(e); o.push(r), (e = e.substr(r.value.length)); } return { next: function () { return o[++n]; }, peek: function () { return o[n + 1]; }, }; }), (t.Expr.prototype._parseTree = function (e) { function i(t, e) { return !p(t) && 'glue' === t.type && t.value === e; } function n(e, i, n) { var o = !1, r = t.Expr._Expressions[i]; if (!p(e)) for (var s in r) { var a = r[s]; if (a.regexp.test(e.value)) { if (p(n)) return !0; if (a.precedence === n) return !0; } } return o; } function o(t) { p(t) && (t = 5); var e; e = 0 > t ? r() : o(t - 1); for (var i = c.peek(); n(i, 'binary', t); ) (i = c.next()), (e = { operator: i.value, method: i.method, args: [e, o(t - 1)], }), (i = c.peek()); return e; } function r() { var t, e; return ( (t = c.peek()), n(t, 'unary') ? ((t = c.next()), (e = r()), {operator: t.value, method: t.method, args: [e]}) : s() ); } function s() { var t, e; if (((t = c.peek()), p(t))) throw new SyntaxError( 'Tone.Expr: Unexpected termination of expression', ); if ('func' === t.type) return (t = c.next()), a(t); if ('value' === t.type) return ( (t = c.next()), {method: t.method, args: t.value} ); if (i(t, '(')) { if ((c.next(), (e = o()), (t = c.next()), !i(t, ')'))) throw new SyntaxError('Expected )'); return e; } throw new SyntaxError( 'Tone.Expr: Parse error, cannot process token ' + t.value, ); } function a(t) { var e, n = []; if (((e = c.next()), !i(e, '('))) throw new SyntaxError( 'Tone.Expr: Expected ( in a function call "' + t.value + '"', ); if ( ((e = c.peek()), i(e, ')') || (n = u()), (e = c.next()), !i(e, ')')) ) throw new SyntaxError( 'Tone.Expr: Expected ) in a function call "' + t.value + '"', ); return {method: t.method, args: n, name: name}; } function u() { for (var t, e, n = []; ; ) { if (((e = o()), p(e))) break; if ((n.push(e), (t = c.peek()), !i(t, ','))) break; c.next(); } return n; } var c = this._tokenize(e), p = this.isUndef.bind(this); return o(); }), (t.Expr.prototype._eval = function (t) { if (!this.isUndef(t)) { var e = t.method(t.args, this); return this._nodes.push(e), e; } }), (t.Expr.prototype._disposeNodes = function () { for (var t = 0; t < this._nodes.length; t++) { var e = this._nodes[t]; this.isFunction(e.dispose) ? e.dispose() : this.isFunction(e.disconnect) && e.disconnect(), (e = null), (this._nodes[t] = null); } this._nodes = null; }), (t.Expr.prototype.dispose = function () { t.prototype.dispose.call(this), this._disposeNodes(); }), t.Expr ); })(p, S, R, w, N, D, B, C, U, I); var j; j = (function (t) { 'use strict'; return ( (t.EqualPowerGain = function () { this._eqPower = this.input = this.output = new t.WaveShaper( function (t) { return Math.abs(t) < 0.001 ? 0 : this.equalPowerScale(t); }.bind(this), 4096, ); }), t.extend(t.EqualPowerGain, t.SignalBase), (t.EqualPowerGain.prototype.dispose = function () { return ( t.prototype.dispose.call(this), this._eqPower.dispose(), (this._eqPower = null), this ); }), t.EqualPowerGain ); })(p); var Z; Z = (function (t) { 'use strict'; return ( (t.CrossFade = function (e) { this.createInsOuts(2, 1), (this.a = this.input[0] = new t.Gain()), (this.b = this.input[1] = new t.Gain()), (this.fade = new t.Signal( this.defaultArg(e, 0.5), t.Type.NormalRange, )), (this._equalPowerA = new t.EqualPowerGain()), (this._equalPowerB = new t.EqualPowerGain()), (this._invert = new t.Expr('1 - $0')), this.a.connect(this.output), this.b.connect(this.output), this.fade.chain(this._equalPowerB, this.b.gain), this.fade.chain( this._invert, this._equalPowerA, this.a.gain, ), this._readOnly('fade'); }), t.extend(t.CrossFade), (t.CrossFade.prototype.dispose = function () { return ( t.prototype.dispose.call(this), this._writable('fade'), this._equalPowerA.dispose(), (this._equalPowerA = null), this._equalPowerB.dispose(), (this._equalPowerB = null), this.fade.dispose(), (this.fade = null), this._invert.dispose(), (this._invert = null), this.a.dispose(), (this.a = null), this.b.dispose(), (this.b = null), this ); }), t.CrossFade ); })(p, x, L, j); var X; X = (function () { var e = n, i = Z; return ( (t.Effect = function () { (this.ac = e.audiocontext), (this.input = this.ac.createGain()), (this.output = this.ac.createGain()), (this._drywet = new i(1)), (this.wet = this.ac.createGain()), this.input.connect(this._drywet.a), this.wet.connect(this._drywet.b), this._drywet.connect(this.output), this.connect(), e.soundArray.push(this); }), (t.Effect.prototype.amp = function (t, i, n) { var i = i || 0, n = n || 0, o = e.audiocontext.currentTime, r = this.output.gain.value; this.output.gain.cancelScheduledValues(o), this.output.gain.linearRampToValueAtTime(r, o + n + 0.001), this.output.gain.linearRampToValueAtTime( t, o + n + i + 0.001, ); }), (t.Effect.prototype.chain = function () { if (arguments.length > 0) { this.connect(arguments[0]); for (var t = 1; t < arguments.length; t += 1) arguments[t - 1].connect(arguments[t]); } return this; }), (t.Effect.prototype.drywet = function (t) { return ( 'undefined' != typeof t && (this._drywet.fade.value = t), this._drywet.fade.value ); }), (t.Effect.prototype.connect = function (e) { var i = e || t.soundOut.input; this.output.connect(i.input ? i.input : i); }), (t.Effect.prototype.disconnect = function () { this.output && this.output.disconnect(); }), (t.Effect.prototype.dispose = function () { var t = e.soundArray.indexOf(this); e.soundArray.splice(t, 1), this.input && (this.input.disconnect(), delete this.input), this.output && (this.output.disconnect(), delete this.output), this._drywet && (this._drywet.disconnect(), delete this._drywet), this.wet && (this.wet.disconnect(), delete this.wet), (this.ac = void 0); }), t.Effect ); })(n, Z); var Y; Y = (function () { var e = X; return ( (t.Filter = function (t) { e.call(this), (this.biquad = this.ac.createBiquadFilter()), this.input.connect(this.biquad), this.biquad.connect(this.wet), t && this.setType(t), (this._on = !0), (this._untoggledType = this.biquad.type); }), (t.Filter.prototype = Object.create(e.prototype)), (t.Filter.prototype.process = function (t, e, i, n) { t.connect(this.input), this.set(e, i, n); }), (t.Filter.prototype.set = function (t, e, i) { t && this.freq(t, i), e && this.res(e, i); }), (t.Filter.prototype.freq = function (t, e) { var i = e || 0; return ( 0 >= t && (t = 1), 'number' == typeof t ? ((this.biquad.frequency.value = t), this.biquad.frequency.cancelScheduledValues( this.ac.currentTime + 0.01 + i, ), this.biquad.frequency.exponentialRampToValueAtTime( t, this.ac.currentTime + 0.02 + i, )) : t && t.connect(this.biquad.frequency), this.biquad.frequency.value ); }), (t.Filter.prototype.res = function (t, e) { var i = e || 0; return ( 'number' == typeof t ? ((this.biquad.Q.value = t), this.biquad.Q.cancelScheduledValues( this.ac.currentTime + 0.01 + i, ), this.biquad.Q.linearRampToValueAtTime( t, this.ac.currentTime + 0.02 + i, )) : t && t.connect(this.biquad.Q), this.biquad.Q.value ); }), (t.Filter.prototype.gain = function (t, e) { var i = e || 0; return ( 'number' == typeof t ? ((this.biquad.gain.value = t), this.biquad.gain.cancelScheduledValues( this.ac.currentTime + 0.01 + i, ), this.biquad.gain.linearRampToValueAtTime( t, this.ac.currentTime + 0.02 + i, )) : t && t.connect(this.biquad.gain), this.biquad.gain.value ); }), (t.Filter.prototype.toggle = function () { return ( (this._on = !this._on), this._on === !0 ? (this.biquad.type = this._untoggledType) : this._on === !1 && (this.biquad.type = 'allpass'), this._on ); }), (t.Filter.prototype.setType = function (t) { (this.biquad.type = t), (this._untoggledType = this.biquad.type); }), (t.Filter.prototype.dispose = function () { e.prototype.dispose.apply(this), this.biquad && (this.biquad.disconnect(), delete this.biquad); }), (t.LowPass = function () { t.Filter.call(this, 'lowpass'); }), (t.LowPass.prototype = Object.create(t.Filter.prototype)), (t.HighPass = function () { t.Filter.call(this, 'highpass'); }), (t.HighPass.prototype = Object.create(t.Filter.prototype)), (t.BandPass = function () { t.Filter.call(this, 'bandpass'); }), (t.BandPass.prototype = Object.create(t.Filter.prototype)), t.Filter ); })(n, X); var z; z = (function () { var e = Y, i = n, o = function (t, i) { e.call(this, 'peaking'), this.disconnect(), this.set(t, i), (this.biquad.gain.value = 0), delete this.input, delete this.output, delete this._drywet, delete this.wet; }; return ( (o.prototype = Object.create(e.prototype)), (o.prototype.amp = function () { console.warn( '`amp()` is not available for p5.EQ bands. Use `.gain()`', ); }), (o.prototype.drywet = function () { console.warn('`drywet()` is not available for p5.EQ bands.'); }), (o.prototype.connect = function (e) { var i = e || t.soundOut.input; this.biquad ? this.biquad.connect(i.input ? i.input : i) : this.output.connect(i.input ? i.input : i); }), (o.prototype.disconnect = function () { this.biquad && this.biquad.disconnect(); }), (o.prototype.dispose = function () { var t = i.soundArray.indexOf(this); i.soundArray.splice(t, 1), this.disconnect(), delete this.biquad; }), o ); })(Y, n); var W; W = (function () { var e = X, i = z; return ( (t.EQ = function (t) { e.call(this), (t = 3 === t || 8 === t ? t : 3); var i; (i = 3 === t ? Math.pow(2, 3) : 2), (this.bands = []); for (var n, o, r = 0; t > r; r++) r === t - 1 ? ((n = 21e3), (o = 0.01)) : 0 === r ? ((n = 100), (o = 0.1)) : 1 === r ? ((n = 3 === t ? 360 * i : 360), (o = 1)) : ((n = this.bands[r - 1].freq() * i), (o = 1)), (this.bands[r] = this._newBand(n, o)), r > 0 ? this.bands[r - 1].connect(this.bands[r].biquad) : this.input.connect(this.bands[r].biquad); this.bands[t - 1].connect(this.output); }), (t.EQ.prototype = Object.create(e.prototype)), (t.EQ.prototype.process = function (t) { t.connect(this.input); }), (t.EQ.prototype.set = function () { if (arguments.length === 2 * this.bands.length) for (var t = 0; t < arguments.length; t += 2) this.bands[t / 2].freq(arguments[t]), this.bands[t / 2].gain(arguments[t + 1]); else console.error( 'Argument mismatch. .set() should be called with ' + 2 * this.bands.length + ' arguments. (one frequency and gain value pair for each band of the eq)', ); }), (t.EQ.prototype._newBand = function (t, e) { return new i(t, e); }), (t.EQ.prototype.dispose = function () { if ((e.prototype.dispose.apply(this), this.bands)) { for (; this.bands.length > 0; ) delete this.bands.pop().dispose(); delete this.bands; } }), t.EQ ); })(X, z); var Q; Q = (function () { var e = X; return ( (t.Panner3D = function () { e.call(this), (this.panner = this.ac.createPanner()), (this.panner.panningModel = 'HRTF'), (this.panner.distanceModel = 'linear'), this.panner.connect(this.output), this.input.connect(this.panner); }), (t.Panner3D.prototype = Object.create(e.prototype)), (t.Panner3D.prototype.process = function (t) { t.connect(this.input); }), (t.Panner3D.prototype.set = function (t, e, i, n) { return ( this.positionX(t, n), this.positionY(e, n), this.positionZ(i, n), [ this.panner.positionX.value, this.panner.positionY.value, this.panner.positionZ.value, ] ); }), (t.Panner3D.prototype.positionX = function (t, e) { var i = e || 0; return ( 'number' == typeof t ? ((this.panner.positionX.value = t), this.panner.positionX.cancelScheduledValues( this.ac.currentTime + 0.01 + i, ), this.panner.positionX.linearRampToValueAtTime( t, this.ac.currentTime + 0.02 + i, )) : t && t.connect(this.panner.positionX), this.panner.positionX.value ); }), (t.Panner3D.prototype.positionY = function (t, e) { var i = e || 0; return ( 'number' == typeof t ? ((this.panner.positionY.value = t), this.panner.positionY.cancelScheduledValues( this.ac.currentTime + 0.01 + i, ), this.panner.positionY.linearRampToValueAtTime( t, this.ac.currentTime + 0.02 + i, )) : t && t.connect(this.panner.positionY), this.panner.positionY.value ); }), (t.Panner3D.prototype.positionZ = function (t, e) { var i = e || 0; return ( 'number' == typeof t ? ((this.panner.positionZ.value = t), this.panner.positionZ.cancelScheduledValues( this.ac.currentTime + 0.01 + i, ), this.panner.positionZ.linearRampToValueAtTime( t, this.ac.currentTime + 0.02 + i, )) : t && t.connect(this.panner.positionZ), this.panner.positionZ.value ); }), (t.Panner3D.prototype.orient = function (t, e, i, n) { return ( this.orientX(t, n), this.orientY(e, n), this.orientZ(i, n), [ this.panner.orientationX.value, this.panner.orientationY.value, this.panner.orientationZ.value, ] ); }), (t.Panner3D.prototype.orientX = function (t, e) { var i = e || 0; return ( 'number' == typeof t ? ((this.panner.orientationX.value = t), this.panner.orientationX.cancelScheduledValues( this.ac.currentTime + 0.01 + i, ), this.panner.orientationX.linearRampToValueAtTime( t, this.ac.currentTime + 0.02 + i, )) : t && t.connect(this.panner.orientationX), this.panner.orientationX.value ); }), (t.Panner3D.prototype.orientY = function (t, e) { var i = e || 0; return ( 'number' == typeof t ? ((this.panner.orientationY.value = t), this.panner.orientationY.cancelScheduledValues( this.ac.currentTime + 0.01 + i, ), this.panner.orientationY.linearRampToValueAtTime( t, this.ac.currentTime + 0.02 + i, )) : t && t.connect(this.panner.orientationY), this.panner.orientationY.value ); }), (t.Panner3D.prototype.orientZ = function (t, e) { var i = e || 0; return ( 'number' == typeof t ? ((this.panner.orientationZ.value = t), this.panner.orientationZ.cancelScheduledValues( this.ac.currentTime + 0.01 + i, ), this.panner.orientationZ.linearRampToValueAtTime( t, this.ac.currentTime + 0.02 + i, )) : t && t.connect(this.panner.orientationZ), this.panner.orientationZ.value ); }), (t.Panner3D.prototype.setFalloff = function (t, e) { this.maxDist(t), this.rolloff(e); }), (t.Panner3D.prototype.maxDist = function (t) { return ( 'number' == typeof t && (this.panner.maxDistance = t), this.panner.maxDistance ); }), (t.Panner3D.prototype.rolloff = function (t) { return ( 'number' == typeof t && (this.panner.rolloffFactor = t), this.panner.rolloffFactor ); }), (t.Panner3D.dispose = function () { e.prototype.dispose.apply(this), this.panner && (this.panner.disconnect(), delete this.panner); }), t.Panner3D ); })(n, X); var H; H = (function () { var e = n; return ( (t.Listener3D = function (t) { (this.ac = e.audiocontext), (this.listener = this.ac.listener); }), (t.Listener3D.prototype.process = function (t) { t.connect(this.input); }), (t.Listener3D.prototype.position = function (t, e, i, n) { return ( this.positionX(t, n), this.positionY(e, n), this.positionZ(i, n), [ this.listener.positionX.value, this.listener.positionY.value, this.listener.positionZ.value, ] ); }), (t.Listener3D.prototype.positionX = function (t, e) { var i = e || 0; return ( 'number' == typeof t ? ((this.listener.positionX.value = t), this.listener.positionX.cancelScheduledValues( this.ac.currentTime + 0.01 + i, ), this.listener.positionX.linearRampToValueAtTime( t, this.ac.currentTime + 0.02 + i, )) : t && t.connect(this.listener.positionX), this.listener.positionX.value ); }), (t.Listener3D.prototype.positionY = function (t, e) { var i = e || 0; return ( 'number' == typeof t ? ((this.listener.positionY.value = t), this.listener.positionY.cancelScheduledValues( this.ac.currentTime + 0.01 + i, ), this.listener.positionY.linearRampToValueAtTime( t, this.ac.currentTime + 0.02 + i, )) : t && t.connect(this.listener.positionY), this.listener.positionY.value ); }), (t.Listener3D.prototype.positionZ = function (t, e) { var i = e || 0; return ( 'number' == typeof t ? ((this.listener.positionZ.value = t), this.listener.positionZ.cancelScheduledValues( this.ac.currentTime + 0.01 + i, ), this.listener.positionZ.linearRampToValueAtTime( t, this.ac.currentTime + 0.02 + i, )) : t && t.connect(this.listener.positionZ), this.listener.positionZ.value ); }), (t.Listener3D.prototype.orient = function (t, e, i, n, o, r, s) { return ( 3 === arguments.length || 4 === arguments.length ? ((s = arguments[3]), this.orientForward(t, e, i, s)) : (6 === arguments.length || 7 === arguments) && (this.orientForward(t, e, i), this.orientUp(n, o, r, s)), [ this.listener.forwardX.value, this.listener.forwardY.value, this.listener.forwardZ.value, this.listener.upX.value, this.listener.upY.value, this.listener.upZ.value, ] ); }), (t.Listener3D.prototype.orientForward = function (t, e, i, n) { return ( this.forwardX(t, n), this.forwardY(e, n), this.forwardZ(i, n), [ this.listener.forwardX, this.listener.forwardY, this.listener.forwardZ, ] ); }), (t.Listener3D.prototype.orientUp = function (t, e, i, n) { return ( this.upX(t, n), this.upY(e, n), this.upZ(i, n), [this.listener.upX, this.listener.upY, this.listener.upZ] ); }), (t.Listener3D.prototype.forwardX = function (t, e) { var i = e || 0; return ( 'number' == typeof t ? ((this.listener.forwardX.value = t), this.listener.forwardX.cancelScheduledValues( this.ac.currentTime + 0.01 + i, ), this.listener.forwardX.linearRampToValueAtTime( t, this.ac.currentTime + 0.02 + i, )) : t && t.connect(this.listener.forwardX), this.listener.forwardX.value ); }), (t.Listener3D.prototype.forwardY = function (t, e) { var i = e || 0; return ( 'number' == typeof t ? ((this.listener.forwardY.value = t), this.listener.forwardY.cancelScheduledValues( this.ac.currentTime + 0.01 + i, ), this.listener.forwardY.linearRampToValueAtTime( t, this.ac.currentTime + 0.02 + i, )) : t && t.connect(this.listener.forwardY), this.listener.forwardY.value ); }), (t.Listener3D.prototype.forwardZ = function (t, e) { var i = e || 0; return ( 'number' == typeof t ? ((this.listener.forwardZ.value = t), this.listener.forwardZ.cancelScheduledValues( this.ac.currentTime + 0.01 + i, ), this.listener.forwardZ.linearRampToValueAtTime( t, this.ac.currentTime + 0.02 + i, )) : t && t.connect(this.listener.forwardZ), this.listener.forwardZ.value ); }), (t.Listener3D.prototype.upX = function (t, e) { var i = e || 0; return ( 'number' == typeof t ? ((this.listener.upX.value = t), this.listener.upX.cancelScheduledValues( this.ac.currentTime + 0.01 + i, ), this.listener.upX.linearRampToValueAtTime( t, this.ac.currentTime + 0.02 + i, )) : t && t.connect(this.listener.upX), this.listener.upX.value ); }), (t.Listener3D.prototype.upY = function (t, e) { var i = e || 0; return ( 'number' == typeof t ? ((this.listener.upY.value = t), this.listener.upY.cancelScheduledValues( this.ac.currentTime + 0.01 + i, ), this.listener.upY.linearRampToValueAtTime( t, this.ac.currentTime + 0.02 + i, )) : t && t.connect(this.listener.upY), this.listener.upY.value ); }), (t.Listener3D.prototype.upZ = function (t, e) { var i = e || 0; return ( 'number' == typeof t ? ((this.listener.upZ.value = t), this.listener.upZ.cancelScheduledValues( this.ac.currentTime + 0.01 + i, ), this.listener.upZ.linearRampToValueAtTime( t, this.ac.currentTime + 0.02 + i, )) : t && t.connect(this.listener.upZ), this.listener.upZ.value ); }), t.Listener3D ); })(n, X); var $; $ = (function () { var e = Y, i = X; (t.Delay = function () { i.call(this), (this._split = this.ac.createChannelSplitter(2)), (this._merge = this.ac.createChannelMerger(2)), (this._leftGain = this.ac.createGain()), (this._rightGain = this.ac.createGain()), (this.leftDelay = this.ac.createDelay()), (this.rightDelay = this.ac.createDelay()), (this._leftFilter = new e()), (this._rightFilter = new e()), this._leftFilter.disconnect(), this._rightFilter.disconnect(), this._leftFilter.biquad.frequency.setValueAtTime( 1200, this.ac.currentTime, ), this._rightFilter.biquad.frequency.setValueAtTime( 1200, this.ac.currentTime, ), this._leftFilter.biquad.Q.setValueAtTime( 0.3, this.ac.currentTime, ), this._rightFilter.biquad.Q.setValueAtTime( 0.3, this.ac.currentTime, ), this.input.connect(this._split), this.leftDelay.connect(this._leftGain), this.rightDelay.connect(this._rightGain), this._leftGain.connect(this._leftFilter.input), this._rightGain.connect(this._rightFilter.input), this._merge.connect(this.wet), this._leftFilter.biquad.gain.setValueAtTime( 1, this.ac.currentTime, ), this._rightFilter.biquad.gain.setValueAtTime( 1, this.ac.currentTime, ), this.setType(0), (this._maxDelay = this.leftDelay.delayTime.maxValue), this.feedback(0.5); }), (t.Delay.prototype = Object.create(i.prototype)), (t.Delay.prototype.process = function (t, e, i, n) { var o = i || 0, r = e || 0; if (o >= 1) throw new Error( 'Feedback value will force a positive feedback loop.', ); if (r >= this._maxDelay) throw new Error( 'Delay Time exceeds maximum delay time of ' + this._maxDelay + ' second.', ); t.connect(this.input), this.leftDelay.delayTime.setValueAtTime( r, this.ac.currentTime, ), this.rightDelay.delayTime.setValueAtTime( r, this.ac.currentTime, ), (this._leftGain.gain.value = o), (this._rightGain.gain.value = o), n && (this._leftFilter.freq(n), this._rightFilter.freq(n)); }), (t.Delay.prototype.delayTime = function (t) { 'number' != typeof t ? (t.connect(this.leftDelay.delayTime), t.connect(this.rightDelay.delayTime)) : (this.leftDelay.delayTime.cancelScheduledValues( this.ac.currentTime, ), this.rightDelay.delayTime.cancelScheduledValues( this.ac.currentTime, ), this.leftDelay.delayTime.linearRampToValueAtTime( t, this.ac.currentTime, ), this.rightDelay.delayTime.linearRampToValueAtTime( t, this.ac.currentTime, )); }), (t.Delay.prototype.feedback = function (t) { if (t && 'number' != typeof t) t.connect(this._leftGain.gain), t.connect(this._rightGain.gain); else { if (t >= 1) throw new Error( 'Feedback value will force a positive feedback loop.', ); 'number' == typeof t && ((this._leftGain.gain.value = t), (this._rightGain.gain.value = t)); } return this._leftGain.gain.value; }), (t.Delay.prototype.filter = function (t, e) { this._leftFilter.set(t, e), this._rightFilter.set(t, e); }), (t.Delay.prototype.setType = function (t) { switch ( (1 === t && (t = 'pingPong'), this._split.disconnect(), this._leftFilter.disconnect(), this._rightFilter.disconnect(), this._split.connect(this.leftDelay, 0), this._split.connect(this.rightDelay, 1), t) ) { case 'pingPong': this._rightFilter.setType(this._leftFilter.biquad.type), this._leftFilter.output.connect(this._merge, 0, 0), this._rightFilter.output.connect(this._merge, 0, 1), this._leftFilter.output.connect(this.rightDelay), this._rightFilter.output.connect(this.leftDelay); break; default: this._leftFilter.output.connect(this._merge, 0, 0), this._rightFilter.output.connect(this._merge, 0, 1), this._leftFilter.output.connect(this.leftDelay), this._rightFilter.output.connect(this.rightDelay); } }), (t.Delay.prototype.dispose = function () { i.prototype.dispose.apply(this), this._split.disconnect(), this._leftFilter.dispose(), this._rightFilter.dispose(), this._merge.disconnect(), this._leftGain.disconnect(), this._rightGain.disconnect(), this.leftDelay.disconnect(), this.rightDelay.disconnect(), (this._split = void 0), (this._leftFilter = void 0), (this._rightFilter = void 0), (this._merge = void 0), (this._leftGain = void 0), (this._rightGain = void 0), (this.leftDelay = void 0), (this.rightDelay = void 0); }); })(Y, X); var J; J = (function () { var e = r, i = X; (t.Reverb = function () { i.call(this), (this.convolverNode = this.ac.createConvolver()), (this.input.gain.value = 0.5), this.input.connect(this.convolverNode), this.convolverNode.connect(this.wet), (this._seconds = 3), (this._decay = 2), (this._reverse = !1), this._buildImpulse(); }), (t.Reverb.prototype = Object.create(i.prototype)), (t.Reverb.prototype.process = function (t, e, i, n) { t.connect(this.input); var o = !1; e && ((this._seconds = e), (o = !0)), i && (this._decay = i), n && (this._reverse = n), o && this._buildImpulse(); }), (t.Reverb.prototype.set = function (t, e, i) { var n = !1; t && ((this._seconds = t), (n = !0)), e && (this._decay = e), i && (this._reverse = i), n && this._buildImpulse(); }), (t.Reverb.prototype._buildImpulse = function () { var t, e, i = this.ac.sampleRate, n = i * this._seconds, o = this._decay, r = this.ac.createBuffer(2, n, i), s = r.getChannelData(0), a = r.getChannelData(1); for (e = 0; n > e; e++) (t = this._reverse ? n - e : e), (s[e] = (2 * Math.random() - 1) * Math.pow(1 - t / n, o)), (a[e] = (2 * Math.random() - 1) * Math.pow(1 - t / n, o)); this.convolverNode.buffer = r; }), (t.Reverb.prototype.dispose = function () { i.prototype.dispose.apply(this), this.convolverNode && ((this.convolverNode.buffer = null), (this.convolverNode = null)); }), (t.Convolver = function (t, e, n) { i.call(this), (this.convolverNode = this.ac.createConvolver()), (this.input.gain.value = 0.5), this.input.connect(this.convolverNode), this.convolverNode.connect(this.wet), t ? ((this.impulses = []), this._loadBuffer(t, e, n)) : ((this._seconds = 3), (this._decay = 2), (this._reverse = !1), this._buildImpulse()); }), (t.Convolver.prototype = Object.create(t.Reverb.prototype)), t.prototype.registerPreloadMethod('createConvolver', t.prototype), (t.prototype.createConvolver = function (e, i, n) { window.location.origin.indexOf('file://') > -1 && 'undefined' === window.cordova && alert( 'This sketch may require a server to load external files. Please see http://bit.ly/1qcInwS', ); var o = this, r = new t.Convolver( e, function (t) { 'function' == typeof i && i(t), 'function' == typeof o._decrementPreload && o._decrementPreload(); }, n, ); return (r.impulses = []), r; }), (t.Convolver.prototype._loadBuffer = function (i, n, o) { var i = t.prototype._checkFileFormats(i), r = this, s = new Error().stack, a = t.prototype.getAudioContext(), u = new XMLHttpRequest(); u.open('GET', i, !0), (u.responseType = 'arraybuffer'), (u.onload = function () { if (200 === u.status) a.decodeAudioData( u.response, function (t) { var e = {}, o = i.split('/'); (e.name = o[o.length - 1]), (e.audioBuffer = t), r.impulses.push(e), (r.convolverNode.buffer = e.audioBuffer), n && n(e); }, function () { var t = new e('decodeAudioData', s, r.url), i = 'AudioContext error at decodeAudioData for ' + r.url; o ? ((t.msg = i), o(t)) : console.error( i + '\n The error stack trace includes: \n' + t.stack, ); }, ); else { var t = new e('loadConvolver', s, r.url), c = 'Unable to load ' + r.url + '. The request status was: ' + u.status + ' (' + u.statusText + ')'; o ? ((t.message = c), o(t)) : console.error( c + '\n The error stack trace includes: \n' + t.stack, ); } }), (u.onerror = function () { var t = new e('loadConvolver', s, r.url), i = 'There was no response from the server at ' + r.url + '. Check the url and internet connectivity.'; o ? ((t.message = i), o(t)) : console.error( i + '\n The error stack trace includes: \n' + t.stack, ); }), u.send(); }), (t.Convolver.prototype.set = null), (t.Convolver.prototype.process = function (t) { t.connect(this.input); }), (t.Convolver.prototype.impulses = []), (t.Convolver.prototype.addImpulse = function (t, e, i) { window.location.origin.indexOf('file://') > -1 && 'undefined' === window.cordova && alert( 'This sketch may require a server to load external files. Please see http://bit.ly/1qcInwS', ), this._loadBuffer(t, e, i); }), (t.Convolver.prototype.resetImpulse = function (t, e, i) { window.location.origin.indexOf('file://') > -1 && 'undefined' === window.cordova && alert( 'This sketch may require a server to load external files. Please see http://bit.ly/1qcInwS', ), (this.impulses = []), this._loadBuffer(t, e, i); }), (t.Convolver.prototype.toggleImpulse = function (t) { if ( ('number' == typeof t && t < this.impulses.length && (this.convolverNode.buffer = this.impulses[t].audioBuffer), 'string' == typeof t) ) for (var e = 0; e < this.impulses.length; e++) if (this.impulses[e].name === t) { this.convolverNode.buffer = this.impulses[e].audioBuffer; break; } }), (t.Convolver.prototype.dispose = function () { i.prototype.dispose.apply(this); for (var t in this.impulses) this.impulses[t] && (this.impulses[t] = null); this.convolverNode && (this.convolverNode.disconnect(), (this.concolverNode = null)); }); })(r, X); var K; K = (function (t) { 'use strict'; return ( (t.TimelineState = function (e) { t.Timeline.call(this), (this._initial = e); }), t.extend(t.TimelineState, t.Timeline), (t.TimelineState.prototype.getValueAtTime = function (t) { var e = this.get(t); return null !== e ? e.state : this._initial; }), (t.TimelineState.prototype.setStateAtTime = function (t, e) { this.add({state: t, time: e}); }), t.TimelineState ); })(p, O); var tt; tt = (function (t) { 'use strict'; return ( (t.Clock = function () { t.Emitter.call(this); var e = this.optionsObject( arguments, ['callback', 'frequency'], t.Clock.defaults, ); (this.callback = e.callback), (this._nextTick = 0), (this._lastState = t.State.Stopped), (this.frequency = new t.TimelineSignal( e.frequency, t.Type.Frequency, )), this._readOnly('frequency'), (this.ticks = 0), (this._state = new t.TimelineState(t.State.Stopped)), (this._boundLoop = this._loop.bind(this)), this.context.on('tick', this._boundLoop); }), t.extend(t.Clock, t.Emitter), (t.Clock.defaults = { callback: t.noOp, frequency: 1, lookAhead: 'auto', }), Object.defineProperty(t.Clock.prototype, 'state', { get: function () { return this._state.getValueAtTime(this.now()); }, }), (t.Clock.prototype.start = function (e, i) { return ( (e = this.toSeconds(e)), this._state.getValueAtTime(e) !== t.State.Started && this._state.add({ state: t.State.Started, time: e, offset: i, }), this ); }), (t.Clock.prototype.stop = function (e) { return ( (e = this.toSeconds(e)), this._state.cancel(e), this._state.setStateAtTime(t.State.Stopped, e), this ); }), (t.Clock.prototype.pause = function (e) { return ( (e = this.toSeconds(e)), this._state.getValueAtTime(e) === t.State.Started && this._state.setStateAtTime(t.State.Paused, e), this ); }), (t.Clock.prototype._loop = function () { for ( var e = this.now(), i = this.context.lookAhead, n = this.context.updateInterval, o = 2 * this.context.lag, r = e + i + n + o; r > this._nextTick && this._state; ) { var s = this._state.getValueAtTime(this._nextTick); if (s !== this._lastState) { this._lastState = s; var a = this._state.get(this._nextTick); s === t.State.Started ? ((this._nextTick = a.time), this.isUndef(a.offset) || (this.ticks = a.offset), this.emit('start', a.time, this.ticks)) : s === t.State.Stopped ? ((this.ticks = 0), this.emit('stop', a.time)) : s === t.State.Paused && this.emit('pause', a.time); } var u = this._nextTick; this.frequency && ((this._nextTick += 1 / this.frequency.getValueAtTime(this._nextTick)), s === t.State.Started && (this.callback(u), this.ticks++)); } }), (t.Clock.prototype.getStateAtTime = function (t) { return (t = this.toSeconds(t)), this._state.getValueAtTime(t); }), (t.Clock.prototype.dispose = function () { t.Emitter.prototype.dispose.call(this), this.context.off('tick', this._boundLoop), this._writable('frequency'), this.frequency.dispose(), (this.frequency = null), (this._boundLoop = null), (this._nextTick = 1 / 0), (this.callback = null), this._state.dispose(), (this._state = null); }), t.Clock ); })(p, F, K, v); var et; et = (function () { var e = n, i = tt; (t.Metro = function () { (this.clock = new i({callback: this.ontick.bind(this)})), (this.syncedParts = []), (this.bpm = 120), this._init(), (this.prevTick = 0), (this.tatumTime = 0), (this.tickCallback = function () {}); }), (t.Metro.prototype.ontick = function (t) { var i = t - this.prevTick, n = t - e.audiocontext.currentTime; if (!(i - this.tatumTime <= -0.02)) { this.prevTick = t; var o = this; this.syncedParts.forEach(function (t) { t.isPlaying && (t.incrementStep(n), t.phrases.forEach(function (t) { var e = t.sequence, i = o.metroTicks % e.length; 0 !== e[i] && (o.metroTicks < e.length || !t.looping) && t.callback(n, e[i]); })); }), (this.metroTicks += 1), this.tickCallback(n); } }), (t.Metro.prototype.setBPM = function (t, i) { var n = 60 / (t * this.tatums), o = e.audiocontext.currentTime; this.tatumTime = n; var i = i || 0; this.clock.frequency.setValueAtTime( this.clock.frequency.value, o, ), this.clock.frequency.linearRampToValueAtTime(t, o + i), (this.bpm = t); }), (t.Metro.prototype.getBPM = function () { return (this.clock.getRate() / this.tatums) * 60; }), (t.Metro.prototype._init = function () { this.metroTicks = 0; }), (t.Metro.prototype.resetSync = function (t) { this.syncedParts = [t]; }), (t.Metro.prototype.pushSync = function (t) { this.syncedParts.push(t); }), (t.Metro.prototype.start = function (t) { var i = t || 0, n = e.audiocontext.currentTime; this.clock.start(n + i), this.setBPM(this.bpm); }), (t.Metro.prototype.stop = function (t) { var i = t || 0, n = e.audiocontext.currentTime; this.clock.stop(n + i); }), (t.Metro.prototype.beatLength = function (t) { this.tatums = 1 / t / 4; }); })(n, tt); var it; it = (function () { function e(t) { t.currentPart++, t.currentPart >= t.parts.length ? ((t.scoreStep = 0), t.onended()) : ((t.scoreStep = 0), t.parts[t.currentPart - 1].stop(), t.parts[t.currentPart].start()); } var i = n, o = 120; (t.prototype.setBPM = function (t, e) { o = t; for (var n in i.parts) i.parts[n] && i.parts[n].setBPM(t, e); }), (t.Phrase = function (t, e, i) { (this.phraseStep = 0), (this.name = t), (this.callback = e), (this.sequence = i); }), (t.Part = function (e, n) { (this.length = e || 0), (this.partStep = 0), (this.phrases = []), (this.isPlaying = !1), this.noLoop(), (this.tatums = n || 0.0625), (this.metro = new t.Metro()), this.metro._init(), this.metro.beatLength(this.tatums), this.metro.setBPM(o), i.parts.push(this), (this.callback = function () {}); }), (t.Part.prototype.setBPM = function (t, e) { this.metro.setBPM(t, e); }), (t.Part.prototype.getBPM = function () { return this.metro.getBPM(); }), (t.Part.prototype.start = function (t) { if (!this.isPlaying) { (this.isPlaying = !0), this.metro.resetSync(this); var e = t || 0; this.metro.start(e); } }), (t.Part.prototype.loop = function (t) { (this.looping = !0), (this.onended = function () { this.partStep = 0; }); var e = t || 0; this.start(e); }), (t.Part.prototype.noLoop = function () { (this.looping = !1), (this.onended = function () { this.stop(); }); }), (t.Part.prototype.stop = function (t) { (this.partStep = 0), this.pause(t); }), (t.Part.prototype.pause = function (t) { this.isPlaying = !1; var e = t || 0; this.metro.stop(e); }), (t.Part.prototype.addPhrase = function (e, i, n) { var o; if (3 === arguments.length) o = new t.Phrase(e, i, n); else { if (!(arguments[0] instanceof t.Phrase)) throw 'invalid input. addPhrase accepts name, callback, array or a p5.Phrase'; o = arguments[0]; } this.phrases.push(o), o.sequence.length > this.length && (this.length = o.sequence.length); }), (t.Part.prototype.removePhrase = function (t) { for (var e in this.phrases) this.phrases[e].name === t && this.phrases.splice(e, 1); }), (t.Part.prototype.getPhrase = function (t) { for (var e in this.phrases) if (this.phrases[e].name === t) return this.phrases[e]; }), (t.Part.prototype.replaceSequence = function (t, e) { for (var i in this.phrases) this.phrases[i].name === t && (this.phrases[i].sequence = e); }), (t.Part.prototype.incrementStep = function (t) { this.partStep < this.length - 1 ? (this.callback(t), (this.partStep += 1)) : this.looping || this.partStep !== this.length - 1 || (console.log('done'), this.onended()); }), (t.Part.prototype.onStep = function (t) { this.callback = t; }), (t.Score = function () { (this.parts = []), (this.currentPart = 0); var t = this; for (var i in arguments) arguments[i] && this.parts[i] && ((this.parts[i] = arguments[i]), (this.parts[i].nextPart = this.parts[i + 1]), (this.parts[i].onended = function () { t.resetPart(i), e(t); })); this.looping = !1; }), (t.Score.prototype.onended = function () { this.looping ? this.parts[0].start() : (this.parts[this.parts.length - 1].onended = function () { this.stop(), this.resetParts(); }), (this.currentPart = 0); }), (t.Score.prototype.start = function () { this.parts[this.currentPart].start(), (this.scoreStep = 0); }), (t.Score.prototype.stop = function () { this.parts[this.currentPart].stop(), (this.currentPart = 0), (this.scoreStep = 0); }), (t.Score.prototype.pause = function () { this.parts[this.currentPart].stop(); }), (t.Score.prototype.loop = function () { (this.looping = !0), this.start(); }), (t.Score.prototype.noLoop = function () { this.looping = !1; }), (t.Score.prototype.resetParts = function () { var t = this; this.parts.forEach(function (e) { t.resetParts[e]; }); }), (t.Score.prototype.resetPart = function (t) { this.parts[t].stop(), (this.parts[t].partStep = 0); for (var e in this.parts[t].phrases) this.parts[t] && (this.parts[t].phrases[e].phraseStep = 0); }), (t.Score.prototype.setBPM = function (t, e) { for (var i in this.parts) this.parts[i] && this.parts[i].setBPM(t, e); }); })(n); var nt; nt = (function () { var e = n, i = tt; return ( (t.SoundLoop = function (t, n) { (this.callback = t), (this.musicalTimeMode = 'number' == typeof this._interval ? !1 : !0), (this._interval = n || 1), (this._timeSignature = 4), (this._bpm = 60), (this.isPlaying = !1), (this.maxIterations = 1 / 0); var o = this; this.clock = new i({ callback: function (t) { var i = t - e.audiocontext.currentTime; i > 0 && o.iterations <= o.maxIterations && o.callback(i); }, frequency: this._calcFreq(), }); }), (t.SoundLoop.prototype.start = function (t) { var i = t || 0, n = e.audiocontext.currentTime; this.isPlaying || (this.clock.start(n + i), (this.isPlaying = !0)); }), (t.SoundLoop.prototype.stop = function (t) { var i = t || 0, n = e.audiocontext.currentTime; this.isPlaying && (this.clock.stop(n + i), (this.isPlaying = !1)); }), (t.SoundLoop.prototype.pause = function (t) { var i = t || 0, n = e.audiocontext.currentTime; this.isPlaying && (this.clock.pause(n + i), (this.isPlaying = !1)); }), (t.SoundLoop.prototype.syncedStart = function (t, i) { var n = i || 0, o = e.audiocontext.currentTime; if (t.isPlaying) { if (t.isPlaying) { var r = t.clock._nextTick - e.audiocontext.currentTime; this.clock.start(o + r), (this.isPlaying = !0); } } else t.clock.start(o + n), (t.isPlaying = !0), this.clock.start(o + n), (this.isPlaying = !0); }), (t.SoundLoop.prototype._update = function () { this.clock.frequency.value = this._calcFreq(); }), (t.SoundLoop.prototype._calcFreq = function () { return 'number' == typeof this._interval ? ((this.musicalTimeMode = !1), 1 / this._interval) : 'string' == typeof this._interval ? ((this.musicalTimeMode = !0), (this._bpm / 60 / this._convertNotation(this._interval)) * (this._timeSignature / 4)) : void 0; }), (t.SoundLoop.prototype._convertNotation = function (t) { var e = t.slice(-1); switch (((t = Number(t.slice(0, -1))), e)) { case 'm': return this._measure(t); case 'n': return this._note(t); default: console.warn( 'Specified interval is not formatted correctly. See Tone.js timing reference for more info: https://github.com/Tonejs/Tone.js/wiki/Time', ); } }), (t.SoundLoop.prototype._measure = function (t) { return t * this._timeSignature; }), (t.SoundLoop.prototype._note = function (t) { return this._timeSignature / t; }), Object.defineProperty(t.SoundLoop.prototype, 'bpm', { get: function () { return this._bpm; }, set: function (t) { this.musicalTimeMode || console.warn( 'Changing the BPM in "seconds" mode has no effect. BPM is only relevant in musicalTimeMode when the interval is specified as a string ("2n", "4n", "1m"...etc)', ), (this._bpm = t), this._update(); }, }), Object.defineProperty(t.SoundLoop.prototype, 'timeSignature', { get: function () { return this._timeSignature; }, set: function (t) { this.musicalTimeMode || console.warn( 'Changing the timeSignature in "seconds" mode has no effect. BPM is only relevant in musicalTimeMode when the interval is specified as a string ("2n", "4n", "1m"...etc)', ), (this._timeSignature = t), this._update(); }, }), Object.defineProperty(t.SoundLoop.prototype, 'interval', { get: function () { return this._interval; }, set: function (t) { (this.musicalTimeMode = 'Number' == typeof t ? !1 : !0), (this._interval = t), this._update(); }, }), Object.defineProperty(t.SoundLoop.prototype, 'iterations', { get: function () { return this.clock.ticks; }, }), t.SoundLoop ); })(n, tt); var ot; ot = (function () { 'use strict'; var e = X; return ( (t.Compressor = function () { e.call(this), (this.compressor = this.ac.createDynamicsCompressor()), this.input.connect(this.compressor), this.compressor.connect(this.wet); }), (t.Compressor.prototype = Object.create(e.prototype)), (t.Compressor.prototype.process = function (t, e, i, n, o, r) { t.connect(this.input), this.set(e, i, n, o, r); }), (t.Compressor.prototype.set = function (t, e, i, n, o) { 'undefined' != typeof t && this.attack(t), 'undefined' != typeof e && this.knee(e), 'undefined' != typeof i && this.ratio(i), 'undefined' != typeof n && this.threshold(n), 'undefined' != typeof o && this.release(o); }), (t.Compressor.prototype.attack = function (t, e) { var i = e || 0; return ( 'number' == typeof t ? ((this.compressor.attack.value = t), this.compressor.attack.cancelScheduledValues( this.ac.currentTime + 0.01 + i, ), this.compressor.attack.linearRampToValueAtTime( t, this.ac.currentTime + 0.02 + i, )) : 'undefined' != typeof t && t.connect(this.compressor.attack), this.compressor.attack.value ); }), (t.Compressor.prototype.knee = function (t, e) { var i = e || 0; return ( 'number' == typeof t ? ((this.compressor.knee.value = t), this.compressor.knee.cancelScheduledValues( this.ac.currentTime + 0.01 + i, ), this.compressor.knee.linearRampToValueAtTime( t, this.ac.currentTime + 0.02 + i, )) : 'undefined' != typeof t && t.connect(this.compressor.knee), this.compressor.knee.value ); }), (t.Compressor.prototype.ratio = function (t, e) { var i = e || 0; return ( 'number' == typeof t ? ((this.compressor.ratio.value = t), this.compressor.ratio.cancelScheduledValues( this.ac.currentTime + 0.01 + i, ), this.compressor.ratio.linearRampToValueAtTime( t, this.ac.currentTime + 0.02 + i, )) : 'undefined' != typeof t && t.connect(this.compressor.ratio), this.compressor.ratio.value ); }), (t.Compressor.prototype.threshold = function (t, e) { var i = e || 0; return ( 'number' == typeof t ? ((this.compressor.threshold.value = t), this.compressor.threshold.cancelScheduledValues( this.ac.currentTime + 0.01 + i, ), this.compressor.threshold.linearRampToValueAtTime( t, this.ac.currentTime + 0.02 + i, )) : 'undefined' != typeof t && t.connect(this.compressor.threshold), this.compressor.threshold.value ); }), (t.Compressor.prototype.release = function (t, e) { var i = e || 0; return ( 'number' == typeof t ? ((this.compressor.release.value = t), this.compressor.release.cancelScheduledValues( this.ac.currentTime + 0.01 + i, ), this.compressor.release.linearRampToValueAtTime( t, this.ac.currentTime + 0.02 + i, )) : 'undefined' != typeof number && t.connect(this.compressor.release), this.compressor.release.value ); }), (t.Compressor.prototype.reduction = function () { return this.compressor.reduction.value; }), (t.Compressor.prototype.dispose = function () { e.prototype.dispose.apply(this), this.compressor && (this.compressor.disconnect(), delete this.compressor); }), t.Compressor ); })(n, X, r); var rt; rt = (function () { function e(t, e) { for ( var i = t.length + e.length, n = new Float32Array(i), o = 0, r = 0; i > r; ) (n[r++] = t[o]), (n[r++] = e[o]), o++; return n; } function i(t, e, i) { for (var n = i.length, o = 0; n > o; o++) t.setUint8(e + o, i.charCodeAt(o)); } var o = n, r = o.audiocontext; (t.SoundRecorder = function () { (this.input = r.createGain()), (this.output = r.createGain()), (this.recording = !1), (this.bufferSize = 1024), (this._channels = 2), this._clear(), (this._jsNode = r.createScriptProcessor( this.bufferSize, this._channels, 2, )), (this._jsNode.onaudioprocess = this._audioprocess.bind(this)), (this._callback = function () {}), this._jsNode.connect(t.soundOut._silentNode), this.setInput(), o.soundArray.push(this); }), (t.SoundRecorder.prototype.setInput = function (e) { this.input.disconnect(), (this.input = null), (this.input = r.createGain()), this.input.connect(this._jsNode), this.input.connect(this.output), e ? e.connect(this.input) : t.soundOut.output.connect(this.input); }), (t.SoundRecorder.prototype.record = function (t, e, i) { (this.recording = !0), e && (this.sampleLimit = Math.round(e * r.sampleRate)), t && i ? (this._callback = function () { (this.buffer = this._getBuffer()), t.setBuffer(this.buffer), i(); }) : t && (this._callback = function () { (this.buffer = this._getBuffer()), t.setBuffer(this.buffer); }); }), (t.SoundRecorder.prototype.stop = function () { (this.recording = !1), this._callback(), this._clear(); }), (t.SoundRecorder.prototype._clear = function () { (this._leftBuffers = []), (this._rightBuffers = []), (this.recordedSamples = 0), (this.sampleLimit = null); }), (t.SoundRecorder.prototype._audioprocess = function (t) { if (this.recording !== !1 && this.recording === !0) if ( this.sampleLimit && this.recordedSamples >= this.sampleLimit ) this.stop(); else { var e = t.inputBuffer.getChannelData(0), i = t.inputBuffer.getChannelData(1); this._leftBuffers.push(new Float32Array(e)), this._rightBuffers.push(new Float32Array(i)), (this.recordedSamples += this.bufferSize); } }), (t.SoundRecorder.prototype._getBuffer = function () { var t = []; return ( t.push(this._mergeBuffers(this._leftBuffers)), t.push(this._mergeBuffers(this._rightBuffers)), t ); }), (t.SoundRecorder.prototype._mergeBuffers = function (t) { for ( var e = new Float32Array(this.recordedSamples), i = 0, n = t.length, o = 0; n > o; o++ ) { var r = t[o]; e.set(r, i), (i += r.length); } return e; }), (t.SoundRecorder.prototype.dispose = function () { this._clear(); var t = o.soundArray.indexOf(this); o.soundArray.splice(t, 1), (this._callback = function () {}), this.input && this.input.disconnect(), (this.input = null), (this._jsNode = null); }), (t.prototype.saveSound = function (n, o) { var r, s; (r = n.buffer.getChannelData(0)), (s = n.buffer.numberOfChannels > 1 ? n.buffer.getChannelData(1) : r); var a = e(r, s), u = new window.ArrayBuffer(44 + 2 * a.length), c = new window.DataView(u); i(c, 0, 'RIFF'), c.setUint32(4, 36 + 2 * a.length, !0), i(c, 8, 'WAVE'), i(c, 12, 'fmt '), c.setUint32(16, 16, !0), c.setUint16(20, 1, !0), c.setUint16(22, 2, !0), c.setUint32(24, 44100, !0), c.setUint32(28, 176400, !0), c.setUint16(32, 4, !0), c.setUint16(34, 16, !0), i(c, 36, 'data'), c.setUint32(40, 2 * a.length, !0); for (var p = a.length, h = 44, l = 1, f = 0; p > f; f++) c.setInt16(h, a[f] * (32767 * l), !0), (h += 2); t.prototype.writeFile([c], o, 'wav'); }); })(n); var st; st = (function () { (t.PeakDetect = function (t, e, i, n) { (this.framesPerPeak = n || 20), (this.framesSinceLastPeak = 0), (this.decayRate = 0.95), (this.threshold = i || 0.35), (this.cutoff = 0), (this.cutoffMult = 1.5), (this.energy = 0), (this.penergy = 0), (this.currentValue = 0), (this.isDetected = !1), (this.f1 = t || 40), (this.f2 = e || 2e4), (this._onPeak = function () {}); }), (t.PeakDetect.prototype.update = function (t) { var e = (this.energy = t.getEnergy(this.f1, this.f2) / 255); e > this.cutoff && e > this.threshold && e - this.penergy > 0 ? (this._onPeak(), (this.isDetected = !0), (this.cutoff = e * this.cutoffMult), (this.framesSinceLastPeak = 0)) : ((this.isDetected = !1), this.framesSinceLastPeak <= this.framesPerPeak ? this.framesSinceLastPeak++ : ((this.cutoff *= this.decayRate), (this.cutoff = Math.max( this.cutoff, this.threshold, )))), (this.currentValue = e), (this.penergy = e); }), (t.PeakDetect.prototype.onPeak = function (t, e) { var i = this; i._onPeak = function () { t(i.energy, e); }; }); })(); var at; at = (function () { var e = n; (t.Gain = function () { (this.ac = e.audiocontext), (this.input = this.ac.createGain()), (this.output = this.ac.createGain()), (this.input.gain.value = 0.5), this.input.connect(this.output), e.soundArray.push(this); }), (t.Gain.prototype.setInput = function (t) { t.connect(this.input); }), (t.Gain.prototype.connect = function (e) { var i = e || t.soundOut.input; this.output.connect(i.input ? i.input : i); }), (t.Gain.prototype.disconnect = function () { this.output && this.output.disconnect(); }), (t.Gain.prototype.amp = function (t, i, n) { var i = i || 0, n = n || 0, o = e.audiocontext.currentTime, r = this.output.gain.value; this.output.gain.cancelScheduledValues(o), this.output.gain.linearRampToValueAtTime(r, o + n), this.output.gain.linearRampToValueAtTime(t, o + n + i); }), (t.Gain.prototype.dispose = function () { var t = e.soundArray.indexOf(this); e.soundArray.splice(t, 1), this.output && (this.output.disconnect(), delete this.output), this.input && (this.input.disconnect(), delete this.input); }); })(n); var ut; ut = (function () { var e = n; return ( (t.AudioVoice = function () { (this.ac = e.audiocontext), (this.output = this.ac.createGain()), this.connect(), e.soundArray.push(this); }), (t.AudioVoice.prototype.play = function (t, e, i, n) {}), (t.AudioVoice.prototype.triggerAttack = function (t, e, i) {}), (t.AudioVoice.prototype.triggerRelease = function (t) {}), (t.AudioVoice.prototype.amp = function (t, e) {}), (t.AudioVoice.prototype.connect = function (t) { var i = t || e.input; this.output.connect(i.input ? i.input : i); }), (t.AudioVoice.prototype.disconnect = function () { this.output.disconnect(); }), (t.AudioVoice.prototype.dispose = function () { this.output && (this.output.disconnect(), delete this.output); }), t.AudioVoice ); })(n); var ct; ct = (function () { var e = n, i = ut, r = o.noteToFreq, s = 0.15; (t.MonoSynth = function () { i.call(this), (this.oscillator = new t.Oscillator()), (this.env = new t.Envelope()), this.env.setRange(1, 0), this.env.setExp(!0), this.setADSR(0.02, 0.25, 0.05, 0.35), (this.filter = new t.Filter('highpass')), this.filter.set(5, 1), this.oscillator.disconnect(), this.oscillator.connect(this.filter), this.env.disconnect(), this.env.setInput(this.oscillator), this.filter.connect(this.output), this.oscillator.start(), this.connect(), (this._isOn = !1), e.soundArray.push(this); }), (t.MonoSynth.prototype = Object.create(t.AudioVoice.prototype)), (t.MonoSynth.prototype.play = function (t, e, i, n) { this.triggerAttack(t, e, ~~i), this.triggerRelease(~~i + (n || s)); }), (t.MonoSynth.prototype.triggerAttack = function (t, e, i) { var i = ~~i, n = r(t), o = e || 0.1; (this._isOn = !0), this.oscillator.freq(n, 0, i), this.env.ramp(this.output, i, o); }), (t.MonoSynth.prototype.triggerRelease = function (t) { var t = t || 0; this.env.ramp(this.output, t, 0), (this._isOn = !1); }), (t.MonoSynth.prototype.setADSR = function (t, e, i, n) { this.env.setADSR(t, e, i, n); }), Object.defineProperties(t.MonoSynth.prototype, { attack: { get: function () { return this.env.aTime; }, set: function (t) { this.env.setADSR( t, this.env.dTime, this.env.sPercent, this.env.rTime, ); }, }, decay: { get: function () { return this.env.dTime; }, set: function (t) { this.env.setADSR( this.env.aTime, t, this.env.sPercent, this.env.rTime, ); }, }, sustain: { get: function () { return this.env.sPercent; }, set: function (t) { this.env.setADSR( this.env.aTime, this.env.dTime, t, this.env.rTime, ); }, }, release: { get: function () { return this.env.rTime; }, set: function (t) { this.env.setADSR( this.env.aTime, this.env.dTime, this.env.sPercent, t, ); }, }, }), (t.MonoSynth.prototype.amp = function (t, e) { var i = e || 0; return ( 'undefined' != typeof t && this.oscillator.amp(t, i), this.oscillator.amp().value ); }), (t.MonoSynth.prototype.connect = function (t) { var i = t || e.input; this.output.connect(i.input ? i.input : i); }), (t.MonoSynth.prototype.disconnect = function () { this.output && this.output.disconnect(); }), (t.MonoSynth.prototype.dispose = function () { i.prototype.dispose.apply(this), this.filter && this.filter.dispose(), this.env && this.env.dispose(), this.oscillator && this.oscillator.dispose(); }); })(n, ut, o); var pt; pt = (function () { var e = n, i = F, r = o.noteToFreq; (t.PolySynth = function (n, o) { (this.audiovoices = []), (this.notes = {}), (this._newest = 0), (this._oldest = 0), (this.maxVoices = o || 8), (this.AudioVoice = void 0 === n ? t.MonoSynth : n), (this._voicesInUse = new i(0)), (this.output = e.audiocontext.createGain()), this.connect(), this._allocateVoices(), e.soundArray.push(this); }), (t.PolySynth.prototype._allocateVoices = function () { for (var t = 0; t < this.maxVoices; t++) this.audiovoices.push(new this.AudioVoice()), this.audiovoices[t].disconnect(), this.audiovoices[t].connect(this.output); }), (t.PolySynth.prototype.play = function (t, e, i, n) { var n = n || 1; this.noteAttack(t, e, i), this.noteRelease(t, i + n); }), (t.PolySynth.prototype.noteADSR = function (t, i, n, o, r, s) { var a = e.audiocontext.currentTime, s = s || 0, u = a + s; this.audiovoices[this.notes[t].getValueAtTime(u)].setADSR( i, n, o, r, ); }), (t.PolySynth.prototype.setADSR = function (t, e, i, n) { this.audiovoices.forEach(function (o) { o.setADSR(t, e, i, n); }); }), (t.PolySynth.prototype.noteAttack = function (n, o, s) { var a, s = ~~s, u = e.audiocontext.currentTime + s, c = r(n), p = o || 0.1; if ( (this.notes[c] && null !== this.notes[c].getValueAtTime(u) && this.noteRelease(c, 0), this._voicesInUse.getValueAtTime(u) < this.maxVoices) ) a = Math.max(~~this._voicesInUse.getValueAtTime(u), 0); else { a = this._oldest; var h = t.prototype.freqToMidi( this.audiovoices[this._oldest].oscillator.freq().value, ); this.noteRelease(h), (this._oldest = (this._oldest + 1) % (this.maxVoices - 1)); } (this.notes[c] = new i()), this.notes[c].setValueAtTime(a, u); var l = null === this._voicesInUse._searchBefore(u) ? 0 : this._voicesInUse._searchBefore(u).value; if ( (this._voicesInUse.setValueAtTime(l + 1, u), this._updateAfter(u, 1), (this._newest = a), 'number' == typeof p) ) { var f = (1 / this._voicesInUse.getValueAtTime(u)) * 2; p = p > f ? f : p; } this.audiovoices[a].triggerAttack(c, p, s); }), (t.PolySynth.prototype._updateAfter = function (t, e) { if (null !== this._voicesInUse._searchAfter(t)) { this._voicesInUse._searchAfter(t).value += e; var i = this._voicesInUse._searchAfter(t).time; this._updateAfter(i, e); } }), (t.PolySynth.prototype.noteRelease = function (t, i) { var n = e.audiocontext.currentTime, o = i || 0, s = n + o; if (t) { var a = r(t); if ( this.notes[a] && null !== this.notes[a].getValueAtTime(s) ) { var u = Math.max( ~~this._voicesInUse.getValueAtTime(s).value, 1, ); this._voicesInUse.setValueAtTime(u - 1, s), u > 0 && this._updateAfter(s, -1), this.audiovoices[ this.notes[a].getValueAtTime(s) ].triggerRelease(o), this.notes[a].dispose(), delete this.notes[a], (this._newest = 0 === this._newest ? 0 : (this._newest - 1) % (this.maxVoices - 1)); } else console.warn( 'Cannot release a note that is not already playing', ); } else { this.audiovoices.forEach(function (t) { t.triggerRelease(o); }), this._voicesInUse.setValueAtTime(0, s); for (var c in this.notes) this.notes[c].dispose(), delete this.notes[c]; } }), (t.PolySynth.prototype.connect = function (t) { var i = t || e.input; this.output.connect(i.input ? i.input : i); }), (t.PolySynth.prototype.disconnect = function () { this.output && this.output.disconnect(); }), (t.PolySynth.prototype.dispose = function () { this.audiovoices.forEach(function (t) { t.dispose(); }), this.output && (this.output.disconnect(), delete this.output); }); })(n, F, o); var ht; ht = (function () { function e(t) { for ( var e, i = 'number' == typeof t ? t : 50, n = 44100, o = new Float32Array(n), r = Math.PI / 180, s = 0; n > s; ++s ) (e = (2 * s) / n - 1), (o[s] = ((3 + i) * e * 20 * r) / (Math.PI + i * Math.abs(e))); return o; } var i = X; (t.Distortion = function (n, o) { if ( (i.call(this), 'undefined' == typeof n && (n = 0.25), 'number' != typeof n) ) throw new Error('amount must be a number'); if (('undefined' == typeof o && (o = '2x'), 'string' != typeof o)) throw new Error('oversample must be a String'); var r = t.prototype.map(n, 0, 1, 0, 2e3); (this.waveShaperNode = this.ac.createWaveShaper()), (this.amount = r), (this.waveShaperNode.curve = e(r)), (this.waveShaperNode.oversample = o), this.input.connect(this.waveShaperNode), this.waveShaperNode.connect(this.wet); }), (t.Distortion.prototype = Object.create(i.prototype)), (t.Distortion.prototype.process = function (t, e, i) { t.connect(this.input), this.set(e, i); }), (t.Distortion.prototype.set = function (i, n) { if (i) { var o = t.prototype.map(i, 0, 1, 0, 2e3); (this.amount = o), (this.waveShaperNode.curve = e(o)); } n && (this.waveShaperNode.oversample = n); }), (t.Distortion.prototype.getAmount = function () { return this.amount; }), (t.Distortion.prototype.getOversample = function () { return this.waveShaperNode.oversample; }), (t.Distortion.prototype.dispose = function () { i.prototype.dispose.apply(this), this.waveShaperNode && (this.waveShaperNode.disconnect(), (this.waveShaperNode = null)); }); })(X); var lt; lt = (function () { var t = n; return t; })( e, i, n, o, r, s, a, u, c, P, k, q, M, V, E, Y, W, Q, H, $, J, et, it, nt, ot, rt, st, at, ct, pt, ht, ut, ct, pt, ); });