{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///../node_modules/tone/Tone/core/Tone.js","webpack:///../node_modules/tone/Tone/signal/Multiply.js","webpack:///../node_modules/tone/Tone/signal/Signal.js","webpack:///./audiocontext.js","webpack:///../node_modules/tone/Tone/signal/Add.js","webpack:///./audioWorklet/processorNames.js","webpack:///../node_modules/tone/Tone/signal/WaveShaper.js","webpack:///../node_modules/tone/Tone/signal/TimelineSignal.js","webpack:///../node_modules/tone/Tone/signal/Scale.js","webpack:///../node_modules/tone/Tone/type/Type.js","webpack:///../node_modules/tone/Tone/core/Gain.js","webpack:///../node_modules/tone/Tone/core/Clock.js","webpack:///../node_modules/tone/Tone/core/Context.js","webpack:///../node_modules/tone/Tone/signal/Subtract.js","webpack:///../node_modules/tone/Tone/core/Emitter.js","webpack:///../node_modules/tone/Tone/signal/SignalBase.js","webpack:///../node_modules/tone/Tone/type/Time.js","webpack:///../node_modules/tone/Tone/type/TimeBase.js","webpack:///../node_modules/tone/Tone/core/Param.js","webpack:///../node_modules/tone/Tone/core/Timeline.js","webpack:///../node_modules/tone/Tone/signal/Negate.js","webpack:///../node_modules/tone/Tone/signal/GreaterThanZero.js","webpack:///../node_modules/startaudiocontext/StartAudioContext.js","webpack:///../node_modules/tone/Tone/component/CrossFade.js","webpack:///../node_modules/audioworklet-polyfill/dist/audioworklet-polyfill.js","webpack:///./shims.js","webpack:///../node_modules/webpack/buildin/global.js","webpack:///./audioWorklet/recorderProcessor.js","webpack:///./audioWorklet/soundFileProcessor.js","webpack:///./audioWorklet/amplitudeProcessor.js","webpack:///../node_modules/tone/Tone/type/Frequency.js","webpack:///../node_modules/tone/Tone/type/TransportTime.js","webpack:///../node_modules/tone/Tone/signal/Expr.js","webpack:///../node_modules/tone/Tone/signal/GreaterThan.js","webpack:///../node_modules/tone/Tone/signal/Abs.js","webpack:///../node_modules/tone/Tone/signal/Modulo.js","webpack:///../node_modules/tone/Tone/signal/Pow.js","webpack:///../node_modules/tone/Tone/signal/AudioToGain.js","webpack:///../node_modules/tone/Tone/signal/EqualPowerGain.js","webpack:///../node_modules/tone/Tone/core/TimelineState.js","webpack:///./main.js","webpack:///./helpers.js","webpack:///./errorHandler.js","webpack:///./audioWorklet/index.js","webpack:///./panner.js","webpack:///./soundfile.js","webpack:///./amplitude.js","webpack:///./fft.js","webpack:///./oscillator.js","webpack:///./envelope.js","webpack:///./noise.js","webpack:///./pulse.js","webpack:///./audioin.js","webpack:///./effect.js","webpack:///./filter.js","webpack:///./eqFilter.js","webpack:///./eq.js","webpack:///./listener3d.js","webpack:///./panner3d.js","webpack:///./delay.js","webpack:///./reverb.js","webpack:///./metro.js","webpack:///./looper.js","webpack:///./soundLoop.js","webpack:///./compressor.js","webpack:///./peakDetect.js","webpack:///./soundRecorder.js","webpack:///./distortion.js","webpack:///./gain.js","webpack:///./audioVoice.js","webpack:///./monosynth.js","webpack:///./onsetDetect.js","webpack:///./polysynth.js","webpack:///./deprecations/Signal.js","webpack:///./app.js"],"names":["installedModules","__webpack_require__","moduleId","exports","module","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","prototype","hasOwnProperty","p","s","define","Tone","inputs","outputs","this","isUndef","input","context","createGain","Array","output","audioContext","set","params","rampTime","isObject","isString","tmpObj","paramLoop","attr","parent","indexOf","attrSplit","split","length","splice","innerParam","join","param","Signal","Param","rampTo","AudioParam","_collectDefaults","constructor","ret","subRet","j","subAttr","isFunction","constr","defaults","keys","_super","superDefs","push","toString","className","isLetter","match","sameConstructor","isArray","dispose","AudioNode","disconnect","connect","unit","outputNum","inputNum","defaultArg","destination","isNumber","apply","arguments","connectSeries","currentUnit","toUnit","chain","fan","given","fallback","givenProp","fallbackProp","optionsObject","values","options","val","arg","isBoolean","noOp","_readOnly","writable","_writable","State","Started","Stopped","Paused","equalPowerScale","percent","piFactor","Math","PI","sin","dbToGain","db","pow","gainToDb","gain","log","LN10","intervalToFrequencyRatio","interval","now","extend","child","TempConstructor","Context","emit","setContext","ctx","sampleRate","hasAudioContext","window","hasPromises","hasWorkers","version","TONE_SILENCE_VERSION_LOGGING","Multiply","__WEBPACK_AMD_DEFINE_RESULT__","createInsOuts","_mult","Gain","_param","_gain","getConstant","units","Type","Default","convert","SignalBase","global","audiocontext","AudioContext","getAudioContext","userStartAudio","elements","callback","elt","p5","Element","map","e","StartAudioContext","Add","_sum","recorderProcessor","soundFileProcessor","amplitudeProcessor","WaveShaper","mapping","bufferLen","_shaper","createWaveShaper","_curve","curve","isFinite","Float32Array","setMap","len","normalized","oversample","oversampling","RangeError","TimelineSignal","_events","Timeline","_initial","_fromUnits","Linear","Exponential","Target","Curve","Set","getValueAtTime","_toUnits","convertedVal","cancelScheduledValues","setValueAtTime","startTime","toSeconds","add","type","time","linearRampToValueAtTime","endTime","exponentialRampToValueAtTime","beforeEvent","_searchBefore","_minOutput","setValue","max","sampleTime","setTargetAtTime","timeConstant","constant","setValueCurveAtTime","duration","scaling","floats","segmentTime","after","cancel","setRampPoint","before","_searchAfter","linearRampToValueBetween","start","finish","exponentialRampToValueBetween","getAfter","previouVal","previous","getBefore","_exponentialApproach","_curveInterpolate","_linearInterpolate","_exponentialInterpolate","t0","v0","v1","exp","t1","progress","lowerIndex","floor","upperIndex","ceil","lowerVal","upperVal","Scale","outputMin","outputMax","_outputMin","_outputMax","_scale","_add","_setRange","min","Time","Frequency","TransportTime","Ticks","NormalRange","AudioRange","Decibels","Interval","BPM","Positive","Cents","Degrees","MIDI","BarsBeatsSixteenths","Samples","Hertz","Note","Milliseconds","Seconds","Notation","TimeBase","toFrequency","freq","valueOf","toTicks","Transport","ticks","GainNode","createGainNode","_gainNode","Clock","Emitter","_nextTick","_lastState","frequency","_state","TimelineState","_boundLoop","_loop","on","lookAhead","offset","state","stop","setStateAtTime","pause","loopInterval","updateInterval","lag","currentState","event","tickTime","getStateAtTime","off","Infinity","toneConnect","B","outNum","inNum","nativeConnect","Error","nativeDisconnect","webkitAudioContext","prop","_context","_defineProperty","_latencyHint","_lookAhead","_updateInterval","_computedUpdateInterval","_worker","_createWorker","_constants","mixin","currentTime","URL","webkitURL","blob","Blob","toFixed","blobUrl","createObjectURL","worker","Worker","addEventListener","_lastUpdate","diff","buffer","createBuffer","arr","getChannelData","createBufferSource","channelCount","channelCountMode","loop","lA","blockTime","postMessage","hint","latencyHint","supported","Subtract","_neg","Negate","events","eventName","ev","eventList","args","slice","functions","func","emitterFunc","node","outputNumber","inputNumber","overridden","_plusNow","_unaryExpressions","quantize","regexp","method","rh","nextSubdivision","lh","subdiv","_expr","expr","subdivision","round","addNow","_defaultExpr","_noOp","copy","toNotation","retNotation","_toNotationHelper","retTripletNotation","testNotations","threshold","_notationToUnits","notationTime","multiple","notation","primaryExprs","_primaryExpressions","notationExprs","toBarsBeatsSixteenths","quarterTime","_beatsToUnits","quarters","measures","_timeSignature","sixteenths","parseFloat","PPQ","toSamples","toMilliseconds","_defaultUnits","exprString","_parseExprString","clone","instance","parseInt","_ticksToUnits","hz","_frequencyToUnits","tr","q","total","_secondsToUnits","samples","default","_binaryExpressions","+","precedence","-","*","/","neg","_syntaxGlue","(",")","_tokenize","position","tokens","token","getNextToken","trim","substr","expressions","group","opName","op","reg","SyntaxError","next","peek","_matchGroup","prec","test","_parseBinary","lexer","_parseUnary","_parsePrimary","matching","beats","bpm","seconds","timeSignature","_pushExpr","sub","mult","div","_lfo","lfo","LFO","currentVal","exponentialRampToValue","linearRampToValue","_timeline","_toRemove","_iterating","memory","index","_search","remove","shift","cancelBefore","beginning","end","midPoint","nextEvent","_iterate","lowerBound","upperBound","forEach","forEachBefore","forEachAfter","forEachFrom","forEachAtTime","_multiply","GreaterThanZero","_thresh","factory","__WEBPACK_AMD_DEFINE_FACTORY__","TapListener","element","_dragged","_element","_bindedMove","_moved","_bindedEnd","_ended","isStarted","source","resume","removeEventListener","promise","Promise","success","checkLoop","requestAnimationFrame","tapListeners","bindTapListener","NodeList","document","querySelectorAll","jquery","toArray","tap","body","then","CrossFade","initialFade","a","b","fade","_equalPowerA","EqualPowerGain","_equalPowerB","_invert","Expr","parameters","bufferSize","fill","processor","realm","exec","inputBuffer","outputBuffer","process","numberOfChannels","$$processors","$$context","AudioWorkletNode","self","createScriptProcessor","outputChannelCount","Map","properties","u","defaultValue","MessageChannel","port2","f","Processor","port","port1","onaudioprocess","$$audioWorklet","AudioWorklet","addModule","fetch","ok","status","text","AudioWorkletProcessor","registerProcessor","parameterDescriptors","createElement","style","cssText","appendChild","contentWindow","createTextNode","$hook","console","documentElement","transpile","String","fixSetTarget","setTargetValueAtTime","createDelay","createDelayNode","createJavaScriptNode","createPeriodicWave","createWaveTable","internal_createGain","internal_createDelay","maxDelayTime","delayTime","internal_createBufferSource","internal_start","when","noteGrainOn","noteOn","internal_stop","noteOff","playbackRate","internal_createDynamicsCompressor","createDynamicsCompressor","knee","ratio","reduction","attack","release","internal_createBiquadFilter","createBiquadFilter","detune","Q","createOscillator","internal_createOscillator","setPeriodicWave","setWaveTable","OfflineAudioContext","webkitOfflineAudioContext","navigator","getUserMedia","webkitGetUserMedia","mozGetUserMedia","msGetUserMedia","el","isSupported","canPlayType","isFileSupported","extension","toLowerCase","g","Function","__webpack_exports__","midi","midiToFrequency","note","pitch","octave","noteNumber","noteToScaleIndex","transpose","harmonize","intervals","toMidi","frequencyToMidi","toNote","A4","LN2","scaleIndexToNote","cbb","cb","c#","cx","dbb","d#","dx","ebb","eb","e#","ex","fbb","fb","f#","fx","gbb","gb","g#","gx","abb","ab","a#","ax","bbb","bb","b#","bx","_secondsToTicks","applyBinary","Constructor","_eval","applyUnary","getNumber","literalNumber","_replacements","inputCount","_parseInputs","_nodes","result","tree","_parseTree","_disposeNodes","_Expressions","signal","glue",",","abs","Abs","mod","modulus","Modulo","Pow","a2g","AudioToGain","binary","unary","!","NOT","inputArray","inputMax","replace","matchSyntax","syn","matchGroup","groupName","parseExpression","parseUnary","operator","parsePrimary","GreaterThan","_gtz","_abs","_subtract","_modSignal","_setWaveShaper","_exp","_expScaler","_expFunc","_norm","x","_eqPower","initial","p5sound","Main","_classCallCheck","limiter","meter","fftMeter","soundArray","parts","extensions","getOutputVolume","outputVolume","vol","undefined","tFromNow","currentVol","soundOut","_silentNode","freqToMidi","mathlog2","midiToFreq","noteToFreq","A","C","D","E","F","G","toUpperCase","convertToWav","audioBuffer","leftChannel","interleaved","interleave","ArrayBuffer","view","DataView","writeUTFBytes","setUint32","setUint16","lng","setInt16","rightChannel","inputIndex","string","setUint8","charCodeAt","safeBufferSize","idealBufferSize","tempAudioWorkletNode","processorNames","ScriptProcessorNode","CustomError","errorTrace","failedPath","tempStack","splitStack","err","originalStack","stack","filter","ln","moduleSources","require","ac","initializedAudioWorklets","registerMethod","preload","_incrementPreload","onWorkletModulesLoad","_decrementPreload","all","moduleSrc","objectURL","audioWorklet","panner","createStereoPanner","Panner","panner_classCallCheck","stereoPanner","_createClass","pan","obj","_Panner","numInputChannels","left","right","channelInterpretation","splitter","createChannelSplitter","createChannelMerger","v","rightVal","cos","leftVal","numChannels","Cue","id","soundfile_classCallCheck","SoundFile","paths","onload","onerror","whileLoading","path","_checkFileFormats","url","soundfile_typeof","File","FileReader","FileList","file","_onended","_looping","_playing","_paused","_pauseTime","_cues","_cueIDCounter","_lastPos","_counterNode","_workletNode","bufferSourceNodes","bufferSourceNode","reversed","pauseTime","startMillis","panPosition","load","_whileLoading","_clearOnEnd","thisBufferSourceNode","target","soundFile","_","reverse","amp","setVolume","errorCallback","request","XMLHttpRequest","evt","_updateProgress","open","responseType","decodeAudioData","response","buff","inputChannels","msg","statusText","message","send","reader","readAsArrayBuffer","lengthComputable","percentComplete","loaded","rate","_cueStart","cueStart","cueEnd","isPlaying","_initSourceNode","_initCounterNode","_arrayIndex","loopStart","loopEnd","str","pTime","play","bool","timeFromNow","stopAll","_time","pval","reverseBuffer","num","newPlaybackRate","_rampTime","_tFromNow","cueTime","cTime","dur","width","sampleSize","sampleStep","channels","peaks","chan","currentPos","curVol","getVolume","jump","buf","size","newBuffer","channelNum","_this","cNode","workletBufferSize","processorOptions","onmessage","data","_onTimeUpdate","audioBuf","arrayBuffer","_createCounterBuffer","_initThreshold","_minThreshold","_minPeaks","cue","cueLength","playbackTime","callbackTime","_prevUpdateTime","fileName","saveSound","dataView","Amplitude","smoothing","amplitude_classCallCheck","parameterData","normalize","volume","volNorm","stereoVol","stereoVolNorm","channel","FFT","bins","fft_classCallCheck","analyser","createAnalyser","defineProperties","fftSize","configurable","smoothingTimeConstant","smooth","freqDomain","Uint8Array","frequencyBinCount","timeDomain","bass","lowMid","mid","highMid","treble","normalArray","_isSafari","fft","timeToFloat","getFloatTimeDomainData","timeToInt","getByteTimeDomainData","scaled","freqToFloat","getFloatFrequencyData","freqToInt","getByteFrequencyData","frequency1","frequency2","nyquist","swap","lowIndex","highIndex","numFrequencies","freq1","freq2","getEnergy","cumulative_sum","centroid_normalization","mean_freq_index","_N","N","spectrum","spectrumLength","spectrumStep","linearAverages","groupIndex","specIndex","octaveBands","logAverages","octaveIndex","hi","_fCtr0","fCtr0","lastFrequencyBand","lo","ctr","newFrequencyBand","sigChain","mathObj","thisChain","nextChain","chainSource","oscillator","mathOps","Oscillator","oscillator_classCallCheck","started","phaseAmount","_freqMods","connection","freqNode","isNaN","phase","oscMods","osc2","delayAmt","dNode","Mult","inMin","inMax","outMin","outMax","mapOutMin","mapOutMax","scale","SinOsc","_possibleConstructorReturn","_getPrototypeOf","TriOsc","SawOsc","SqrOsc","Envelope","l1","t2","l2","t3","l3","aTime","aLevel","dTime","dLevel","rTime","rLevel","_rampHighPercentage","_rampLowPercentage","control","_init","isExponential","sourceToClear","wasTriggered","_setRampAD","setADSR","sPercent","setRange","_rampAttackTime","checkExpInput","_rampDecayTime","TCDenominator","_rampAttackTC","_rampDecayTC","setRampPercentages","p1","p2","setInput","setExp","isExp","secondsFromNow","susTime","triggerAttack","triggerRelease","lastAttack","valToSet","ramp","v2","destination1","destination2","AudioIn","Reverb","Noise","Filter","Delay","_mathChain","Env","_whiteNoiseBuffer","whiteBuffer","noiseData","random","_pinkNoiseBuffer","b0","b1","b2","b3","b4","b5","b6","pinkBuffer","white","_brownNoiseBuffer","brownBuffer","lastOut","assignType","noise_classCallCheck","noise_possibleConstructorReturn","noise_getPrototypeOf","noise","createDCOffset","bufferSource","Pulse","w","pulse_classCallCheck","pulse_possibleConstructorReturn","pulse_getPrototypeOf","dcOffset","dcGain","mW","sig","mult1","mult2","mods","currentFreq","freqMod","inputSources","audioin_classCallCheck","stream","mediaStream","currentSource","enabled","amplitude","MediaStreamTrack","mediaDevices","alert","successCallback","audioSource","constraints","audio","echoCancellation","deviceId","createMediaStreamSource","getTracks","track","getLevel","onSuccess","onError","resolve","reject","enumerateDevices","devices","device","kind","error","active","Effect","effect_classCallCheck","_drywet","wet","filter_classCallCheck","filter_possibleConstructorReturn","filter_getPrototypeOf","biquad","setType","_on","_untoggledType","src","res","_get","LowPass","HighPass","BandPass","EQFilter","eqFilter_classCallCheck","eqFilter_possibleConstructorReturn","eqFilter_getPrototypeOf","EQ","_eqsize","factor","eq_classCallCheck","eq_possibleConstructorReturn","eq_getPrototypeOf","bands","_newBand","eq_get","pop","Listener3D","listener3d_classCallCheck","listener","xVal","yVal","zVal","positionX","positionY","positionZ","xValF","yValF","zValF","xValU","yValU","zValU","orientForward","orientUp","forwardX","forwardY","forwardZ","upX","upY","upZ","Panner3D","panner3d_classCallCheck","panner3d_possibleConstructorReturn","panner3d_getPrototypeOf","createPanner","panningModel","distanceModel","orientX","orientY","orientZ","orientationX","orientationY","orientationZ","maxDistance","rolloffFactor","maxDist","rolloff","panner3d_get","delay_classCallCheck","delay_possibleConstructorReturn","delay_getPrototypeOf","_split","_merge","_leftGain","_rightGain","leftDelay","rightDelay","_leftFilter","_rightFilter","_maxDelay","maxValue","feedback","_delayTime","_feedback","_filter","delay_get","reverb_classCallCheck","reverb_possibleConstructorReturn","reverb_getPrototypeOf","_initConvolverNode","_seconds","_decay","_reverse","_buildImpulse","convolverNode","createConvolver","_teardownConvolverNode","decayRate","rebuild","decay","impulse","impulseL","impulseR","_setBuffer","reverb_get","Convolver","_this2","impulses","_loadBuffer","_path","chunks","location","origin","cordova","Metro","metro_classCallCheck","clock","ontick","syncedParts","prevTick","tatumTime","tickCallback","elapsedTime","thisPart","incrementStep","phrases","thisPhrase","phraseArray","sequence","bNum","metroTicks","looping","beatTime","tatums","getRate","part","setBPM","Phrase","looper_classCallCheck","phraseStep","Part","steps","bLength","partStep","noLoop","metro","beatLength","tempo","getBPM","resetSync","onended","array","Score","currentPart","thisScore","nextPart","resetPart","playNextPart","resetParts","scoreStep","aScore","SoundLoop","soundLoop_classCallCheck","_bpm","musicalTimeMode","_update","timeSig","_interval","maxIterations","iterations","_calcFreq","otherLoop","_convertNotation","Number","_measure","_note","Compressor","compressor_classCallCheck","compressor_possibleConstructorReturn","compressor_getPrototypeOf","compressor","number","compressor_get","PeakDetect","_framesPerPeak","peakDetect_classCallCheck","framesPerPeak","framesSinceLastPeak","cutoff","cutoffMult","energy","penergy","currentValue","isDetected","f1","f2","_onPeak","fftObject","nrg","SoundRecorder","soundRecorder_classCallCheck","_inputChannels","_outputChannels","buffers","leftBuffer","rightBuffer","_callback","sFile","setBuffer","makeDistortionCurve","amount","k","deg","Distortion","distortion_classCallCheck","distortion_possibleConstructorReturn","distortion_getPrototypeOf","curveAmount","waveShaperNode","distortion_get","gain_classCallCheck","AudioVoice","audioVoice_classCallCheck","velocity","sustime","MonoSynth","monosynth_classCallCheck","monosynth_possibleConstructorReturn","monosynth_getPrototypeOf","env","monosynth_assertThisInitialized","sustain","vel","monosynth_get","OnsetDetect","freqLow","freqHigh","onsetDetect_classCallCheck","treshold","sensitivity","setTimeout","PolySynth","audioVoice","maxVoices","polysynth_classCallCheck","audiovoices","notes","_newest","_oldest","_voicesInUse","_allocateVoices","noteAttack","noteRelease","voice","_velocity","currentVoice","acTime","oldestNote","previousVal","_updateAfter","maxRange","nextTime","Signal_classCallCheck","soundFormats","disposeSound","extTest","pathSplit","pathCore","_typeof","math","writeFile","loadSound","registerPreloadMethod","listener3D","cReverb","peakDetect"],"mappings":"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","file":"p5.sound.min.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 40);\n","/**\n * Tone.js\n * @author Yotam Mann\n * @license http://opensource.org/licenses/MIT MIT License\n * @copyright 2014-2017 Yotam Mann\n */\ndefine(function(){\n\n\t\"use strict\";\n\n\t///////////////////////////////////////////////////////////////////////////\n\t//\tTONE\n\t///////////////////////////////////////////////////////////////////////////\n\n\t/**\n\t * @class Tone is the base class of all other classes. It provides \n\t * a lot of methods and functionality to all classes that extend\n\t * it. \n\t * \n\t * @constructor\n\t * @alias Tone\n\t * @param {number} [inputs=1] the number of input nodes\n\t * @param {number} [outputs=1] the number of output nodes\n\t */\n\tvar Tone = function(inputs, outputs){\n\n\t\t/**\n\t\t * the input node(s)\n\t\t * @type {GainNode|Array}\n\t\t */\n\t\tif (this.isUndef(inputs) || inputs === 1){\n\t\t\tthis.input = this.context.createGain();\n\t\t} else if (inputs > 1){\n\t\t\tthis.input = new Array(inputs);\n\t\t}\n\n\t\t/**\n\t\t * the output node(s)\n\t\t * @type {GainNode|Array}\n\t\t */\n\t\tif (this.isUndef(outputs) || outputs === 1){\n\t\t\tthis.output = this.context.createGain();\n\t\t} else if (outputs > 1){\n\t\t\tthis.output = new Array(inputs);\n\t\t}\n\t};\n\n\t/**\n\t * Set the parameters at once. Either pass in an\n\t * object mapping parameters to values, or to set a\n\t * single parameter, by passing in a string and value.\n\t * The last argument is an optional ramp time which \n\t * will ramp any signal values to their destination value\n\t * over the duration of the rampTime.\n\t * @param {Object|string} params\n\t * @param {number=} value\n\t * @param {Time=} rampTime\n\t * @returns {Tone} this\n\t * @example\n\t * //set values using an object\n\t * filter.set({\n\t * \t\"frequency\" : 300,\n\t * \t\"type\" : highpass\n\t * });\n\t * @example\n\t * filter.set(\"type\", \"highpass\");\n\t * @example\n\t * //ramp to the value 220 over 3 seconds. \n\t * oscillator.set({\n\t * \t\"frequency\" : 220\n\t * }, 3);\n\t */\n\tTone.prototype.set = function(params, value, rampTime){\n\t\tif (this.isObject(params)){\n\t\t\trampTime = value;\n\t\t} else if (this.isString(params)){\n\t\t\tvar tmpObj = {};\n\t\t\ttmpObj[params] = value;\n\t\t\tparams = tmpObj;\n\t\t}\n\n\t\tparamLoop:\n\t\tfor (var attr in params){\n\t\t\tvalue = params[attr];\n\t\t\tvar parent = this;\n\t\t\tif (attr.indexOf(\".\") !== -1){\n\t\t\t\tvar attrSplit = attr.split(\".\");\n\t\t\t\tfor (var i = 0; i < attrSplit.length - 1; i++){\n\t\t\t\t\tparent = parent[attrSplit[i]];\n\t\t\t\t\tif (parent instanceof Tone) {\n\t\t\t\t\t\tattrSplit.splice(0,i+1);\n\t\t\t\t\t\tvar innerParam = attrSplit.join(\".\");\n\t\t\t\t\t\tparent.set(innerParam, value);\n\t\t\t\t\t\tcontinue paramLoop;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tattr = attrSplit[attrSplit.length - 1];\n\t\t\t}\n\t\t\tvar param = parent[attr];\n\t\t\tif (this.isUndef(param)){\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif ((Tone.Signal && param instanceof Tone.Signal) || \n\t\t\t\t\t(Tone.Param && param instanceof Tone.Param)){\n\t\t\t\tif (param.value !== value){\n\t\t\t\t\tif (this.isUndef(rampTime)){\n\t\t\t\t\t\tparam.value = value;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tparam.rampTo(value, rampTime);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else if (param instanceof AudioParam){\n\t\t\t\tif (param.value !== value){\n\t\t\t\t\tparam.value = value;\n\t\t\t\t}\t\t\t\t\n\t\t\t} else if (param instanceof Tone){\n\t\t\t\tparam.set(value);\n\t\t\t} else if (param !== value){\n\t\t\t\tparent[attr] = value;\n\t\t\t}\n\t\t}\n\t\treturn this;\n\t};\n\n\t/**\n\t * Get the object's attributes. Given no arguments get\n\t * will return all available object properties and their corresponding\n\t * values. Pass in a single attribute to retrieve or an array\n\t * of attributes. The attribute strings can also include a \".\"\n\t * to access deeper properties.\n\t * @example\n\t * osc.get();\n\t * //returns {\"type\" : \"sine\", \"frequency\" : 440, ...etc}\n\t * @example\n\t * osc.get(\"type\");\n\t * //returns { \"type\" : \"sine\"}\n\t * @example\n\t * //use dot notation to access deep properties\n\t * synth.get([\"envelope.attack\", \"envelope.release\"]);\n\t * //returns {\"envelope\" : {\"attack\" : 0.2, \"release\" : 0.4}}\n\t * @param {Array=|string|undefined} params the parameters to get, otherwise will return \n\t * \t\t\t\t\t all available.\n\t * @returns {Object}\n\t */\n\tTone.prototype.get = function(params){\n\t\tif (this.isUndef(params)){\n\t\t\tparams = this._collectDefaults(this.constructor);\n\t\t} else if (this.isString(params)){\n\t\t\tparams = [params];\n\t\t} \n\t\tvar ret = {};\n\t\tfor (var i = 0; i < params.length; i++){\n\t\t\tvar attr = params[i];\n\t\t\tvar parent = this;\n\t\t\tvar subRet = ret;\n\t\t\tif (attr.indexOf(\".\") !== -1){\n\t\t\t\tvar attrSplit = attr.split(\".\");\n\t\t\t\tfor (var j = 0; j < attrSplit.length - 1; j++){\n\t\t\t\t\tvar subAttr = attrSplit[j];\n\t\t\t\t\tsubRet[subAttr] = subRet[subAttr] || {};\n\t\t\t\t\tsubRet = subRet[subAttr];\n\t\t\t\t\tparent = parent[subAttr];\n\t\t\t\t}\n\t\t\t\tattr = attrSplit[attrSplit.length - 1];\n\t\t\t}\n\t\t\tvar param = parent[attr];\n\t\t\tif (this.isObject(params[attr])){\n\t\t\t\tsubRet[attr] = param.get();\n\t\t\t} else if (Tone.Signal && param instanceof Tone.Signal){\n\t\t\t\tsubRet[attr] = param.value;\n\t\t\t} else if (Tone.Param && param instanceof Tone.Param){\n\t\t\t\tsubRet[attr] = param.value;\n\t\t\t} else if (param instanceof AudioParam){\n\t\t\t\tsubRet[attr] = param.value;\n\t\t\t} else if (param instanceof Tone){\n\t\t\t\tsubRet[attr] = param.get();\n\t\t\t} else if (!this.isFunction(param) && !this.isUndef(param)){\n\t\t\t\tsubRet[attr] = param;\n\t\t\t} \n\t\t}\n\t\treturn ret;\n\t};\n\n\t/**\n\t * collect all of the default attributes in one\n\t * @private\n\t * @param {function} constr the constructor to find the defaults from\n\t * @return {Array} all of the attributes which belong to the class\n\t */\n\tTone.prototype._collectDefaults = function(constr){\n\t\tvar ret = [];\n\t\tif (!this.isUndef(constr.defaults)){\n\t\t\tret = Object.keys(constr.defaults);\n\t\t}\n\t\tif (!this.isUndef(constr._super)){\n\t\t\tvar superDefs = this._collectDefaults(constr._super);\n\t\t\t//filter out repeats\n\t\t\tfor (var i = 0; i < superDefs.length; i++){\n\t\t\t\tif (ret.indexOf(superDefs[i]) === -1){\n\t\t\t\t\tret.push(superDefs[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn ret;\n\t};\n\n\t/**\n\t * @returns {string} returns the name of the class as a string\n\t */\n\tTone.prototype.toString = function(){\n\t\tfor (var className in Tone){\n\t\t\tvar isLetter = className[0].match(/^[A-Z]$/);\n\t\t\tvar sameConstructor = Tone[className] === this.constructor;\n\t\t\tif (this.isFunction(Tone[className]) && isLetter && sameConstructor){\n\t\t\t\treturn className;\n\t\t\t}\n\t\t}\n\t\treturn \"Tone\";\n\t};\n\n\t///////////////////////////////////////////////////////////////////////////\n\t//\tCLASS VARS\n\t///////////////////////////////////////////////////////////////////////////\n\n\t/**\n\t * The number of inputs feeding into the AudioNode. \n\t * For source nodes, this will be 0.\n\t * @memberOf Tone#\n\t * @name numberOfInputs\n\t * @readOnly\n\t */\n\tObject.defineProperty(Tone.prototype, \"numberOfInputs\", {\n\t\tget : function(){\n\t\t\tif (this.input){\n\t\t\t\tif (this.isArray(this.input)){\n\t\t\t\t\treturn this.input.length;\n\t\t\t\t} else {\n\t\t\t\t\treturn 1;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn 0;\n\t\t\t}\n\t\t}\n\t});\n\n\t/**\n\t * The number of outputs coming out of the AudioNode. \n\t * For source nodes, this will be 0.\n\t * @memberOf Tone#\n\t * @name numberOfInputs\n\t * @readOnly\n\t */\n\tObject.defineProperty(Tone.prototype, \"numberOfOutputs\", {\n\t\tget : function(){\n\t\t\tif (this.output){\n\t\t\t\tif (this.isArray(this.output)){\n\t\t\t\t\treturn this.output.length;\n\t\t\t\t} else {\n\t\t\t\t\treturn 1;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn 0;\n\t\t\t}\n\t\t}\n\t});\n\t\n\t///////////////////////////////////////////////////////////////////////////\n\t//\tCONNECTIONS\n\t///////////////////////////////////////////////////////////////////////////\n\n\t/**\n\t * disconnect and dispose\n\t * @returns {Tone} this\n\t */\n\tTone.prototype.dispose = function(){\n\t\tif (!this.isUndef(this.input)){\n\t\t\tif (this.input instanceof AudioNode){\n\t\t\t\tthis.input.disconnect();\n\t\t\t} \n\t\t\tthis.input = null;\n\t\t}\n\t\tif (!this.isUndef(this.output)){\n\t\t\tif (this.output instanceof AudioNode){\n\t\t\t\tthis.output.disconnect();\n\t\t\t} \n\t\t\tthis.output = null;\n\t\t}\n\t\treturn this;\n\t};\n\n\t/**\n\t * connect the output of a ToneNode to an AudioParam, AudioNode, or ToneNode\n\t * @param {Tone | AudioParam | AudioNode} unit \n\t * @param {number} [outputNum=0] optionally which output to connect from\n\t * @param {number} [inputNum=0] optionally which input to connect to\n\t * @returns {Tone} this\n\t */\n\tTone.prototype.connect = function(unit, outputNum, inputNum){\n\t\tif (Array.isArray(this.output)){\n\t\t\toutputNum = this.defaultArg(outputNum, 0);\n\t\t\tthis.output[outputNum].connect(unit, 0, inputNum);\n\t\t} else {\n\t\t\tthis.output.connect(unit, outputNum, inputNum);\n\t\t}\n\t\treturn this;\n\t};\n\n\t/**\n\t * disconnect the output\n\t * @param {Number|AudioNode} output Either the output index to disconnect\n\t * if the output is an array, or the\n\t * node to disconnect from.\n\t * @returns {Tone} this\n\t */\n\tTone.prototype.disconnect = function(destination, outputNum, inputNum){\n\t\tif (this.isArray(this.output)){\n\t\t\tif (this.isNumber(destination)){\n\t\t\t\tthis.output[destination].disconnect();\n\t\t\t} else {\n\t\t\t\toutputNum = this.defaultArg(outputNum, 0);\n\t\t\t\tthis.output[outputNum].disconnect(destination, 0, inputNum);\n\t\t\t}\n\t\t} else {\n\t\t\tthis.output.disconnect.apply(this.output, arguments);\n\t\t}\n\t};\n\n\t/**\n\t * connect together all of the arguments in series\n\t * @param {...AudioParam|Tone|AudioNode} nodes\n\t * @returns {Tone} this\n\t */\n\tTone.prototype.connectSeries = function(){\n\t\tif (arguments.length > 1){\n\t\t\tvar currentUnit = arguments[0];\n\t\t\tfor (var i = 1; i < arguments.length; i++){\n\t\t\t\tvar toUnit = arguments[i];\n\t\t\t\tcurrentUnit.connect(toUnit);\n\t\t\t\tcurrentUnit = toUnit;\n\t\t\t}\n\t\t}\n\t\treturn this;\n\t};\n\n\t/**\n\t * Connect the output of this node to the rest of the nodes in series.\n\t * @example\n\t * //connect a node to an effect, panVol and then to the master output\n\t * node.chain(effect, panVol, Tone.Master);\n\t * @param {...AudioParam|Tone|AudioNode} nodes\n\t * @returns {Tone} this\n\t */\n\tTone.prototype.chain = function(){\n\t\tif (arguments.length > 0){\n\t\t\tvar currentUnit = this;\n\t\t\tfor (var i = 0; i < arguments.length; i++){\n\t\t\t\tvar toUnit = arguments[i];\n\t\t\t\tcurrentUnit.connect(toUnit);\n\t\t\t\tcurrentUnit = toUnit;\n\t\t\t}\n\t\t}\n\t\treturn this;\n\t};\n\n\t/**\n\t * connect the output of this node to the rest of the nodes in parallel.\n\t * @param {...AudioParam|Tone|AudioNode} nodes\n\t * @returns {Tone} this\n\t */\n\tTone.prototype.fan = function(){\n\t\tif (arguments.length > 0){\n\t\t\tfor (var i = 0; i < arguments.length; i++){\n\t\t\t\tthis.connect(arguments[i]);\n\t\t\t}\n\t\t}\n\t\treturn this;\n\t};\n\n\t//give native nodes chain and fan methods\n\tAudioNode.prototype.chain = Tone.prototype.chain;\n\tAudioNode.prototype.fan = Tone.prototype.fan;\n\n\t///////////////////////////////////////////////////////////////////////////\n\t//\tUTILITIES / HELPERS / MATHS\n\t///////////////////////////////////////////////////////////////////////////\n\n\t/**\n\t * If the `given` parameter is undefined, use the `fallback`. \n\t * If both `given` and `fallback` are object literals, it will\n\t * return a deep copy which includes all of the parameters from both \n\t * objects. If a parameter is undefined in given, it will return\n\t * the fallback property. \n\t *
\n\t * WARNING: if object is self referential, it will go into an an \n\t * infinite recursive loop.\n\t * \n\t * @param {*} given \n\t * @param {*} fallback \n\t * @return {*} \n\t */\n\tTone.prototype.defaultArg = function(given, fallback){\n\t\tif (this.isObject(given) && this.isObject(fallback)){\n\t\t\tvar ret = {};\n\t\t\t//make a deep copy of the given object\n\t\t\tfor (var givenProp in given) {\n\t\t\t\tret[givenProp] = this.defaultArg(fallback[givenProp], given[givenProp]);\n\t\t\t}\n\t\t\tfor (var fallbackProp in fallback) {\n\t\t\t\tret[fallbackProp] = this.defaultArg(given[fallbackProp], fallback[fallbackProp]);\n\t\t\t}\n\t\t\treturn ret;\n\t\t} else {\n\t\t\treturn this.isUndef(given) ? fallback : given;\n\t\t}\n\t};\n\n\t/**\n\t * returns the args as an options object with given arguments\n\t * mapped to the names provided. \n\t *\n\t * if the args given is an array containing only one object, it is assumed\n\t * that that's already the options object and will just return it. \n\t * \n\t * @param {Array} values the 'arguments' object of the function\n\t * @param {Array} keys the names of the arguments as they\n\t * should appear in the options object\n\t * @param {Object=} defaults optional defaults to mixin to the returned \n\t * options object \n\t * @return {Object} the options object with the names mapped to the arguments\n\t */\n\tTone.prototype.optionsObject = function(values, keys, defaults){\n\t\tvar options = {};\n\t\tif (values.length === 1 && this.isObject(values[0])){\n\t\t\toptions = values[0];\n\t\t} else {\n\t\t\tfor (var i = 0; i < keys.length; i++){\n\t\t\t\toptions[keys[i]] = values[i];\n\t\t\t}\n\t\t}\n\t\tif (!this.isUndef(defaults)){\n\t\t\treturn this.defaultArg(options, defaults);\n\t\t} else {\n\t\t\treturn options;\n\t\t}\n\t};\n\n\t///////////////////////////////////////////////////////////////////////////\n\t// TYPE CHECKING\n\t///////////////////////////////////////////////////////////////////////////\n\n\t/**\n\t * test if the arg is undefined\n\t * @param {*} arg the argument to test\n\t * @returns {boolean} true if the arg is undefined\n\t * @function\n\t */\n\tTone.prototype.isUndef = function(val){\n\t\treturn typeof val === \"undefined\";\n\t};\n\n\t/**\n\t * test if the arg is a function\n\t * @param {*} arg the argument to test\n\t * @returns {boolean} true if the arg is a function\n\t * @function\n\t */\n\tTone.prototype.isFunction = function(val){\n\t\treturn typeof val === \"function\";\n\t};\n\n\t/**\n\t * Test if the argument is a number.\n\t * @param {*} arg the argument to test\n\t * @returns {boolean} true if the arg is a number\n\t */\n\tTone.prototype.isNumber = function(arg){\n\t\treturn (typeof arg === \"number\");\n\t};\n\n\t/**\n\t * Test if the given argument is an object literal (i.e. `{}`);\n\t * @param {*} arg the argument to test\n\t * @returns {boolean} true if the arg is an object literal.\n\t */\n\tTone.prototype.isObject = function(arg){\n\t\treturn (Object.prototype.toString.call(arg) === \"[object Object]\" && arg.constructor === Object);\n\t};\n\n\t/**\n\t * Test if the argument is a boolean.\n\t * @param {*} arg the argument to test\n\t * @returns {boolean} true if the arg is a boolean\n\t */\n\tTone.prototype.isBoolean = function(arg){\n\t\treturn (typeof arg === \"boolean\");\n\t};\n\n\t/**\n\t * Test if the argument is an Array\n\t * @param {*} arg the argument to test\n\t * @returns {boolean} true if the arg is an array\n\t */\n\tTone.prototype.isArray = function(arg){\n\t\treturn (Array.isArray(arg));\n\t};\n\n\t/**\n\t * Test if the argument is a string.\n\t * @param {*} arg the argument to test\n\t * @returns {boolean} true if the arg is a string\n\t */\n\tTone.prototype.isString = function(arg){\n\t\treturn (typeof arg === \"string\");\n\t};\n\n \t/**\n\t * An empty function.\n\t * @static\n\t */\n\tTone.noOp = function(){};\n\n\t/**\n\t * Make the property not writable. Internal use only. \n\t * @private\n\t * @param {string} property the property to make not writable\n\t */\n\tTone.prototype._readOnly = function(property){\n\t\tif (Array.isArray(property)){\n\t\t\tfor (var i = 0; i < property.length; i++){\n\t\t\t\tthis._readOnly(property[i]);\n\t\t\t}\n\t\t} else {\n\t\t\tObject.defineProperty(this, property, { \n\t\t\t\twritable: false,\n\t\t\t\tenumerable : true,\n\t\t\t});\n\t\t}\n\t};\n\n\t/**\n\t * Make an attribute writeable. Interal use only. \n\t * @private\n\t * @param {string} property the property to make writable\n\t */\n\tTone.prototype._writable = function(property){\n\t\tif (Array.isArray(property)){\n\t\t\tfor (var i = 0; i < property.length; i++){\n\t\t\t\tthis._writable(property[i]);\n\t\t\t}\n\t\t} else {\n\t\t\tObject.defineProperty(this, property, { \n\t\t\t\twritable: true,\n\t\t\t});\n\t\t}\n\t};\n\n\t/**\n\t * Possible play states. \n\t * @enum {string}\n\t */\n\tTone.State = {\n\t\tStarted : \"started\",\n\t\tStopped : \"stopped\",\n\t\tPaused : \"paused\",\n \t};\n\n\t///////////////////////////////////////////////////////////////////////////\n\t// CONVERSIONS\n\t///////////////////////////////////////////////////////////////////////////\n\n\t/**\n\t * Equal power gain scale. Good for cross-fading.\n\t * @param {NormalRange} percent (0-1)\n\t * @return {Number} output gain (0-1)\n\t */\n\tTone.prototype.equalPowerScale = function(percent){\n\t\tvar piFactor = 0.5 * Math.PI;\n\t\treturn Math.sin(percent * piFactor);\n\t};\n\n\t/**\n\t * Convert decibels into gain.\n\t * @param {Decibels} db\n\t * @return {Number} \n\t */\n\tTone.prototype.dbToGain = function(db) {\n\t\treturn Math.pow(2, db / 6);\n\t};\n\n\t/**\n\t * Convert gain to decibels.\n\t * @param {Number} gain (0-1)\n\t * @return {Decibels} \n\t */\n\tTone.prototype.gainToDb = function(gain) {\n\t\treturn 20 * (Math.log(gain) / Math.LN10);\n\t};\n\n\t/**\n\t * Convert an interval (in semitones) to a frequency ratio.\n\t * @param {Interval} interval the number of semitones above the base note\n\t * @return {number} the frequency ratio\n\t * @example\n\t * tone.intervalToFrequencyRatio(0); // 1\n\t * tone.intervalToFrequencyRatio(12); // 2\n\t * tone.intervalToFrequencyRatio(-12); // 0.5\n\t */\n\tTone.prototype.intervalToFrequencyRatio = function(interval){\n\t\treturn Math.pow(2,(interval/12));\n\t};\n\n\t///////////////////////////////////////////////////////////////////////////\n\t//\tTIMING\n\t///////////////////////////////////////////////////////////////////////////\n\n\t/**\n\t * Return the current time of the AudioContext clock.\n\t * @return {Number} the currentTime from the AudioContext\n\t */\n\tTone.prototype.now = function(){\n\t\treturn Tone.context.now();\n\t};\n\n\t/**\n\t * Return the current time of the AudioContext clock.\n\t * @return {Number} the currentTime from the AudioContext\n\t * @static\n\t */\n\tTone.now = function(){\n\t\treturn Tone.context.now();\n\t};\n\n\t///////////////////////////////////////////////////////////////////////////\n\t//\tINHERITANCE\n\t///////////////////////////////////////////////////////////////////////////\n\n\t/**\n\t * have a child inherit all of Tone's (or a parent's) prototype\n\t * to inherit the parent's properties, make sure to call \n\t * Parent.call(this) in the child's constructor\n\t *\n\t * based on closure library's inherit function\n\t *\n\t * @static\n\t * @param {function} \tchild \n\t * @param {function=} parent (optional) parent to inherit from\n\t * if no parent is supplied, the child\n\t * will inherit from Tone\n\t */\n\tTone.extend = function(child, parent){\n\t\tif (Tone.prototype.isUndef(parent)){\n\t\t\tparent = Tone;\n\t\t}\n\t\tfunction TempConstructor(){}\n\t\tTempConstructor.prototype = parent.prototype;\n\t\tchild.prototype = new TempConstructor();\n\t\t/** @override */\n\t\tchild.prototype.constructor = child;\n\t\tchild._super = parent;\n\t};\n\n\t///////////////////////////////////////////////////////////////////////////\n\t//\tCONTEXT\n\t///////////////////////////////////////////////////////////////////////////\n\n\t/**\n\t * The private audio context shared by all Tone Nodes. \n\t * @private\n\t * @type {Tone.Context|undefined}\n\t */\n\tvar audioContext;\n\n\t/**\n\t * A static pointer to the audio context accessible as Tone.context. \n\t * @type {Tone.Context}\n\t * @name context\n\t * @memberOf Tone\n\t */\n\tObject.defineProperty(Tone, \"context\", {\n\t\tget : function(){\n\t\t\treturn audioContext;\n\t\t},\n\t\tset : function(context){\n\t\t\tif (Tone.Context && context instanceof Tone.Context){\n\t\t\t\taudioContext = context;\n\t\t\t} else {\n\t\t\t\taudioContext = new Tone.Context(context);\n\t\t\t}\n\t\t\t//initialize the new audio context\n\t\t\tif (Tone.Context){\n\t\t\t\tTone.Context.emit(\"init\", audioContext);\n\t\t\t}\n\t\t}\n\t});\n\n\t/**\n\t * The AudioContext\n\t * @type {Tone.Context}\n\t * @name context\n\t * @memberOf Tone#\n\t * @readOnly\n\t */\n\tObject.defineProperty(Tone.prototype, \"context\", {\n\t\tget : function(){\n\t\t\treturn Tone.context;\n\t\t}\n\t});\n\n\t/**\n\t * Tone automatically creates a context on init, but if you are working\n\t * with other libraries which also create an AudioContext, it can be\n\t * useful to set your own. If you are going to set your own context, \n\t * be sure to do it at the start of your code, before creating any objects.\n\t * @static\n\t * @param {AudioContext} ctx The new audio context to set\n\t */\n\tTone.setContext = function(ctx){\n\t\tTone.context = ctx;\n\t};\n\n\t/**\n\t * The number of seconds of 1 processing block (128 samples)\n\t * @type {Number}\n\t * @name blockTime\n\t * @memberOf Tone#\n\t * @readOnly\n\t */\n\tObject.defineProperty(Tone.prototype, \"blockTime\", {\n\t\tget : function(){\n\t\t\treturn 128 / this.context.sampleRate;\n\t\t}\n\t});\n\n\t/**\n\t * The duration in seconds of one sample.\n\t * @type {Number}\n\t * @name sampleTime\n\t * @memberOf Tone#\n\t * @readOnly\n\t */\n\tObject.defineProperty(Tone.prototype, \"sampleTime\", {\n\t\tget : function(){\n\t\t\treturn 1 / this.context.sampleRate;\n\t\t}\n\t});\n\n\t/**\n\t * Whether or not all the technologies that Tone.js relies on are supported by the current browser. \n\t * @type {Boolean}\n\t * @name supported\n\t * @memberOf Tone\n\t * @readOnly\n\t */\n\tObject.defineProperty(Tone, \"supported\", {\n\t\tget : function(){\n\t\t\tvar hasAudioContext = window.hasOwnProperty(\"AudioContext\") || window.hasOwnProperty(\"webkitAudioContext\");\n\t\t\tvar hasPromises = window.hasOwnProperty(\"Promise\");\n\t\t\tvar hasWorkers = window.hasOwnProperty(\"Worker\");\n\t\t\treturn hasAudioContext && hasPromises && hasWorkers;\n\t\t}\n\t});\n\n\tTone.version = \"r10\";\n\n\t// allow optional silencing of this log\n\tif (!window.TONE_SILENCE_VERSION_LOGGING) {\n\t\tconsole.log(\"%c * Tone.js \" + Tone.version + \" * \", \"background: #000; color: #fff\");\n\t}\n\n\treturn Tone;\n});\n","define([\"Tone/core/Tone\", \"Tone/signal/Signal\", \"Tone/core/Gain\"], function(Tone){\n\n\t\"use strict\";\n\n\t/**\n\t * @class Multiply two incoming signals. Or, if a number is given in the constructor, \n\t * multiplies the incoming signal by that value. \n\t *\n\t * @constructor\n\t * @extends {Tone.Signal}\n\t * @param {number=} value Constant value to multiple. If no value is provided,\n\t * it will return the product of the first and second inputs\n\t * @example\n\t * var mult = new Tone.Multiply();\n\t * var sigA = new Tone.Signal(3);\n\t * var sigB = new Tone.Signal(4);\n\t * sigA.connect(mult, 0, 0);\n\t * sigB.connect(mult, 0, 1);\n\t * //output of mult is 12.\n\t * @example\n\t * var mult = new Tone.Multiply(10);\n\t * var sig = new Tone.Signal(2).connect(mult);\n\t * //the output of mult is 20. \n\t */\n\tTone.Multiply = function(value){\n\n\t\tthis.createInsOuts(2, 0);\n\n\t\t/**\n\t\t * the input node is the same as the output node\n\t\t * it is also the GainNode which handles the scaling of incoming signal\n\t\t * \n\t\t * @type {GainNode}\n\t\t * @private\n\t\t */\n\t\tthis._mult = this.input[0] = this.output = new Tone.Gain();\n\n\t\t/**\n\t\t * the scaling parameter\n\t\t * @type {AudioParam}\n\t\t * @private\n\t\t */\n\t\tthis._param = this.input[1] = this.output.gain;\n\t\t\n\t\tthis._param.value = this.defaultArg(value, 0);\n\t};\n\n\tTone.extend(Tone.Multiply, Tone.Signal);\n\n\t/**\n\t * clean up\n\t * @returns {Tone.Multiply} this\n\t */\n\tTone.Multiply.prototype.dispose = function(){\n\t\tTone.prototype.dispose.call(this);\n\t\tthis._mult.dispose();\n\t\tthis._mult = null;\n\t\tthis._param = null;\n\t\treturn this;\n\t}; \n\n\treturn Tone.Multiply;\n});\n","define([\"Tone/core/Tone\", \"Tone/signal/WaveShaper\", \"Tone/type/Type\", \"Tone/core/Param\", \"Tone/core/Gain\"], function(Tone){\n\n\t\"use strict\";\n\n\t/**\n\t * @class A signal is an audio-rate value. Tone.Signal is a core component of the library.\n\t * Unlike a number, Signals can be scheduled with sample-level accuracy. Tone.Signal\n\t * has all of the methods available to native Web Audio \n\t * [AudioParam](http://webaudio.github.io/web-audio-api/#the-audioparam-interface)\n\t * as well as additional conveniences. Read more about working with signals \n\t * [here](https://github.com/Tonejs/Tone.js/wiki/Signals).\n\t *\n\t * @constructor\n\t * @extends {Tone.Param}\n\t * @param {Number|AudioParam} [value] Initial value of the signal. If an AudioParam\n\t * is passed in, that parameter will be wrapped\n\t * and controlled by the Signal. \n\t * @param {string} [units=Number] unit The units the signal is in. \n\t * @example\n\t * var signal = new Tone.Signal(10);\n\t */\n\tTone.Signal = function(){\n\n\t\tvar options = this.optionsObject(arguments, [\"value\", \"units\"], Tone.Signal.defaults);\n\n\t\t/**\n\t\t * The node where the constant signal value is scaled.\n\t\t * @type {GainNode}\n\t\t * @private\n\t\t */\n\t\tthis.output = this._gain = this.context.createGain();\n\n\t\toptions.param = this._gain.gain;\n\t\tTone.Param.call(this, options);\n\n\t\t/**\n\t\t * The node where the value is set.\n\t\t * @type {Tone.Param}\n\t\t * @private\n\t\t */\n\t\tthis.input = this._param = this._gain.gain;\n\n\t\t//connect the const output to the node output\n\t\tthis.context.getConstant(1).chain(this._gain);\n\t};\n\n\tTone.extend(Tone.Signal, Tone.Param);\n\n\t/**\n\t * The default values\n\t * @type {Object}\n\t * @static\n\t * @const\n\t */\n\tTone.Signal.defaults = {\n\t\t\"value\" : 0,\n\t\t\"units\" : Tone.Type.Default,\n\t\t\"convert\" : true,\n\t};\n\n\t/**\n\t * When signals connect to other signals or AudioParams, \n\t * they take over the output value of that signal or AudioParam. \n\t * For all other nodes, the behavior is the same as a default connect
. \n\t *\n\t * @override\n\t * @param {AudioParam|AudioNode|Tone.Signal|Tone} node \n\t * @param {number} [outputNumber=0] The output number to connect from.\n\t * @param {number} [inputNumber=0] The input number to connect to.\n\t * @returns {Tone.SignalBase} this\n\t * @method\n\t */\n\tTone.Signal.prototype.connect = Tone.SignalBase.prototype.connect;\n\n\t/**\n\t * dispose and disconnect\n\t * @returns {Tone.Signal} this\n\t */\n\tTone.Signal.prototype.dispose = function(){\n\t\tTone.Param.prototype.dispose.call(this);\n\t\tthis._param = null;\n\t\tthis._gain.disconnect();\n\t\tthis._gain = null;\n\t\treturn this;\n\t};\n\n\treturn Tone.Signal;\n});","global.TONE_SILENCE_VERSION_LOGGING = true;\n\nimport StartAudioContext from 'startaudiocontext';\nimport Tone from 'Tone/core/Tone';\nimport 'Tone/core/Context';\n\n// Create the Audio Context\nconst audiocontext = new window.AudioContext();\n\n// Tone and p5.sound share the same audio context\nTone.setContext(audiocontext);\n\n/**\n *
Returns the Audio Context for this sketch. Useful for users\n * who would like to dig deeper into the Web Audio API\n * .
\n *\n *Some browsers require users to startAudioContext\n * with a user gesture, such as touchStarted in the example below.
\n *\n * @for p5\n * @method getAudioContext\n * @return {Object} AudioContext for this sketch\n * @example\n *\n * function draw() {\n * background(255);\n * textAlign(CENTER);\n *\n * if (getAudioContext().state !== 'running') {\n * text('click to start audio', width/2, height/2);\n * } else {\n * text('audio is enabled', width/2, height/2);\n * }\n * }\n *\n * function touchStarted() {\n * if (getAudioContext().state !== 'running') {\n * getAudioContext().resume();\n * }\n * var synth = new p5.MonoSynth();\n * synth.play('A4', 0.5, 0, 0.2);\n * }\n *\n *
It is not only a good practice to give users control over starting\n * audio. This policy is enforced by many web browsers, including iOS and\n * Google Chrome, which create the Web Audio API's\n * Audio Context\n * in a suspended state.
\n *\n *In these browser-specific policies, sound will not play until a user\n * interaction event (i.e. mousePressed()
) explicitly resumes\n * the AudioContext, or starts an audio node. This can be accomplished by\n * calling start()
on a p5.Oscillator
,\n * play()
on a p5.SoundFile
, or simply\n * userStartAudio()
.
userStartAudio()
starts the AudioContext on a user\n * gesture. The default behavior will enable audio on any\n * mouseUp or touchEnd event. It can also be placed in a specific\n * interaction function, such as mousePressed()
as in the\n * example below. This method utilizes\n * StartAudioContext\n * , a library by Yotam Mann (MIT Licence, 2016).
\n * function setup() {\n * // mimics the autoplay policy\n * getAudioContext().suspend();\n *\n * let mySynth = new p5.MonoSynth();\n *\n * // This won't play until the context has resumed\n * mySynth.play('A6');\n * }\n * function draw() {\n * background(220);\n * textAlign(CENTER, CENTER);\n * text(getAudioContext().state, width/2, height/2);\n * }\n * function mousePressed() {\n * userStartAudio();\n * }\n *
input[0]
\n\t * and input[1]
. If a value is passed into the constructor, \n\t * the it will be added to the input.\n\t * \n\t * @constructor\n\t * @extends {Tone.Signal}\n\t * @param {number=} value If no value is provided, Tone.Add will sum the first\n\t * and second inputs. \n\t * @example\n\t * var signal = new Tone.Signal(2);\n\t * var add = new Tone.Add(2);\n\t * signal.connect(add);\n\t * //the output of add equals 4\n\t * @example\n\t * //if constructed with no arguments\n\t * //it will add the first and second inputs\n\t * var add = new Tone.Add();\n\t * var sig0 = new Tone.Signal(3).connect(add, 0, 0);\n\t * var sig1 = new Tone.Signal(4).connect(add, 0, 1);\n\t * //the output of add equals 7. \n\t */\n\tTone.Add = function(value){\n\n\t\tthis.createInsOuts(2, 0);\n\n\t\t/**\n\t\t * the summing node\n\t\t * @type {GainNode}\n\t\t * @private\n\t\t */\n\t\tthis._sum = this.input[0] = this.input[1] = this.output = new Tone.Gain();\n\n\t\t/**\n\t\t * @private\n\t\t * @type {Tone.Signal}\n\t\t */\n\t\tthis._param = this.input[1] = new Tone.Signal(value);\n\n\t\tthis._param.connect(this._sum);\n\t};\n\n\tTone.extend(Tone.Add, Tone.Signal);\n\t\n\t/**\n\t * Clean up.\n\t * @returns {Tone.Add} this\n\t */\n\tTone.Add.prototype.dispose = function(){\n\t\tTone.prototype.dispose.call(this);\n\t\tthis._sum.dispose();\n\t\tthis._sum = null;\n\t\tthis._param.dispose();\n\t\tthis._param = null;\n\t\treturn this;\n\t}; \n\n\treturn Tone.Add;\n});","module.exports = {\n recorderProcessor: 'recorder-processor',\n soundFileProcessor: 'sound-file-processor',\n amplitudeProcessor: 'amplitude-processor',\n};\n","define([\"Tone/core/Tone\", \"Tone/signal/SignalBase\"], function(Tone){\n\n\t\"use strict\";\n\n\t/**\n\t * @class Wraps the native Web Audio API \n\t * [WaveShaperNode](http://webaudio.github.io/web-audio-api/#the-waveshapernode-interface).\n\t *\n\t * @extends {Tone.SignalBase}\n\t * @constructor\n\t * @param {function|Array|Number} mapping The function used to define the values. \n\t * The mapping function should take two arguments: \n\t * the first is the value at the current position \n\t * and the second is the array position. \n\t * If the argument is an array, that array will be\n\t * set as the wave shaping function. The input\n\t * signal is an AudioRange [-1, 1] value and the output\n\t * signal can take on any numerical values. \n\t * \n\t * @param {Number} [bufferLen=1024] The length of the WaveShaperNode buffer.\n\t * @example\n\t * var timesTwo = new Tone.WaveShaper(function(val){\n\t * \treturn val * 2;\n\t * }, 2048);\n\t * @example\n\t * //a waveshaper can also be constructed with an array of values\n\t * var invert = new Tone.WaveShaper([1, -1]);\n\t */\n\tTone.WaveShaper = function(mapping, bufferLen){\n\n\t\t/**\n\t\t * the waveshaper\n\t\t * @type {WaveShaperNode}\n\t\t * @private\n\t\t */\n\t\tthis._shaper = this.input = this.output = this.context.createWaveShaper();\n\n\t\t/**\n\t\t * the waveshapers curve\n\t\t * @type {Float32Array}\n\t\t * @private\n\t\t */\n\t\tthis._curve = null;\n\n\t\tif (Array.isArray(mapping)){\n\t\t\tthis.curve = mapping;\n\t\t} else if (isFinite(mapping) || this.isUndef(mapping)){\n\t\t\tthis._curve = new Float32Array(this.defaultArg(mapping, 1024));\n\t\t} else if (this.isFunction(mapping)){\n\t\t\tthis._curve = new Float32Array(this.defaultArg(bufferLen, 1024));\n\t\t\tthis.setMap(mapping);\n\t\t} \n\t};\n\n\tTone.extend(Tone.WaveShaper, Tone.SignalBase);\n\n\t/**\n\t * Uses a mapping function to set the value of the curve. \n\t * @param {function} mapping The function used to define the values. \n\t * The mapping function take two arguments: \n\t * the first is the value at the current position \n\t * which goes from -1 to 1 over the number of elements\n\t * in the curve array. The second argument is the array position. \n\t * @returns {Tone.WaveShaper} this\n\t * @example\n\t * //map the input signal from [-1, 1] to [0, 10]\n\t * shaper.setMap(function(val, index){\n\t * \treturn (val + 1) * 5;\n\t * })\n\t */\n\tTone.WaveShaper.prototype.setMap = function(mapping){\n\t\tfor (var i = 0, len = this._curve.length; i < len; i++){\n\t\t\tvar normalized = (i / (len - 1)) * 2 - 1;\n\t\t\tthis._curve[i] = mapping(normalized, i);\n\t\t}\n\t\tthis._shaper.curve = this._curve;\n\t\treturn this;\n\t};\n\n\t/**\n\t * The array to set as the waveshaper curve. For linear curves\n\t * array length does not make much difference, but for complex curves\n\t * longer arrays will provide smoother interpolation. \n\t * @memberOf Tone.WaveShaper#\n\t * @type {Array}\n\t * @name curve\n\t */\n\tObject.defineProperty(Tone.WaveShaper.prototype, \"curve\", {\n\t\tget : function(){\n\t\t\treturn this._shaper.curve;\n\t\t},\n\t\tset : function(mapping){\n\t\t\tthis._curve = new Float32Array(mapping);\n\t\t\tthis._shaper.curve = this._curve;\n\t\t}\n\t});\n\n\t/**\n\t * Specifies what type of oversampling (if any) should be used when \n\t * applying the shaping curve. Can either be \"none\", \"2x\" or \"4x\". \n\t * @memberOf Tone.WaveShaper#\n\t * @type {string}\n\t * @name oversample\n\t */\n\tObject.defineProperty(Tone.WaveShaper.prototype, \"oversample\", {\n\t\tget : function(){\n\t\t\treturn this._shaper.oversample;\n\t\t},\n\t\tset : function(oversampling){\n\t\t\tif ([\"none\", \"2x\", \"4x\"].indexOf(oversampling) !== -1){\n\t\t\t\tthis._shaper.oversample = oversampling;\n\t\t\t} else {\n\t\t\t\tthrow new RangeError(\"Tone.WaveShaper: oversampling must be either 'none', '2x', or '4x'\");\n\t\t\t}\n\t\t}\n\t});\n\n\t/**\n\t * Clean up.\n\t * @returns {Tone.WaveShaper} this\n\t */\n\tTone.WaveShaper.prototype.dispose = function(){\n\t\tTone.prototype.dispose.call(this);\n\t\tthis._shaper.disconnect();\n\t\tthis._shaper = null;\n\t\tthis._curve = null;\n\t\treturn this;\n\t};\n\n\treturn Tone.WaveShaper;\n});","define([\"Tone/core/Tone\", \"Tone/signal/Signal\", \"Tone/core/Timeline\"], function (Tone) {\n\n\t\"use strict\";\n\n\t/**\n\t * @class A signal which adds the method getValueAtTime. \n\t * Code and inspiration from https://github.com/jsantell/web-audio-automation-timeline\n\t * @extends {Tone.Param}\n\t * @param {Number=} value The initial value of the signal\n\t * @param {String=} units The conversion units of the signal.\n\t */\n\tTone.TimelineSignal = function(){\n\n\t\tvar options = this.optionsObject(arguments, [\"value\", \"units\"], Tone.Signal.defaults);\n\t\t\n\t\t/**\n\t\t * The scheduled events\n\t\t * @type {Tone.Timeline}\n\t\t * @private\n\t\t */\n\t\tthis._events = new Tone.Timeline(10);\n\n\t\t//constructors\n\t\tTone.Signal.apply(this, options);\n\t\toptions.param = this._param;\n\t\tTone.Param.call(this, options);\n\n\t\t/**\n\t\t * The initial scheduled value\n\t\t * @type {Number}\n\t\t * @private\n\t\t */\n\t\tthis._initial = this._fromUnits(this._param.value);\n\t};\n\n\tTone.extend(Tone.TimelineSignal, Tone.Param);\n\n\t/**\n\t * The event types of a schedulable signal.\n\t * @enum {String}\n\t * @private\n\t */\n\tTone.TimelineSignal.Type = {\n\t\tLinear : \"linear\",\n\t\tExponential : \"exponential\",\n\t\tTarget : \"target\",\n\t\tCurve : \"curve\",\n\t\tSet : \"set\"\n\t};\n\n\t/**\n\t * The current value of the signal. \n\t * @memberOf Tone.TimelineSignal#\n\t * @type {Number}\n\t * @name value\n\t */\n\tObject.defineProperty(Tone.TimelineSignal.prototype, \"value\", {\n\t\tget : function(){\n\t\t\tvar now = this.now();\n\t\t\tvar val = this.getValueAtTime(now);\n\t\t\treturn this._toUnits(val);\n\t\t},\n\t\tset : function(value){\n\t\t\tvar convertedVal = this._fromUnits(value);\n\t\t\tthis._initial = convertedVal;\n\t\t\tthis.cancelScheduledValues();\n\t\t\tthis._param.value = convertedVal;\n\t\t}\n\t});\n\n\t///////////////////////////////////////////////////////////////////////////\n\t//\tSCHEDULING\n\t///////////////////////////////////////////////////////////////////////////\n\n\t/**\n\t * Schedules a parameter value change at the given time.\n\t * @param {*}\tvalue The value to set the signal.\n\t * @param {Time} time The time when the change should occur.\n\t * @returns {Tone.TimelineSignal} this\n\t * @example\n\t * //set the frequency to \"G4\" in exactly 1 second from now. \n\t * freq.setValueAtTime(\"G4\", \"+1\");\n\t */\n\tTone.TimelineSignal.prototype.setValueAtTime = function (value, startTime) {\n\t\tvalue = this._fromUnits(value);\n\t\tstartTime = this.toSeconds(startTime);\n\t\tthis._events.add({\n\t\t\t\"type\" : Tone.TimelineSignal.Type.Set,\n\t\t\t\"value\" : value,\n\t\t\t\"time\" : startTime\n\t\t});\n\t\t//invoke the original event\n\t\tthis._param.setValueAtTime(value, startTime);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Schedules a linear continuous change in parameter value from the \n\t * previous scheduled parameter value to the given value.\n\t * \n\t * @param {number} value \n\t * @param {Time} endTime \n\t * @returns {Tone.TimelineSignal} this\n\t */\n\tTone.TimelineSignal.prototype.linearRampToValueAtTime = function (value, endTime) {\n\t\tvalue = this._fromUnits(value);\n\t\tendTime = this.toSeconds(endTime);\n\t\tthis._events.add({\n\t\t\t\"type\" : Tone.TimelineSignal.Type.Linear,\n\t\t\t\"value\" : value,\n\t\t\t\"time\" : endTime\n\t\t});\n\t\tthis._param.linearRampToValueAtTime(value, endTime);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Schedules an exponential continuous change in parameter value from \n\t * the previous scheduled parameter value to the given value.\n\t * \n\t * @param {number} value \n\t * @param {Time} endTime \n\t * @returns {Tone.TimelineSignal} this\n\t */\n\tTone.TimelineSignal.prototype.exponentialRampToValueAtTime = function (value, endTime) {\n\t\t//get the previous event and make sure it's not starting from 0\n\t\tendTime = this.toSeconds(endTime);\n\t\tvar beforeEvent = this._searchBefore(endTime);\n\t\tif (beforeEvent && beforeEvent.value === 0){\n\t\t\t//reschedule that event\n\t\t\tthis.setValueAtTime(this._minOutput, beforeEvent.time);\n\t\t}\n\t\tvalue = this._fromUnits(value);\n\t\tvar setValue = Math.max(value, this._minOutput);\n\t\tthis._events.add({\n\t\t\t\"type\" : Tone.TimelineSignal.Type.Exponential,\n\t\t\t\"value\" : setValue,\n\t\t\t\"time\" : endTime\n\t\t});\n\t\t//if the ramped to value is 0, make it go to the min output, and then set to 0.\n\t\tif (value < this._minOutput){\n\t\t\tthis._param.exponentialRampToValueAtTime(this._minOutput, endTime - this.sampleTime);\n\t\t\tthis.setValueAtTime(0, endTime);\n\t\t} else {\n\t\t\tthis._param.exponentialRampToValueAtTime(value, endTime);\n\t\t}\n\t\treturn this;\n\t};\n\n\t/**\n\t * Start exponentially approaching the target value at the given time with\n\t * a rate having the given time constant.\n\t * @param {number} value \n\t * @param {Time} startTime \n\t * @param {number} timeConstant \n\t * @returns {Tone.TimelineSignal} this \n\t */\n\tTone.TimelineSignal.prototype.setTargetAtTime = function (value, startTime, timeConstant) {\n\t\tvalue = this._fromUnits(value);\n\t\tvalue = Math.max(this._minOutput, value);\n\t\ttimeConstant = Math.max(this._minOutput, timeConstant);\n\t\tstartTime = this.toSeconds(startTime);\n\t\tthis._events.add({\n\t\t\t\"type\" : Tone.TimelineSignal.Type.Target,\n\t\t\t\"value\" : value,\n\t\t\t\"time\" : startTime,\n\t\t\t\"constant\" : timeConstant\n\t\t});\n\t\tthis._param.setTargetAtTime(value, startTime, timeConstant);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Set an array of arbitrary values starting at the given time for the given duration.\n\t * @param {Float32Array} values \n\t * @param {Time} startTime \n\t * @param {Time} duration\n\t * @param {NormalRange} [scaling=1] If the values in the curve should be scaled by some value\n\t * @returns {Tone.TimelineSignal} this \n\t */\n\tTone.TimelineSignal.prototype.setValueCurveAtTime = function (values, startTime, duration, scaling) {\n\t\tscaling = this.defaultArg(scaling, 1);\n\t\t//copy the array\n\t\tvar floats = new Array(values.length);\n\t\tfor (var i = 0; i < floats.length; i++){\n\t\t\tfloats[i] = this._fromUnits(values[i]) * scaling;\n\t\t}\n\t\tstartTime = this.toSeconds(startTime);\n\t\tduration = this.toSeconds(duration);\n\t\tthis._events.add({\n\t\t\t\"type\" : Tone.TimelineSignal.Type.Curve,\n\t\t\t\"value\" : floats,\n\t\t\t\"time\" : startTime,\n\t\t\t\"duration\" : duration\n\t\t});\n\t\t//set the first value\n\t\tthis._param.setValueAtTime(floats[0], startTime);\n\t\t//schedule a lienar ramp for each of the segments\n\t\tfor (var j = 1; j < floats.length; j++){\n\t\t\tvar segmentTime = startTime + (j / (floats.length - 1) * duration);\n\t\t\tthis._param.linearRampToValueAtTime(floats[j], segmentTime);\n\t\t}\n\t\treturn this;\n\t};\n\n\t/**\n\t * Cancels all scheduled parameter changes with times greater than or \n\t * equal to startTime.\n\t * \n\t * @param {Time} startTime\n\t * @returns {Tone.TimelineSignal} this\n\t */\n\tTone.TimelineSignal.prototype.cancelScheduledValues = function (after) {\n\t\tafter = this.toSeconds(after);\n\t\tthis._events.cancel(after);\n\t\tthis._param.cancelScheduledValues(after);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Sets the computed value at the given time. This provides\n\t * a point from which a linear or exponential curve\n\t * can be scheduled after. Will cancel events after \n\t * the given time and shorten the currently scheduled\n\t * linear or exponential ramp so that it ends at `time` .\n\t * This is to avoid discontinuities and clicks in envelopes. \n\t * @param {Time} time When to set the ramp point\n\t * @returns {Tone.TimelineSignal} this\n\t */\n\tTone.TimelineSignal.prototype.setRampPoint = function (time) {\n\t\ttime = this.toSeconds(time);\n\t\t//get the value at the given time\n\t\tvar val = this._toUnits(this.getValueAtTime(time));\n\t\t//if there is an event at the given time\n\t\t//and that even is not a \"set\"\n\t\tvar before = this._searchBefore(time);\n\t\tif (before && before.time === time){\n\t\t\t//remove everything after\n\t\t\tthis.cancelScheduledValues(time + this.sampleTime);\n\t\t} else if (before && \n\t\t\t\t before.type === Tone.TimelineSignal.Type.Curve &&\n\t\t\t\t before.time + before.duration > time){\n\t\t\t//if the curve is still playing\n\t\t\t//cancel the curve\n\t\t\tthis.cancelScheduledValues(time);\n\t\t\tthis.linearRampToValueAtTime(val, time);\n\t\t} else {\n\t\t\t//reschedule the next event to end at the given time\n\t\t\tvar after = this._searchAfter(time);\n\t\t\tif (after){\n\t\t\t\t//cancel the next event(s)\n\t\t\t\tthis.cancelScheduledValues(time);\n\t\t\t\tif (after.type === Tone.TimelineSignal.Type.Linear){\n\t\t\t\t\tthis.linearRampToValueAtTime(val, time);\n\t\t\t\t} else if (after.type === Tone.TimelineSignal.Type.Exponential){\n\t\t\t\t\tthis.exponentialRampToValueAtTime(val, time);\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis.setValueAtTime(val, time);\n\t\t}\n\t\treturn this;\n\t};\n\n\t/**\n\t * Do a linear ramp to the given value between the start and finish times.\n\t * @param {Number} value The value to ramp to.\n\t * @param {Time} start The beginning anchor point to do the linear ramp\n\t * @param {Time} finish The ending anchor point by which the value of\n\t * the signal will equal the given value.\n\t * @returns {Tone.TimelineSignal} this\n\t */\n\tTone.TimelineSignal.prototype.linearRampToValueBetween = function (value, start, finish) {\n\t\tthis.setRampPoint(start);\n\t\tthis.linearRampToValueAtTime(value, finish);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Do a exponential ramp to the given value between the start and finish times.\n\t * @param {Number} value The value to ramp to.\n\t * @param {Time} start The beginning anchor point to do the exponential ramp\n\t * @param {Time} finish The ending anchor point by which the value of\n\t * the signal will equal the given value.\n\t * @returns {Tone.TimelineSignal} this\n\t */\n\tTone.TimelineSignal.prototype.exponentialRampToValueBetween = function (value, start, finish) {\n\t\tthis.setRampPoint(start);\n\t\tthis.exponentialRampToValueAtTime(value, finish);\n\t\treturn this;\n\t};\n\n\t///////////////////////////////////////////////////////////////////////////\n\t//\tGETTING SCHEDULED VALUES\n\t///////////////////////////////////////////////////////////////////////////\n\n\t/**\n\t * Returns the value before or equal to the given time\n\t * @param {Number} time The time to query\n\t * @return {Object} The event at or before the given time.\n\t * @private\n\t */\n\tTone.TimelineSignal.prototype._searchBefore = function(time){\n\t\treturn this._events.get(time);\n\t};\n\n\t/**\n\t * The event after the given time\n\t * @param {Number} time The time to query.\n\t * @return {Object} The next event after the given time\n\t * @private\n\t */\n\tTone.TimelineSignal.prototype._searchAfter = function(time){\n\t\treturn this._events.getAfter(time);\n\t};\n\n\t/**\n\t * Get the scheduled value at the given time. This will\n\t * return the unconverted (raw) value.\n\t * @param {Number} time The time in seconds.\n\t * @return {Number} The scheduled value at the given time.\n\t */\n\tTone.TimelineSignal.prototype.getValueAtTime = function(time){\n\t\ttime = this.toSeconds(time);\n\t\tvar after = this._searchAfter(time);\n\t\tvar before = this._searchBefore(time);\n\t\tvar value = this._initial;\n\t\t//if it was set by\n\t\tif (before === null){\n\t\t\tvalue = this._initial;\n\t\t} else if (before.type === Tone.TimelineSignal.Type.Target){\n\t\t\tvar previous = this._events.getBefore(before.time);\n\t\t\tvar previouVal;\n\t\t\tif (previous === null){\n\t\t\t\tpreviouVal = this._initial;\n\t\t\t} else {\n\t\t\t\tpreviouVal = previous.value;\n\t\t\t}\n\t\t\tvalue = this._exponentialApproach(before.time, previouVal, before.value, before.constant, time);\n\t\t} else if (before.type === Tone.TimelineSignal.Type.Curve){\n\t\t\tvalue = this._curveInterpolate(before.time, before.value, before.duration, time);\n\t\t} else if (after === null){\n\t\t\tvalue = before.value;\n\t\t} else if (after.type === Tone.TimelineSignal.Type.Linear){\n\t\t\tvalue = this._linearInterpolate(before.time, before.value, after.time, after.value, time);\n\t\t} else if (after.type === Tone.TimelineSignal.Type.Exponential){\n\t\t\tvalue = this._exponentialInterpolate(before.time, before.value, after.time, after.value, time);\n\t\t} else {\n\t\t\tvalue = before.value;\n\t\t}\n\t\treturn value;\n\t};\n\n\t/**\n\t * When signals connect to other signals or AudioParams, \n\t * they take over the output value of that signal or AudioParam. \n\t * For all other nodes, the behavior is the same as a default connect
. \n\t *\n\t * @override\n\t * @param {AudioParam|AudioNode|Tone.Signal|Tone} node \n\t * @param {number} [outputNumber=0] The output number to connect from.\n\t * @param {number} [inputNumber=0] The input number to connect to.\n\t * @returns {Tone.TimelineSignal} this\n\t * @method\n\t */\n\tTone.TimelineSignal.prototype.connect = Tone.SignalBase.prototype.connect;\n\n\n\t///////////////////////////////////////////////////////////////////////////\n\t//\tAUTOMATION CURVE CALCULATIONS\n\t//\tMIT License, copyright (c) 2014 Jordan Santell\n\t///////////////////////////////////////////////////////////////////////////\n\n\t/**\n\t * Calculates the the value along the curve produced by setTargetAtTime\n\t * @private\n\t */\n\tTone.TimelineSignal.prototype._exponentialApproach = function (t0, v0, v1, timeConstant, t) {\n\t\treturn v1 + (v0 - v1) * Math.exp(-(t - t0) / timeConstant);\n\t};\n\n\t/**\n\t * Calculates the the value along the curve produced by linearRampToValueAtTime\n\t * @private\n\t */\n\tTone.TimelineSignal.prototype._linearInterpolate = function (t0, v0, t1, v1, t) {\n\t\treturn v0 + (v1 - v0) * ((t - t0) / (t1 - t0));\n\t};\n\n\t/**\n\t * Calculates the the value along the curve produced by exponentialRampToValueAtTime\n\t * @private\n\t */\n\tTone.TimelineSignal.prototype._exponentialInterpolate = function (t0, v0, t1, v1, t) {\n\t\tv0 = Math.max(this._minOutput, v0);\n\t\treturn v0 * Math.pow(v1 / v0, (t - t0) / (t1 - t0));\n\t};\n\n\t/**\n\t * Calculates the the value along the curve produced by setValueCurveAtTime\n\t * @private\n\t */\n\tTone.TimelineSignal.prototype._curveInterpolate = function (start, curve, duration, time) {\n\t\tvar len = curve.length;\n\t\t// If time is after duration, return the last curve value\n\t\tif (time >= start + duration) {\n\t\t\treturn curve[len - 1];\n\t\t} else if (time <= start){\n\t\t\treturn curve[0];\n\t\t} else {\n\t\t\tvar progress = (time - start) / duration;\n\t\t\tvar lowerIndex = Math.floor((len - 1) * progress);\n\t\t\tvar upperIndex = Math.ceil((len - 1) * progress);\n\t\t\tvar lowerVal = curve[lowerIndex];\n\t\t\tvar upperVal = curve[upperIndex];\n\t\t\tif (upperIndex === lowerIndex){\n\t\t\t\treturn lowerVal;\n\t\t\t} else {\n\t\t\t\treturn this._linearInterpolate(lowerIndex, lowerVal, upperIndex, upperVal, progress * (len - 1));\n\t\t\t}\n\t\t}\n\t};\n\n\t/**\n\t * Clean up.\n\t * @return {Tone.TimelineSignal} this\n\t */\n\tTone.TimelineSignal.prototype.dispose = function(){\n\t\tTone.Signal.prototype.dispose.call(this);\n\t\tTone.Param.prototype.dispose.call(this);\n\t\tthis._events.dispose();\n\t\tthis._events = null;\n\t};\n\n\treturn Tone.TimelineSignal;\n});","define([\"Tone/core/Tone\", \"Tone/signal/Add\", \"Tone/signal/Multiply\", \"Tone/signal/Signal\"], function(Tone){\n\n\t\"use strict\";\n\t\n\t/**\n\t * @class Performs a linear scaling on an input signal.\n\t * Scales a NormalRange input to between\n\t * outputMin and outputMax.\n\t *\n\t * @constructor\n\t * @extends {Tone.SignalBase}\n\t * @param {number} [outputMin=0] The output value when the input is 0. \n\t * @param {number} [outputMax=1]\tThe output value when the input is 1. \n\t * @example\n\t * var scale = new Tone.Scale(50, 100);\n\t * var signal = new Tone.Signal(0.5).connect(scale);\n\t * //the output of scale equals 75\n\t */\n\tTone.Scale = function(outputMin, outputMax){\n\n\t\t/** \n\t\t * @private\n\t\t * @type {number}\n\t\t */\n\t\tthis._outputMin = this.defaultArg(outputMin, 0);\n\n\t\t/** \n\t\t * @private\n\t\t * @type {number}\n\t\t */\n\t\tthis._outputMax = this.defaultArg(outputMax, 1);\n\n\n\t\t/** \n\t\t * @private\n\t\t * @type {Tone.Multiply}\n\t\t * @private\n\t\t */\n\t\tthis._scale = this.input = new Tone.Multiply(1);\n\t\t\n\t\t/** \n\t\t * @private\n\t\t * @type {Tone.Add}\n\t\t * @private\n\t\t */\n\t\tthis._add = this.output = new Tone.Add(0);\n\n\t\tthis._scale.connect(this._add);\n\t\tthis._setRange();\n\t};\n\n\tTone.extend(Tone.Scale, Tone.SignalBase);\n\n\t/**\n\t * The minimum output value. This number is output when \n\t * the value input value is 0. \n\t * @memberOf Tone.Scale#\n\t * @type {number}\n\t * @name min\n\t */\n\tObject.defineProperty(Tone.Scale.prototype, \"min\", {\n\t\tget : function(){\n\t\t\treturn this._outputMin;\n\t\t},\n\t\tset : function(min){\n\t\t\tthis._outputMin = min;\n\t\t\tthis._setRange();\n\t\t}\n\t});\n\n\t/**\n\t * The maximum output value. This number is output when \n\t * the value input value is 1. \n\t * @memberOf Tone.Scale#\n\t * @type {number}\n\t * @name max\n\t */\n\tObject.defineProperty(Tone.Scale.prototype, \"max\", {\n\t\tget : function(){\n\t\t\treturn this._outputMax;\n\t\t},\n\t\tset : function(max){\n\t\t\tthis._outputMax = max;\n\t\t\tthis._setRange();\n\t\t}\n\t});\n\n\t/**\n\t * set the values\n\t * @private\n\t */\n\tTone.Scale.prototype._setRange = function() {\n\t\tthis._add.value = this._outputMin;\n\t\tthis._scale.value = this._outputMax - this._outputMin;\n\t};\n\n\t/**\n\t * Clean up.\n\t * @returns {Tone.Scale} this\n\t */\n\tTone.Scale.prototype.dispose = function(){\n\t\tTone.prototype.dispose.call(this);\n\t\tthis._add.dispose();\n\t\tthis._add = null;\n\t\tthis._scale.dispose();\n\t\tthis._scale = null;\n\t\treturn this;\n\t}; \n\n\treturn Tone.Scale;\n});\n","define([\"Tone/core/Tone\", \"Tone/type/Time\", \"Tone/type/Frequency\", \"Tone/type/TransportTime\", \"Tone/core/Context\"],\nfunction (Tone) {\t\n\n\t///////////////////////////////////////////////////////////////////////////\n\t//\tTYPES\n\t///////////////////////////////////////////////////////////////////////////\n\n\t/**\n\t * Units which a value can take on.\n\t * @enum {String}\n\t */\n\tTone.Type = {\n\t\t/** \n\t\t * Default units\n\t\t * @typedef {Default}\n\t\t */\n\t\tDefault : \"number\",\n\t\t/**\n\t\t * Time can be described in a number of ways. Read more [Time](https://github.com/Tonejs/Tone.js/wiki/Time).\n\t\t *\n\t\t * input[1]
from the signal connected \n\t * to input[0]
. If an argument is provided in the constructor, the \n\t * signals .value
will be subtracted from the incoming signal.\n\t *\n\t * @extends {Tone.Signal}\n\t * @constructor\n\t * @param {number=} value The value to subtract from the incoming signal. If the value\n\t * is omitted, it will subtract the second signal from the first.\n\t * @example\n\t * var sub = new Tone.Subtract(1);\n\t * var sig = new Tone.Signal(4).connect(sub);\n\t * //the output of sub is 3. \n\t * @example\n\t * var sub = new Tone.Subtract();\n\t * var sigA = new Tone.Signal(10);\n\t * var sigB = new Tone.Signal(2.5);\n\t * sigA.connect(sub, 0, 0);\n\t * sigB.connect(sub, 0, 1);\n\t * //output of sub is 7.5\n\t */\n\tTone.Subtract = function(value){\n\n\t\tthis.createInsOuts(2, 0);\n\n\t\t/**\n\t\t * the summing node\n\t\t * @type {GainNode}\n\t\t * @private\n\t\t */\n\t\tthis._sum = this.input[0] = this.output = new Tone.Gain();\n\n\t\t/**\n\t\t * negate the input of the second input before connecting it\n\t\t * to the summing node.\n\t\t * @type {Tone.Negate}\n\t\t * @private\n\t\t */\n\t\tthis._neg = new Tone.Negate();\n\n\t\t/**\n\t\t * the node where the value is set\n\t\t * @private\n\t\t * @type {Tone.Signal}\n\t\t */\n\t\tthis._param = this.input[1] = new Tone.Signal(value);\n\n\t\tthis._param.chain(this._neg, this._sum);\n\t};\n\n\tTone.extend(Tone.Subtract, Tone.Signal);\n\n\t/**\n\t * Clean up.\n\t * @returns {Tone.SignalBase} this\n\t */\n\tTone.Subtract.prototype.dispose = function(){\n\t\tTone.prototype.dispose.call(this);\n\t\tthis._neg.dispose();\n\t\tthis._neg = null;\n\t\tthis._sum.disconnect();\n\t\tthis._sum = null;\n\t\tthis._param.dispose();\n\t\tthis._param = null;\n\t\treturn this;\n\t};\n\n\treturn Tone.Subtract;\n});","define([\"Tone/core/Tone\"], function (Tone) {\n\n\t\"use strict\";\n\n\t/**\n\t * @class Tone.Emitter gives classes which extend it\n\t * the ability to listen for and emit events. \n\t * Inspiration and reference from Jerome Etienne's [MicroEvent](https://github.com/jeromeetienne/microevent.js).\n\t * MIT (c) 2011 Jerome Etienne.\n\t * \n\t * @extends {Tone}\n\t */\n\tTone.Emitter = function(){\n\t\t/**\n\t\t * Contains all of the events.\n\t\t * @private\n\t\t * @type {Object}\n\t\t */\n\t\tthis._events = {};\n\t};\n\n\tTone.extend(Tone.Emitter);\n\n\t/**\n\t * Bind a callback to a specific event.\n\t * @param {String} event The name of the event to listen for.\n\t * @param {Function} callback The callback to invoke when the\n\t * event is emitted\n\t * @return {Tone.Emitter} this\n\t */\n\tTone.Emitter.prototype.on = function(event, callback){\n\t\t//split the event\n\t\tvar events = event.split(/\\W+/);\n\t\tfor (var i = 0; i < events.length; i++){\n\t\t\tvar eventName = events[i];\n\t\t\tif (!this._events.hasOwnProperty(eventName)){\n\t\t\t\tthis._events[eventName] = [];\n\t\t\t}\n\t\t\tthis._events[eventName].push(callback);\n\t\t}\n\t\treturn this;\n\t};\n\n\t/**\n\t * Remove the event listener.\n\t * @param {String} event The event to stop listening to.\n\t * @param {Function=} callback The callback which was bound to \n\t * the event with Tone.Emitter.on.\n\t * If no callback is given, all callbacks\n\t * events are removed.\n\t * @return {Tone.Emitter} this\n\t */\n\tTone.Emitter.prototype.off = function(event, callback){\n\t\tvar events = event.split(/\\W+/);\n\t\tfor (var ev = 0; ev < events.length; ev++){\n\t\t\tevent = events[ev];\n\t\t\tif (this._events.hasOwnProperty(event)){\n\t\t\t\tif (Tone.prototype.isUndef(callback)){\n\t\t\t\t\tthis._events[event] = [];\n\t\t\t\t} else {\n\t\t\t\t\tvar eventList = this._events[event];\n\t\t\t\t\tfor (var i = 0; i < eventList.length; i++){\n\t\t\t\t\t\tif (eventList[i] === callback){\n\t\t\t\t\t\t\teventList.splice(i, 1);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn this;\n\t};\n\n\t/**\n\t * Invoke all of the callbacks bound to the event\n\t * with any arguments passed in. \n\t * @param {String} event The name of the event.\n\t * @param {*...} args The arguments to pass to the functions listening.\n\t * @return {Tone.Emitter} this\n\t */\n\tTone.Emitter.prototype.emit = function(event){\n\t\tif (this._events){\n\t\t\tvar args = Array.apply(null, arguments).slice(1);\n\t\t\tif (this._events.hasOwnProperty(event)){\n\t\t\t\tvar eventList = this._events[event];\n\t\t\t\tfor (var i = 0, len = eventList.length; i < len; i++){\n\t\t\t\t\teventList[i].apply(this, args);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn this;\n\t};\n\n\t/**\n\t * Add Emitter functions (on/off/emit) to the object\n\t * @param {Object|Function} object The object or class to extend.\n\t */\n\tTone.Emitter.mixin = function(object){\n\t\tvar functions = [\"on\", \"off\", \"emit\"];\n\t\tobject._events = {};\n\t\tfor (var i = 0; i < functions.length; i++){\n\t\t\tvar func = functions[i];\n\t\t\tvar emitterFunc = Tone.Emitter.prototype[func];\n\t\t\tobject[func] = emitterFunc;\n\t\t}\n\t};\n\n\t/**\n\t * Clean up\n\t * @return {Tone.Emitter} this\n\t */\n\tTone.Emitter.prototype.dispose = function(){\n\t\tTone.prototype.dispose.call(this);\n\t\tthis._events = null;\n\t\treturn this;\n\t};\n\n\treturn Tone.Emitter;\n});","define([\"Tone/core/Tone\"], function(Tone){\n\n\t\"use strict\";\n\n\t/**\n\t * @class Base class for all Signals. Used Internally. \n\t *\n\t * @constructor\n\t * @extends {Tone}\n\t */\n\tTone.SignalBase = function(){};\n\n\tTone.extend(Tone.SignalBase);\n\n\t/**\n\t * When signals connect to other signals or AudioParams, \n\t * they take over the output value of that signal or AudioParam. \n\t * For all other nodes, the behavior is the same as a default connect
. \n\t *\n\t * @override\n\t * @param {AudioParam|AudioNode|Tone.Signal|Tone} node \n\t * @param {number} [outputNumber=0] The output number to connect from.\n\t * @param {number} [inputNumber=0] The input number to connect to.\n\t * @returns {Tone.SignalBase} this\n\t */\n\tTone.SignalBase.prototype.connect = function(node, outputNumber, inputNumber){\n\t\t//zero it out so that the signal can have full control\n\t\tif ((Tone.Signal && Tone.Signal === node.constructor) || \n\t\t\t\t(Tone.Param && Tone.Param === node.constructor) || \n\t\t\t\t(Tone.TimelineSignal && Tone.TimelineSignal === node.constructor)){\n\t\t\t//cancel changes\n\t\t\tnode._param.cancelScheduledValues(0);\n\t\t\t//reset the value\n\t\t\tnode._param.value = 0;\n\t\t\t//mark the value as overridden\n\t\t\tnode.overridden = true;\n\t\t} else if (node instanceof AudioParam){\n\t\t\tnode.cancelScheduledValues(0);\n\t\t\tnode.value = 0;\n\t\t} \n\t\tTone.prototype.connect.call(this, node, outputNumber, inputNumber);\n\t\treturn this;\n\t};\n\n\treturn Tone.SignalBase;\n});","define([\"Tone/core/Tone\", \"Tone/type/TimeBase\"], function (Tone) {\n\n\t/**\n\t * @class Tone.Time is a primitive type for encoding Time values. \n\t * Eventually all time values are evaluated to seconds\n\t * using the `eval` method. Tone.Time can be constructed\n\t * with or without the `new` keyword. Tone.Time can be passed\n\t * into the parameter of any method which takes time as an argument. \n\t * @constructor\n\t * @extends {Tone.TimeBase}\n\t * @param {String|Number} val The time value.\n\t * @param {String=} units The units of the value.\n\t * @example\n\t * var t = Tone.Time(\"4n\");//encodes a quarter note\n\t * t.mult(4); // multiply that value by 4\n\t * t.toNotation(); //returns \"1m\"\n\t */\n\tTone.Time = function(val, units){\n\t\tif (this instanceof Tone.Time){\n\n\t\t\t/**\n\t\t\t * If the current clock time should\n\t\t\t * be added to the output\n\t\t\t * @type {Boolean}\n\t\t\t * @private\n\t\t\t */\n\t\t\tthis._plusNow = false;\n\t\t\t\n\t\t\tTone.TimeBase.call(this, val, units);\n\n\t\t} else {\n\t\t\treturn new Tone.Time(val, units);\n\t\t}\n\t};\n\n\tTone.extend(Tone.Time, Tone.TimeBase);\n\n\t//clone the expressions so that \n\t//we can add more without modifying the original\n\tTone.Time.prototype._unaryExpressions = Object.create(Tone.TimeBase.prototype._unaryExpressions);\n\n\t/*\n\t * Adds an additional unary expression\n\t * which quantizes values to the next subdivision\n\t * @type {Object}\n\t * @private\n\t */\n\tTone.Time.prototype._unaryExpressions.quantize = {\n\t\tregexp : /^@/,\n\t\tmethod : function(rh){\n\t\t\treturn Tone.Transport.nextSubdivision(rh());\n\t\t}\n\t};\n\n\t/*\n\t * Adds an additional unary expression\n\t * which adds the current clock time.\n\t * @type {Object}\n\t * @private\n\t */\n\tTone.Time.prototype._unaryExpressions.now = {\n\t\tregexp : /^\\+/,\n\t\tmethod : function(lh){\n\t\t\tthis._plusNow = true;\n\t\t\treturn lh();\n\t\t}\n\t};\n\n\t/**\n\t * Quantize the time by the given subdivision. Optionally add a\n\t * percentage which will move the time value towards the ideal\n\t * quantized value by that percentage. \n\t * @param {Number|Time} val The subdivision to quantize to\n\t * @param {NormalRange} [percent=1] Move the time value\n\t * towards the quantized value by\n\t * a percentage.\n\t * @return {Tone.Time} this\n\t * @example\n\t * Tone.Time(21).quantize(2) //returns 22\n\t * Tone.Time(0.6).quantize(\"4n\", 0.5) //returns 0.55\n\t */\n\tTone.Time.prototype.quantize = function(subdiv, percent){\n\t\tpercent = this.defaultArg(percent, 1);\n\t\tthis._expr = function(expr, subdivision, percent){\n\t\t\texpr = expr();\n\t\t\tsubdivision = subdivision.toSeconds();\n\t\t\tvar multiple = Math.round(expr / subdivision);\n\t\t\tvar ideal = multiple * subdivision;\n\t\t\tvar diff = ideal - expr;\n\t\t\treturn expr + diff * percent;\n\t\t}.bind(this, this._expr, new this.constructor(subdiv), percent);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Adds the clock time to the time expression at the \n\t * moment of evaluation. \n\t * @return {Tone.Time} this\n\t */\n\tTone.Time.prototype.addNow = function(){\n\t\tthis._plusNow = true;\n\t\treturn this;\n\t};\n\n\t/**\n\t * @override\n\t * Override the default value return when no arguments are passed in.\n\t * The default value is 'now'\n\t * @private\n\t */\n\tTone.Time.prototype._defaultExpr = function(){\n\t\tthis._plusNow = true;\n\t\treturn this._noOp;\n\t};\n\n\t/**\n\t * Copies the value of time to this Time\n\t * @param {Tone.Time} time\n\t * @return {Time}\n\t */\n\tTone.Time.prototype.copy = function(time){\n\t\tTone.TimeBase.prototype.copy.call(this, time);\n\t\tthis._plusNow = time._plusNow;\n\t\treturn this;\n\t};\n\n\t//CONVERSIONS//////////////////////////////////////////////////////////////\n\n\t/**\n\t * Convert a Time to Notation. Values will be thresholded to the nearest 128th note. \n\t * @return {Notation} \n\t * @example\n\t * //if the Transport is at 120bpm:\n\t * Tone.Time(2).toNotation();//returns \"1m\"\n\t */\n\tTone.Time.prototype.toNotation = function(){\n\t\tvar time = this.toSeconds();\n\t\tvar testNotations = [\"1m\", \"2n\", \"4n\", \"8n\", \"16n\", \"32n\", \"64n\", \"128n\"];\n\t\tvar retNotation = this._toNotationHelper(time, testNotations);\n\t\t//try the same thing but with tripelets\n\t\tvar testTripletNotations = [\"1m\", \"2n\", \"2t\", \"4n\", \"4t\", \"8n\", \"8t\", \"16n\", \"16t\", \"32n\", \"32t\", \"64n\", \"64t\", \"128n\"];\n\t\tvar retTripletNotation = this._toNotationHelper(time, testTripletNotations);\n\t\t//choose the simpler expression of the two\n\t\tif (retTripletNotation.split(\"+\").length < retNotation.split(\"+\").length){\n\t\t\treturn retTripletNotation;\n\t\t} else {\n\t\t\treturn retNotation;\n\t\t}\n\t};\n\n\t/**\n\t * Helper method for Tone.toNotation\n\t * @param {Number} units \n\t * @param {Array} testNotations\n\t * @return {String}\n\t * @private\n\t */\n\tTone.Time.prototype._toNotationHelper = function(units, testNotations){\n\t\t//the threshold is the last value in the array\n\t\tvar threshold = this._notationToUnits(testNotations[testNotations.length - 1]);\n\t\tvar retNotation = \"\";\n\t\tfor (var i = 0; i < testNotations.length; i++){\n\t\t\tvar notationTime = this._notationToUnits(testNotations[i]);\n\t\t\t//account for floating point errors (i.e. round up if the value is 0.999999)\n\t\t\tvar multiple = units / notationTime;\n\t\t\tvar floatingPointError = 0.000001;\n\t\t\tif (1 - multiple % 1 < floatingPointError){\n\t\t\t\tmultiple += floatingPointError;\n\t\t\t}\n\t\t\tmultiple = Math.floor(multiple);\n\t\t\tif (multiple > 0){\n\t\t\t\tif (multiple === 1){\n\t\t\t\t\tretNotation += testNotations[i];\n\t\t\t\t} else {\n\t\t\t\t\tretNotation += multiple.toString() + \"*\" + testNotations[i];\n\t\t\t\t}\n\t\t\t\tunits -= multiple * notationTime;\n\t\t\t\tif (units < threshold){\n\t\t\t\t\tbreak;\n\t\t\t\t} else {\n\t\t\t\t\tretNotation += \" + \";\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif (retNotation === \"\"){\n\t\t\tretNotation = \"0\";\n\t\t}\n\t\treturn retNotation;\n\t};\n\n\t/**\n\t * Convert a notation value to the current units\n\t * @param {Notation} notation \n\t * @return {Number} \n\t * @private\n\t */\n\tTone.Time.prototype._notationToUnits = function(notation){\n\t\tvar primaryExprs = this._primaryExpressions;\n\t\tvar notationExprs = [primaryExprs.n, primaryExprs.t, primaryExprs.m];\n\t\tfor (var i = 0; i < notationExprs.length; i++){\n\t\t\tvar expr = notationExprs[i];\n\t\t\tvar match = notation.match(expr.regexp);\n\t\t\tif (match){\n\t\t\t\treturn expr.method.call(this, match[1]);\n\t\t\t}\n\t\t}\n\t};\n\n\t/**\n\t * Return the time encoded as Bars:Beats:Sixteenths.\n\t * @return {BarsBeatsSixteenths}\n\t */\n\tTone.Time.prototype.toBarsBeatsSixteenths = function(){\n\t\tvar quarterTime = this._beatsToUnits(1);\n\t\tvar quarters = this.toSeconds() / quarterTime;\n\t\tvar measures = Math.floor(quarters / this._timeSignature());\n\t\tvar sixteenths = (quarters % 1) * 4;\n\t\tquarters = Math.floor(quarters) % this._timeSignature();\n\t\tsixteenths = sixteenths.toString();\n\t\tif (sixteenths.length > 3){\n\t\t\tsixteenths = parseFloat(sixteenths).toFixed(3);\n\t\t}\n\t\tvar progress = [measures, quarters, sixteenths];\n\t\treturn progress.join(\":\");\n\t};\n\n\t/**\n\t * Return the time in ticks.\n\t * @return {Ticks}\n\t */\n\tTone.Time.prototype.toTicks = function(){\n\t\tvar quarterTime = this._beatsToUnits(1);\n\t\tvar quarters = this.valueOf() / quarterTime;\n\t\treturn Math.floor(quarters * Tone.Transport.PPQ);\n\t};\n\n\t/**\n\t * Return the time in samples\n\t * @return {Samples} \n\t */\n\tTone.Time.prototype.toSamples = function(){\n\t\treturn this.toSeconds() * this.context.sampleRate;\n\t};\n\n\t/**\n\t * Return the time as a frequency value\n\t * @return {Frequency} \n\t * @example\n\t * Tone.Time(2).toFrequency(); //0.5\n\t */\n\tTone.Time.prototype.toFrequency = function(){\n\t\treturn 1/this.toSeconds();\n\t};\n\n\t/**\n\t * Return the time in seconds.\n\t * @return {Seconds} \n\t */\n\tTone.Time.prototype.toSeconds = function(){\n\t\treturn this.valueOf();\n\t};\n\n\t/**\n\t * Return the time in milliseconds.\n\t * @return {Milliseconds} \n\t */\n\tTone.Time.prototype.toMilliseconds = function(){\n\t\treturn this.toSeconds() * 1000;\n\t};\n\n\t/**\n\t * Return the time in seconds.\n\t * @return {Seconds} \n\t */\n\tTone.Time.prototype.valueOf = function(){\n\t\tvar val = this._expr();\n\t\treturn val + (this._plusNow?this.now():0);\n\t};\n\n\treturn Tone.Time;\n});","define([\"Tone/core/Tone\"], function (Tone) {\n\n\t/**\n\t * @class Tone.TimeBase is a flexible encoding of time\n\t * which can be evaluated to and from a string.\n\t * Parsing code modified from https://code.google.com/p/tapdigit/\n\t * Copyright 2011 2012 Ariya Hidayat, New BSD License\n\t * @extends {Tone}\n\t * @param {Time} val The time value as a number or string\n\t * @param {String=} units Unit values\n\t * @example\n\t * Tone.TimeBase(4, \"n\")\n\t * Tone.TimeBase(2, \"t\")\n\t * Tone.TimeBase(\"2t\").add(\"1m\")\n\t * Tone.TimeBase(\"2t + 1m\");\n\t */\n\tTone.TimeBase = function(val, units){\n\n\t\t//allows it to be constructed with or without 'new'\n\t\tif (this instanceof Tone.TimeBase) {\n\n\t\t\t/**\n\t\t\t * Any expressions parsed from the Time\n\t\t\t * @type {Array}\n\t\t\t * @private\n\t\t\t */\n\t\t\tthis._expr = this._noOp;\n\n\t\t\tif (val instanceof Tone.TimeBase){\n\t\t\t\tthis.copy(val);\n\t\t\t} else if (!this.isUndef(units) || this.isNumber(val)){\n\t\t\t\t//default units\n\t\t\t\tunits = this.defaultArg(units, this._defaultUnits);\n\t\t\t\tvar method = this._primaryExpressions[units].method;\n\t\t\t\tthis._expr = method.bind(this, val);\n\t\t\t} else if (this.isString(val)){\n\t\t\t\tthis.set(val);\n\t\t\t} else if (this.isUndef(val)){\n\t\t\t\t//default expression\n\t\t\t\tthis._expr = this._defaultExpr();\n\t\t\t}\n\t\t} else {\n\n\t\t\treturn new Tone.TimeBase(val, units);\n\t\t}\n\t};\n\n\tTone.extend(Tone.TimeBase);\n\n\t/**\n\t * Repalce the current time value with the value\n\t * given by the expression string.\n\t * @param {String} exprString\n\t * @return {Tone.TimeBase} this\n\t */\n\tTone.TimeBase.prototype.set = function(exprString){\n\t\tthis._expr = this._parseExprString(exprString);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Return a clone of the TimeBase object.\n\t * @return {Tone.TimeBase} The new cloned Tone.TimeBase\n\t */\n\tTone.TimeBase.prototype.clone = function(){\n\t\tvar instance = new this.constructor();\n\t\tinstance.copy(this);\n\t\treturn instance;\n\t};\n\n\t/**\n\t * Copies the value of time to this Time\n\t * @param {Tone.TimeBase} time\n\t * @return {TimeBase}\n\t */\n\tTone.TimeBase.prototype.copy = function(time){\n\t\tvar val = time._expr();\n\t\treturn this.set(val);\n\t};\n\n\t///////////////////////////////////////////////////////////////////////////\n\t//\tABSTRACT SYNTAX TREE PARSER\n\t///////////////////////////////////////////////////////////////////////////\n\n\t/**\n\t * All the primary expressions.\n\t * @private\n\t * @type {Object}\n\t */\n\tTone.TimeBase.prototype._primaryExpressions = {\n\t\t\"n\" : {\n\t\t\tregexp : /^(\\d+)n/i,\n\t\t\tmethod : function(value){\n\t\t\t\tvalue = parseInt(value);\n\t\t\t\tif (value === 1){\n\t\t\t\t\treturn this._beatsToUnits(this._timeSignature());\n\t\t\t\t} else {\n\t\t\t\t\treturn this._beatsToUnits(4 / value);\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"t\" : {\n\t\t\tregexp : /^(\\d+)t/i,\n\t\t\tmethod : function(value){\n\t\t\t\tvalue = parseInt(value);\n\t\t\t\treturn this._beatsToUnits(8 / (parseInt(value) * 3));\n\t\t\t}\n\t\t},\n\t\t\"m\" : {\n\t\t\tregexp : /^(\\d+)m/i,\n\t\t\tmethod : function(value){\n\t\t\t\treturn this._beatsToUnits(parseInt(value) * this._timeSignature());\n\t\t\t}\n\t\t},\n\t\t\"i\" : {\n\t\t\tregexp : /^(\\d+)i/i,\n\t\t\tmethod : function(value){\n\t\t\t\treturn this._ticksToUnits(parseInt(value));\n\t\t\t}\n\t\t},\n\t\t\"hz\" : {\n\t\t\tregexp : /^(\\d+(?:\\.\\d+)?)hz/i,\n\t\t\tmethod : function(value){\n\t\t\t\treturn this._frequencyToUnits(parseFloat(value));\n\t\t\t}\n\t\t},\n\t\t\"tr\" : {\n\t\t\tregexp : /^(\\d+(?:\\.\\d+)?):(\\d+(?:\\.\\d+)?):?(\\d+(?:\\.\\d+)?)?/,\n\t\t\tmethod : function(m, q, s){\n\t\t\t\tvar total = 0;\n\t\t\t\tif (m && m !== \"0\"){\n\t\t\t\t\ttotal += this._beatsToUnits(this._timeSignature() * parseFloat(m));\n\t\t\t\t}\n\t\t\t\tif (q && q !== \"0\"){\n\t\t\t\t\ttotal += this._beatsToUnits(parseFloat(q));\n\t\t\t\t}\n\t\t\t\tif (s && s !== \"0\"){\n\t\t\t\t\ttotal += this._beatsToUnits(parseFloat(s) / 4);\n\t\t\t\t}\n\t\t\t\treturn total;\n\t\t\t}\n\t\t},\n\t\t\"s\" : {\n\t\t\tregexp : /^(\\d+(?:\\.\\d+)?s)/,\n\t\t\tmethod : function(value){\n\t\t\t\treturn this._secondsToUnits(parseFloat(value));\n\t\t\t}\n\t\t},\n\t\t\"samples\" : {\n\t\t\tregexp : /^(\\d+)samples/,\n\t\t\tmethod : function(value){\n\t\t\t\treturn parseInt(value) / this.context.sampleRate;\n\t\t\t}\n\t\t},\n\t\t\"default\" : {\n\t\t\tregexp : /^(\\d+(?:\\.\\d+)?)/,\n\t\t\tmethod : function(value){\n\t\t\t\treturn this._primaryExpressions[this._defaultUnits].method.call(this, value);\n\t\t\t}\n\t\t}\n\t};\n\n\t/**\n\t * All the binary expressions that TimeBase can accept.\n\t * @private\n\t * @type {Object}\n\t */\n\tTone.TimeBase.prototype._binaryExpressions = {\n\t\t\"+\" : {\n\t\t\tregexp : /^\\+/,\n\t\t\tprecedence : 2,\n\t\t\tmethod : function(lh, rh){\n\t\t\t\treturn lh() + rh();\n\t\t\t}\n\t\t},\n\t\t\"-\" : {\n\t\t\tregexp : /^\\-/,\n\t\t\tprecedence : 2,\n\t\t\tmethod : function(lh, rh){\n\t\t\t\treturn lh() - rh();\n\t\t\t}\n\t\t},\n\t\t\"*\" : {\n\t\t\tregexp : /^\\*/,\n\t\t\tprecedence : 1,\n\t\t\tmethod : function(lh, rh){\n\t\t\t\treturn lh() * rh();\n\t\t\t}\n\t\t},\n\t\t\"/\" : {\n\t\t\tregexp : /^\\//,\n\t\t\tprecedence : 1,\n\t\t\tmethod : function(lh, rh){\n\t\t\t\treturn lh() / rh();\n\t\t\t}\n\t\t}\n\t};\n\n\t/**\n\t * All the unary expressions.\n\t * @private\n\t * @type {Object}\n\t */\n\tTone.TimeBase.prototype._unaryExpressions = {\n\t\t\"neg\" : {\n\t\t\tregexp : /^\\-/,\n\t\t\tmethod : function(lh){\n\t\t\t\treturn -lh();\n\t\t\t}\n\t\t}\n\t};\n\n\t/**\n\t * Syntactic glue which holds expressions together\n\t * @private\n\t * @type {Object}\n\t */\n\tTone.TimeBase.prototype._syntaxGlue = {\n\t\t\"(\" : {\n\t\t\tregexp : /^\\(/\n\t\t},\n\t\t\")\" : {\n\t\t\tregexp : /^\\)/\n\t\t}\n\t};\n\n\t/**\n\t * tokenize the expression based on the Expressions object\n\t * @param {string} expr \n\t * @return {Object} returns two methods on the tokenized list, next and peek\n\t * @private\n\t */\n\tTone.TimeBase.prototype._tokenize = function(expr){\n\t\tvar position = -1;\n\t\tvar tokens = [];\n\n\t\twhile(expr.length > 0){\n\t\t\texpr = expr.trim();\n\t\t\tvar token = getNextToken(expr, this);\n\t\t\ttokens.push(token);\n\t\t\texpr = expr.substr(token.value.length);\n\t\t}\n\n\t\tfunction getNextToken(expr, context){\n\t\t\tvar expressions = [\"_binaryExpressions\", \"_unaryExpressions\", \"_primaryExpressions\", \"_syntaxGlue\"];\n\t\t\tfor (var i = 0; i < expressions.length; i++){\n\t\t\t\tvar group = context[expressions[i]];\n\t\t\t\tfor (var opName in group){\n\t\t\t\t\tvar op = group[opName];\n\t\t\t\t\tvar reg = op.regexp;\n\t\t\t\t\tvar match = expr.match(reg);\n\t\t\t\t\tif (match !== null){\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\tmethod : op.method,\n\t\t\t\t\t\t\tprecedence : op.precedence,\n\t\t\t\t\t\t\tregexp : op.regexp,\n\t\t\t\t\t\t\tvalue : match[0],\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tthrow new SyntaxError(\"Tone.TimeBase: Unexpected token \"+expr);\n\t\t}\n\n\t\treturn {\n\t\t\tnext : function(){\n\t\t\t\treturn tokens[++position];\n\t\t\t},\n\t\t\tpeek : function(){\n\t\t\t\treturn tokens[position + 1];\n\t\t\t}\n\t\t};\n\t};\n\n\t/**\n\t * Given a token, find the value within the groupName\n\t * @param {Object} token\n\t * @param {String} groupName\n\t * @param {Number} precedence\n\t * @private\n\t */\n\tTone.TimeBase.prototype._matchGroup = function(token, group, prec) {\n\t\tvar ret = false;\n\t\tif (!this.isUndef(token)){\n\t\t\tfor (var opName in group){\n\t\t\t\tvar op = group[opName];\n\t\t\t\tif (op.regexp.test(token.value)){\n\t\t\t\t\tif (!this.isUndef(prec)){\n\t\t\t\t\t\tif(op.precedence === prec){\t\n\t\t\t\t\t\t\treturn op;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn op;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn ret;\n\t};\n\n\t/**\n\t * Match a binary expression given the token and the precedence\n\t * @param {Lexer} lexer\n\t * @param {Number} precedence\n\t * @private\n\t */\n\tTone.TimeBase.prototype._parseBinary = function(lexer, precedence){\n\t\tif (this.isUndef(precedence)){\n\t\t\tprecedence = 2;\n\t\t}\n\t\tvar expr;\n\t\tif (precedence < 0){\n\t\t\texpr = this._parseUnary(lexer);\n\t\t} else {\n\t\t\texpr = this._parseBinary(lexer, precedence - 1);\n\t\t}\n\t\tvar token = lexer.peek();\n\t\twhile (token && this._matchGroup(token, this._binaryExpressions, precedence)){\n\t\t\ttoken = lexer.next();\n\t\t\texpr = token.method.bind(this, expr, this._parseBinary(lexer, precedence - 1));\n\t\t\ttoken = lexer.peek();\n\t\t}\n\t\treturn expr;\n\t};\n\n\t/**\n\t * Match a unary expression.\n\t * @param {Lexer} lexer\n\t * @private\n\t */\n\tTone.TimeBase.prototype._parseUnary = function(lexer){\n\t\tvar token, expr;\n\t\ttoken = lexer.peek();\n\t\tvar op = this._matchGroup(token, this._unaryExpressions);\n\t\tif (op) {\n\t\t\ttoken = lexer.next();\n\t\t\texpr = this._parseUnary(lexer);\n\t\t\treturn op.method.bind(this, expr);\n\t\t}\n\t\treturn this._parsePrimary(lexer);\n\t};\n\n\t/**\n\t * Match a primary expression (a value).\n\t * @param {Lexer} lexer\n\t * @private\n\t */\n\tTone.TimeBase.prototype._parsePrimary = function(lexer){\n\t\tvar token, expr;\n\t\ttoken = lexer.peek();\n\t\tif (this.isUndef(token)) {\n\t\t\tthrow new SyntaxError(\"Tone.TimeBase: Unexpected end of expression\");\n\t\t}\n\t\tif (this._matchGroup(token, this._primaryExpressions)) {\n\t\t\ttoken = lexer.next();\n\t\t\tvar matching = token.value.match(token.regexp);\n\t\t\treturn token.method.bind(this, matching[1], matching[2], matching[3]);\n\t\t}\n\t\tif (token && token.value === \"(\"){\n\t\t\tlexer.next();\n\t\t\texpr = this._parseBinary(lexer);\n\t\t\ttoken = lexer.next();\n\t\t\tif (!(token && token.value === \")\")) {\n\t\t\t\tthrow new SyntaxError(\"Expected )\");\n\t\t\t}\n\t\t\treturn expr;\n\t\t}\n\t\tthrow new SyntaxError(\"Tone.TimeBase: Cannot process token \" + token.value);\n\t};\n\n\t/**\n\t * Recursively parse the string expression into a syntax tree.\n\t * @param {string} expr \n\t * @return {Function} the bound method to be evaluated later\n\t * @private\n\t */\n\tTone.TimeBase.prototype._parseExprString = function(exprString){\n\t\tif (!this.isString(exprString)){\n\t\t\texprString = exprString.toString();\n\t\t}\n\t\tvar lexer = this._tokenize(exprString);\n\t\tvar tree = this._parseBinary(lexer);\n\t\treturn tree;\n\t};\n\n\t///////////////////////////////////////////////////////////////////////////\n\t//\tDEFAULTS\n\t///////////////////////////////////////////////////////////////////////////\n\n\t/**\n\t * The initial expression value\n\t * @return {Number} The initial value 0\n\t * @private\n\t */\n\tTone.TimeBase.prototype._noOp = function(){\n\t\treturn 0;\n\t};\n\n\t/**\n\t * The default expression value if no arguments are given\n\t * @private\n\t */\n\tTone.TimeBase.prototype._defaultExpr = function(){\n\t\treturn this._noOp;\n\t};\n\n\t/**\n\t * The default units if none are given.\n\t * @private\n\t */\n\tTone.TimeBase.prototype._defaultUnits = \"s\";\n\n\t///////////////////////////////////////////////////////////////////////////\n\t//\tUNIT CONVERSIONS\n\t///////////////////////////////////////////////////////////////////////////\n\n\t/**\n\t * Returns the value of a frequency in the current units\n\t * @param {Frequency} freq\n\t * @return {Number}\n\t * @private\n\t */\n\tTone.TimeBase.prototype._frequencyToUnits = function(freq){\n\t\treturn 1/freq;\n\t};\n\n\t/**\n\t * Return the value of the beats in the current units\n\t * @param {Number} beats\n\t * @return {Number}\n\t * @private\n\t */\n\tTone.TimeBase.prototype._beatsToUnits = function(beats){\n\t\treturn (60 / Tone.Transport.bpm.value) * beats;\n\t};\n\n\t/**\n\t * Returns the value of a second in the current units\n\t * @param {Seconds} seconds\n\t * @return {Number}\n\t * @private\n\t */\n\tTone.TimeBase.prototype._secondsToUnits = function(seconds){\n\t\treturn seconds;\n\t};\n\n\t/**\n\t * Returns the value of a tick in the current time units\n\t * @param {Ticks} ticks\n\t * @return {Number}\n\t * @private\n\t */\n\tTone.TimeBase.prototype._ticksToUnits = function(ticks){\n\t\treturn ticks * (this._beatsToUnits(1) / Tone.Transport.PPQ);\n\t};\n\n\t/**\n\t * Return the time signature.\n\t * @return {Number}\n\t * @private\n\t */\n\tTone.TimeBase.prototype._timeSignature = function(){\n\t\treturn Tone.Transport.timeSignature;\n\t};\n\n\t///////////////////////////////////////////////////////////////////////////\n\t//\tEXPRESSIONS\n\t///////////////////////////////////////////////////////////////////////////\n\n\t/**\n\t * Push an expression onto the expression list\n\t * @param {Time} val\n\t * @param {String} type\n\t * @param {String} units\n\t * @return {Tone.TimeBase} \n\t * @private\n\t */\n\tTone.TimeBase.prototype._pushExpr = function(val, name, units){\n\t\t//create the expression\n\t\tif (!(val instanceof Tone.TimeBase)){\n\t\t\tval = new this.constructor(val, units);\n\t\t}\n\t\tthis._expr = this._binaryExpressions[name].method.bind(this, this._expr, val._expr);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Add to the current value.\n\t * @param {Time} val The value to add\n\t * @param {String=} units Optional units to use with the value.\n\t * @return {Tone.TimeBase} this\n\t * @example\n\t * Tone.TimeBase(\"2m\").add(\"1m\"); //\"3m\"\n\t */\n\tTone.TimeBase.prototype.add = function(val, units){\n\t\treturn this._pushExpr(val, \"+\", units);\n\t};\n\n\t/**\n\t * Subtract the value from the current time.\n\t * @param {Time} val The value to subtract\n\t * @param {String=} units Optional units to use with the value.\n\t * @return {Tone.TimeBase} this\n\t * @example\n\t * Tone.TimeBase(\"2m\").sub(\"1m\"); //\"1m\"\n\t */\n\tTone.TimeBase.prototype.sub = function(val, units){\n\t\treturn this._pushExpr(val, \"-\", units);\n\t};\n\n\t/**\n\t * Multiply the current value by the given time.\n\t * @param {Time} val The value to multiply\n\t * @param {String=} units Optional units to use with the value.\n\t * @return {Tone.TimeBase} this\n\t * @example\n\t * Tone.TimeBase(\"2m\").mult(\"2\"); //\"4m\"\n\t */\n\tTone.TimeBase.prototype.mult = function(val, units){\n\t\treturn this._pushExpr(val, \"*\", units);\n\t};\n\n\t/**\n\t * Divide the current value by the given time.\n\t * @param {Time} val The value to divide by\n\t * @param {String=} units Optional units to use with the value.\n\t * @return {Tone.TimeBase} this\n\t * @example\n\t * Tone.TimeBase(\"2m\").div(2); //\"1m\"\n\t */\n\tTone.TimeBase.prototype.div = function(val, units){\n\t\treturn this._pushExpr(val, \"/\", units);\n\t};\n\n\t/**\n\t * Evaluate the time value. Returns the time\n\t * in seconds.\n\t * @return {Seconds} \n\t */\n\tTone.TimeBase.prototype.valueOf = function(){\n\t\treturn this._expr();\n\t};\n\n\t/**\n\t * Clean up\n\t * @return {Tone.TimeBase} this\n\t */\n\tTone.TimeBase.prototype.dispose = function(){\n\t\tthis._expr = null;\n\t};\n\n\treturn Tone.TimeBase;\n});","define([\"Tone/core/Tone\", \"Tone/type/Type\"], function(Tone){\n\n\t\"use strict\";\n\n\t/**\n\t * @class Tone.Param wraps the native Web Audio's AudioParam to provide\n\t * additional unit conversion functionality. It also\n\t * serves as a base-class for classes which have a single,\n\t * automatable parameter. \n\t * @extends {Tone}\n\t * @param {AudioParam} param The parameter to wrap.\n\t * @param {Tone.Type} units The units of the audio param.\n\t * @param {Boolean} convert If the param should be converted.\n\t */\n\tTone.Param = function(){\n\n\t\tvar options = this.optionsObject(arguments, [\"param\", \"units\", \"convert\"], Tone.Param.defaults);\n\n\t\t/**\n\t\t * The native parameter to control\n\t\t * @type {AudioParam}\n\t\t * @private\n\t\t */\n\t\tthis._param = this.input = options.param;\n\n\t\t/**\n\t\t * The units of the parameter\n\t\t * @type {Tone.Type}\n\t\t */\n\t\tthis.units = options.units;\n\n\t\t/**\n\t\t * If the value should be converted or not\n\t\t * @type {Boolean}\n\t\t */\n\t\tthis.convert = options.convert;\n\n\t\t/**\n\t\t * True if the signal value is being overridden by \n\t\t * a connected signal.\n\t\t * @readOnly\n\t\t * @type {boolean}\n\t\t * @private\n\t\t */\n\t\tthis.overridden = false;\n\n\t\t/**\n\t\t * If there is an LFO, this is where it is held.\n\t\t * @type {Tone.LFO}\n\t\t * @private\n\t\t */\n\t\tthis._lfo = null;\n\n\t\tif (this.isObject(options.lfo)){\n\t\t\tthis.value = options.lfo;\n\t\t} else if (!this.isUndef(options.value)){\n\t\t\tthis.value = options.value;\n\t\t}\n\t};\n\n\tTone.extend(Tone.Param);\n\t\n\t/**\n\t * Defaults\n\t * @type {Object}\n\t * @const\n\t */\n\tTone.Param.defaults = {\n\t\t\"units\" : Tone.Type.Default,\n\t\t\"convert\" : true,\n\t\t\"param\" : undefined\n\t};\n\n\t/**\n\t * The current value of the parameter. \n\t * @memberOf Tone.Param#\n\t * @type {Number}\n\t * @name value\n\t */\n\tObject.defineProperty(Tone.Param.prototype, \"value\", {\n\t\tget : function(){\n\t\t\treturn this._toUnits(this._param.value);\n\t\t},\n\t\tset : function(value){\n\t\t\tif (this.isObject(value)){\n\t\t\t\t//throw an error if the LFO needs to be included\n\t\t\t\tif (this.isUndef(Tone.LFO)){\n\t\t\t\t\tthrow new Error(\"Include 'Tone.LFO' to use an LFO as a Param value.\");\n\t\t\t\t}\n\t\t\t\t//remove the old one\n\t\t\t\tif (this._lfo){\n\t\t\t\t\tthis._lfo.dispose();\n\t\t\t\t}\n\t\t\t\tthis._lfo = new Tone.LFO(value).start();\n\t\t\t\tthis._lfo.connect(this.input);\n\t\t\t} else {\n\t\t\t\tvar convertedVal = this._fromUnits(value);\n\t\t\t\tthis._param.cancelScheduledValues(0);\n\t\t\t\tthis._param.value = convertedVal;\n\t\t\t}\n\t\t}\n\t});\n\n\t/**\n\t * Convert the given value from the type specified by Tone.Param.units\n\t * into the destination value (such as Gain or Frequency).\n\t * @private\n\t * @param {*} val the value to convert\n\t * @return {number} the number which the value should be set to\n\t */\n\tTone.Param.prototype._fromUnits = function(val){\n\t\tif (this.convert || this.isUndef(this.convert)){\n\t\t\tswitch(this.units){\n\t\t\t\tcase Tone.Type.Time: \n\t\t\t\t\treturn this.toSeconds(val);\n\t\t\t\tcase Tone.Type.Frequency: \n\t\t\t\t\treturn this.toFrequency(val);\n\t\t\t\tcase Tone.Type.Decibels: \n\t\t\t\t\treturn this.dbToGain(val);\n\t\t\t\tcase Tone.Type.NormalRange: \n\t\t\t\t\treturn Math.min(Math.max(val, 0), 1);\n\t\t\t\tcase Tone.Type.AudioRange: \n\t\t\t\t\treturn Math.min(Math.max(val, -1), 1);\n\t\t\t\tcase Tone.Type.Positive: \n\t\t\t\t\treturn Math.max(val, 0);\n\t\t\t\tdefault:\n\t\t\t\t\treturn val;\n\t\t\t}\n\t\t} else {\n\t\t\treturn val;\n\t\t}\n\t};\n\n\t/**\n\t * Convert the parameters value into the units specified by Tone.Param.units.\n\t * @private\n\t * @param {number} val the value to convert\n\t * @return {number}\n\t */\n\tTone.Param.prototype._toUnits = function(val){\n\t\tif (this.convert || this.isUndef(this.convert)){\n\t\t\tswitch(this.units){\n\t\t\t\tcase Tone.Type.Decibels: \n\t\t\t\t\treturn this.gainToDb(val);\n\t\t\t\tdefault:\n\t\t\t\t\treturn val;\n\t\t\t}\n\t\t} else {\n\t\t\treturn val;\n\t\t}\n\t};\n\n\t/**\n\t * the minimum output value\n\t * @type {Number}\n\t * @private\n\t */\n\tTone.Param.prototype._minOutput = 0.00001;\n\n\t/**\n\t * Schedules a parameter value change at the given time.\n\t * @param {*}\tvalue The value to set the signal.\n\t * @param {Time} time The time when the change should occur.\n\t * @returns {Tone.Param} this\n\t * @example\n\t * //set the frequency to \"G4\" in exactly 1 second from now. \n\t * freq.setValueAtTime(\"G4\", \"+1\");\n\t */\n\tTone.Param.prototype.setValueAtTime = function(value, time){\n\t\tvalue = this._fromUnits(value);\n\t\ttime = this.toSeconds(time);\n\t\tif (time <= this.now() + this.blockTime){\n\t\t\tthis._param.value = value;\n\t\t} else {\n\t\t\tthis._param.setValueAtTime(value, time);\n\t\t}\n\t\treturn this;\n\t};\n\n\t/**\n\t * Creates a schedule point with the current value at the current time.\n\t * This is useful for creating an automation anchor point in order to \n\t * schedule changes from the current value. \n\t *\n\t * @param {number=} now (Optionally) pass the now value in. \n\t * @returns {Tone.Param} this\n\t */\n\tTone.Param.prototype.setRampPoint = function(now){\n\t\tnow = this.defaultArg(now, this.now());\n\t\tvar currentVal = this._param.value;\n\t\t// exponentialRampToValueAt cannot ever ramp from or to 0\n\t\t// More info: https://bugzilla.mozilla.org/show_bug.cgi?id=1125600#c2\n\t\tif (currentVal === 0){\n\t\t\tcurrentVal = this._minOutput;\n\t\t}\n\t\tthis._param.setValueAtTime(currentVal, now);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Schedules a linear continuous change in parameter value from the \n\t * previous scheduled parameter value to the given value.\n\t * \n\t * @param {number} value \n\t * @param {Time} endTime \n\t * @returns {Tone.Param} this\n\t */\n\tTone.Param.prototype.linearRampToValueAtTime = function(value, endTime){\n\t\tvalue = this._fromUnits(value);\n\t\tthis._param.linearRampToValueAtTime(value, this.toSeconds(endTime));\n\t\treturn this;\n\t};\n\n\t/**\n\t * Schedules an exponential continuous change in parameter value from \n\t * the previous scheduled parameter value to the given value.\n\t * \n\t * @param {number} value \n\t * @param {Time} endTime \n\t * @returns {Tone.Param} this\n\t */\n\tTone.Param.prototype.exponentialRampToValueAtTime = function(value, endTime){\n\t\tvalue = this._fromUnits(value);\n\t\tvalue = Math.max(this._minOutput, value);\n\t\tthis._param.exponentialRampToValueAtTime(value, this.toSeconds(endTime));\n\t\treturn this;\n\t};\n\n\t/**\n\t * Schedules an exponential continuous change in parameter value from \n\t * the current time and current value to the given value over the \n\t * duration of the rampTime.\n\t * \n\t * @param {number} value The value to ramp to.\n\t * @param {Time} rampTime the time that it takes the \n\t * value to ramp from it's current value\n\t * @param {Time}\t[startTime=now] \tWhen the ramp should start. \n\t * @returns {Tone.Param} this\n\t * @example\n\t * //exponentially ramp to the value 2 over 4 seconds. \n\t * signal.exponentialRampToValue(2, 4);\n\t */\n\tTone.Param.prototype.exponentialRampToValue = function(value, rampTime, startTime){\n\t\tstartTime = this.toSeconds(startTime);\n\t\tthis.setRampPoint(startTime);\n\t\tthis.exponentialRampToValueAtTime(value, startTime + this.toSeconds(rampTime));\n\t\treturn this;\n\t};\n\n\t/**\n\t * Schedules an linear continuous change in parameter value from \n\t * the current time and current value to the given value over the \n\t * duration of the rampTime.\n\t * \n\t * @param {number} value The value to ramp to.\n\t * @param {Time} rampTime the time that it takes the \n\t * value to ramp from it's current value\n\t * @param {Time}\t[startTime=now] \tWhen the ramp should start. \n\t * @returns {Tone.Param} this\n\t * @example\n\t * //linearly ramp to the value 4 over 3 seconds. \n\t * signal.linearRampToValue(4, 3);\n\t */\n\tTone.Param.prototype.linearRampToValue = function(value, rampTime, startTime){\n\t\tstartTime = this.toSeconds(startTime);\n\t\tthis.setRampPoint(startTime);\n\t\tthis.linearRampToValueAtTime(value, startTime + this.toSeconds(rampTime));\n\t\treturn this;\n\t};\n\n\t/**\n\t * Start exponentially approaching the target value at the given time with\n\t * a rate having the given time constant.\n\t * @param {number} value \n\t * @param {Time} startTime \n\t * @param {number} timeConstant \n\t * @returns {Tone.Param} this \n\t */\n\tTone.Param.prototype.setTargetAtTime = function(value, startTime, timeConstant){\n\t\tvalue = this._fromUnits(value);\n\t\t// The value will never be able to approach without timeConstant > 0.\n\t\t// http://www.w3.org/TR/webaudio/#dfn-setTargetAtTime, where the equation\n\t\t// is described. 0 results in a division by 0.\n\t\tvalue = Math.max(this._minOutput, value);\n\t\ttimeConstant = Math.max(this._minOutput, timeConstant);\n\t\tthis._param.setTargetAtTime(value, this.toSeconds(startTime), timeConstant);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Sets an array of arbitrary parameter values starting at the given time\n\t * for the given duration.\n\t * \t\n\t * @param {Array} values \n\t * @param {Time} startTime \n\t * @param {Time} duration \n\t * @returns {Tone.Param} this\n\t */\n\tTone.Param.prototype.setValueCurveAtTime = function(values, startTime, duration){\n\t\tfor (var i = 0; i < values.length; i++){\n\t\t\tvalues[i] = this._fromUnits(values[i]);\n\t\t}\n\t\tthis._param.setValueCurveAtTime(values, this.toSeconds(startTime), this.toSeconds(duration));\n\t\treturn this;\n\t};\n\n\t/**\n\t * Cancels all scheduled parameter changes with times greater than or \n\t * equal to startTime.\n\t * \n\t * @param {Time} startTime\n\t * @returns {Tone.Param} this\n\t */\n\tTone.Param.prototype.cancelScheduledValues = function(startTime){\n\t\tthis._param.cancelScheduledValues(this.toSeconds(startTime));\n\t\treturn this;\n\t};\n\n\t/**\n\t * Ramps to the given value over the duration of the rampTime. \n\t * Automatically selects the best ramp type (exponential or linear)\n\t * depending on the `units` of the signal\n\t * \n\t * @param {number} value \n\t * @param {Time} rampTime \tThe time that it takes the \n\t * value to ramp from it's current value\n\t * @param {Time}\t[startTime=now] \tWhen the ramp should start. \n\t * @returns {Tone.Param} this\n\t * @example\n\t * //ramp to the value either linearly or exponentially \n\t * //depending on the \"units\" value of the signal\n\t * signal.rampTo(0, 10);\n\t * @example\n\t * //schedule it to ramp starting at a specific time\n\t * signal.rampTo(0, 10, 5)\n\t */\n\tTone.Param.prototype.rampTo = function(value, rampTime, startTime){\n\t\trampTime = this.defaultArg(rampTime, 0);\n\t\tif (this.units === Tone.Type.Frequency || this.units === Tone.Type.BPM || this.units === Tone.Type.Decibels){\n\t\t\tthis.exponentialRampToValue(value, rampTime, startTime);\n\t\t} else {\n\t\t\tthis.linearRampToValue(value, rampTime, startTime);\n\t\t}\n\t\treturn this;\n\t};\n\n\t/**\n\t * The LFO created by the signal instance. If none\n\t * was created, this is null.\n\t * @type {Tone.LFO}\n\t * @readOnly\n\t * @memberOf Tone.Param#\n\t * @name lfo\n\t */\n\tObject.defineProperty(Tone.Param.prototype, \"lfo\", {\n\t\tget : function(){\n\t\t\treturn this._lfo;\n\t\t}\n\t});\n\n\t/**\n\t * Clean up\n\t * @returns {Tone.Param} this\n\t */\n\tTone.Param.prototype.dispose = function(){\n\t\tTone.prototype.dispose.call(this);\n\t\tthis._param = null;\n\t\tif (this._lfo){\n\t\t\tthis._lfo.dispose();\n\t\t\tthis._lfo = null;\n\t\t}\n\t\treturn this;\n\t};\n\n\treturn Tone.Param;\n});","define([\"Tone/core/Tone\", \"Tone/type/Type\"], function (Tone) {\n\n\t\"use strict\";\n\n\t/**\n\t * @class A Timeline class for scheduling and maintaining state\n\t * along a timeline. All events must have a \"time\" property. \n\t * Internally, events are stored in time order for fast \n\t * retrieval.\n\t * @extends {Tone}\n\t * @param {Positive} [memory=Infinity] The number of previous events that are retained.\n\t */\n\tTone.Timeline = function(){\n\n\t\tvar options = this.optionsObject(arguments, [\"memory\"], Tone.Timeline.defaults);\n\n\t\t/**\n\t\t * The array of scheduled timeline events\n\t\t * @type {Array}\n\t\t * @private\n\t\t */\n\t\tthis._timeline = [];\n\n\t\t/**\n\t\t * An array of items to remove from the list. \n\t\t * @type {Array}\n\t\t * @private\n\t\t */\n\t\tthis._toRemove = [];\n\n\t\t/**\n\t\t * Flag if the tieline is mid iteration\n\t\t * @private\n\t\t * @type {Boolean}\n\t\t */\n\t\tthis._iterating = false;\n\n\t\t/**\n\t\t * The memory of the timeline, i.e.\n\t\t * how many events in the past it will retain\n\t\t * @type {Positive}\n\t\t */\n\t\tthis.memory = options.memory;\n\t};\n\n\tTone.extend(Tone.Timeline);\n\n\t/**\n\t * the default parameters\n\t * @static\n\t * @const\n\t */\n\tTone.Timeline.defaults = {\n\t\t\"memory\" : Infinity\n\t};\n\n\t/**\n\t * The number of items in the timeline.\n\t * @type {Number}\n\t * @memberOf Tone.Timeline#\n\t * @name length\n\t * @readOnly\n\t */\n\tObject.defineProperty(Tone.Timeline.prototype, \"length\", {\n\t\tget : function(){\n\t\t\treturn this._timeline.length;\n\t\t}\n\t});\n\n\t/**\n\t * Insert an event object onto the timeline. Events must have a \"time\" attribute.\n\t * @param {Object} event The event object to insert into the \n\t * timeline. \n\t * @returns {Tone.Timeline} this\n\t */\n\tTone.Timeline.prototype.add = function(event){\n\t\t//the event needs to have a time attribute\n\t\tif (this.isUndef(event.time)){\n\t\t\tthrow new Error(\"Tone.Timeline: events must have a time attribute\");\n\t\t}\n\t\tif (this._timeline.length){\n\t\t\tvar index = this._search(event.time);\n\t\t\tthis._timeline.splice(index + 1, 0, event);\n\t\t} else {\n\t\t\tthis._timeline.push(event);\t\t\t\n\t\t}\n\t\t//if the length is more than the memory, remove the previous ones\n\t\tif (this.length > this.memory){\n\t\t\tvar diff = this.length - this.memory;\n\t\t\tthis._timeline.splice(0, diff);\n\t\t}\n\t\treturn this;\n\t};\n\n\t/**\n\t * Remove an event from the timeline.\n\t * @param {Object} event The event object to remove from the list.\n\t * @returns {Tone.Timeline} this\n\t */\n\tTone.Timeline.prototype.remove = function(event){\n\t\tif (this._iterating){\n\t\t\tthis._toRemove.push(event);\n\t\t} else {\n\t\t\tvar index = this._timeline.indexOf(event);\n\t\t\tif (index !== -1){\n\t\t\t\tthis._timeline.splice(index, 1);\n\t\t\t}\n\t\t}\n\t\treturn this;\n\t};\n\n\t/**\n\t * Get the nearest event whose time is less than or equal to the given time.\n\t * @param {Number} time The time to query.\n\t * @returns {Object} The event object set after that time.\n\t */\n\tTone.Timeline.prototype.get = function(time){\n\t\tvar index = this._search(time);\n\t\tif (index !== -1){\n\t\t\treturn this._timeline[index];\n\t\t} else {\n\t\t\treturn null;\n\t\t}\n\t};\n\n\t/**\n\t * Return the first event in the timeline without removing it\n\t * @returns {Object} The first event object\n\t */\n\tTone.Timeline.prototype.peek = function(){\n\t\treturn this._timeline[0];\n\t};\n\n\t/**\n\t * Return the first event in the timeline and remove it\n\t * @returns {Object} The first event object\n\t */\n\tTone.Timeline.prototype.shift = function(){\n\t\treturn this._timeline.shift();\n\t};\n\n\t/**\n\t * Get the event which is scheduled after the given time.\n\t * @param {Number} time The time to query.\n\t * @returns {Object} The event object after the given time\n\t */\n\tTone.Timeline.prototype.getAfter = function(time){\n\t\tvar index = this._search(time);\n\t\tif (index + 1 < this._timeline.length){\n\t\t\treturn this._timeline[index + 1];\n\t\t} else {\n\t\t\treturn null;\n\t\t}\n\t};\n\n\t/**\n\t * Get the event before the event at the given time.\n\t * @param {Number} time The time to query.\n\t * @returns {Object} The event object before the given time\n\t */\n\tTone.Timeline.prototype.getBefore = function(time){\n\t\tvar len = this._timeline.length;\n\t\t//if it's after the last item, return the last item\n\t\tif (len > 0 && this._timeline[len - 1].time < time){\n\t\t\treturn this._timeline[len - 1];\n\t\t}\n\t\tvar index = this._search(time);\n\t\tif (index - 1 >= 0){\n\t\t\treturn this._timeline[index - 1];\n\t\t} else {\n\t\t\treturn null;\n\t\t}\n\t};\n\n\t/**\n\t * Cancel events after the given time\n\t * @param {Number} time The time to query.\n\t * @returns {Tone.Timeline} this\n\t */\n\tTone.Timeline.prototype.cancel = function(after){\n\t\tif (this._timeline.length > 1){\n\t\t\tvar index = this._search(after);\n\t\t\tif (index >= 0){\n\t\t\t\tif (this._timeline[index].time === after){\n\t\t\t\t\t//get the first item with that time\n\t\t\t\t\tfor (var i = index; i >= 0; i--){\n\t\t\t\t\t\tif (this._timeline[i].time === after){\n\t\t\t\t\t\t\tindex = i;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tthis._timeline = this._timeline.slice(0, index);\n\t\t\t\t} else {\n\t\t\t\t\tthis._timeline = this._timeline.slice(0, index + 1);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tthis._timeline = [];\n\t\t\t}\n\t\t} else if (this._timeline.length === 1){\n\t\t\t//the first item's time\n\t\t\tif (this._timeline[0].time >= after){\n\t\t\t\tthis._timeline = [];\n\t\t\t}\n\t\t}\n\t\treturn this;\n\t};\n\n\t/**\n\t * Cancel events before or equal to the given time.\n\t * @param {Number} time The time to cancel before.\n\t * @returns {Tone.Timeline} this\n\t */\n\tTone.Timeline.prototype.cancelBefore = function(time){\n\t\tif (this._timeline.length){\n\t\t\tvar index = this._search(time);\n\t\t\tif (index >= 0){\n\t\t\t\tthis._timeline = this._timeline.slice(index + 1);\n\t\t\t}\n\t\t}\n\t\treturn this;\n\t};\n\n\t/**\n\t * Does a binary serach on the timeline array and returns the \n\t * nearest event index whose time is after or equal to the given time.\n\t * If a time is searched before the first index in the timeline, -1 is returned.\n\t * If the time is after the end, the index of the last item is returned.\n\t * @param {Number} time \n\t * @return {Number} the index in the timeline array \n\t * @private\n\t */\n\tTone.Timeline.prototype._search = function(time){\n\t\tvar beginning = 0;\n\t\tvar len = this._timeline.length;\n\t\tvar end = len;\n\t\tif (len > 0 && this._timeline[len - 1].time <= time){\n\t\t\treturn len - 1;\n\t\t}\n\t\twhile (beginning < end){\n\t\t\t// calculate the midpoint for roughly equal partition\n\t\t\tvar midPoint = Math.floor(beginning + (end - beginning) / 2);\n\t\t\tvar event = this._timeline[midPoint];\n\t\t\tvar nextEvent = this._timeline[midPoint + 1];\n\t\t\tif (event.time === time){\n\t\t\t\t//choose the last one that has the same time\n\t\t\t\tfor (var i = midPoint; i < this._timeline.length; i++){\n\t\t\t\t\tvar testEvent = this._timeline[i];\n\t\t\t\t\tif (testEvent.time === time){\n\t\t\t\t\t\tmidPoint = i;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn midPoint;\n\t\t\t} else if (event.time < time && nextEvent.time > time){\n\t\t\t\treturn midPoint;\n\t\t\t} else if (event.time > time){\n\t\t\t\t//search lower\n\t\t\t\tend = midPoint;\n\t\t\t} else if (event.time < time){\n\t\t\t\t//search upper\n\t\t\t\tbeginning = midPoint + 1;\n\t\t\t} \n\t\t}\n\t\treturn -1;\n\t};\n\n\t/**\n\t * Internal iterator. Applies extra safety checks for \n\t * removing items from the array. \n\t * @param {Function} callback \n\t * @param {Number=} lowerBound \n\t * @param {Number=} upperBound \n\t * @private\n\t */\n\tTone.Timeline.prototype._iterate = function(callback, lowerBound, upperBound){\n\t\tthis._iterating = true;\n\t\tlowerBound = this.defaultArg(lowerBound, 0);\n\t\tupperBound = this.defaultArg(upperBound, this._timeline.length - 1);\n\t\tfor (var i = lowerBound; i <= upperBound; i++){\n\t\t\tcallback(this._timeline[i]);\n\t\t}\n\t\tthis._iterating = false;\n\t\tif (this._toRemove.length > 0){\n\t\t\tfor (var j = 0; j < this._toRemove.length; j++){\n\t\t\t\tvar index = this._timeline.indexOf(this._toRemove[j]);\n\t\t\t\tif (index !== -1){\n\t\t\t\t\tthis._timeline.splice(index, 1);\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis._toRemove = [];\n\t\t}\n\t};\n\n\t/**\n\t * Iterate over everything in the array\n\t * @param {Function} callback The callback to invoke with every item\n\t * @returns {Tone.Timeline} this\n\t */\n\tTone.Timeline.prototype.forEach = function(callback){\n\t\tthis._iterate(callback);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Iterate over everything in the array at or before the given time.\n\t * @param {Number} time The time to check if items are before\n\t * @param {Function} callback The callback to invoke with every item\n\t * @returns {Tone.Timeline} this\n\t */\n\tTone.Timeline.prototype.forEachBefore = function(time, callback){\n\t\t//iterate over the items in reverse so that removing an item doesn't break things\n\t\tvar upperBound = this._search(time);\n\t\tif (upperBound !== -1){\n\t\t\tthis._iterate(callback, 0, upperBound);\n\t\t}\n\t\treturn this;\n\t};\n\n\t/**\n\t * Iterate over everything in the array after the given time.\n\t * @param {Number} time The time to check if items are before\n\t * @param {Function} callback The callback to invoke with every item\n\t * @returns {Tone.Timeline} this\n\t */\n\tTone.Timeline.prototype.forEachAfter = function(time, callback){\n\t\t//iterate over the items in reverse so that removing an item doesn't break things\n\t\tvar lowerBound = this._search(time);\n\t\tthis._iterate(callback, lowerBound + 1);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Iterate over everything in the array at or after the given time. Similar to \n\t * forEachAfter, but includes the item(s) at the given time.\n\t * @param {Number} time The time to check if items are before\n\t * @param {Function} callback The callback to invoke with every item\n\t * @returns {Tone.Timeline} this\n\t */\n\tTone.Timeline.prototype.forEachFrom = function(time, callback){\n\t\t//iterate over the items in reverse so that removing an item doesn't break things\n\t\tvar lowerBound = this._search(time);\n\t\t//work backwards until the event time is less than time\n\t\twhile (lowerBound >= 0 && this._timeline[lowerBound].time >= time){\n\t\t\tlowerBound--;\n\t\t}\n\t\tthis._iterate(callback, lowerBound + 1);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Iterate over everything in the array at the given time\n\t * @param {Number} time The time to check if items are before\n\t * @param {Function} callback The callback to invoke with every item\n\t * @returns {Tone.Timeline} this\n\t */\n\tTone.Timeline.prototype.forEachAtTime = function(time, callback){\n\t\t//iterate over the items in reverse so that removing an item doesn't break things\n\t\tvar upperBound = this._search(time);\n\t\tif (upperBound !== -1){\n\t\t\tthis._iterate(function(event){\n\t\t\t\tif (event.time === time){\n\t\t\t\t\tcallback(event);\n\t\t\t\t} \n\t\t\t}, 0, upperBound);\n\t\t}\n\t\treturn this;\n\t};\n\n\t/**\n\t * Clean up.\n\t * @return {Tone.Timeline} this\n\t */\n\tTone.Timeline.prototype.dispose = function(){\n\t\tTone.prototype.dispose.call(this);\n\t\tthis._timeline = null;\n\t\tthis._toRemove = null;\n\t};\n\n\treturn Tone.Timeline;\n});","define([\"Tone/core/Tone\", \"Tone/signal/Multiply\", \"Tone/signal/Signal\"], function(Tone){\n\n\t\"use strict\";\n\n\t/**\n\t * @class Negate the incoming signal. i.e. an input signal of 10 will output -10\n\t *\n\t * @constructor\n\t * @extends {Tone.SignalBase}\n\t * @example\n\t * var neg = new Tone.Negate();\n\t * var sig = new Tone.Signal(-2).connect(neg);\n\t * //output of neg is positive 2. \n\t */\n\tTone.Negate = function(){\n\t\t/**\n\t\t * negation is done by multiplying by -1\n\t\t * @type {Tone.Multiply}\n\t\t * @private\n\t\t */\n\t\tthis._multiply = this.input = this.output = new Tone.Multiply(-1);\n\t};\n\n\tTone.extend(Tone.Negate, Tone.SignalBase);\n\n\t/**\n\t * clean up\n\t * @returns {Tone.Negate} this\n\t */\n\tTone.Negate.prototype.dispose = function(){\n\t\tTone.prototype.dispose.call(this);\n\t\tthis._multiply.dispose();\n\t\tthis._multiply = null;\n\t\treturn this;\n\t}; \n\n\treturn Tone.Negate;\n});","define([\"Tone/core/Tone\", \"Tone/signal/Signal\", \"Tone/signal/Multiply\", \"Tone/signal/WaveShaper\"], \nfunction(Tone){\n\n\t\"use strict\";\n\n\t/**\n\t * @class GreaterThanZero outputs 1 when the input is strictly greater than zero\n\t * \n\t * @constructor\n\t * @extends {Tone.SignalBase}\n\t * @example\n\t * var gt0 = new Tone.GreaterThanZero();\n\t * var sig = new Tone.Signal(0.01).connect(gt0);\n\t * //the output of gt0 is 1. \n\t * sig.value = 0;\n\t * //the output of gt0 is 0. \n\t */\n\tTone.GreaterThanZero = function(){\n\t\t\n\t\t/**\n\t\t * @type {Tone.WaveShaper}\n\t\t * @private\n\t\t */\n\t\tthis._thresh = this.output = new Tone.WaveShaper(function(val){\n\t\t\tif (val <= 0){\n\t\t\t\treturn 0;\n\t\t\t} else {\n\t\t\t\treturn 1;\n\t\t\t}\n\t\t}, 127);\n\n\t\t/**\n\t\t * scale the first thresholded signal by a large value.\n\t\t * this will help with values which are very close to 0\n\t\t * @type {Tone.Multiply}\n\t\t * @private\n\t\t */\n\t\tthis._scale = this.input = new Tone.Multiply(10000);\n\n\t\t//connections\n\t\tthis._scale.connect(this._thresh);\n\t};\n\n\tTone.extend(Tone.GreaterThanZero, Tone.SignalBase);\n\n\t/**\n\t * dispose method\n\t * @returns {Tone.GreaterThanZero} this\n\t */\n\tTone.GreaterThanZero.prototype.dispose = function(){\n\t\tTone.prototype.dispose.call(this);\n\t\tthis._scale.dispose();\n\t\tthis._scale = null;\n\t\tthis._thresh.dispose();\n\t\tthis._thresh = null;\n\t\treturn this;\n\t};\n\n\treturn Tone.GreaterThanZero;\n});","/**\n * StartAudioContext.js\n * @author Yotam Mann\n * @license http://opensource.org/licenses/MIT MIT License\n * @copyright 2016 Yotam Mann\n */\n(function (root, factory) {\n\tif (typeof define === \"function\" && define.amd) {\n\t\tdefine([], factory)\n\t } else if (typeof module === \"object\" && module.exports) {\n module.exports = factory()\n\t} else {\n\t\troot.StartAudioContext = factory()\n }\n}(this, function () {\n\n\t//TAP LISTENER/////////////////////////////////////////////////////////////\n\n\t/**\n\t * @class Listens for non-dragging tap ends on the given element\n\t * @param {Element} element\n\t * @internal\n\t */\n\tvar TapListener = function(element, context){\n\n\t\tthis._dragged = false\n\n\t\tthis._element = element\n\n\t\tthis._bindedMove = this._moved.bind(this)\n\t\tthis._bindedEnd = this._ended.bind(this, context)\n\n\t\telement.addEventListener(\"touchstart\", this._bindedEnd)\n\t\telement.addEventListener(\"touchmove\", this._bindedMove)\n\t\telement.addEventListener(\"touchend\", this._bindedEnd)\n\t\telement.addEventListener(\"mouseup\", this._bindedEnd)\n\t}\n\n\t/**\n\t * drag move event\n\t */\n\tTapListener.prototype._moved = function(e){\n\t\tthis._dragged = true\n\t};\n\n\t/**\n\t * tap ended listener\n\t */\n\tTapListener.prototype._ended = function(context){\n\t\tif (!this._dragged){\n\t\t\tstartContext(context)\n\t\t}\n\t\tthis._dragged = false\n\t};\n\n\t/**\n\t * remove all the bound events\n\t */\n\tTapListener.prototype.dispose = function(){\n\t\tthis._element.removeEventListener(\"touchstart\", this._bindedEnd)\n\t\tthis._element.removeEventListener(\"touchmove\", this._bindedMove)\n\t\tthis._element.removeEventListener(\"touchend\", this._bindedEnd)\n\t\tthis._element.removeEventListener(\"mouseup\", this._bindedEnd)\n\t\tthis._bindedMove = null\n\t\tthis._bindedEnd = null\n\t\tthis._element = null\n\t};\n\n\t//END TAP LISTENER/////////////////////////////////////////////////////////\n\n\t/**\n\t * Plays a silent sound and also invoke the \"resume\" method\n\t * @param {AudioContext} context\n\t * @private\n\t */\n\tfunction startContext(context){\n\t\t// this accomplishes the iOS specific requirement\n\t\tvar buffer = context.createBuffer(1, 1, context.sampleRate)\n\t\tvar source = context.createBufferSource()\n\t\tsource.buffer = buffer\n\t\tsource.connect(context.destination)\n\t\tsource.start(0)\n\n\t\t// resume the audio context\n\t\tif (context.resume){\n\t\t\tcontext.resume()\n\t\t}\n\t}\n\n\t/**\n\t * Returns true if the audio context is started\n\t * @param {AudioContext} context\n\t * @return {Boolean}\n\t * @private\n\t */\n\tfunction isStarted(context){\n\t\t return context.state === \"running\"\n\t}\n\n\t/**\n\t * Invokes the callback as soon as the AudioContext\n\t * is started\n\t * @param {AudioContext} context\n\t * @param {Function} callback\n\t */\n\tfunction onStarted(context, callback){\n\n\t\tfunction checkLoop(){\n\t\t\tif (isStarted(context)){\n\t\t\t\tcallback()\n\t\t\t} else {\n\t\t\t\trequestAnimationFrame(checkLoop)\n\t\t\t\tif (context.resume){\n\t\t\t\t\tcontext.resume()\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (isStarted(context)){\n\t\t\tcallback()\n\t\t} else {\n\t\t\tcheckLoop()\n\t\t}\n\t}\n\n\t/**\n\t * Add a tap listener to the audio context\n\t * @param {Array|Element|String|jQuery} element\n\t * @param {Array} tapListeners\n\t */\n\tfunction bindTapListener(element, tapListeners, context){\n\t\tif (Array.isArray(element) || (NodeList && element instanceof NodeList)){\n\t\t\tfor (var i = 0; i < element.length; i++){\n\t\t\t\tbindTapListener(element[i], tapListeners, context)\n\t\t\t}\n\t\t} else if (typeof element === \"string\"){\n\t\t\tbindTapListener(document.querySelectorAll(element), tapListeners, context)\n\t\t} else if (element.jquery && typeof element.toArray === \"function\"){\n\t\t\tbindTapListener(element.toArray(), tapListeners, context)\n\t\t} else if (Element && element instanceof Element){\n\t\t\t//if it's an element, create a TapListener\n\t\t\tvar tap = new TapListener(element, context)\n\t\t\ttapListeners.push(tap)\n\t\t} \n\t}\n\n\t/**\n\t * @param {AudioContext} context The AudioContext to start.\n\t * @param {Array|String|Element|jQuery=} elements For iOS, the list of elements\n\t * to bind tap event listeners\n\t * which will start the AudioContext. If\n\t * no elements are given, it will bind\n\t * to the document.body.\n\t * @param {Function=} callback The callback to invoke when the AudioContext is started.\n\t * @return {Promise} The promise is invoked when the AudioContext\n\t * is started.\n\t */\n\tfunction StartAudioContext(context, elements, callback){\n\n\t\t//the promise is invoked when the AudioContext is started\n\t\tvar promise = new Promise(function(success) {\n\t\t\tonStarted(context, success)\n\t\t})\n\n\t\t// The TapListeners bound to the elements\n\t\tvar tapListeners = []\n\n\t\t// add all the tap listeners\n\t\tif (!elements){\n\t\t\telements = document.body\n\t\t}\n\t\tbindTapListener(elements, tapListeners, context)\n\n\t\t//dispose all these tap listeners when the context is started\n\t\tpromise.then(function(){\n\t\t\tfor (var i = 0; i < tapListeners.length; i++){\n\t\t\t\ttapListeners[i].dispose()\n\t\t\t}\n\t\t\ttapListeners = null\n\n\t\t\tif (callback){\n\t\t\t\tcallback()\n\t\t\t}\n\t\t})\n\n\t\treturn promise\n\t}\n\n\treturn StartAudioContext\n}))","define([\"Tone/core/Tone\", \"Tone/signal/Signal\", \"Tone/signal/Expr\", \n\t\"Tone/signal/EqualPowerGain\", \"Tone/core/Gain\"], function(Tone){\n\n\t\"use strict\";\n\n\t/**\n\t * @class Tone.Crossfade provides equal power fading between two inputs. \n\t * More on crossfading technique [here](https://en.wikipedia.org/wiki/Fade_(audio_engineering)#Crossfading).\n\t *\n\t * @constructor\n\t * @extends {Tone}\n\t * @param {NormalRange} [initialFade=0.5]\n\t * @example\n\t * var crossFade = new Tone.CrossFade(0.5);\n\t * //connect effect A to crossfade from\n\t * //effect output 0 to crossfade input 0\n\t * effectA.connect(crossFade, 0, 0);\n\t * //connect effect B to crossfade from\n\t * //effect output 0 to crossfade input 1\n\t * effectB.connect(crossFade, 0, 1);\n\t * crossFade.fade.value = 0;\n\t * // ^ only effectA is output\n\t * crossFade.fade.value = 1;\n\t * // ^ only effectB is output\n\t * crossFade.fade.value = 0.5;\n\t * // ^ the two signals are mixed equally. \n\t */\t\t\n\tTone.CrossFade = function(initialFade){\n\n\t\tthis.createInsOuts(2, 1);\n\n\t\t/**\n\t\t * Alias for input[0]
. \n\t\t * @type {Tone.Gain}\n\t\t */\n\t\tthis.a = this.input[0] = new Tone.Gain();\n\n\t\t/**\n\t\t * Alias for input[1]
. \n\t\t * @type {Tone.Gain}\n\t\t */\n\t\tthis.b = this.input[1] = new Tone.Gain();\n\n\t\t/**\n\t\t * \tThe mix between the two inputs. A fade value of 0\n\t\t * \twill output 100% input[0]
and \n\t\t * \ta value of 1 will output 100% input[1]
. \n\t\t * @type {NormalRange}\n\t\t * @signal\n\t\t */\n\t\tthis.fade = new Tone.Signal(this.defaultArg(initialFade, 0.5), Tone.Type.NormalRange);\n\n\t\t/**\n\t\t * equal power gain cross fade\n\t\t * @private\n\t\t * @type {Tone.EqualPowerGain}\n\t\t */\n\t\tthis._equalPowerA = new Tone.EqualPowerGain();\n\n\t\t/**\n\t\t * equal power gain cross fade\n\t\t * @private\n\t\t * @type {Tone.EqualPowerGain}\n\t\t */\n\t\tthis._equalPowerB = new Tone.EqualPowerGain();\n\t\t\n\t\t/**\n\t\t * invert the incoming signal\n\t\t * @private\n\t\t * @type {Tone}\n\t\t */\n\t\tthis._invert = new Tone.Expr(\"1 - $0\");\n\n\t\t//connections\n\t\tthis.a.connect(this.output);\n\t\tthis.b.connect(this.output);\n\t\tthis.fade.chain(this._equalPowerB, this.b.gain);\n\t\tthis.fade.chain(this._invert, this._equalPowerA, this.a.gain);\n\t\tthis._readOnly(\"fade\");\n\t};\n\n\tTone.extend(Tone.CrossFade);\n\n\t/**\n\t * clean up\n\t * @returns {Tone.CrossFade} this\n\t */\n\tTone.CrossFade.prototype.dispose = function(){\n\t\tTone.prototype.dispose.call(this);\n\t\tthis._writable(\"fade\");\n\t\tthis._equalPowerA.dispose();\n\t\tthis._equalPowerA = null;\n\t\tthis._equalPowerB.dispose();\n\t\tthis._equalPowerB = null;\n\t\tthis.fade.dispose();\n\t\tthis.fade = null;\n\t\tthis._invert.dispose();\n\t\tthis._invert = null;\n\t\tthis.a.dispose();\n\t\tthis.a = null;\n\t\tthis.b.dispose();\n\t\tthis.b = null;\n\t\treturn this;\n\t};\n\n\treturn Tone.CrossFade;\n});\n","!function(){var e,t=[];function r(e){var r=this,n={},i=-1;this.parameters.forEach(function(e,o){var s=t[++i]||(t[i]=new Float32Array(r.bufferSize));s.fill(e.value),n[o]=s}),this.processor.realm.exec(\"self.sampleRate=sampleRate=\"+this.context.sampleRate+\";self.currentTime=currentTime=\"+this.context.currentTime);var s=o(e.inputBuffer),a=o(e.outputBuffer);this.instance.process([s],[a],n)}function o(e){for(var t=[],r=0;rsetStateAtTime(\"state\", time)
\n\t * and getValueAtTime(time)
.\n\t *\n\t * @extends {Tone.Timeline}\n\t * @param {String} initial The initial state of the TimelineState. \n\t * Defaults to undefined
\n\t */\n\tTone.TimelineState = function(initial){\n\n\t\tTone.Timeline.call(this);\n\n\t\t/**\n\t\t * The initial state\n\t\t * @private\n\t\t * @type {String}\n\t\t */\n\t\tthis._initial = initial;\n\t};\n\n\tTone.extend(Tone.TimelineState, Tone.Timeline);\n\n\t/**\n\t * Returns the scheduled state scheduled before or at\n\t * the given time.\n\t * @param {Number} time The time to query.\n\t * @return {String} The name of the state input in setStateAtTime.\n\t */\n\tTone.TimelineState.prototype.getValueAtTime = function(time){\n\t\tvar event = this.get(time);\n\t\tif (event !== null){\n\t\t\treturn event.state;\n\t\t} else {\n\t\t\treturn this._initial;\n\t\t}\n\t};\n\n\t/**\n\t * Returns the scheduled state scheduled before or at\n\t * the given time.\n\t * @param {String} state The name of the state to set.\n\t * @param {Number} time The time to query.\n\t */\n\tTone.TimelineState.prototype.setStateAtTime = function(state, time){\n\t\tthis.add({\n\t\t\t\"state\" : state,\n\t\t\t\"time\" : time\n\t\t});\n\t};\n\n\treturn Tone.TimelineState;\n});","import audiocontext from './audiocontext.js';\n\n// P5Sound contains the final sound output bus.\nclass Main {\n constructor() {\n this.input = audiocontext.createGain();\n this.output = audiocontext.createGain();\n\n //put a hard limiter on the output\n this.limiter = audiocontext.createDynamicsCompressor();\n this.limiter.threshold.value = -3;\n this.limiter.ratio.value = 20;\n this.limiter.knee.value = 1;\n\n this.audiocontext = audiocontext;\n\n this.output.disconnect();\n\n // connect input to limiter\n this.input.connect(this.limiter);\n\n // connect limiter to output\n this.limiter.connect(this.output);\n\n // meter is just for global Amplitude / FFT analysis\n this.meter = audiocontext.createGain();\n this.fftMeter = audiocontext.createGain();\n this.output.connect(this.meter);\n this.output.connect(this.fftMeter);\n\n // connect output to destination\n this.output.connect(this.audiocontext.destination);\n\n // an array of all sounds in the sketch\n this.soundArray = [];\n // an array of all musical parts in the sketch\n this.parts = [];\n\n // file extensions to search for\n this.extensions = [];\n }\n}\n\n// create a single instance of the p5Sound main output for use within this sketch\nconst p5sound = new Main();\n\n/**\n * Returns a number representing the output volume for sound\n * in this sketch.\n *\n * @method getOutputVolume\n * @return {Number} Output volume for sound in this sketch.\n * Should be between 0.0 (silence) and 1.0.\n */\np5.prototype.getOutputVolume = function () {\n return p5sound.output.gain.value;\n};\n\n/**\n * Scale the output of all sound in this sketch
\n * Scaled between 0.0 (silence) and 1.0 (full volume).\n * 1.0 is the maximum amplitude of a digital sound, so multiplying\n * by greater than 1.0 may cause digital distortion. To\n * fade, provide arampTime
parameter. For more\n * complex fades, see the Envelope class.\n *\n * Alternately, you can pass in a signal source such as an\n * oscillator to modulate the amplitude with an audio signal.\n *\n * How This Works: When you load the p5.sound module, it\n * creates a single instance of p5sound. All sound objects in this\n * module output to p5sound before reaching your computer's output.\n * So if you change the amplitude of p5sound, it impacts all of the\n * sound in this module.
\n *\n *If no value is provided, returns a Web Audio API Gain Node
\n *\n * @method outputVolume\n * @param {Number|Object} volume Volume (amplitude) between 0.0\n * and 1.0 or modulating signal/oscillator\n * @param {Number} [rampTime] Fade for t seconds\n * @param {Number} [timeFromNow] Schedule this event to happen at\n * t seconds in the future\n */\np5.prototype.outputVolume = function (vol, rampTime = 0, tFromNow = 0) {\n if (typeof vol === 'number') {\n var now = p5sound.audiocontext.currentTime;\n var currentVol = p5sound.output.gain.value;\n p5sound.output.gain.cancelScheduledValues(now + tFromNow);\n p5sound.output.gain.linearRampToValueAtTime(currentVol, now + tFromNow);\n p5sound.output.gain.linearRampToValueAtTime(vol, now + tFromNow + rampTime);\n } else if (vol) {\n vol.connect(p5sound.output.gain);\n } else {\n // return the Gain Node\n return p5sound.output.gain;\n }\n};\n\n/**\n * `p5.soundOut` is the p5.sound final output bus. It sends output to\n * the destination of this window's web audio context. It contains\n * Web Audio API nodes including a dyanmicsCompressor (.limiter
),\n * and Gain Nodes for .input
and .output
.\n *\n * @property {Object} soundOut\n */\np5.prototype.soundOut = p5.soundOut = p5sound;\n\n// a silent connection to the DesinationNode\n// which will ensure that anything connected to it\n// will not be garbage collected\np5.soundOut._silentNode = p5sound.audiocontext.createGain();\np5.soundOut._silentNode.gain.value = 0;\np5.soundOut._silentNode.connect(p5sound.audiocontext.destination);\n\nexport default p5sound;\n","import p5sound from './main';\nimport processorNames from './audioWorklet/processorNames';\n/**\n * @for p5\n */\n\n/**\n * Returns a number representing the sample rate, in samples per second,\n * of all sound objects in this audio context. It is determined by the\n * sampling rate of your operating system's sound card, and it is not\n * currently possile to change.\n * It is often 44100, or twice the range of human hearing.\n *\n * @method sampleRate\n * @return {Number} samplerate samples per second\n */\nfunction sampleRate() {\n return p5sound.audiocontext.sampleRate;\n}\n\n/**\n * Returns the closest MIDI note value for\n * a given frequency.\n *\n * @method freqToMidi\n * @param {Number} frequency A freqeuncy, for example, the \"A\"\n * above Middle C is 440Hz\n * @return {Number} MIDI note value\n */\nfunction freqToMidi(f) {\n var mathlog2 = Math.log(f / 440) / Math.log(2);\n var m = Math.round(12 * mathlog2) + 69;\n return m;\n}\n\n/**\n * Returns the frequency value of a MIDI note value.\n * General MIDI treats notes as integers where middle C\n * is 60, C# is 61, D is 62 etc. Useful for generating\n * musical frequencies with oscillators.\n *\n * @method midiToFreq\n * @param {Number} midiNote The number of a MIDI note\n * @return {Number} Frequency value of the given MIDI note\n * @example\n * \n * let midiNotes = [60, 64, 67, 72];\n * let noteIndex = 0;\n * let midiVal, freq;\n *\n * function setup() {\n * let cnv = createCanvas(100, 100);\n * cnv.mousePressed(startSound);\n * osc = new p5.TriOsc();\n * env = new p5.Envelope();\n * }\n *\n * function draw() {\n * background(220);\n * text('tap to play', 10, 20);\n * if (midiVal) {\n * text('MIDI: ' + midiVal, 10, 40);\n * text('Freq: ' + freq, 10, 60);\n * }\n * }\n *\n * function startSound() {\n * // see also: userStartAudio();\n * osc.start();\n *\n * midiVal = midiNotes[noteIndex % midiNotes.length];\n * freq = midiToFreq(midiVal);\n * osc.freq(freq);\n * env.ramp(osc, 0, 1.0, 0);\n *\n * noteIndex++;\n * }\n *
\n * function preload() {\n * // set the global sound formats\n * soundFormats('mp3', 'ogg');\n *\n * // load either beatbox.mp3, or .ogg, depending on browser\n * mySound = loadSound('assets/beatbox.mp3');\n * }\n *\n * function setup() {\n * let cnv = createCanvas(100, 100);\n * background(220);\n * text('sound loaded! tap to play', 10, 20, width - 20);\n * cnv.mousePressed(function() {\n * mySound.play();\n * });\n * }\n *
SoundFile object with a path to a file.
\n *\n *The p5.SoundFile may not be available immediately because\n * it loads the file information asynchronously.
\n *\n *To do something with the sound as soon as it loads\n * pass the name of a function as the second parameter.
\n *\n *Only one file path is required. However, audio file formats\n * (i.e. mp3, ogg, wav and m4a/aac) are not supported by all\n * web browsers. If you want to ensure compatability, instead of a single\n * file path, you may include an Array of filepaths, and the browser will\n * choose a format that works.
\n *\n * @class p5.SoundFile\n * @constructor\n * @param {String|Array} path path to a sound file (String). Optionally,\n * you may include multiple file formats in\n * an array. Alternately, accepts an object\n * from the HTML5 File API, or a p5.File.\n * @param {Function} [successCallback] Name of a function to call once file loads\n * @param {Function} [errorCallback] Name of a function to call if file fails to\n * load. This function will receive an error or\n * XMLHttpRequest object with information\n * about what went wrong.\n * @param {Function} [whileLoadingCallback] Name of a function to call while file\n * is loading. That function will\n * receive progress of the request to\n * load the sound file\n * (between 0 and 1) as its first\n * parameter. This progress\n * does not account for the additional\n * time needed to decode the audio data.\n *\n * @example\n *\n * let mySound;\n * function preload() {\n * soundFormats('mp3', 'ogg');\n * mySound = loadSound('assets/doorbell');\n * }\n *\n * function setup() {\n * let cnv = createCanvas(100, 100);\n * cnv.mousePressed(canvasPressed);\n * background(220);\n * text('tap here to play', 10, 20);\n * }\n *\n * function canvasPressed() {\n * // playing a sound file on a user gesture\n * // is equivalent to `userStartAudio()`\n * mySound.play();\n * }\n *
restart
and\n * sustain
. Play Mode determines what happens to a\n * p5.SoundFile if it is triggered while in the middle of playback.\n * In sustain mode, playback will continue simultaneous to the\n * new playback. In restart mode, play() will stop playback\n * and start over. With untilDone, a sound will play only if it's\n * not already playing. Sustain is the default mode.\n *\n * @method playMode\n * @for p5.SoundFile\n * @param {String} str 'restart' or 'sustain' or 'untilDone'\n * @example\n * \n * let mySound;\n * function preload(){\n * mySound = loadSound('assets/Damscray_DancingTiger.mp3');\n * }\n * function setup() {\n * let cnv = createCanvas(100, 100);\n * cnv.mousePressed(canvasPressed);\n * noFill();\n * rect(0, height/2, width - 1, height/2 - 1);\n * rect(0, 0, width - 1, height/2);\n * textAlign(CENTER, CENTER);\n * fill(20);\n * text('restart', width/2, 1 * height/4);\n * text('sustain', width/2, 3 * height/4);\n * }\n * function canvasPressed() {\n * if (mouseX < height/2) {\n * mySound.playMode('restart');\n * } else {\n * mySound.playMode('sustain');\n * }\n * mySound.play();\n * }\n *\n *
\n * let soundFile;\n * function preload() {\n * soundFormats('ogg', 'mp3');\n * soundFile = loadSound('assets/Damscray_-_Dancing_Tiger_02.mp3');\n * }\n * function setup() {\n * let cnv = createCanvas(100, 100);\n * cnv.mousePressed(canvasPressed);\n * background(220);\n * text('tap to play, release to pause', 10, 20, width - 20);\n * }\n * function canvasPressed() {\n * soundFile.loop();\n * background(0, 200, 50);\n * }\n * function mouseReleased() {\n * soundFile.pause();\n * background(220);\n * }\n *
\n * \n * let soundFile;\n * let loopStart = 0.5;\n * let loopDuration = 0.2;\n * function preload() {\n * soundFormats('ogg', 'mp3');\n * soundFile = loadSound('assets/Damscray_-_Dancing_Tiger_02.mp3');\n * }\n * function setup() {\n * let cnv = createCanvas(100, 100);\n * cnv.mousePressed(canvasPressed);\n * background(220);\n * text('tap to play, release to pause', 10, 20, width - 20);\n * }\n * function canvasPressed() {\n * soundFile.loop();\n * background(0, 200, 50);\n * }\n * function mouseReleased() {\n * soundFile.pause();\n * background(220);\n * }\n *
\n * \n * let ballX = 0;\n * let soundFile;\n *\n * function preload() {\n * soundFormats('ogg', 'mp3');\n * soundFile = loadSound('assets/beatbox.mp3');\n * }\n *\n * function draw() {\n * let cnv = createCanvas(100, 100);\n * cnv.mousePressed(canvasPressed);\n * background(220);\n * ballX = constrain(mouseX, 0, width);\n * ellipse(ballX, height/2, 20, 20);\n * }\n *\n * function canvasPressed(){\n * // map the ball's x location to a panning degree\n * // between -1.0 (left) and 1.0 (right)\n * let panning = map(ballX, 0., width,-1.0, 1.0);\n * soundFile.pan(panning);\n * soundFile.play();\n * }\n *
\n * let mySound;\n *\n * function preload() {\n * mySound = loadSound('assets/Damscray_DancingTiger.mp3');\n * }\n *\n * function setup() {\n * let cnv = createCanvas(100, 100);\n * cnv.mousePressed(canvasPressed);\n * }\n * function canvasPressed() {\n * mySound.loop();\n * }\n * function mouseReleased() {\n * mySound.pause();\n * }\n * function draw() {\n * background(220);\n *\n * // Set the rate to a range between 0.1 and 4\n * // Changing the rate also alters the pitch\n * let playbackRate = map(mouseY, 0.1, height, 2, 0);\n * playbackRate = constrain(playbackRate, 0.01, 4);\n * mySound.rate(playbackRate);\n *\n * line(0, mouseY, width, mouseY);\n * text('rate: ' + round(playbackRate * 100) + '%', 10, 20);\n * }\n *\n *
\n * rampTime
parameter. For more\n * complex fades, see the Envelope class.\n *\n * Alternately, you can pass in a signal source such as an\n * oscillator to modulate the amplitude with an audio signal.\n *\n * @method setVolume\n * @for p5.SoundFile\n * @param {Number|Object} volume Volume (amplitude) between 0.0\n * and 1.0 or modulating signal/oscillator\n * @param {Number} [rampTime] Fade for t seconds\n * @param {Number} [timeFromNow] Schedule this event to happen at\n * t seconds in the future\n */\n setVolume(vol, _rampTime, _tFromNow) {\n if (typeof vol === 'number') {\n var rampTime = _rampTime || 0;\n var tFromNow = _tFromNow || 0;\n var now = p5sound.audiocontext.currentTime;\n var currentVol = this.output.gain.value;\n this.output.gain.cancelScheduledValues(now + tFromNow);\n this.output.gain.linearRampToValueAtTime(currentVol, now + tFromNow);\n this.output.gain.linearRampToValueAtTime(vol, now + tFromNow + rampTime);\n } else if (vol) {\n vol.connect(this.output.gain);\n } else {\n // return the Gain Node\n return this.output.gain;\n }\n }\n /**\n * Returns the duration of a sound file in seconds.\n *\n * @method duration\n * @for p5.SoundFile\n * @return {Number} The duration of the soundFile in seconds.\n */\n duration() {\n // Return Duration\n if (this.buffer) {\n return this.buffer.duration;\n } else {\n return 0;\n }\n }\n\n /**\n * Return the current position of the p5.SoundFile playhead, in seconds.\n * Time is relative to the normal buffer direction, so if `reverseBuffer`\n * has been called, currentTime will count backwards.\n *\n * @method currentTime\n * @for p5.SoundFile\n * @return {Number} currentTime of the soundFile in seconds.\n */\n currentTime() {\n return this.reversed\n ? Math.abs(this._lastPos - this.buffer.length) / ac.sampleRate\n : this._lastPos / ac.sampleRate;\n }\n\n /**\n * Move the playhead of a soundfile that is currently playing to a\n * new position and a new duration, in seconds.\n * If none are given, will reset the file to play entire duration\n * from start to finish. To set the position of a soundfile that is\n * not currently playing, use the `play` or `loop` methods.\n *\n * @method jump\n * @for p5.SoundFile\n * @param {Number} cueTime cueTime of the soundFile in seconds.\n * @param {Number} duration duration in seconds.\n */\n jump(cueTime, duration) {\n if (cueTime < 0 || cueTime > this.buffer.duration) {\n throw 'jump time out of range';\n }\n if (duration > this.buffer.duration - cueTime) {\n throw 'end time out of range';\n }\n\n var cTime = cueTime || 0;\n var dur = duration || undefined;\n if (this.isPlaying()) {\n this.stop(0);\n this.play(0, this.playbackRate, this.output.gain.value, cTime, dur);\n }\n }\n\n /**\n * Return the number of channels in a sound file.\n * For example, Mono = 1, Stereo = 2.\n *\n * @method channels\n * @for p5.SoundFile\n * @return {Number} [channels]\n */\n channels() {\n return this.buffer.numberOfChannels;\n }\n\n /**\n * Return the sample rate of the sound file.\n *\n * @method sampleRate\n * @for p5.SoundFile\n * @return {Number} [sampleRate]\n */\n sampleRate() {\n return this.buffer.sampleRate;\n }\n\n /**\n * Return the number of samples in a sound file.\n * Equal to sampleRate * duration.\n *\n * @method frames\n * @for p5.SoundFile\n * @return {Number} [sampleCount]\n */\n frames() {\n return this.buffer.length;\n }\n\n /**\n * Returns an array of amplitude peaks in a p5.SoundFile that can be\n * used to draw a static waveform. Scans through the p5.SoundFile's\n * audio buffer to find the greatest amplitudes. Accepts one\n * parameter, 'length', which determines size of the array.\n * Larger arrays result in more precise waveform visualizations.\n *\n * Inspired by Wavesurfer.js.\n *\n * @method getPeaks\n * @for p5.SoundFile\n * @params {Number} [length] length is the size of the returned array.\n * Larger length results in more precision.\n * Defaults to 5*width of the browser window.\n * @returns {Float32Array} Array of peaks.\n */\n getPeaks(length) {\n if (this.buffer) {\n // set length to window's width if no length is provided\n if (!length) {\n length = window.width * 5;\n }\n if (this.buffer) {\n var buffer = this.buffer;\n var sampleSize = buffer.length / length;\n var sampleStep = ~~(sampleSize / 10) || 1;\n var channels = buffer.numberOfChannels;\n var peaks = new Float32Array(Math.round(length));\n\n for (var c = 0; c < channels; c++) {\n var chan = buffer.getChannelData(c);\n for (var i = 0; i < length; i++) {\n var start = ~~(i * sampleSize);\n var end = ~~(start + sampleSize);\n var max = 0;\n for (var j = start; j < end; j += sampleStep) {\n var value = chan[j];\n if (value > max) {\n max = value;\n // faster than Math.abs\n } else if (-value > max) {\n max = value;\n }\n }\n if (c === 0 || Math.abs(max) > peaks[i]) {\n peaks[i] = max;\n }\n }\n }\n\n return peaks;\n }\n } else {\n throw 'Cannot load peaks yet, buffer is not loaded';\n }\n }\n\n /**\n * Reverses the p5.SoundFile's buffer source.\n * Playback must be handled separately (see example).\n *\n * @method reverseBuffer\n * @for p5.SoundFile\n * @example\n * \n * let drum;\n * function preload() {\n * drum = loadSound('assets/drum.mp3');\n * }\n *\n * function setup() {\n * let cnv = createCanvas(100, 100);\n * cnv.mousePressed(canvasPressed);\n * background(220);\n * text('tap to play', 20, 20);\n * }\n *\n * function canvasPressed() {\n * drum.stop();\n * drum.reverseBuffer();\n * drum.play();\n * }\n *
\n * \n * let mySound;\n * function preload() {\n * mySound = loadSound('assets/Damscray_DancingTiger.mp3');\n * }\n *\n * function setup() {\n * let cnv = createCanvas(100, 100);\n * cnv.mousePressed(canvasPressed);\n * background(220);\n * text('tap to play', 10, 20);\n *\n * // schedule calls to changeText\n * mySound.addCue(0, changeText, \"hello\" );\n * mySound.addCue(0.5, changeText, \"hello,\" );\n * mySound.addCue(1, changeText, \"hello, p5!\");\n * mySound.addCue(1.5, changeText, \"hello, p5!!\");\n * mySound.addCue(2, changeText, \"hello, p5!!!!!\");\n * }\n *\n * function changeText(val) {\n * background(220);\n * text(val, 10, 20);\n * }\n *\n * function canvasPressed() {\n * mySound.play();\n * }\n *
\n * let mySound;\n * function preload() {\n * mySound = loadSound('assets/doorbell.mp3');\n * }\n * function setup() {\n * let cnv = createCanvas(100, 100);\n * cnv.mousePressed(canvasPressed);\n * background(220);\n * text('tap to download', 10, 20);\n * }\n *\n * function canvasPressed() {\n * mySound.save('my cool filename');\n * }\n *
\n * function preload() {\n * mySound = loadSound('assets/doorbell.mp3');\n * }\n *\n * function setup() {\n * noCanvas();\n * let soundBlob = mySound.getBlob();\n *\n * // Now we can send the blob to a server...\n * let serverUrl = 'https://jsonplaceholder.typicode.com/posts';\n * let httpRequestOptions = {\n * method: 'POST',\n * body: new FormData().append('soundBlob', soundBlob),\n * headers: new Headers({\n * 'Content-Type': 'multipart/form-data'\n * })\n * };\n * httpDo(serverUrl, httpRequestOptions);\n *\n * // We can also create an `ObjectURL` pointing to the Blob\n * let blobUrl = URL.createObjectURL(soundBlob);\n *\n * // The `
\n * let mySound;\n * function preload() {\n * soundFormats('mp3', 'ogg');\n * mySound = loadSound('assets/doorbell');\n * }\n *\n * function setup() {\n * let cnv = createCanvas(100, 100);\n * cnv.mousePressed(canvasPressed);\n * background(220);\n * text('tap here to play', 10, 20);\n * }\n *\n * function canvasPressed() {\n * // playing a sound file on a user gesture\n * // is equivalent to `userStartAudio()`\n * mySound.play();\n * }\n *
\n * let sound, amplitude;\n *\n * function preload(){\n * sound = loadSound('assets/beat.mp3');\n * }\n * function setup() {\n * let cnv = createCanvas(100,100);\n * cnv.mouseClicked(togglePlay);\n * amplitude = new p5.Amplitude();\n * }\n *\n * function draw() {\n * background(220);\n * text('tap to play', 20, 20);\n *\n * let level = amplitude.getLevel();\n * let size = map(level, 0, 1, 0, 200);\n * ellipse(width/2, height/2, size, size);\n * }\n *\n * function togglePlay() {\n * if (sound.isPlaying() ){\n * sound.pause();\n * } else {\n * sound.loop();\n *\t\tamplitude = new p5.Amplitude();\n *\t\tamplitude.setInput(sound);\n * }\n * }\n *\n *
\n * function preload(){\n * sound1 = loadSound('assets/beat.mp3');\n * sound2 = loadSound('assets/drum.mp3');\n * }\n * function setup(){\n * cnv = createCanvas(100, 100);\n * cnv.mouseClicked(toggleSound);\n *\n * amplitude = new p5.Amplitude();\n * amplitude.setInput(sound2);\n * }\n *\n * function draw() {\n * background(220);\n * text('tap to play', 20, 20);\n *\n * let level = amplitude.getLevel();\n * let size = map(level, 0, 1, 0, 200);\n * ellipse(width/2, height/2, size, size);\n * }\n *\n * function toggleSound(){\n * if (sound1.isPlaying() && sound2.isPlaying()) {\n * sound1.stop();\n * sound2.stop();\n * } else {\n * sound1.play();\n * sound2.play();\n * }\n * }\n *
\n * function preload(){\n * sound = loadSound('assets/beat.mp3');\n * }\n *\n * function setup() {\n * let cnv = createCanvas(100, 100);\n * cnv.mouseClicked(toggleSound);\n * amplitude = new p5.Amplitude();\n * }\n *\n * function draw() {\n * background(220, 150);\n * textAlign(CENTER);\n * text('tap to play', width/2, 20);\n *\n * let level = amplitude.getLevel();\n * let size = map(level, 0, 1, 0, 200);\n * ellipse(width/2, height/2, size, size);\n * }\n *\n * function toggleSound(){\n * if (sound.isPlaying()) {\n * sound.stop();\n * } else {\n * sound.play();\n * }\n * }\n *
FFT (Fast Fourier Transform) is an analysis algorithm that\n * isolates individual\n * \n * audio frequencies within a waveform.
\n *\n *Once instantiated, a p5.FFT object can return an array based on\n * two types of analyses:
• FFT.waveform()
computes\n * amplitude values along the time domain. The array indices correspond\n * to samples across a brief moment in time. Each value represents\n * amplitude of the waveform at that sample of time.
\n * • FFT.analyze()
computes amplitude values along the\n * frequency domain. The array indices correspond to frequencies (i.e.\n * pitches), from the lowest to the highest that humans can hear. Each\n * value represents amplitude at that slice of the frequency spectrum.\n * Use with getEnergy()
to measure amplitude at specific\n * frequencies, or within a range of frequencies.
FFT analyzes a very short snapshot of sound called a sample\n * buffer. It returns an array of amplitude measurements, referred\n * to as bins
. The array is 1024 bins long by default.\n * You can change the bin array length, but it must be a power of 2\n * between 16 and 1024 in order for the FFT algorithm to function\n * correctly. The actual size of the FFT buffer is twice the\n * number of bins, so given a standard sample rate, the buffer is\n * 2048/44100 seconds long.
\n * function preload(){\n * sound = loadSound('assets/Damscray_DancingTiger.mp3');\n * }\n *\n * function setup(){\n * let cnv = createCanvas(100,100);\n * cnv.mouseClicked(togglePlay);\n * fft = new p5.FFT();\n * sound.amp(0.2);\n * }\n *\n * function draw(){\n * background(220);\n *\n * let spectrum = fft.analyze();\n * noStroke();\n * fill(255, 0, 255);\n * for (let i = 0; i< spectrum.length; i++){\n * let x = map(i, 0, spectrum.length, 0, width);\n * let h = -height + map(spectrum[i], 0, 255, height, 0);\n * rect(x, height, width / spectrum.length, h )\n * }\n *\n * let waveform = fft.waveform();\n * noFill();\n * beginShape();\n * stroke(20);\n * for (let i = 0; i < waveform.length; i++){\n * let x = map(i, 0, waveform.length, 0, width);\n * let y = map( waveform[i], -1, 1, 0, height);\n * vertex(x,y);\n * }\n * endShape();\n *\n * text('tap to play', 20, 20);\n * }\n *\n * function togglePlay() {\n * if (sound.isPlaying()) {\n * sound.pause();\n * } else {\n * sound.loop();\n * }\n * }\n *
getEnergy()
.\n *\n * @method analyze\n * @for p5.FFT\n * @param {Number} [bins] Must be a power of two between\n * 16 and 1024. Defaults to 1024.\n * @param {Number} [scale] If \"dB,\" returns decibel\n * float measurements between\n * -140 and 0 (max).\n * Otherwise returns integers from 0-255.\n * @return {Array} spectrum Array of energy (amplitude/volume)\n * values across the frequency spectrum.\n * Lowest energy (silence) = 0, highest\n * possible is 255.\n * @example\n * \n * let osc, fft;\n *\n * function setup(){\n * let cnv = createCanvas(100,100);\n * cnv.mousePressed(startSound);\n * osc = new p5.Oscillator();\n * osc.amp(0);\n * fft = new p5.FFT();\n * }\n *\n * function draw(){\n * background(220);\n *\n * let freq = map(mouseX, 0, windowWidth, 20, 10000);\n * freq = constrain(freq, 1, 20000);\n * osc.freq(freq);\n *\n * let spectrum = fft.analyze();\n * noStroke();\n * fill(255, 0, 255);\n * for (let i = 0; i< spectrum.length; i++){\n * let x = map(i, 0, spectrum.length, 0, width);\n * let h = -height + map(spectrum[i], 0, 255, height, 0);\n * rect(x, height, width / spectrum.length, h );\n * }\n *\n * stroke(255);\n * if (!osc.started) {\n * text('tap here and drag to change frequency', 10, 20, width - 20);\n * } else {\n * text(round(freq)+'Hz', 10, 20);\n * }\n * }\n *\n * function startSound() {\n * osc.start();\n * osc.amp(0.5, 0.2);\n * }\n *\n * function mouseReleased() {\n * osc.amp(0, 0.2);\n * }\n *
\n * function setup(){\n * cnv = createCanvas(100,100);\n * cnv.mousePressed(userStartAudio);\n * sound = new p5.AudioIn();\n * sound.start();\n * fft = new p5.FFT();\n * sound.connect(fft);\n *}\n *\n *function draw() {\n * if (getAudioContext().state !== 'running') {\n * background(220);\n * text('tap here and enable mic to begin', 10, 20, width - 20);\n * return;\n * }\n * let centroidplot = 0.0;\n * let spectralCentroid = 0;\n *\n * background(0);\n * stroke(0,255,0);\n * let spectrum = fft.analyze();\n * fill(0,255,0); // spectrum is green\n *\n * //draw the spectrum\n * for (let i = 0; i < spectrum.length; i++){\n * let x = map(log(i), 0, log(spectrum.length), 0, width);\n * let h = map(spectrum[i], 0, 255, 0, height);\n * let rectangle_width = (log(i+1)-log(i))*(width/log(spectrum.length));\n * rect(x, height, rectangle_width, -h )\n * }\n * let nyquist = 22050;\n *\n * // get the centroid\n * spectralCentroid = fft.getCentroid();\n *\n * // the mean_freq_index calculation is for the display.\n * let mean_freq_index = spectralCentroid/(nyquist/spectrum.length);\n *\n * centroidplot = map(log(mean_freq_index), 0, log(spectrum.length), 0, width);\n *\n * stroke(255,0,0); // the line showing where the centroid is will be red\n *\n * rect(centroidplot, 0, width / spectrum.length, height)\n * noStroke();\n * fill(255,255,255); // text is white\n * text('centroid: ', 10, 20);\n * text(round(spectralCentroid)+' Hz', 10, 40);\n *}\n *
Creates a signal that oscillates between -1.0 and 1.0.\n * By default, the oscillation takes the form of a sinusoidal\n * shape ('sine'). Additional types include 'triangle',\n * 'sawtooth' and 'square'. The frequency defaults to\n * 440 oscillations per second (440Hz, equal to the pitch of an\n * 'A' note).
\n *\n *Set the type of oscillation with setType(), or by instantiating a\n * specific oscillator: p5.SinOsc, p5.TriOsc, p5.SqrOsc, or p5.SawOsc.\n *
\n *\n * @class p5.Oscillator\n * @constructor\n * @param {Number} [freq] frequency defaults to 440Hz\n * @param {String} [type] type of oscillator. Options:\n * 'sine' (default), 'triangle',\n * 'sawtooth', 'square'\n * @example\n *\n * let osc, playing, freq, amp;\n *\n * function setup() {\n * let cnv = createCanvas(100, 100);\n * cnv.mousePressed(playOscillator);\n * osc = new p5.Oscillator('sine');\n * }\n *\n * function draw() {\n * background(220)\n * freq = constrain(map(mouseX, 0, width, 100, 500), 100, 500);\n * amp = constrain(map(mouseY, height, 0, 0, 1), 0, 1);\n *\n * text('tap to play', 20, 20);\n * text('freq: ' + freq, 20, 40);\n * text('amp: ' + amp, 20, 60);\n *\n * if (playing) {\n * // smooth the transitions by 0.1 seconds\n * osc.freq(freq, 0.1);\n * osc.amp(amp, 0.1);\n * }\n * }\n *\n * function playOscillator() {\n * // starting an oscillator on a user gesture will enable audio\n * // in browsers that have a strict autoplay policy.\n * // See also: userStartAudio();\n * osc.start();\n * playing = true;\n * }\n *\n * function mouseReleased() {\n * // ramp amplitude to 0 over 0.5 seconds\n * osc.amp(0, 0.5);\n * playing = false;\n * }\n *
\n * let osc;\n *\n * function setup() {\n * let cnv = createCanvas(100, 100);\n * cnv.mousePressed(playOscillator);\n * osc = new p5.Oscillator(300);\n * background(220);\n * text('tap to play', 20, 20);\n * }\n *\n * function playOscillator() {\n * osc.start();\n * osc.amp(0.5);\n * // start at 700Hz\n * osc.freq(700);\n * // ramp to 60Hz over 0.7 seconds\n * osc.freq(60, 0.7);\n * osc.amp(0, 0.1, 0.7);\n * }\n *
new p5.SinOsc()
.\n * This creates a Sine Wave Oscillator and is\n * equivalent to new p5.Oscillator('sine')\n *
or creating a p5.Oscillator and then calling\n * its method setType('sine')
.\n * See p5.Oscillator for methods.\n *\n * @class p5.SinOsc\n * @constructor\n * @extends p5.Oscillator\n * @param {Number} [freq] Set the frequency\n */\nclass SinOsc extends Oscillator {\n constructor(freq) {\n super(freq, 'sine');\n }\n}\n\n/**\n * Constructor: new p5.TriOsc()
.\n * This creates a Triangle Wave Oscillator and is\n * equivalent to new p5.Oscillator('triangle')\n *
or creating a p5.Oscillator and then calling\n * its method setType('triangle')
.\n * See p5.Oscillator for methods.\n *\n * @class p5.TriOsc\n * @constructor\n * @extends p5.Oscillator\n * @param {Number} [freq] Set the frequency\n */\nclass TriOsc extends Oscillator {\n constructor(freq) {\n super(freq, 'triangle');\n }\n}\n\n/**\n * Constructor: new p5.SawOsc()
.\n * This creates a SawTooth Wave Oscillator and is\n * equivalent to new p5.Oscillator('sawtooth')\n *
or creating a p5.Oscillator and then calling\n * its method setType('sawtooth')
.\n * See p5.Oscillator for methods.\n *\n * @class p5.SawOsc\n * @constructor\n * @extends p5.Oscillator\n * @param {Number} [freq] Set the frequency\n */\nclass SawOsc extends Oscillator {\n constructor(freq) {\n super(freq, 'sawtooth');\n }\n}\n\n/**\n * Constructor: new p5.SqrOsc()
.\n * This creates a Square Wave Oscillator and is\n * equivalent to new p5.Oscillator('square')\n *
or creating a p5.Oscillator and then calling\n * its method setType('square')
.\n * See p5.Oscillator for methods.\n *\n * @class p5.SqrOsc\n * @constructor\n * @extends p5.Oscillator\n * @param {Number} [freq] Set the frequency\n */\nclass SqrOsc extends Oscillator {\n constructor(freq) {\n super(freq, 'square');\n }\n}\n\nexport default Oscillator;\nexport { SinOsc, TriOsc, SawOsc, SqrOsc };\n","import p5sound from './main';\nimport Add from 'Tone/signal/Add';\nimport Mult from 'Tone/signal/Multiply';\nimport Scale from 'Tone/signal/Scale';\nimport TimelineSignal from 'Tone/signal/TimelineSignal.js';\n\n/**\n * Envelopes are pre-defined amplitude distribution over time.\n * Typically, envelopes are used to control the output volume\n * of an object, a series of fades referred to as Attack, Decay,\n * Sustain and Release (\n * ADSR\n * ). Envelopes can also control other Web Audio Parameters—for example, a p5.Envelope can\n * control an Oscillator's frequency like this: osc.freq(env)
.
Use setRange
to change the attack/release level.\n * Use setADSR
to change attackTime, decayTime, sustainPercent and releaseTime.
Use the play
method to play the entire envelope,\n * the ramp
method for a pingable trigger,\n * or triggerAttack
/\n * triggerRelease
to trigger noteOn/noteOff.
\n * let t1 = 0.1; // attack time in seconds\n * let l1 = 0.7; // attack level 0.0 to 1.0\n * let t2 = 0.3; // decay time in seconds\n * let l2 = 0.1; // decay level 0.0 to 1.0\n *\n * let env;\n * let triOsc;\n *\n * function setup() {\n * let cnv = createCanvas(100, 100);\n * background(220);\n * text('tap to play', 20, 20);\n * cnv.mousePressed(playSound);\n *\n * env = new p5.Envelope(t1, l1, t2, l2);\n * triOsc = new p5.Oscillator('triangle');\n * }\n *\n * function playSound() {\n * // starting the oscillator ensures that audio is enabled.\n * triOsc.start();\n * env.play(triOsc);\n * }\n *
\n * let attackTime;\n * let l1 = 0.7; // attack level 0.0 to 1.0\n * let t2 = 0.3; // decay time in seconds\n * let l2 = 0.1; // decay level 0.0 to 1.0\n * let l3 = 0.2; // release time in seconds\n *\n * let env, triOsc;\n *\n * function setup() {\n * let cnv = createCanvas(100, 100);\n * cnv.mousePressed(playSound);\n *\n * env = new p5.Envelope();\n * triOsc = new p5.Oscillator('triangle');\n * }\n *\n * function draw() {\n * background(220);\n * text('tap here to play', 5, 20);\n *\n * attackTime = map(mouseX, 0, width, 0.0, 1.0);\n * text('attack time: ' + attackTime, 5, height - 20);\n * }\n *\n * // mouseClick triggers envelope if over canvas\n * function playSound() {\n * env.set(attackTime, l1, t2, l2, l3);\n *\n * triOsc.start();\n * env.play(triOsc);\n * }\n *
setRange
),\n * then decayLevel would increase proportionally, to become 0.5.\n * @param {Number} [releaseTime] Time in seconds from now (defaults to 0)\n * @example\n * \n * let attackLevel = 1.0;\n * let releaseLevel = 0;\n *\n * let attackTime = 0.001;\n * let decayTime = 0.2;\n * let susPercent = 0.2;\n * let releaseTime = 0.5;\n *\n * let env, triOsc;\n *\n * function setup() {\n * let cnv = createCanvas(100, 100);\n * cnv.mousePressed(playEnv);\n *\n * env = new p5.Envelope();\n * triOsc = new p5.Oscillator('triangle');\n * triOsc.amp(env);\n * triOsc.freq(220);\n * }\n *\n * function draw() {\n * background(220);\n * text('tap here to play', 5, 20);\n * attackTime = map(mouseX, 0, width, 0, 1.0);\n * text('attack time: ' + attackTime, 5, height - 40);\n * }\n *\n * function playEnv() {\n * triOsc.start();\n * env.setADSR(attackTime, decayTime, susPercent, releaseTime);\n * env.play();\n * }\n *
\n * let attackLevel = 1.0;\n * let releaseLevel = 0;\n *\n * let attackTime = 0.001;\n * let decayTime = 0.2;\n * let susPercent = 0.2;\n * let releaseTime = 0.5;\n *\n * let env, triOsc;\n *\n * function setup() {\n * let cnv = createCanvas(100, 100);\n * cnv.mousePressed(playEnv);\n *\n * env = new p5.Envelope();\n * triOsc = new p5.Oscillator('triangle');\n * triOsc.amp(env);\n * triOsc.freq(220);\n * }\n *\n * function draw() {\n * background(220);\n * text('tap here to play', 5, 20);\n * attackLevel = map(mouseY, height, 0, 0, 1.0);\n * text('attack level: ' + attackLevel, 5, height - 20);\n * }\n *\n * function playEnv() {\n * triOsc.start();\n * env.setRange(attackLevel, releaseLevel);\n * env.play();\n * }\n *
Play tells the envelope to start acting on a given input.\n * If the input is a p5.sound object (i.e. AudioIn, Oscillator,\n * SoundFile), then Envelope will control its output volume.\n * Envelopes can also be used to control any \n * Web Audio Audio Param.
\n *\n * @method play\n * @for p5.Envelope\n * @param {Object} unit A p5.sound object or\n * Web Audio Param.\n * @param {Number} [startTime] time from now (in seconds) at which to play\n * @param {Number} [sustainTime] time to sustain before releasing the envelope\n * @example\n *\n * let attackLevel = 1.0;\n * let releaseLevel = 0;\n *\n * let attackTime = 0.001;\n * let decayTime = 0.2;\n * let susPercent = 0.2;\n * let releaseTime = 0.5;\n *\n * let env, triOsc;\n *\n * function setup() {\n * let cnv = createCanvas(100, 100);\n * cnv.mousePressed(playEnv);\n *\n * env = new p5.Envelope();\n * triOsc = new p5.Oscillator('triangle');\n * triOsc.amp(env);\n * triOsc.freq(220);\n * triOsc.start();\n * }\n *\n * function draw() {\n * background(220);\n * text('tap here to play', 5, 20);\n * attackTime = map(mouseX, 0, width, 0, 1.0);\n * attackLevel = map(mouseY, height, 0, 0, 1.0);\n * text('attack time: ' + attackTime, 5, height - 40);\n * text('attack level: ' + attackLevel, 5, height - 20);\n * }\n *\n * function playEnv() {\n * // ensure that audio is enabled\n * userStartAudio();\n *\n * env.setADSR(attackTime, decayTime, susPercent, releaseTime);\n * env.setRange(attackLevel, releaseLevel);\n * env.play();\n * }\n *
\n * let attackTime = 0.001;\n * let decayTime = 0.2;\n * let susPercent = 0.3;\n * let releaseTime = 0.4;\n * let env, triOsc;\n *\n * function setup() {\n * let cnv = createCanvas(100, 100);\n * background(220);\n * textAlign(CENTER);\n * textSize(10);\n * text('tap to triggerAttack', width/2, height/2);\n *\n * env = new p5.Envelope();\n * env.setADSR(attackTime, decayTime, susPercent, releaseTime);\n * env.setRange(1.0, 0.0);\n * triOsc = new p5.Oscillator('triangle');\n * triOsc.freq(220);\n *\n * cnv.mousePressed(envAttack);\n * }\n *\n * function envAttack() {\n * background(0, 255, 255);\n * text('release to release', width/2, height/2);\n *\n * // ensures audio is enabled. See also: `userStartAudio`\n * triOsc.start();\n *\n * env.triggerAttack(triOsc);\n * }\n *\n * function mouseReleased() {\n * background(220);\n * text('tap to triggerAttack', width/2, height/2);\n *\n * env.triggerRelease(triOsc);\n * }\n *
\n * let attackTime = 0.001;\n * let decayTime = 0.2;\n * let susPercent = 0.3;\n * let releaseTime = 0.4;\n * let env, triOsc;\n *\n * function setup() {\n * let cnv = createCanvas(100, 100);\n * background(220);\n * textAlign(CENTER);\n * textSize(10);\n * text('tap to triggerAttack', width/2, height/2);\n *\n * env = new p5.Envelope();\n * env.setADSR(attackTime, decayTime, susPercent, releaseTime);\n * env.setRange(1.0, 0.0);\n * triOsc = new p5.Oscillator('triangle');\n * triOsc.freq(220);\n *\n * cnv.mousePressed(envAttack);\n * }\n *\n * function envAttack() {\n * background(0, 255, 255);\n * text('release to release', width/2, height/2);\n *\n * // ensures audio is enabled. See also: `userStartAudio`\n * triOsc.start();\n *\n * env.triggerAttack(triOsc);\n * }\n *\n * function mouseReleased() {\n * background(220);\n * text('tap to triggerAttack', width/2, height/2);\n *\n * env.triggerRelease(triOsc);\n * }\n *
setADSR(attackTime, decayTime)
\n * as \n * time constants for simple exponential ramps.\n * If the value is higher than current value, it uses attackTime,\n * while a decrease uses decayTime.\n *\n * @method ramp\n * @for p5.Envelope\n * @param {Object} unit p5.sound Object or Web Audio Param\n * @param {Number} secondsFromNow When to trigger the ramp\n * @param {Number} v Target value\n * @param {Number} [v2] Second target value\n * @example\n * \n * let env, osc, amp;\n *\n * let attackTime = 0.001;\n * let decayTime = 0.2;\n * let attackLevel = 1;\n * let decayLevel = 0;\n *\n * function setup() {\n * let cnv = createCanvas(100, 100);\n * fill(0,255,0);\n * noStroke();\n *\n * env = new p5.Envelope();\n * env.setADSR(attackTime, decayTime);\n * osc = new p5.Oscillator();\n * osc.amp(env);\n * amp = new p5.Amplitude();\n *\n * cnv.mousePressed(triggerRamp);\n * }\n *\n * function triggerRamp() {\n * // ensures audio is enabled. See also: `userStartAudio`\n * osc.start();\n *\n * env.ramp(osc, 0, attackLevel, decayLevel);\n * }\n *\n * function draw() {\n * background(20);\n * text('tap to play', 10, 20);\n * let h = map(amp.getLevel(), 0, 0.4, 0, height);;\n * rect(0, height, width, -h);\n * }\n *
p5.Oscillator
for a full list of methods.\n *\n * @class p5.Pulse\n * @extends p5.Oscillator\n * @constructor\n * @param {Number} [freq] Frequency in oscillations per second (Hz)\n * @param {Number} [w] Width between the pulses (0 to 1.0,\n * defaults to 0)\n * @example\n * \n * let pulse;\n * function setup() {\n * let cnv = createCanvas(100, 100);\n * cnv.mousePressed(startPulse);\n * background(220);\n *\n * pulse = new p5.Pulse();\n * pulse.amp(0.5);\n * pulse.freq(220);\n * }\n * function startPulse() {\n * pulse.start();\n * pulse.amp(0.5, 0.02);\n * }\n * function mouseReleased() {\n * pulse.amp(0, 0.2);\n * }\n * function draw() {\n * background(220);\n * text('tap to play', 5, 20, width - 20);\n * let w = map(mouseX, 0, width, 0, 1);\n * w = constrain(w, 0, 1);\n * pulse.width(w);\n * text('pulse width: ' + w, 5, height - 20);\n * }\n *
Get audio from an input, i.e. your computer's microphone.
\n *\n *Turn the mic on/off with the start() and stop() methods. When the mic\n * is on, its volume can be measured with getLevel or by connecting an\n * FFT object.
\n *\n *If you want to hear the AudioIn, use the .connect() method.\n * AudioIn does not connect to p5.sound output by default to prevent\n * feedback.
\n *\n *Note: This uses the getUserMedia/\n * Stream API, which is not supported by certain browsers. Access in Chrome browser\n * is limited to localhost and https, but access over http may be limited.
\n *\n * @class p5.AudioIn\n * @constructor\n * @param {Function} [errorCallback] A function to call if there is an error\n * accessing the AudioIn. For example,\n * Safari and iOS devices do not\n * currently allow microphone access.\n * @example\n *\n * let mic;\n *\n * function setup(){\n * let cnv = createCanvas(100, 100);\n * cnv.mousePressed(userStartAudio);\n * textAlign(CENTER);\n * mic = new p5.AudioIn();\n * mic.start();\n * }\n *\n * function draw(){\n * background(0);\n * fill(255);\n * text('tap to start', width/2, 20);\n *\n * micLevel = mic.getLevel();\n * let y = height - micLevel * height;\n * ellipse(width/2, y, 10, 10);\n * }\n *
\n * let audioIn;\n *\n * function setup(){\n * text('getting sources...', 0, 20);\n * audioIn = new p5.AudioIn();\n * audioIn.getSources(gotSources);\n * }\n *\n * function gotSources(deviceList) {\n * if (deviceList.length > 0) {\n * //set the source to the first item in the deviceList array\n * audioIn.setSource(0);\n * let currentSource = deviceList[audioIn.currentSource];\n * text('set source to: ' + currentSource.deviceId, 5, 20, width);\n * }\n * }\n *
\n * let audioIn;\n *\n * function setup(){\n * text('getting sources...', 0, 20);\n * audioIn = new p5.AudioIn();\n * audioIn.getSources(gotSources);\n * }\n *\n * function gotSources(deviceList) {\n * if (deviceList.length > 0) {\n * //set the source to the first item in the deviceList array\n * audioIn.setSource(0);\n * let currentSource = deviceList[audioIn.currentSource];\n * text('set source to: ' + currentSource.deviceId, 5, 20, width);\n * }\n * }\n *
A p5.Filter uses a Web Audio Biquad Filter to filter\n * the frequency response of an input source. Subclasses\n * include:
\n *p5.LowPass
:\n * Allows frequencies below the cutoff frequency to pass through,\n * and attenuates frequencies above the cutoff.p5.HighPass
:\n * The opposite of a lowpass filter. p5.BandPass
:\n * Allows a range of frequencies to pass through and attenuates\n * the frequencies below and above this frequency range..res()
method controls either width of the\n * bandpass, or resonance of the low/highpass cutoff frequency.\n *\n * This class extends p5.Effect.\n * Methods amp(), chain(),\n * drywet(), connect(), and\n * disconnect() are available.\n *\n * @class p5.Filter\n * @extends p5.Effect\n * @constructor\n * @param {String} [type] 'lowpass' (default), 'highpass', 'bandpass'\n * @example\n * \n * let fft, noise, filter;\n *\n * function setup() {\n * let cnv = createCanvas(100,100);\n * cnv.mousePressed(makeNoise);\n * fill(255, 0, 255);\n *\n * filter = new p5.BandPass();\n * noise = new p5.Noise();\n * noise.disconnect();\n * noise.connect(filter);\n *\n * fft = new p5.FFT();\n * }\n *\n * function draw() {\n * background(220);\n *\n * // set the BandPass frequency based on mouseX\n * let freq = map(mouseX, 0, width, 20, 10000);\n * freq = constrain(freq, 0, 22050);\n * filter.freq(freq);\n * // give the filter a narrow band (lower res = wider bandpass)\n * filter.res(50);\n *\n * // draw filtered spectrum\n * let spectrum = fft.analyze();\n * noStroke();\n * for (let i = 0; i < spectrum.length; i++) {\n * let x = map(i, 0, spectrum.length, 0, width);\n * let h = -height + map(spectrum[i], 0, 255, height, 0);\n * rect(x, height, width/spectrum.length, h);\n * }\n * if (!noise.started) {\n * text('tap here and drag to change frequency', 10, 20, width - 20);\n * } else {\n * text('Frequency: ' + round(freq)+'Hz', 20, 20, width - 20);\n * }\n * }\n *\n * function makeNoise() {\n * // see also: `userStartAudio()`\n * noise.start();\n * noise.amp(0.5, 0.2);\n * }\n *\n * function mouseReleased() {\n * noise.amp(0, 0.2);\n * }\n *\n *
new p5.LowPass()
Filter.\n * This is the same as creating a p5.Filter and then calling\n * its method setType('lowpass')
.\n * See p5.Filter for methods.\n *\n * @class p5.LowPass\n * @constructor\n * @extends p5.Filter\n */\nclass LowPass extends Filter {\n constructor() {\n super('lowpass');\n }\n}\n\n/**\n * Constructor: new p5.HighPass()
Filter.\n * This is the same as creating a p5.Filter and then calling\n * its method setType('highpass')
.\n * See p5.Filter for methods.\n *\n * @class p5.HighPass\n * @constructor\n * @extends p5.Filter\n */\nclass HighPass extends Filter {\n constructor() {\n super('highpass');\n }\n}\n\n/**\n * Constructor: new p5.BandPass()
Filter.\n * This is the same as creating a p5.Filter and then calling\n * its method setType('bandpass')
.\n * See p5.Filter for methods.\n *\n * @class p5.BandPass\n * @constructor\n * @extends p5.Filter\n */\nclass BandPass extends Filter {\n constructor() {\n super('bandpass');\n }\n}\nexport default Filter;\nexport { LowPass, HighPass, BandPass };\n","import Filter from './filter';\nimport p5sound from './main';\n\n/**\n * EQFilter extends p5.Filter with constraints\n * necessary for the p5.EQ\n *\n * @private\n */\nclass EQFilter extends Filter {\n constructor(freq, res) {\n super('peaking');\n\n this.disconnect();\n this.set(freq, res);\n this.biquad.gain.value = 0;\n delete this.input;\n delete this.output;\n delete this._drywet;\n delete this.wet;\n }\n\n amp() {\n console.warn('`amp()` is not available for p5.EQ bands. Use `.gain()`');\n }\n\n drywet() {\n console.warn('`drywet()` is not available for p5.EQ bands.');\n }\n\n connect(unit) {\n var u = unit || p5.soundOut.input;\n if (this.biquad) {\n this.biquad.connect(u.input ? u.input : u);\n } else {\n this.output.connect(u.input ? u.input : u);\n }\n }\n disconnect() {\n if (this.biquad) {\n this.biquad.disconnect();\n }\n }\n\n dispose() {\n // remove reference form soundArray\n const index = p5sound.soundArray.indexOf(this);\n p5sound.soundArray.splice(index, 1);\n this.disconnect();\n delete this.biquad;\n }\n}\n\nexport default EQFilter;\n","import Effect from './effect';\nimport EQFilter from './eqFilter';\n\n/**\n * p5.EQ is an audio effect that performs the function of a multiband\n * audio equalizer. Equalization is used to adjust the balance of\n * frequency compoenents of an audio signal. This process is commonly used\n * in sound production and recording to change the waveform before it reaches\n * a sound output device. EQ can also be used as an audio effect to create\n * interesting distortions by filtering out parts of the spectrum. p5.EQ is\n * built using a chain of Web Audio Biquad Filter Nodes and can be\n * instantiated with 3 or 8 bands. Bands can be added or removed from\n * the EQ by directly modifying p5.EQ.bands (the array that stores filters).\n *\n * This class extends p5.Effect.\n * Methods amp(), chain(),\n * drywet(), connect(), and\n * disconnect() are available.\n *\n * @class p5.EQ\n * @constructor\n * @extends p5.Effect\n * @param {Number} [_eqsize] Constructor will accept 3 or 8, defaults to 3\n * @return {Object} p5.EQ object\n *\n * @example\n * \n * let eq, soundFile\n * let eqBandIndex = 0;\n * let eqBandNames = ['lows', 'mids', 'highs'];\n *\n * function preload() {\n * soundFormats('mp3', 'ogg');\n * soundFile = loadSound('assets/beat');\n * }\n *\n * function setup() {\n * let cnv = createCanvas(100, 100);\n * cnv.mousePressed(toggleSound);\n *\n * eq = new p5.EQ(eqBandNames.length);\n * soundFile.disconnect();\n * eq.process(soundFile);\n * }\n *\n * function draw() {\n * background(30);\n * noStroke();\n * fill(255);\n * textAlign(CENTER);\n * text('filtering ', 50, 25);\n *\n * fill(255, 40, 255);\n * textSize(26);\n * text(eqBandNames[eqBandIndex], 50, 55);\n *\n * fill(255);\n * textSize(9);\n *\n * if (!soundFile.isPlaying()) {\n * text('tap to play', 50, 80);\n * } else {\n * text('tap to filter next band', 50, 80)\n * }\n * }\n *\n * function toggleSound() {\n * if (!soundFile.isPlaying()) {\n * soundFile.play();\n * } else {\n * eqBandIndex = (eqBandIndex + 1) % eq.bands.length;\n * }\n *\n * for (let i = 0; i < eq.bands.length; i++) {\n * eq.bands[i].gain(0);\n * }\n * // filter the band we want to filter\n * eq.bands[eqBandIndex].gain(-40);\n * }\n *
p5.Panner3D
- Constructs a Spatial Pannerp5.Listener3D
- Constructs a Spatial Listenerp5.soundOut.audiocontext.listener
\n *\n *\n * @class p5.Panner3D\n * @constructor\n */\n\nclass Panner3D extends Effect {\n constructor() {\n super();\n /**\n * \n * Web Audio Spatial Panner Node\n *\n * Properties include\n * let osc;\n *\n * function setup() {\n * let cnv = createCanvas(100, 100);\n * background(220);\n * textAlign(CENTER);\n * text('tap to play', width/2, height/2);\n *\n * osc = new p5.Oscillator('square');\n * osc.amp(0.5);\n * delay = new p5.Delay();\n *\n * // delay.process() accepts 4 parameters:\n * // source, delayTime (in seconds), feedback, filter frequency\n * delay.process(osc, 0.12, .7, 2300);\n *\n * cnv.mousePressed(oscStart);\n * }\n *\n * function oscStart() {\n * osc.start();\n * }\n *\n * function mouseReleased() {\n * osc.stop();\n * }\n *
\n * let soundFile, reverb;\n * function preload() {\n * soundFile = loadSound('assets/Damscray_DancingTiger.mp3');\n * }\n *\n * function setup() {\n * let cnv = createCanvas(100, 100);\n * cnv.mousePressed(playSound);\n *\n * reverb = new p5.Reverb();\n * soundFile.disconnect(); // so we'll only hear reverb...\n *\n * // connect soundFile to reverb, process w/\n * // 3 second reverbTime, decayRate of 2%\n * reverb.process(soundFile, 3, 2);\n * }\n *\n * function draw() {\n * let dryWet = constrain(map(mouseX, 0, width, 0, 1), 0, 1);\n * // 1 = all reverb, 0 = no reverb\n * reverb.drywet(dryWet);\n *\n * background(220);\n * text('tap to play', 10, 20);\n * text('dry/wet: ' + round(dryWet * 100) + '%', 10, height - 20);\n * }\n *\n * function playSound() {\n * soundFile.play();\n * }\n *
p5.Convolver extends p5.Reverb. It can emulate the sound of real\n * physical spaces through a process called \n * convolution.
\n *\n *Convolution multiplies any audio input by an \"impulse response\"\n * to simulate the dispersion of sound over time. The impulse response is\n * generated from an audio file that you provide. One way to\n * generate an impulse response is to pop a balloon in a reverberant space\n * and record the echo. Convolution can also be used to experiment with\n * sound.
\n *\n *Use the method createConvolution(path)
to instantiate a\n * p5.Convolver with a path to your impulse response audio file.
\n * let cVerb, sound;\n * function preload() {\n * // We have both MP3 and OGG versions of all sound assets\n * soundFormats('ogg', 'mp3');\n *\n * // Try replacing 'bx-spring' with other soundfiles like\n * // 'concrete-tunnel' 'small-plate' 'drum' 'beatbox'\n * cVerb = createConvolver('assets/bx-spring.mp3');\n *\n * // Try replacing 'Damscray_DancingTiger' with\n * // 'beat', 'doorbell', lucky_dragons_-_power_melody'\n * sound = loadSound('assets/Damscray_DancingTiger.mp3');\n * }\n *\n * function setup() {\n * let cnv = createCanvas(100, 100);\n * cnv.mousePressed(playSound);\n * background(220);\n * text('tap to play', 20, 20);\n *\n * // disconnect from main output...\n * sound.disconnect();\n *\n * // ...and process with cVerb\n * // so that we only hear the convolution\n * cVerb.process(sound);\n * }\n *\n * function playSound() {\n * sound.play();\n * }\n *
toggleImpulse(id)
method.\n *\n * @property {Array} impulses\n * @for p5.Convolver\n */\n this.impulses = [];\n this.set = null;\n }\n\n /**\n * Private method to load a buffer as an Impulse Response,\n * assign it to the convolverNode, and add to the Array of .impulses.\n *\n * @param {String} path\n * @param {Function} callback\n * @param {Function} errorCallback\n * @private\n */\n _loadBuffer(_path, callback, errorCallback) {\n var path = p5.prototype._checkFileFormats(_path);\n var self = this;\n var errorTrace = new Error().stack;\n var ac = getAudioContext();\n\n var request = new XMLHttpRequest();\n request.open('GET', path, true);\n request.responseType = 'arraybuffer';\n\n request.onload = function () {\n if (request.status === 200) {\n // on success loading file:\n ac.decodeAudioData(\n request.response,\n function (buff) {\n var buffer = {};\n var chunks = path.split('/');\n buffer.name = chunks[chunks.length - 1];\n buffer.audioBuffer = buff;\n self.impulses.push(buffer);\n self._setBuffer(buffer.audioBuffer);\n if (callback) {\n callback(buffer);\n }\n },\n // error decoding buffer. \"e\" is undefined in Chrome 11/22/2015\n function () {\n var err = new CustomError('decodeAudioData', errorTrace, self.url);\n var msg = 'AudioContext error at decodeAudioData for ' + self.url;\n if (errorCallback) {\n err.msg = msg;\n errorCallback(err);\n } else {\n console.error(\n msg + '\\n The error stack trace includes: \\n' + err.stack\n );\n }\n }\n );\n }\n // if request status != 200, it failed\n else {\n var err = new CustomError('loadConvolver', errorTrace, self.url);\n var msg =\n 'Unable to load ' +\n self.url +\n '. The request status was: ' +\n request.status +\n ' (' +\n request.statusText +\n ')';\n\n if (errorCallback) {\n err.message = msg;\n errorCallback(err);\n } else {\n console.error(\n msg + '\\n The error stack trace includes: \\n' + err.stack\n );\n }\n }\n };\n\n // if there is another error, aside from 404...\n request.onerror = function () {\n var err = new CustomError('loadConvolver', errorTrace, self.url);\n var msg =\n 'There was no response from the server at ' +\n self.url +\n '. Check the url and internet connectivity.';\n\n if (errorCallback) {\n err.message = msg;\n errorCallback(err);\n } else {\n console.error(\n msg + '\\n The error stack trace includes: \\n' + err.stack\n );\n }\n };\n request.send();\n }\n\n /**\n * Connect a source to the convolver.\n *\n * @method process\n * @for p5.Convolver\n * @param {Object} src p5.sound / Web Audio object with a sound\n * output.\n * @example\n * \n * let cVerb, sound;\n * function preload() {\n * // We have both MP3 and OGG versions of all sound assets\n * soundFormats('ogg', 'mp3');\n *\n * // Try replacing 'bx-spring' with other soundfiles like\n * // 'concrete-tunnel' 'small-plate' 'drum' 'beatbox'\n * cVerb = createConvolver('assets/bx-spring.mp3');\n *\n * // Try replacing 'Damscray_DancingTiger' with\n * // 'beat', 'doorbell', lucky_dragons_-_power_melody'\n * sound = loadSound('assets/Damscray_DancingTiger.mp3');\n * }\n *\n * function setup() {\n * let cnv = createCanvas(100, 100);\n * cnv.mousePressed(playSound);\n * background(220);\n * text('tap to play', 20, 20);\n *\n * // disconnect from main output...\n * sound.disconnect();\n *\n * // ...and process with cVerb\n * // so that we only hear the convolution\n * cVerb.process(sound);\n * }\n *\n * function playSound() {\n * sound.play();\n * }\n *\n *
.impulses
array. Previous\n * impulses can be accessed with the .toggleImpulse(id)
\n * method.\n *\n * @method addImpulse\n * @for p5.Convolver\n * @param {String} path path to a sound file\n * @param {Function} callback function (optional)\n * @param {Function} errorCallback function (optional)\n */\n addImpulse(path, callback, errorCallback) {\n // if loading locally without a server\n if (\n window.location.origin.indexOf('file://') > -1 &&\n window.cordova === 'undefined'\n ) {\n alert(\n 'This sketch may require a server to load external files. Please see http://bit.ly/1qcInwS'\n );\n }\n this._loadBuffer(path, callback, errorCallback);\n }\n\n /**\n * Similar to .addImpulse, except that the .impulses
\n * Array is reset to save memory. A new .impulses
\n * array is created with this impulse as the only item.\n *\n * @method resetImpulse\n * @for p5.Convolver\n * @param {String} path path to a sound file\n * @param {Function} callback function (optional)\n * @param {Function} errorCallback function (optional)\n */\n resetImpulse(path, callback, errorCallback) {\n // if loading locally without a server\n if (\n window.location.origin.indexOf('file://') > -1 &&\n window.cordova === 'undefined'\n ) {\n alert(\n 'This sketch may require a server to load external files. Please see http://bit.ly/1qcInwS'\n );\n }\n this.impulses = [];\n this._loadBuffer(path, callback, errorCallback);\n }\n\n /**\n * If you have used .addImpulse()
to add multiple impulses\n * to a p5.Convolver, then you can use this method to toggle between\n * the items in the .impulses
Array. Accepts a parameter\n * to identify which impulse you wish to use, identified either by its\n * original filename (String) or by its position in the .impulses\n *
Array (Number)..audioBuffer
(type:\n * Web Audio \n * AudioBuffer) and a .name
, a String that corresponds\n * with the original filename.\n *\n * @method toggleImpulse\n * @for p5.Convolver\n * @param {String|Number} id Identify the impulse by its original filename\n * (String), or by its position in the\n * .impulses
Array (Number).\n */\n toggleImpulse(id) {\n if (typeof id === 'number' && id < this.impulses.length) {\n this._setBuffer(this.impulses[id].audioBuffer);\n }\n if (typeof id === 'string') {\n for (var i = 0; i < this.impulses.length; i++) {\n if (this.impulses[i].name === id) {\n this._setBuffer(this.impulses[i].audioBuffer);\n break;\n }\n }\n }\n }\n\n dispose() {\n super.dispose();\n\n // remove all the Impulse Response buffers\n for (var i in this.impulses) {\n if (this.impulses[i]) {\n this.impulses[i] = null;\n }\n }\n }\n}\n\n/**\n * Create a p5.Convolver. Accepts a path to a soundfile\n * that will be used to generate an impulse response.\n *\n * @method createConvolver\n * @for p5\n * @param {String} path path to a sound file\n * @param {Function} [callback] function to call if loading is successful.\n * The object will be passed in as the argument\n * to the callback function.\n * @param {Function} [errorCallback] function to call if loading is not successful.\n * A custom error will be passed in as the argument\n * to the callback function.\n * @return {p5.Convolver}\n * @example\n * \n * let cVerb, sound;\n * function preload() {\n * // We have both MP3 and OGG versions of all sound assets\n * soundFormats('ogg', 'mp3');\n *\n * // Try replacing 'bx-spring' with other soundfiles like\n * // 'concrete-tunnel' 'small-plate' 'drum' 'beatbox'\n * cVerb = createConvolver('assets/bx-spring.mp3');\n *\n * // Try replacing 'Damscray_DancingTiger' with\n * // 'beat', 'doorbell', lucky_dragons_-_power_melody'\n * sound = loadSound('assets/Damscray_DancingTiger.mp3');\n * }\n *\n * function setup() {\n * let cnv = createCanvas(100, 100);\n * cnv.mousePressed(playSound);\n * background(220);\n * text('tap to play', 20, 20);\n *\n * // disconnect from main output...\n * sound.disconnect();\n *\n * // ...and process with cVerb\n * // so that we only hear the convolution\n * cVerb.process(sound);\n * }\n *\n * function playSound() {\n * sound.play();\n * }\n *
A phrase is a pattern of musical events over time, i.e.\n * a series of notes and rests.
\n *\n *Phrases must be added to a p5.Part for playback, and\n * each part can play multiple phrases at the same time.\n * For example, one Phrase might be a kick drum, another\n * could be a snare, and another could be the bassline.
\n *\n *The first parameter is a name so that the phrase can be\n * modified or deleted later. The callback is a a function that\n * this phrase will call at every step—for example it might be\n * called playNote(value){}
. The array determines\n * which value is passed into the callback at each step of the\n * phrase. It can be numbers, an object with multiple numbers,\n * or a zero (0) indicates a rest so the callback won't be called).
\n * let mySound, myPhrase, myPart;\n * let pattern = [1,0,0,2,0,2,0,0];\n *\n * function preload() {\n * mySound = loadSound('assets/beatbox.mp3');\n * }\n *\n * function setup() {\n * let cnv = createCanvas(100, 100);\n * cnv.mousePressed(playMyPart);\n * background(220);\n * text('tap to play', width/2, height/2);\n * textAlign(CENTER, CENTER);\n *\n * myPhrase = new p5.Phrase('bbox', onEachStep, pattern);\n * myPart = new p5.Part();\n * myPart.addPhrase(myPhrase);\n * myPart.setBPM(60);\n * }\n *\n * function onEachStep(time, playbackRate) {\n * mySound.rate(playbackRate);\n * mySound.play(time);\n * }\n *\n * function playMyPart() {\n * userStartAudio();\n * myPart.start();\n * }\n *
A p5.Part plays back one or more p5.Phrases. Instantiate a part\n * with steps and tatums. By default, each step represents a 1/16th note.
\n *\n *See p5.Phrase for more about musical timing.
\n *\n * @class p5.Part\n * @constructor\n * @param {Number} [steps] Steps in the part\n * @param {Number} [tatums] Divisions of a beat, e.g. use 1/4, or 0.25 for a quater note (default is 1/16, a sixteenth note)\n * @example\n *\n * let box, drum, myPart;\n * let boxPat = [1,0,0,2,0,2,0,0];\n * let drumPat = [0,1,1,0,2,0,1,0];\n *\n * function preload() {\n * box = loadSound('assets/beatbox.mp3');\n * drum = loadSound('assets/drum.mp3');\n * }\n *\n * function setup() {\n * let cnv = createCanvas(100, 100);\n * cnv.mousePressed(playMyPart);\n * background(220);\n * textAlign(CENTER, CENTER);\n * text('tap to play', width/2, height/2);\n *\n * let boxPhrase = new p5.Phrase('box', playBox, boxPat);\n * let drumPhrase = new p5.Phrase('drum', playDrum, drumPat);\n * myPart = new p5.Part();\n * myPart.addPhrase(boxPhrase);\n * myPart.addPhrase(drumPhrase);\n * myPart.setBPM(60);\n * }\n *\n * function playBox(time, playbackRate) {\n * box.rate(playbackRate);\n * box.play(time);\n * }\n *\n * function playDrum(time, playbackRate) {\n * drum.rate(playbackRate);\n * drum.play(time);\n * }\n *\n * function playMyPart() {\n * userStartAudio();\n *\n * myPart.start();\n * }\n *
new p5.Score(a, a, b, a, c)
\n *\n * @class p5.Score\n * @constructor\n * @param {p5.Part} [...parts] One or multiple parts, to be played in sequence.\n */\nclass Score {\n constructor() {\n // for all of the arguments\n this.parts = [];\n this.currentPart = new Array(arguments.length);;\n\n var thisScore = this;\n for (var i in arguments) {\n this.parts[i] = arguments[i];\n this.parts[i].nextPart = this.parts[i + 1];\n this.parts[i].onended = function () {\n thisScore.resetPart(i);\n playNextPart(thisScore);\n }; \n }\n this.looping = false;\n }\n\n onended() {\n if (this.looping) {\n // this.resetParts();\n this.parts[0].start();\n } else {\n this.parts[this.parts.length - 1].onended = function () {\n this.stop();\n this.resetParts();\n };\n }\n this.currentPart = 0;\n }\n\n /**\n * Start playback of the score.\n *\n * @method start\n * @for p5.Score\n */\n start() {\n this.parts[this.currentPart].start();\n this.scoreStep = 0;\n }\n\n /**\n * Stop playback of the score.\n *\n * @method stop\n * @for p5.Score\n */\n stop() {\n this.parts[this.currentPart].stop();\n this.currentPart = 0;\n this.scoreStep = 0;\n }\n\n /**\n * Pause playback of the score.\n *\n * @method pause\n * @for p5.Score\n */\n pause() {\n this.parts[this.currentPart].stop();\n }\n\n /**\n * Loop playback of the score.\n *\n * @method loop\n * @for p5.Score\n */\n loop() {\n this.looping = true;\n this.start();\n }\n\n /**\n * Stop looping playback of the score. If it\n * is currently playing, this will go into effect\n * after the current round of playback completes.\n *\n * @method noLoop\n * @for p5.Score\n */\n noLoop() {\n this.looping = false;\n }\n\n resetParts() {\n var self = this;\n this.parts.forEach(function (part) {\n self.resetParts[part];\n });\n }\n\n resetPart(i) {\n this.parts[i].stop();\n this.parts[i].partStep = 0;\n for (var p in this.parts[i].phrases) {\n if (this.parts[i]) {\n this.parts[i].phrases[p].phraseStep = 0;\n }\n }\n }\n\n /**\n * Set the tempo for all parts in the score\n *\n * @method setBPM\n * @for p5.Score\n * @param {Number} BPM Beats Per Minute\n * @param {Number} rampTime Seconds from now\n */\n setBPM(bpm, rampTime) {\n for (var i in this.parts) {\n if (this.parts[i]) {\n this.parts[i].setBPM(bpm, rampTime);\n }\n }\n }\n}\n\nfunction playNextPart(aScore) {\n aScore.currentPart++;\n if (aScore.currentPart >= aScore.parts.length) {\n aScore.scoreStep = 0;\n aScore.onended();\n } else {\n aScore.scoreStep = 0;\n aScore.parts[aScore.currentPart - 1].stop();\n aScore.parts[aScore.currentPart].start();\n }\n}\n\nexport { Phrase, Part, Score };\n","import p5sound from './main';\nimport Clock from 'Tone/core/Clock';\n\n/**\n * SoundLoop\n *\n * @class p5.SoundLoop\n * @constructor\n *\n * @param {Function} callback this function will be called on each iteration of theloop\n * @param {Number|String} [interval] amount of time (if a number) or beats (if a string, following Tone.Time convention) for each iteration of the loop. Defaults to 1 second.\n *\n * @example\n * \n * let synth, soundLoop;\n * let notePattern = [60, 62, 64, 67, 69, 72];\n *\n * function setup() {\n * let cnv = createCanvas(100, 100);\n * cnv.mousePressed(canvasPressed);\n * colorMode(HSB);\n * background(0, 0, 86);\n * text('tap to start/stop', 10, 20);\n *\n * //the looper's callback is passed the timeFromNow\n * //this value should be used as a reference point from\n * //which to schedule sounds\n * let intervalInSeconds = 0.2;\n * soundLoop = new p5.SoundLoop(onSoundLoop, intervalInSeconds);\n *\n * synth = new p5.MonoSynth();\n * }\n *\n * function canvasPressed() {\n * // ensure audio is enabled\n * userStartAudio();\n *\n * if (soundLoop.isPlaying) {\n * soundLoop.stop();\n * } else {\n * // start the loop\n * soundLoop.start();\n * }\n * }\n *\n * function onSoundLoop(timeFromNow) {\n * let noteIndex = (soundLoop.iterations - 1) % notePattern.length;\n * let note = midiToFreq(notePattern[noteIndex]);\n * synth.play(note, 0.5, timeFromNow);\n * background(noteIndex * 360 / notePattern.length, 50, 100);\n * }\n *
PeakDetect works in conjunction with p5.FFT to\n * look for onsets in some or all of the frequency spectrum.\n *
\n *\n * To use p5.PeakDetect, call update
in the draw loop\n * and pass in a p5.FFT object.\n *
\n * You can listen for a specific part of the frequency spectrum by\n * setting the range between freq1
and freq2
.\n *
threshold
is the threshold for detecting a peak,\n * scaled between 0 and 1. It is logarithmic, so 0.1 is half as loud\n * as 1.0.
\n * The update method is meant to be run in the draw loop, and\n * frames determines how many loops must pass before\n * another peak can be detected.\n * For example, if the frameRate() = 60, you could detect the beat of a\n * 120 beat-per-minute song with this equation:\n * framesPerPeak = 60 / (estimatedBPM / 60 );
\n *
\n * Based on example contribtued by @b2renger, and a simple beat detection\n * explanation by Felix Turner.\n *
\n *\n * @class p5.PeakDetect\n * @constructor\n * @param {Number} [freq1] lowFrequency - defaults to 20Hz\n * @param {Number} [freq2] highFrequency - defaults to 20000 Hz\n * @param {Number} [threshold] Threshold for detecting a beat between 0 and 1\n * scaled logarithmically where 0.1 is 1/2 the loudness\n * of 1.0. Defaults to 0.35.\n * @param {Number} [framesPerPeak] Defaults to 20.\n * @example\n *\n *\n * var cnv, soundFile, fft, peakDetect;\n * var ellipseWidth = 10;\n *\n * function preload() {\n * soundFile = loadSound('assets/beat.mp3');\n * }\n *\n * function setup() {\n * background(0);\n * noStroke();\n * fill(255);\n * textAlign(CENTER);\n *\n * // p5.PeakDetect requires a p5.FFT\n * fft = new p5.FFT();\n * peakDetect = new p5.PeakDetect();\n * }\n *\n * function draw() {\n * background(0);\n * text('click to play/pause', width/2, height/2);\n *\n * // peakDetect accepts an fft post-analysis\n * fft.analyze();\n * peakDetect.update(fft);\n *\n * if ( peakDetect.isDetected ) {\n * ellipseWidth = 50;\n * } else {\n * ellipseWidth *= 0.95;\n * }\n *\n * ellipse(width/2, height/2, ellipseWidth, ellipseWidth);\n * }\n *\n * // toggle play/stop when canvas is clicked\n * function mouseClicked() {\n * if (mouseX > 0 && mouseX < width && mouseY > 0 && mouseY < height) {\n * if (soundFile.isPlaying() ) {\n * soundFile.stop();\n * } else {\n * soundFile.play();\n * }\n * }\n * }\n *
\n * var cnv, soundFile, fft, peakDetect;\n * var ellipseWidth = 0;\n *\n * function preload() {\n * soundFile = loadSound('assets/beat.mp3');\n * }\n *\n * function setup() {\n * cnv = createCanvas(100,100);\n * textAlign(CENTER);\n *\n * fft = new p5.FFT();\n * peakDetect = new p5.PeakDetect();\n *\n * setupSound();\n *\n * // when a beat is detected, call triggerBeat()\n * peakDetect.onPeak(triggerBeat);\n * }\n *\n * function draw() {\n * background(0);\n * fill(255);\n * text('click to play', width/2, height/2);\n *\n * fft.analyze();\n * peakDetect.update(fft);\n *\n * ellipseWidth *= 0.95;\n * ellipse(width/2, height/2, ellipseWidth, ellipseWidth);\n * }\n *\n * // this function is called by peakDetect.onPeak\n * function triggerBeat() {\n * ellipseWidth = 50;\n * }\n *\n * // mouseclick starts/stops sound\n * function setupSound() {\n * cnv.mouseClicked( function() {\n * if (soundFile.isPlaying() ) {\n * soundFile.stop();\n * } else {\n * soundFile.play();\n * }\n * });\n * }\n *
Record sounds for playback and/or to save as a .wav file.\n * The p5.SoundRecorder records all sound output from your sketch,\n * or can be assigned a specific source with setInput().
\n *The record() method accepts a p5.SoundFile as a parameter.\n * When playback is stopped (either after the given amount of time,\n * or with the stop() method), the p5.SoundRecorder will send its\n * recording to that p5.SoundFile for playback.
\n *\n * @class p5.SoundRecorder\n * @constructor\n * @example\n *\n * let mic, recorder, soundFile;\n * let state = 0;\n *\n * function setup() {\n * let cnv = createCanvas(100, 100);\n * cnv.mousePressed(canvasPressed);\n * background(220);\n * textAlign(CENTER, CENTER);\n *\n * // create an audio in\n * mic = new p5.AudioIn();\n *\n * // prompts user to enable their browser mic\n * mic.start();\n *\n * // create a sound recorder\n * recorder = new p5.SoundRecorder();\n *\n * // connect the mic to the recorder\n * recorder.setInput(mic);\n *\n * // this sound file will be used to\n * // playback & save the recording\n * soundFile = new p5.SoundFile();\n *\n * text('tap to record', width/2, height/2);\n * }\n *\n * function canvasPressed() {\n * // ensure audio is enabled\n * userStartAudio();\n *\n * // make sure user enabled the mic\n * if (state === 0 && mic.enabled) {\n *\n * // record to our p5.SoundFile\n * recorder.record(soundFile);\n *\n * background(255,0,0);\n * text('Recording!', width/2, height/2);\n * state++;\n * }\n * else if (state === 1) {\n * background(0,255,0);\n *\n * // stop recorder and\n * // send result to soundFile\n * recorder.stop();\n *\n * text('Done! Tap to play and download', width/2, height/2, width - 20);\n * state++;\n * }\n *\n * else if (state === 2) {\n * soundFile.play(); // play the result!\n * save(soundFile, 'mySound.wav');\n * state++;\n * }\n * }\n *
\n *\n * // load two soundfile and crossfade beetween them\n * let sound1,sound2;\n * let sound1Gain, sound2Gain, mixGain;\n * function preload(){\n * soundFormats('ogg', 'mp3');\n * sound1 = loadSound('assets/Damscray_-_Dancing_Tiger_01');\n * sound2 = loadSound('assets/beat');\n * }\n * function setup() {\n * let cnv = createCanvas(100, 100);\n * cnv.mousePressed(startSound);\n * // create a 'mix' gain bus to which we will connect both soundfiles\n * mixGain = new p5.Gain();\n * mixGain.connect();\n * sound1.disconnect(); // diconnect from p5 output\n * sound1Gain = new p5.Gain(); // setup a gain node\n * sound1Gain.setInput(sound1); // connect the first sound to its input\n * sound1Gain.connect(mixGain); // connect its output to the final mix bus\n * sound2.disconnect();\n * sound2Gain = new p5.Gain();\n * sound2Gain.setInput(sound2);\n * sound2Gain.connect(mixGain);\n * }\n * function startSound() {\n * sound1.loop();\n * sound2.loop();\n * loop();\n * }\n * function mouseReleased() {\n * sound1.stop();\n * sound2.stop();\n * }\n * function draw(){\n * background(220);\n * textAlign(CENTER);\n * textSize(11);\n * fill(0);\n * if (!sound1.isPlaying()) {\n * text('tap and drag to play', width/2, height/2);\n * return;\n * }\n * // map the horizontal position of the mouse to values useable for volume * control of sound1\n * var sound1Volume = constrain(map(mouseX,width,0,0,1), 0, 1);\n * var sound2Volume = 1-sound1Volume;\n * sound1Gain.amp(sound1Volume);\n * sound2Gain.amp(sound2Volume);\n * // map the vertical position of the mouse to values useable for 'output * volume control'\n * var outputVolume = constrain(map(mouseY,height,0,0,1), 0, 1);\n * mixGain.amp(outputVolume);\n * text('output', width/2, height - outputVolume * height * 0.9)\n * fill(255, 0, 255);\n * textAlign(LEFT);\n * text('sound1', 5, height - sound1Volume * height * 0.9);\n * textAlign(RIGHT);\n * text('sound2', width - 5, height - sound2Volume * height * 0.9);\n * }\n *
\n * let monoSynth;\n *\n * function setup() {\n * let cnv = createCanvas(100, 100);\n * cnv.mousePressed(playSynth);\n * background(220);\n * textAlign(CENTER);\n * text('tap to play', width/2, height/2);\n *\n * monoSynth = new p5.MonoSynth();\n * }\n *\n * function playSynth() {\n * userStartAudio();\n *\n * let note = random(['Fb4', 'G4']);\n * // note velocity (volume, from 0 to 1)\n * let velocity = random();\n * // time from now (in seconds)\n * let time = 0;\n * // note duration (in seconds)\n * let dur = 1/6;\n *\n * monoSynth.play(note, velocity, time, dur);\n * }\n *
\n * let monoSynth;\n *\n * function setup() {\n * let cnv = createCanvas(100, 100);\n * cnv.mousePressed(playSynth);\n * background(220);\n * textAlign(CENTER);\n * text('tap to play', width/2, height/2);\n *\n * monoSynth = new p5.MonoSynth();\n * }\n *\n * function playSynth() {\n * userStartAudio();\n *\n * let note = random(['Fb4', 'G4']);\n * // note velocity (volume, from 0 to 1)\n * let velocity = random();\n * // time from now (in seconds)\n * let time = 0;\n * // note duration (in seconds)\n * let dur = 1/6;\n *\n * monoSynth.play(note, velocity, time, dur);\n * }\n *
\n * let monoSynth;\n *\n * function setup() {\n * let cnv = createCanvas(100, 100);\n * cnv.mousePressed(triggerAttack);\n * background(220);\n * text('tap here for attack, let go to release', 5, 20, width - 20);\n * monoSynth = new p5.MonoSynth();\n * }\n *\n * function triggerAttack() {\n * userStartAudio();\n *\n * monoSynth.triggerAttack(\"E3\");\n * }\n *\n * function mouseReleased() {\n * monoSynth.triggerRelease();\n * }\n *
\n * let monoSynth;\n *\n * function setup() {\n * let cnv = createCanvas(100, 100);\n * cnv.mousePressed(triggerAttack);\n * background(220);\n * text('tap here for attack, let go to release', 5, 20, width - 20);\n * monoSynth = new p5.MonoSynth();\n * }\n *\n * function triggerAttack() {\n * userStartAudio();\n *\n * monoSynth.triggerAttack(\"E3\");\n * }\n *\n * function mouseReleased() {\n * monoSynth.triggerRelease();\n * }\n *
setRange
),\n * then decayLevel would increase proportionally, to become 0.5.\n * @param {Number} [releaseTime] Time in seconds from now (defaults to 0)\n */\n setADSR(attack, decay, sustain, release) {\n this.env.setADSR(attack, decay, sustain, release);\n }\n\n /**\n * MonoSynth amp\n * @method amp\n * @for p5.MonoSynth\n * @param {Number} vol desired volume\n * @param {Number} [rampTime] Time to reach new volume\n * @return {Number} new volume value\n */\n amp(vol, rampTime) {\n var t = rampTime || 0;\n if (typeof vol !== 'undefined') {\n this.oscillator.amp(vol, t);\n }\n return this.oscillator.amp().value;\n }\n\n /**\n * Connect to a p5.sound / Web Audio object.\n *\n * @method connect\n * @for p5.MonoSynth\n * @param {Object} unit A p5.sound or Web Audio object\n */\n\n connect(unit) {\n var u = unit || p5sound.input;\n this.output.connect(u.input ? u.input : u);\n }\n\n /**\n * Disconnect all outputs\n *\n * @method disconnect\n * @for p5.MonoSynth\n */\n disconnect() {\n if (this.output) {\n this.output.disconnect();\n }\n }\n\n /**\n * Get rid of the MonoSynth and free up its resources / memory.\n *\n * @method dispose\n * @for p5.MonoSynth\n */\n dispose() {\n super.dispose();\n\n if (this.env) {\n this.env.dispose();\n }\n if (this.oscillator) {\n this.oscillator.dispose();\n }\n }\n}\n\nexport default MonoSynth;\n","/**\n * Listen for onsets (a sharp increase in volume) within a given\n * frequency range.\n *\n * @class p5.OnsetDetect\n * @constructor\n * @param {Number} freqLow Low frequency\n * @param {Number} freqHigh High frequency\n * @param {Number} threshold Amplitude threshold between 0 (no energy) and 1 (maximum)\n * @param {Function} callback Function to call when an onset is detected\n */\nclass OnsetDetect {\n constructor(freqLow, freqHigh, threshold, callback) {\n this.isDetected = false;\n this.freqLow = freqLow;\n this.freqHigh = freqHigh;\n this.treshold = threshold;\n this.energy = 0;\n this.penergy = 0;\n\n // speed of decay\n this.sensitivity = 500;\n\n this.callback = callback;\n }\n\n // callback here too?\n update(fftObject, callback) {\n this.energy = fftObject.getEnergy(this.freqLow, this.freqHigh) / 255;\n\n if (this.isDetected === false) {\n if (this.energy - this.penergy > this.treshold) {\n this.isDetected = true;\n\n if (this.callback) {\n this.callback(this.energy);\n } else if (callback) {\n callback(this.energy);\n }\n\n var self = this;\n setTimeout(function () {\n self.isDetected = false;\n }, this.sensitivity);\n }\n }\n\n this.penergy = this.energy;\n }\n}\n\nexport default OnsetDetect;\n","import p5sound from './main';\nimport TimelineSignal from 'Tone/signal/TimelineSignal.js';\nimport { noteToFreq, freqToMidi } from './helpers';\n\n/**\n * An AudioVoice is used as a single voice for sound synthesis.\n * The PolySynth class holds an array of AudioVoice, and deals\n * with voices allocations, with setting notes to be played, and\n * parameters to be set.\n *\n * @class p5.PolySynth\n * @constructor\n *\n * @param {Number} [synthVoice] A monophonic synth voice inheriting\n * the AudioVoice class. Defaults to p5.MonoSynth\n * @param {Number} [maxVoices] Number of voices, defaults to 8;\n * @example\n * \n * let polySynth;\n *\n * function setup() {\n * let cnv = createCanvas(100, 100);\n * cnv.mousePressed(playSynth);\n * background(220);\n * text('click to play', 20, 20);\n *\n * polySynth = new p5.PolySynth();\n * }\n *\n * function playSynth() {\n * userStartAudio();\n *\n * // note duration (in seconds)\n * let dur = 1.5;\n *\n * // time from now (in seconds)\n * let time = 0;\n *\n * // velocity (volume, from 0 to 1)\n * let vel = 0.1;\n *\n * // notes can overlap with each other\n * polySynth.play('G2', vel, 0, dur);\n * polySynth.play('C3', vel, time += 1/3, dur);\n * polySynth.play('G3', vel, time += 1/3, dur);\n * }\n *
\n * let polySynth;\n *\n * function setup() {\n * let cnv = createCanvas(100, 100);\n * cnv.mousePressed(playSynth);\n * background(220);\n * text('click to play', 20, 20);\n *\n * polySynth = new p5.PolySynth();\n * }\n *\n * function playSynth() {\n * userStartAudio();\n *\n * // note duration (in seconds)\n * let dur = 1.5;\n *\n * // time from now (in seconds)\n * let time = 0;\n *\n * // velocity (volume, from 0 to 1)\n * let vel = 0.1;\n *\n * // notes can overlap with each other\n * polySynth.play('G2', vel, 0, dur);\n * polySynth.play('C3', vel, time += 1/3, dur);\n * polySynth.play('G3', vel, time += 1/3, dur);\n * }\n *
setRange
),\n * then decayLevel would increase proportionally, to become 0.5.\n * @param {Number} [releaseTime] Time in seconds from now (defaults to 0)\n **/\n\n noteADSR(note, a, d, s, r, timeFromNow = 0) {\n var now = p5sound.audiocontext.currentTime;\n var t = now + timeFromNow;\n this.audiovoices[this.notes[note].getValueAtTime(t)].setADSR(a, d, s, r);\n }\n\n /**\n * Set the PolySynths global envelope. This method modifies the envelopes of each\n * monosynth so that all notes are played with this envelope.\n *\n * @method setADSR\n * @for p5.PolySynth\n * @param {Number} [attackTime] Time (in seconds before envelope\n * reaches Attack Level\n * @param {Number} [decayTime] Time (in seconds) before envelope\n * reaches Decay/Sustain Level\n * @param {Number} [susRatio] Ratio between attackLevel and releaseLevel, on a scale from 0 to 1,\n * where 1.0 = attackLevel, 0.0 = releaseLevel.\n * The susRatio determines the decayLevel and the level at which the\n * sustain portion of the envelope will sustain.\n * For example, if attackLevel is 0.4, releaseLevel is 0,\n * and susAmt is 0.5, the decayLevel would be 0.2. If attackLevel is\n * increased to 1.0 (using setRange
),\n * then decayLevel would increase proportionally, to become 0.5.\n * @param {Number} [releaseTime] Time in seconds from now (defaults to 0)\n **/\n setADSR(a, d, s, r) {\n this.audiovoices.forEach(function (voice) {\n voice.setADSR(a, d, s, r);\n });\n }\n\n /**\n * Trigger the Attack, and Decay portion of a MonoSynth.\n * Similar to holding down a key on a piano, but it will\n * hold the sustain level until you let go.\n *\n * @method noteAttack\n * @for p5.PolySynth\n * @param {Number} [note] midi note on which attack should be triggered.\n * @param {Number} [velocity] velocity of the note to play (ranging from 0 to 1)/\n * @param {Number} [secondsFromNow] time from now (in seconds)\n * @example\n * \n * let polySynth = new p5.PolySynth();\n * let pitches = ['G', 'D', 'G', 'C'];\n * let octaves = [2, 3, 4];\n *\n * function setup() {\n * let cnv = createCanvas(100, 100);\n * cnv.mousePressed(playChord);\n * background(220);\n * text('tap to play', 20, 20);\n * }\n *\n * function playChord() {\n * userStartAudio();\n *\n * // play a chord: multiple notes at the same time\n * for (let i = 0; i < 4; i++) {\n * let note = random(pitches) + random(octaves);\n * polySynth.noteAttack(note, 0.1);\n * }\n * }\n *\n * function mouseReleased() {\n * // release all voices\n * polySynth.noteRelease();\n * }\n *
\n * let polySynth = new p5.PolySynth();\n * let pitches = ['G', 'D', 'G', 'C'];\n * let octaves = [2, 3, 4];\n *\n * function setup() {\n * let cnv = createCanvas(100, 100);\n * cnv.mousePressed(playChord);\n * background(220);\n * text('tap to play', 20, 20);\n * }\n *\n * function playChord() {\n * userStartAudio();\n *\n * // play a chord: multiple notes at the same time\n * for (let i = 0; i < 4; i++) {\n * let note = random(pitches) + random(octaves);\n * polySynth.noteAttack(note, 0.1);\n * }\n * }\n *\n * function mouseReleased() {\n * // release all voices\n * polySynth.noteRelease();\n * }\n *