{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///../node_modules/tone/Tone/core/Tone.js","webpack:///./master.js","webpack:///../node_modules/tone/Tone/signal/Signal.js","webpack:///../node_modules/tone/Tone/signal/Multiply.js","webpack:///./effect.js","webpack:///../node_modules/tone/Tone/signal/WaveShaper.js","webpack:///./helpers.js","webpack:///../node_modules/tone/Tone/signal/Add.js","webpack:///../node_modules/tone/Tone/type/Type.js","webpack:///../node_modules/tone/Tone/core/Gain.js","webpack:///./audioWorklet/processorNames.js","webpack:///./errorHandler.js","webpack:///../node_modules/tone/Tone/core/Context.js","webpack:///../node_modules/tone/Tone/signal/Scale.js","webpack:///../node_modules/tone/Tone/signal/TimelineSignal.js","webpack:///./filter.js","webpack:///../node_modules/tone/Tone/signal/Subtract.js","webpack:///./audiocontext.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:///./oscillator.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/tone/Tone/core/Clock.js","webpack:///./monosynth.js","webpack:///./audioVoice.js","webpack:///./polysynth.js","webpack:///./app.js","webpack:///../node_modules/audioworklet-polyfill/dist/audioworklet-polyfill.js","webpack:///./shims.js","webpack:///../node_modules/webpack/buildin/global.js","webpack:///../node_modules/startaudiocontext/StartAudioContext.js","webpack:///./audioWorklet/index.js","webpack:///./audioWorklet/recorderProcessor.js","webpack:///./audioWorklet/soundFileProcessor.js","webpack:///./audioWorklet/amplitudeProcessor.js","webpack:///./panner.js","webpack:///./soundfile.js","webpack:///./amplitude.js","webpack:///./fft.js","webpack:///./signal.js","webpack:///../node_modules/tone/Tone/type/Frequency.js","webpack:///../node_modules/tone/Tone/type/TransportTime.js","webpack:///./envelope.js","webpack:///./pulse.js","webpack:///./noise.js","webpack:///./audioin.js","webpack:///../node_modules/tone/Tone/component/CrossFade.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:///./eq.js","webpack:///./eqFilter.js","webpack:///./panner3d.js","webpack:///./listener3d.js","webpack:///./delay.js","webpack:///./reverb.js","webpack:///./metro.js","webpack:///../node_modules/tone/Tone/core/TimelineState.js","webpack:///./looper.js","webpack:///./soundLoop.js","webpack:///./compressor.js","webpack:///./soundRecorder.js","webpack:///./peakDetect.js","webpack:///./gain.js","webpack:///./distortion.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","__WEBPACK_AMD_DEFINE_ARRAY__","__WEBPACK_AMD_DEFINE_RESULT__","undefined","audiocontext","p5sound","limiter","createDynamicsCompressor","threshold","ratio","knee","meter","fftMeter","soundArray","parts","extensions","p5","getMasterVolume","masterVolume","vol","tFromNow","currentTime","currentVol","cancelScheduledValues","linearRampToValueAtTime","soundOut","_silentNode","_gain","_param","getConstant","units","Type","Default","convert","SignalBase","Multiply","createInsOuts","_mult","Gain","require","CrossFade","Effect","ac","_drywet","wet","a","b","amp","drywet","fade","u","index","WaveShaper","mapping","bufferLen","_shaper","createWaveShaper","_curve","curve","isFinite","Float32Array","setMap","len","normalized","oversample","oversampling","RangeError","processorNames","freqToMidi","f","mathlog2","round","midiToFreq","writeUTFBytes","view","offset","string","lng","setUint8","charCodeAt","soundFormats","toLowerCase","disposeSound","registerMethod","_checkFileFormats","paths","path","extTest","pop","isFileSupported","pathSplit","pathCore","extension","_typeof","_mathChain","math","thisChain","nextChain","type","mathOps","convertToWav","audioBuffer","leftChannel","interleaved","rightChannel","result","inputIndex","interleave","getChannelData","numberOfChannels","buffer","ArrayBuffer","DataView","setUint32","setUint16","setInt16","noteToFreq","note","A","B","C","D","E","F","G","toUpperCase","slice","safeBufferSize","idealBufferSize","bufferSize","tempAudioWorkletNode","AudioWorkletNode","soundFileProcessor","ScriptProcessorNode","Add","_sum","Time","Frequency","TransportTime","Ticks","NormalRange","AudioRange","Decibels","Interval","BPM","Positive","Cents","Degrees","MIDI","BarsBeatsSixteenths","Samples","Hertz","Note","Milliseconds","Seconds","Notation","toSeconds","time","TimeBase","toFrequency","freq","valueOf","toTicks","Transport","ticks","GainNode","AudioContext","createGainNode","_gainNode","recorderProcessor","amplitudeProcessor","errorTrace","failedPath","tempStack","splitStack","err","Error","originalStack","stack","filter","ln","toneConnect","outNum","inNum","nativeConnect","e","nativeDisconnect","webkitAudioContext","prop","Emitter","_context","_defineProperty","_latencyHint","_lookAhead","_updateInterval","_computedUpdateInterval","_worker","_createWorker","_constants","mixin","URL","webkitURL","blob","Blob","toFixed","blobUrl","createObjectURL","worker","Worker","addEventListener","_lastUpdate","diff","max","createBuffer","arr","constant","createBufferSource","channelCount","channelCountMode","loop","start","lA","blockTime","postMessage","hint","lookAhead","latencyHint","updateInterval","supported","Scale","outputMin","outputMax","_outputMin","_outputMax","_scale","_add","_setRange","min","TimelineSignal","_events","Timeline","_initial","_fromUnits","Linear","Exponential","Target","Curve","Set","getValueAtTime","_toUnits","convertedVal","setValueAtTime","startTime","add","endTime","exponentialRampToValueAtTime","beforeEvent","_searchBefore","_minOutput","setValue","sampleTime","setTargetAtTime","timeConstant","setValueCurveAtTime","duration","scaling","floats","segmentTime","after","cancel","setRampPoint","before","_searchAfter","linearRampToValueBetween","finish","exponentialRampToValueBetween","getAfter","previouVal","previous","getBefore","_exponentialApproach","_curveInterpolate","_linearInterpolate","_exponentialInterpolate","t0","v0","v1","exp","t1","progress","lowerIndex","floor","upperIndex","ceil","lowerVal","upperVal","Filter","biquad","createBiquadFilter","setType","_on","_untoggledType","process","src","res","frequency","Q","toggle","LowPass","HighPass","BandPass","Subtract","_neg","Negate","global","StartAudioContext","getAudioContext","userStartAudio","elements","callback","elt","Element","map","on","event","events","eventName","off","ev","eventList","args","functions","func","emitterFunc","node","outputNumber","inputNumber","overridden","_plusNow","_unaryExpressions","quantize","regexp","method","rh","nextSubdivision","lh","subdiv","_expr","expr","subdivision","addNow","_defaultExpr","_noOp","copy","toNotation","retNotation","_toNotationHelper","retTripletNotation","testNotations","_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","Mult","Oscillator","started","phaseAmount","oscillator","createOscillator","_freqMods","panPosition","connection","panner","Panner","stop","abs","freqNode","getAmp","isNaN","phase","getFreq","getType","oscMods","pan","pval","getPan","osc2","delayAmt","dNode","createDelay","delayTime","sigChain","mathObj","chainSource","num","scale","inMin","inMax","outMin","outMax","mapOutMin","mapOutMax","SinOsc","TriOsc","SawOsc","SqrOsc","_timeline","_toRemove","_iterating","memory","Infinity","_search","remove","shift","cancelBefore","beginning","end","midPoint","nextEvent","_iterate","lowerBound","upperBound","forEach","forEachBefore","forEachAfter","forEachFrom","forEachAtTime","_multiply","GreaterThanZero","_thresh","Clock","_nextTick","_lastState","_state","TimelineState","_boundLoop","_loop","state","setStateAtTime","pause","loopInterval","lag","currentState","tickTime","getStateAtTime","AudioVoice","MonoSynth","env","Envelope","setRange","setExp","setADSR","setInput","play","velocity","secondsFromNow","susTime","triggerAttack","triggerRelease","vel","ramp","attack","decay","sustain","release","defineProperties","aTime","dTime","sPercent","rTime","sustime","PolySynth","audioVoice","maxVoices","audiovoices","notes","_newest","_oldest","_voicesInUse","_allocateVoices","noteAttack","noteRelease","noteADSR","timeFromNow","voice","_note","_velocity","currentVoice","acTime","oldestNote","previousVal","_updateAfter","maxRange","nextTime","p5SOUND","parameters","fill","processor","realm","exec","inputBuffer","outputBuffer","$$processors","$$context","self","createScriptProcessor","outputChannelCount","Map","properties","defaultValue","MessageChannel","port2","Processor","port","port1","onaudioprocess","$$audioWorklet","AudioWorklet","addModule","fetch","then","ok","status","text","AudioWorkletProcessor","registerProcessor","parameterDescriptors","document","createElement","style","cssText","appendChild","contentWindow","createTextNode","body","$hook","console","documentElement","transpile","String","fixSetTarget","setTargetValueAtTime","createDelayNode","createJavaScriptNode","createPeriodicWave","createWaveTable","internal_createGain","internal_createDelay","maxDelayTime","internal_createBufferSource","internal_start","when","noteGrainOn","noteOn","internal_stop","noteOff","playbackRate","internal_createDynamicsCompressor","reduction","internal_createBiquadFilter","detune","internal_createOscillator","setPeriodicWave","setWaveTable","OfflineAudioContext","webkitOfflineAudioContext","navigator","getUserMedia","webkitGetUserMedia","mozGetUserMedia","msGetUserMedia","el","isSupported","canPlayType","g","Function","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","querySelectorAll","jquery","toArray","tap","moduleSources","initializedAudioWorklets","preload","_incrementPreload","onWorkletModulesLoad","_decrementPreload","all","moduleSrc","objectURL","audioWorklet","__webpack_exports__","createStereoPanner","stereoPanner","inputChannels","obj","numInputChannels","left","right","channelInterpretation","splitter","createChannelSplitter","createChannelMerger","v","rightVal","cos","leftVal","numChannels","CustomError","_require","SoundFile","onload","onerror","whileLoading","url","File","FileReader","FileList","file","_onended","_looping","_playing","_paused","_pauseTime","_cues","_cueIDCounter","_lastPos","_counterNode","_workletNode","bufferSourceNodes","bufferSourceNode","reversed","pauseTime","startMillis","load","_whileLoading","_clearOnEnd","thisBufferSourceNode","target","soundFile","_","reverse","registerPreloadMethod","loadSound","location","origin","cordova","alert","errorCallback","request","XMLHttpRequest","evt","_updateProgress","open","responseType","decodeAudioData","response","buff","msg","statusText","message","send","reader","readAsArrayBuffer","lengthComputable","percentComplete","loaded","isLoaded","rate","_cueStart","cueStart","cueEnd","setVolume","isPlaying","_initSourceNode","_initCounterNode","_arrayIndex","loopStart","loopEnd","playMode","str","pTime","setLoop","bool","isLooping","isPaused","stopAll","_time","_rampTime","_tFromNow","getVolume","reverseBuffer","setPitch","newPlaybackRate","getPlaybackRate","jump","cueTime","cTime","dur","channels","frames","getPeaks","width","sampleSize","sampleStep","peaks","chan","currentPos","curVol","onended","getLevel","setPath","setBuffer","buf","size","newBuffer","channelNum","_this","cNode","workletBufferSize","processorOptions","onmessage","data","_onTimeUpdate","audioBuf","arrayBuffer","_createCounterBuffer","processPeaks","_initThreshold","_minThreshold","_minPeaks","bufLen","allPeaks","minThreshold","minPeaks","offlineContext","startRendering","oncomplete","filteredBuffer","renderedBuffer","bufferData","getPeaksAtThreshold","topTempos","intervalCounts","tempoCounts","intervalCount","theoreticalTempo","mapTempo","some","tempoCount","tempo","count","groupNeighborsByTempo","peaksObj","peaksArray","sort","startPeak","endPeak","startPos","sampleIndex","intervals","countIntervalsBetweenNearbyPeaks","intA","intB","tempoPeaks","bpmVariance","peaksAtTopTempo","peak","intervalBPM","peakTime","getPeaksAtTopTempo","Peak","amplitude","tempos","Cue","id","addCue","cue","removeCue","cueLength","clearCues","playbackTime","callbackTime","_prevUpdateTime","save","fileName","saveSound","getBlob","dataView","Amplitude","smoothing","parameterData","normalize","volume","volNorm","stereoVol","stereoVolNorm","channel","toggleNormalize","smooth","FFT","bins","analyser","createAnalyser","fftSize","configurable","smoothingTimeConstant","freqDomain","Uint8Array","frequencyBinCount","timeDomain","bass","lowMid","mid","highMid","treble","waveform","_isSafari","timeToFloat","getFloatTimeDomainData","timeToInt","getByteTimeDomainData","normalArray","scaled","analyze","freqToFloat","getFloatFrequencyData","freqToInt","getByteFrequencyData","getEnergy","frequency1","frequency2","nyquist","swap","lowIndex","highIndex","numFrequencies","freq1","freq2","getCentroid","cumulative_sum","centroid_normalization","mean_freq_index","linAverages","N","spectrum","spectrumLength","spectrumStep","linearAverages","groupIndex","specIndex","logAverages","octaveBands","octaveIndex","hi","getOctaveBands","fCtr0","lastFrequencyBand","lo","ctr","newFrequencyBand","fft","_input","midi","midiToFrequency","pitch","octave","noteNumber","noteToScaleIndex","transpose","harmonize","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","l1","t2","l2","t3","l3","aLevel","dLevel","rLevel","_rampHighPercentage","_rampLowPercentage","control","_init","isExponential","sourceToClear","wasTriggered","_setRampAD","_rampAttackTime","checkExpInput","_rampDecayTime","TCDenominator","_rampAttackTC","_rampDecayTC","setRampPercentages","p1","p2","isExp","lastAttack","valToSet","v2","destination1","destination2","AudioIn","Reverb","Noise","Delay","Env","createDCOffset","bufferSource","Pulse","w","dcOffset","dcGain","mW","sig","SignalAdd","mods","currentFreq","freqMod","assignType","_brownNoise","_pinkNoise","_whiteNoise","whiteBuffer","noiseData","random","b0","b1","b2","b3","b4","b5","b6","pinkBuffer","white","brownBuffer","lastOut","noise","inputSources","stream","mediaStream","currentSource","enabled","MediaStreamTrack","mediaDevices","successCallback","audioSource","constraints","audio","echoCancellation","deviceId","createMediaStreamSource","getTracks","track","getSources","onSuccess","onError","resolve","reject","enumerateDevices","devices","device","kind","error","setSource","active","initialFade","_equalPowerA","EqualPowerGain","_equalPowerB","_invert","Expr","applyBinary","Constructor","_eval","applyUnary","getNumber","literalNumber","_replacements","inputCount","_parseInputs","_nodes","tree","_parseTree","_disposeNodes","_Expressions","signal","glue",",","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","EQFilter","EQ","_eqsize","factor","bands","_newBand","Panner3D","createPanner","panningModel","distanceModel","xVal","yVal","zVal","positionX","positionY","positionZ","orient","orientX","orientY","orientZ","orientationX","orientationY","orientationZ","setFalloff","maxDistance","rolloffFactor","maxDist","rolloff","Listener3D","listener","xValF","yValF","zValF","xValU","yValU","zValU","orientForward","orientUp","forwardX","forwardY","forwardZ","upX","upY","upZ","_split","_merge","_leftGain","_rightGain","leftDelay","rightDelay","_leftFilter","_rightFilter","_maxDelay","maxValue","feedback","_delayTime","_feedback","_filter","_initConvolverNode","_seconds","_decay","_reverse","_buildImpulse","convolverNode","createConvolver","_teardownConvolverNode","_setBuffer","decayRate","rebuild","impulse","impulseL","impulseR","Convolver","impulses","_loadBuffer","cReverb","chunks","addImpulse","resetImpulse","toggleImpulse","Metro","clock","ontick","syncedParts","prevTick","tatumTime","tickCallback","elapsedTime","thisPart","incrementStep","phrases","thisPhrase","phraseArray","sequence","bNum","metroTicks","looping","setBPM","beatTime","tatums","getBPM","getRate","resetSync","part","pushSync","beatLength","initial","playNextPart","aScore","currentPart","scoreStep","Phrase","phraseStep","Part","steps","bLength","partStep","noLoop","metro","addPhrase","array","removePhrase","getPhrase","replaceSequence","onStep","Score","thisScore","nextPart","resetPart","resetParts","SoundLoop","musicalTimeMode","_interval","_bpm","maxIterations","iterations","_calcFreq","syncedStart","otherLoop","_update","_convertNotation","Number","_measure","timeSig","Compressor","compressor","number","SoundRecorder","_inputChannels","_outputChannels","buffers","leftBuffer","rightBuffer","_callback","record","sFile","writeFile","PeakDetect","_framesPerPeak","framesPerPeak","framesSinceLastPeak","cutoff","cutoffMult","energy","penergy","currentValue","isDetected","f1","f2","_onPeak","update","fftObject","nrg","onPeak","makeDistortionCurve","amount","k","deg","Distortion","curveAmount","waveShaperNode","getAmount","getOversample"],"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 = 31);\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","'use strict';\n\n\ndefine(['audiocontext'], function (audiocontext) {\n // Master contains the master sound output.\n var Master = function() {\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 // create a single instance of the p5Sound / master output for use within this sketch\n var p5sound = new Master();\n\n /**\n * Returns a number representing the master amplitude (volume) for sound\n * in this sketch.\n *\n * @method getMasterVolume\n * @return {Number} Master amplitude (volume) for sound in this sketch.\n * Should be between 0.0 (silence) and 1.0.\n */\n p5.prototype.getMasterVolume = 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 masterVolume\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 p5.prototype.masterVolume = function(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 = 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 }\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 master output. 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 */\n p5.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\n p5.soundOut._silentNode = p5sound.audiocontext.createGain();\n p5.soundOut._silentNode.gain.value = 0;\n p5.soundOut._silentNode.connect(p5sound.audiocontext.destination);\n\n\n return p5sound;\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});","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","'use strict';\ndefine(function (require) {\n\n var p5sound = require('master');\n var CrossFade = require('Tone/component/CrossFade');\n\n /**\n * Effect is a base class for audio effects in p5. \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 */\n var midiToFreq = p5.prototype.midiToFreq = function(m) {\n return 440 * Math.pow(2, (m-69)/12.0);\n };\n\n // This method converts ANSI notes specified as a string \"C4\", \"Eb3\" to a frequency\n var noteToFreq = function(note) {\n if (typeof note !== 'string') {\n return note;\n }\n var wholeNotes = {A:21, B:23, C:24, D:26, E:28, F:29, G:31};\n var value = wholeNotes[ note[0].toUpperCase() ];\n var octave = ~~note.slice(-1);\n value += 12 * (octave -1);\n\n switch(note[1]) {\n case '#':\n value += 1;\n break;\n case 'b':\n value -= 1;\n break;\n default:\n break;\n }\n return midiToFreq(value);\n };\n\n /**\n * List the SoundFile formats that you will include. LoadSound\n * will search your directory for these extensions, and will pick\n * a format that is compatable with the client's web browser.\n * Here is a free online file\n * converter.\n *\n * @method soundFormats\n * @param {String} [...formats] i.e. 'mp3', 'wav', 'ogg'\n * @example\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 *
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});","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 * 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});","'use strict';\n\ndefine(function (require) {\n var Effect = require('effect');\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 */\n p5.LowPass = function() {\n p5.Filter.call(this, 'lowpass');\n };\n p5.LowPass.prototype = Object.create(p5.Filter.prototype);\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 */\n p5.HighPass = function() {\n p5.Filter.call(this, 'highpass');\n };\n p5.HighPass.prototype = Object.create(p5.Filter.prototype);\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 */\n p5.BandPass = function() {\n p5.Filter.call(this, 'bandpass');\n };\n p5.BandPass.prototype = Object.create(p5.Filter.prototype);\n\n return p5.Filter;\n});\n","define([\"Tone/core/Tone\", \"Tone/signal/Add\", \"Tone/signal/Negate\", \"Tone/signal/Signal\", \"Tone/core/Gain\"], function(Tone){\n\n\t\"use strict\";\n\n\t/**\n\t * @class Subtract the signal connected to 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});","'use strict';\n\nglobal.TONE_SILENCE_VERSION_LOGGING = true;\n\ndefine(['startaudiocontext', 'Tone/core/Context', 'Tone/core/Tone'], function (StartAudioContext, Context, Tone) {\n // Create the Audio Context\n const audiocontext = new window.AudioContext();\n\n // Tone and p5.sound share the same audio context\n Tone.context.dispose();\n Tone.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 *
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});","'use strict';\n\ndefine(function (require) {\n var p5sound = require('master');\n\n var Add = require('Tone/signal/Add');\n var Mult = require('Tone/signal/Multiply');\n var Scale = require('Tone/signal/Scale');\n\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 */\n p5.SinOsc = function(freq) {\n p5.Oscillator.call(this, freq, 'sine');\n };\n\n p5.SinOsc.prototype = Object.create(p5.Oscillator.prototype);\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 */\n p5.TriOsc = function(freq) {\n p5.Oscillator.call(this, freq, 'triangle');\n };\n\n p5.TriOsc.prototype = Object.create(p5.Oscillator.prototype);\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 */\n p5.SawOsc = function(freq) {\n p5.Oscillator.call(this, freq, 'sawtooth');\n };\n\n p5.SawOsc.prototype = Object.create(p5.Oscillator.prototype);\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 */\n p5.SqrOsc = function(freq) {\n p5.Oscillator.call(this, freq, 'square');\n };\n\n p5.SqrOsc.prototype = Object.create(p5.Oscillator.prototype);\n\n});\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});","define([\"Tone/core/Tone\", \"Tone/signal/TimelineSignal\", \"Tone/core/TimelineState\", \n\t\"Tone/core/Emitter\", \"Tone/core/Context\"], function (Tone) {\n\n\t\"use strict\";\n\n\t/**\n\t * @class A sample accurate clock which provides a callback at the given rate. \n\t * While the callback is not sample-accurate (it is still susceptible to\n\t * loose JS timing), the time passed in as the argument to the callback\n\t * is precise. For most applications, it is better to use Tone.Transport\n\t * instead of the Clock by itself since you can synchronize multiple callbacks.\n\t *\n\t * \t@constructor\n\t * @extends {Tone.Emitter}\n\t * \t@param {function} callback The callback to be invoked with the time of the audio event\n\t * \t@param {Frequency} frequency The rate of the callback\n\t * \t@example\n\t * //the callback will be invoked approximately once a second\n\t * //and will print the time exactly once a second apart.\n\t * var clock = new Tone.Clock(function(time){\n\t * \tconsole.log(time);\n\t * }, 1);\n\t */\n\tTone.Clock = function(){\n\n\t\tTone.Emitter.call(this);\n\n\t\tvar options = this.optionsObject(arguments, [\"callback\", \"frequency\"], Tone.Clock.defaults);\n\n\t\t/**\n\t\t * The callback function to invoke at the scheduled tick.\n\t\t * @type {Function}\n\t\t */\n\t\tthis.callback = options.callback;\n\n\t\t/**\n\t\t * The next time the callback is scheduled.\n\t\t * @type {Number}\n\t\t * @private\n\t\t */\n\t\tthis._nextTick = 0;\n\n\t\t/**\n\t\t * The last state of the clock.\n\t\t * @type {State}\n\t\t * @private\n\t\t */\n\t\tthis._lastState = Tone.State.Stopped;\n\n\t\t/**\n\t\t * The rate the callback function should be invoked. \n\t\t * @type {BPM}\n\t\t * @signal\n\t\t */\n\t\tthis.frequency = new Tone.TimelineSignal(options.frequency, Tone.Type.Frequency);\n\t\tthis._readOnly(\"frequency\");\n\n\t\t/**\n\t\t * The number of times the callback was invoked. Starts counting at 0\n\t\t * and increments after the callback was invoked. \n\t\t * @type {Ticks}\n\t\t * @readOnly\n\t\t */\n\t\tthis.ticks = 0;\n\n\t\t/**\n\t\t * The state timeline\n\t\t * @type {Tone.TimelineState}\n\t\t * @private\n\t\t */\n\t\tthis._state = new Tone.TimelineState(Tone.State.Stopped);\n\n\t\t/**\n\t\t * The loop function bound to its context. \n\t\t * This is necessary to remove the event in the end.\n\t\t * @type {Function}\n\t\t * @private\n\t\t */\n\t\tthis._boundLoop = this._loop.bind(this);\n\n\t\t//bind a callback to the worker thread\n \tthis.context.on(\"tick\", this._boundLoop);\n\t};\n\n\tTone.extend(Tone.Clock, Tone.Emitter);\n\n\t/**\n\t * The defaults\n\t * @const\n\t * @type {Object}\n\t */\n\tTone.Clock.defaults = {\n\t\t\"callback\" : Tone.noOp,\n\t\t\"frequency\" : 1,\n\t\t\"lookAhead\" : \"auto\",\n\t};\n\n\t/**\n\t * Returns the playback state of the source, either \"started\", \"stopped\" or \"paused\".\n\t * @type {Tone.State}\n\t * @readOnly\n\t * @memberOf Tone.Clock#\n\t * @name state\n\t */\n\tObject.defineProperty(Tone.Clock.prototype, \"state\", {\n\t\tget : function(){\n\t\t\treturn this._state.getValueAtTime(this.now());\n\t\t}\n\t});\n\n\t/**\n\t * Start the clock at the given time. Optionally pass in an offset\n\t * of where to start the tick counter from.\n\t * @param {Time} time The time the clock should start\n\t * @param {Ticks=} offset Where the tick counter starts counting from.\n\t * @return {Tone.Clock} this\n\t */\n\tTone.Clock.prototype.start = function(time, offset){\n\t\ttime = this.toSeconds(time);\n\t\tif (this._state.getValueAtTime(time) !== Tone.State.Started){\n\t\t\tthis._state.add({\n\t\t\t\t\"state\" : Tone.State.Started, \n\t\t\t\t\"time\" : time,\n\t\t\t\t\"offset\" : offset\n\t\t\t});\n\t\t}\n\t\treturn this;\t\n\t};\n\n\t/**\n\t * Stop the clock. Stopping the clock resets the tick counter to 0.\n\t * @param {Time} [time=now] The time when the clock should stop.\n\t * @returns {Tone.Clock} this\n\t * @example\n\t * clock.stop();\n\t */\n\tTone.Clock.prototype.stop = function(time){\n\t\ttime = this.toSeconds(time);\n\t\tthis._state.cancel(time);\n\t\tthis._state.setStateAtTime(Tone.State.Stopped, time);\n\t\treturn this;\t\n\t};\n\n\n\t/**\n\t * Pause the clock. Pausing does not reset the tick counter.\n\t * @param {Time} [time=now] The time when the clock should stop.\n\t * @returns {Tone.Clock} this\n\t */\n\tTone.Clock.prototype.pause = function(time){\n\t\ttime = this.toSeconds(time);\n\t\tif (this._state.getValueAtTime(time) === Tone.State.Started){\n\t\t\tthis._state.setStateAtTime(Tone.State.Paused, time);\n\t\t}\n\t\treturn this;\t\n\t};\n\n\t/**\n\t * The scheduling loop.\n\t * @param {Number} time The current page time starting from 0\n\t * when the page was loaded.\n\t * @private\n\t */\n\tTone.Clock.prototype._loop = function(){\n\t\t//get the frequency value to compute the value of the next loop\n\t\tvar now = this.now();\n\t\t//if it's started\n\t\tvar lookAhead = this.context.lookAhead;\n\t\tvar updateInterval = this.context.updateInterval;\n\t\tvar lagCompensation = this.context.lag * 2;\n\t\tvar loopInterval = now + lookAhead + updateInterval + lagCompensation;\n\t\twhile (loopInterval > this._nextTick && this._state){\n\t\t\tvar currentState = this._state.getValueAtTime(this._nextTick);\n\t\t\tif (currentState !== this._lastState){\n\t\t\t\tthis._lastState = currentState;\n\t\t\t\tvar event = this._state.get(this._nextTick);\n\t\t\t\t// emit an event\n\t\t\t\tif (currentState === Tone.State.Started){\n\t\t\t\t\t//correct the time\n\t\t\t\t\tthis._nextTick = event.time;\n\t\t\t\t\tif (!this.isUndef(event.offset)){\n\t\t\t\t\t\tthis.ticks = event.offset;\n\t\t\t\t\t}\n\t\t\t\t\tthis.emit(\"start\", event.time, this.ticks);\n\t\t\t\t} else if (currentState === Tone.State.Stopped){\n\t\t\t\t\tthis.ticks = 0;\n\n\t\t\t\t\tthis.emit(\"stop\", event.time);\n\t\t\t\t} else if (currentState === Tone.State.Paused){\n\t\t\t\t\tthis.emit(\"pause\", event.time);\n\t\t\t\t}\n\t\t\t}\n\t\t\tvar tickTime = this._nextTick;\n\t\t\tif (this.frequency){\n\t\t\t\tthis._nextTick += 1 / this.frequency.getValueAtTime(this._nextTick);\n\t\t\t\tif (currentState === Tone.State.Started){\n\t\t\t\t\tthis.callback(tickTime);\n\t\t\t\t\tthis.ticks++;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\t/**\n\t * Returns the scheduled state at the given time.\n\t * @param {Time} time The time to query.\n\t * @return {String} The name of the state input in setStateAtTime.\n\t * @example\n\t * clock.start(\"+0.1\");\n\t * clock.getStateAtTime(\"+0.1\"); //returns \"started\"\n\t */\n\tTone.Clock.prototype.getStateAtTime = function(time){\n\t\ttime = this.toSeconds(time);\n\t\treturn this._state.getValueAtTime(time);\n\t};\n\n\t/**\n\t * Clean up\n\t * @returns {Tone.Clock} this\n\t */\n\tTone.Clock.prototype.dispose = function(){\n\t\tTone.Emitter.prototype.dispose.call(this);\n\t\tthis.context.off(\"tick\", this._boundLoop);\n\t\tthis._writable(\"frequency\");\n\t\tthis.frequency.dispose();\n\t\tthis.frequency = null;\n\t\tthis._boundLoop = null;\n\t\tthis._nextTick = Infinity;\n\t\tthis.callback = null;\n\t\tthis._state.dispose();\n\t\tthis._state = null;\n\t};\n\n\treturn Tone.Clock;\n});","'use strict';\ndefine(function (require) {\n\n var p5sound = require('master');\n var AudioVoice = require('audioVoice');\n var noteToFreq = require('helpers').noteToFreq;\n\n var DEFAULT_SUSTAIN = 0.15;\n\n /**\n * A MonoSynth is used as a single voice for sound synthesis.\n * This is a class to be used in conjunction with the PolySynth\n * class. Custom synthetisers should be built inheriting from\n * this class.\n *\n * @class p5.MonoSynth\n * @constructor\n * @example\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 p5.MonoSynth.prototype.setADSR = function (attack,decay,sustain,release) {\n this.env.setADSR(attack, decay, sustain, release);\n };\n\n\n /**\n * Getters and Setters\n * @property {Number} attack\n * @for p5.MonoSynth\n */\n /**\n * @property {Number} decay\n * @for p5.MonoSynth\n */\n /**\n * @property {Number} sustain\n * @for p5.MonoSynth\n */\n /**\n * @property {Number} release\n * @for p5.MonoSynth\n */\n Object.defineProperties(p5.MonoSynth.prototype, {\n 'attack': {\n get : function() {\n return this.env.aTime;\n },\n set : function(attack) {\n this.env.setADSR(attack, this.env.dTime,\n this.env.sPercent, this.env.rTime);\n }\n },\n 'decay': {\n get : function() {\n return this.env.dTime;\n },\n set : function(decay) {\n this.env.setADSR(this.env.aTime, decay,\n this.env.sPercent, this.env.rTime);\n }\n },\n 'sustain': {\n get : function() {\n return this.env.sPercent;\n },\n set : function(sustain) {\n this.env.setADSR(this.env.aTime, this.env.dTime,\n sustain, this.env.rTime);\n }\n },\n 'release': {\n get : function() {\n return this.env.rTime;\n },\n set : function(release) {\n this.env.setADSR(this.env.aTime, this.env.dTime,\n this.env.sPercent, release);\n }\n },\n });\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 p5.MonoSynth.prototype.amp = function(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 p5.MonoSynth.prototype.connect = function(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 p5.MonoSynth.prototype.disconnect = function() {\n if (this.output) {\n this.output.disconnect();\n }\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 p5.MonoSynth.prototype.dispose = function() {\n AudioVoice.prototype.dispose.apply(this);\n\n if (this.env) {\n this.env.dispose();\n }\n if (this.oscillator) {\n this.oscillator.dispose();\n }\n };\n\n});\n","'use strict';\ndefine(function() {\n var p5sound = require('master');\n\n /**\n * Base class for monophonic synthesizers. Any extensions of this class\n * should follow the API and implement the methods below in order to\n * remain compatible with p5.PolySynth();\n *\n * @class p5.AudioVoice\n * @constructor\n */\n p5.AudioVoice = function () {\n\t this.ac = p5sound.audiocontext;\n\t this.output = this.ac.createGain();\n\t this.connect();\n\t p5sound.soundArray.push(this);\n };\n\n p5.AudioVoice.prototype.play = function (note, velocity, secondsFromNow, sustime) {\n };\n\n p5.AudioVoice.prototype.triggerAttack = function (note, velocity, secondsFromNow) {\n };\n\n p5.AudioVoice.prototype.triggerRelease = function (secondsFromNow) {\n };\n\n p5.AudioVoice.prototype.amp = function(vol, rampTime) {\n };\n\n /**\n * Connect to p5 objects or Web Audio Nodes\n * @method connect\n * @for p5.AudioVoice\n * @param {Object} unit\n */\n p5.AudioVoice.prototype.connect = function(unit) {\n var u = unit || p5sound.input;\n this.output.connect(u.input ? u.input : u);\n };\n\n /**\n * Disconnect from soundOut\n * @method disconnect\n * @for p5.AudioVoice\n */\n p5.AudioVoice.prototype.disconnect = function() {\n this.output.disconnect();\n };\n\n p5.AudioVoice.prototype.dispose = function() {\n if (this.output) {\n this.output.disconnect();\n delete this.output;\n }\n };\n\n return p5.AudioVoice;\n});\n","'use strict';\ndefine(function (require) {\n\n var p5sound = require('master');\n var TimelineSignal = require('Tone/signal/TimelineSignal');\n var noteToFreq = require('helpers').noteToFreq;\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 p5.PolySynth.prototype.noteADSR = function (note,a,d,s,r,timeFromNow) {\n var now = p5sound.audiocontext.currentTime;\n var timeFromNow = timeFromNow || 0;\n var t = now + timeFromNow\n this.audiovoices[ this.notes[note].getValueAtTime(t) ].setADSR(a,d,s,r);\n };\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 p5.PolySynth.prototype.setADSR = function(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 *
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 *
\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 * 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 p5.SoundFile.prototype.setVolume = function(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 }\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 // same as setVolume, to match Processing Sound\n p5.SoundFile.prototype.amp = p5.SoundFile.prototype.setVolume;\n\n // these are the same thing\n p5.SoundFile.prototype.fade = p5.SoundFile.prototype.setVolume;\n\n p5.SoundFile.prototype.getVolume = function() {\n return this.output.gain.value;\n };\n\n /**\n * Set the stereo panning of a p5.sound object to\n * a floating point number between -1.0 (left) and 1.0 (right).\n * Default is 0.0 (center).\n *\n * @method pan\n * @for p5.SoundFile\n * @param {Number} [panValue] Set the stereo panner\n * @param {Number} [timeFromNow] schedule this event to happen\n * seconds from now\n * @example\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 * \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 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(toggleSound);\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 toggleSound() {\n * if (sound.isPlaying() ){\n * sound.stop();\n * } else {\n * sound.play();\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 *
p5.Signal is a constant audio-rate signal used by p5.Oscillator\n * and p5.Envelope for modulation math.
\n *\n *This is necessary because Web Audio is processed on a seprate clock.\n * For example, the p5 draw loop runs about 60 times per second. But\n * the audio clock must process samples 44100 times per second. If we\n * want to add a value to each of those samples, we can't do it in the\n * draw loop, but we can do it by adding a constant-rate audio signal.This class mostly functions behind the scenes in p5.sound, and returns\n * a Tone.Signal from the Tone.js library by Yotam Mann.\n * If you want to work directly with audio signals for modular\n * synthesis, check out\n * tone.js.
\n *\n * @class p5.Signal\n * @constructor\n * @return {Tone.Signal} A Signal object from the Tone.js library\n * @example\n *\n * let carrier, modulator;\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 * carrier = new p5.Oscillator('sine');\n * carrier.start();\n * carrier.amp(1); // set amplitude\n * carrier.freq(220); // set frequency\n *\n * modulator = new p5.Oscillator('sawtooth');\n * modulator.disconnect();\n * modulator.start();\n * modulator.amp(1);\n * modulator.freq(4);\n *\n * // Modulator's default amplitude range is -1 to 1.\n * // Multiply it by -200, so the range is -200 to 200\n * // then add 220 so the range is 20 to 420\n * carrier.freq( modulator.mult(-400).add(220) );\n * }\n *\n * function canvasPressed() {\n * userStartAudio();\n * carrier.amp(1.0);\n * }\n *\n * function mouseReleased() {\n * carrier.amp(0);\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 *
\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 (optional)\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 *
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","define([\"Tone/core/Tone\", \"Tone/signal/Add\", \"Tone/signal/Subtract\", \"Tone/signal/Multiply\", \n\t\"Tone/signal/GreaterThan\", \"Tone/signal/GreaterThanZero\", \"Tone/signal/Abs\", \"Tone/signal/Negate\", \n\t\"Tone/signal/Modulo\", \"Tone/signal/Pow\", \"Tone/signal/AudioToGain\"], \n\tfunction(Tone){\n\n\t\"use strict\";\n\n\t/**\n\t * @class Evaluate an expression at audio rate. \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.soundOut.audiocontext.listener
\n *\n *\n * @class p5.Panner3D\n * @constructor\n */\n\tp5.Panner3D = function() {\n Effect.call(this);\n\n /**\n * \n * Web Audio Spatial Panner Node\n *\n * Properties include\n * - panningModel: \"equal power\" or \"HRTF\"\n * - distanceModel: \"linear\", \"inverse\", or \"exponential\"\n *\n * @property {AudioNode} panner\n *\n */\n this.panner = this.ac.createPanner();\n this.panner.panningModel = 'HRTF';\n this.panner.distanceModel = 'linear';\n this.panner.connect(this.output);\n this.input.connect(this.panner);\n\t};\n\n p5.Panner3D.prototype = Object.create(Effect.prototype);\n\n\n /**\n * Connect an audio sorce\n *\n * @method process\n * @for p5.Panner3D\n * @param {Object} src Input source\n */\n p5.Panner3D.prototype.process = function(src) {\n src.connect(this.input);\n }\n /**\n * Set the X,Y,Z position of the Panner\n * @method set\n * @for p5.Panner3D\n * @param {Number} xVal\n * @param {Number} yVal\n * @param {Number} zVal\n * @param {Number} time\n * @return {Array} Updated x, y, z values as an array\n */\n p5.Panner3D.prototype.set = function(xVal, yVal, zVal, time) {\n this.positionX(xVal,time);\n this.positionY(yVal,time);\n this.positionZ(zVal,time);\n return [this.panner.positionX.value,\n this.panner.positionY.value,\n this.panner.positionZ.value];\n };\n\n /**\n * Getter and setter methods for position coordinates\n * @method positionX\n * @for p5.Panner3D\n * @return {Number} updated coordinate value\n */\n /**\n * Getter and setter methods for position coordinates\n * @method positionY\n * @for p5.Panner3D\n * @return {Number} updated coordinate value\n */\n /**\n * Getter and setter methods for position coordinates\n * @method positionZ\n * @for p5.Panner3D\n * @return {Number} updated coordinate value\n */\n p5.Panner3D.prototype.positionX = function(xVal, time) {\n var t = time || 0;\n if (typeof xVal === 'number') {\n this.panner.positionX.value = xVal;\n this.panner.positionX.cancelScheduledValues(this.ac.currentTime + 0.01 + t);\n this.panner.positionX.linearRampToValueAtTime(xVal, this.ac.currentTime + 0.02 + t);\n } else if (xVal) {\n xVal.connect(this.panner.positionX);\n }\n return this.panner.positionX.value;\n };\n p5.Panner3D.prototype.positionY = function(yVal, time) {\n var t = time || 0;\n if (typeof yVal === 'number') {\n this.panner.positionY.value = yVal;\n this.panner.positionY.cancelScheduledValues(this.ac.currentTime + 0.01 + t);\n this.panner.positionY.linearRampToValueAtTime(yVal, this.ac.currentTime + 0.02 + t);\n } else if (yVal) {\n yVal.connect(this.panner.positionY);\n }\n return this.panner.positionY.value;\n };\n p5.Panner3D.prototype.positionZ = function(zVal, time) {\n var t = time || 0;\n if (typeof zVal === 'number') {\n this.panner.positionZ.value = zVal;\n this.panner.positionZ.cancelScheduledValues(this.ac.currentTime + 0.01 + t);\n this.panner.positionZ.linearRampToValueAtTime(zVal, this.ac.currentTime + 0.02 + t);\n } else if (zVal) {\n zVal.connect(this.panner.positionZ);\n }\n return this.panner.positionZ.value;\n };\n\n /**\n * Set the X,Y,Z position of the Panner\n * @method orient\n * @for p5.Panner3D\n * @param {Number} xVal\n * @param {Number} yVal\n * @param {Number} zVal\n * @param {Number} time\n * @return {Array} Updated x, y, z values as an array\n */\n p5.Panner3D.prototype.orient = function(xVal, yVal, zVal, time) {\n this.orientX(xVal,time);\n this.orientY(yVal,time);\n this.orientZ(zVal,time);\n return [this.panner.orientationX.value,\n this.panner.orientationY.value,\n this.panner.orientationZ.value];\n };\n\n /**\n * Getter and setter methods for orient coordinates\n * @method orientX\n * @for p5.Panner3D\n * @return {Number} updated coordinate value\n */\n /**\n * Getter and setter methods for orient coordinates\n * @method orientY\n * @for p5.Panner3D\n * @return {Number} updated coordinate value\n */\n /**\n * Getter and setter methods for orient coordinates\n * @method orientZ\n * @for p5.Panner3D\n * @return {Number} updated coordinate value\n */\n p5.Panner3D.prototype.orientX = function(xVal, time) {\n var t = time || 0;\n if (typeof xVal === 'number') {\n this.panner.orientationX.value = xVal;\n this.panner.orientationX.cancelScheduledValues(this.ac.currentTime + 0.01 + t);\n this.panner.orientationX.linearRampToValueAtTime(xVal, this.ac.currentTime + 0.02 + t);\n } else if (xVal) {\n xVal.connect(this.panner.orientationX);\n }\n return this.panner.orientationX.value;\n };\n p5.Panner3D.prototype.orientY = function(yVal, time) {\n var t = time || 0;\n if (typeof yVal === 'number') {\n this.panner.orientationY.value = yVal;\n this.panner.orientationY.cancelScheduledValues(this.ac.currentTime + 0.01 + t);\n this.panner.orientationY.linearRampToValueAtTime(yVal, this.ac.currentTime + 0.02 + t);\n } else if (yVal) {\n yVal.connect(this.panner.orientationY);\n }\n return this.panner.orientationY.value;\n };\n p5.Panner3D.prototype.orientZ = function(zVal, time) {\n var t = time || 0;\n if (typeof zVal === 'number') {\n this.panner.orientationZ.value = zVal;\n this.panner.orientationZ.cancelScheduledValues(this.ac.currentTime + 0.01 + t);\n this.panner.orientationZ.linearRampToValueAtTime(zVal, this.ac.currentTime + 0.02 + t);\n } else if (zVal) {\n zVal.connect(this.panner.orientationZ);\n }\n return this.panner.orientationZ.value;\n };\n\n /**\n * Set the rolloff factor and max distance\n * @method setFalloff\n * @for p5.Panner3D\n * @param {Number} [maxDistance]\n * @param {Number} [rolloffFactor]\n */\n p5.Panner3D.prototype.setFalloff = function(maxDistance, rolloffFactor) {\n this.maxDist(maxDistance);\n this.rolloff(rolloffFactor);\n };\n /**\n * Maxium distance between the source and the listener\n * @method maxDist\n * @for p5.Panner3D\n * @param {Number} maxDistance\n * @return {Number} updated value\n */\n p5.Panner3D.prototype.maxDist = function(maxDistance){\n if (typeof maxDistance === 'number') {\n this.panner.maxDistance = maxDistance;\n }\n return this.panner.maxDistance;\n };\n\n /**\n * How quickly the volume is reduced as the source moves away from the listener\n * @method rollof\n * @for p5.Panner3D\n * @param {Number} rolloffFactor\n * @return {Number} updated value\n */\n p5.Panner3D.prototype.rolloff = function(rolloffFactor){\n if (typeof rolloffFactor === 'number') {\n this.panner.rolloffFactor = rolloffFactor;\n }\n return this.panner.rolloffFactor;\n };\n\n p5.Panner3D.dispose = function() {\n Effect.prototype.dispose.apply(this);\n if (this.panner) {\n this.panner.disconnect();\n delete this.panner;\n }\n };\n\n return p5.Panner3D;\n\n});\n","'use strict'\n\ndefine(function (require) {\n var p5sound = require('master');\n var Effect = require('effect');\n\n// /**\n// * listener is a class that can construct both a Spatial Panner\n// * and a Spatial Listener. The panner is based on the \n// * Web Audio Spatial Panner Node\n// * https://www.w3.org/TR/webaudio/#the-listenernode-interface\n// * This panner is a spatial processing node that allows audio to be positioned\n// * and oriented in 3D space. \n// *\n// * The Listener modifies the properties of the Audio Context Listener. \n// * Both objects types use the same methods. The default is a spatial panner.\n// *\n// * p5.Panner3D
- Constructs a Spatial Pannerp5.Listener3D
- Constructs a Spatial Listener\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 master 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 * 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 master 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 * 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 master 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 *
toggleImpulse(id)
method.\n *\n * @property {Array} impulses\n * @for p5.Convolver\n */\n p5.Convolver.prototype.impulses = [];\n\n /**\n * Load and assign a new Impulse Response to the p5.Convolver.\n * The impulse is added to the .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 p5.Convolver.prototype.addImpulse = function(path, callback, errorCallback) {\n // if loading locally without a server\n if (window.location.origin.indexOf('file://') > -1 && window.cordova === 'undefined') {\n alert('This sketch may require a server to load external files. Please see http://bit.ly/1qcInwS');\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 p5.Convolver.prototype.resetImpulse = function(path, callback, errorCallback) {\n // if loading locally without a server\n if (window.location.origin.indexOf('file://') > -1 && window.cordova === 'undefined') {\n alert('This sketch may require a server to load external files. Please see http://bit.ly/1qcInwS');\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 p5.Convolver.prototype.toggleImpulse = function(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 p5.Convolver.prototype.dispose = function() {\n p5.Reverb.prototype.dispose.apply(this);\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","'use strict';\n\ndefine(function (require) {\n var p5sound = require('master');\n\n // requires the Tone.js library's Clock (MIT license, Yotam Mann)\n // https://github.com/TONEnoTONE/Tone.js/\n var Clock = require('Tone/core/Clock');\n\n p5.Metro = function() {\n this.clock = new Clock({\n 'callback': this.ontick.bind(this)\n });\n this.syncedParts = [];\n this.bpm = 120; // gets overridden by p5.Part\n this._init();\n\n this.prevTick = 0;\n this.tatumTime = 0;\n\n this.tickCallback = function() {};\n };\n\n p5.Metro.prototype.ontick = function(tickTime) {\n var elapsedTime = tickTime - this.prevTick;\n var secondsFromNow = tickTime - p5sound.audiocontext.currentTime;\n if (elapsedTime - this.tatumTime <= -0.02) {\n return;\n } else {\n // console.log('ok', this.syncedParts[0].phrases[0].name);\n this.prevTick = tickTime;\n\n // for all of the active things on the metro:\n var self = this;\n this.syncedParts.forEach(function(thisPart) {\n if (!thisPart.isPlaying) return;\n thisPart.incrementStep(secondsFromNow);\n // each synced source keeps track of its own beat number\n thisPart.phrases.forEach(function(thisPhrase) {\n var phraseArray = thisPhrase.sequence;\n var bNum = self.metroTicks % phraseArray.length;\n if (phraseArray[bNum] !== 0 && (self.metroTicks < phraseArray.length || !thisPhrase.looping) ) {\n thisPhrase.callback(secondsFromNow, phraseArray[bNum]);\n }\n });\n });\n this.metroTicks += 1;\n this.tickCallback(secondsFromNow);\n }\n };\n\n p5.Metro.prototype.setBPM = function(bpm, rampTime) {\n var beatTime = 60 / (bpm*this.tatums);\n var now = p5sound.audiocontext.currentTime;\n this.tatumTime = beatTime;\n\n var rampTime = rampTime || 0;\n this.clock.frequency.setValueAtTime(this.clock.frequency.value, now);\n this.clock.frequency.linearRampToValueAtTime(bpm, now + rampTime);\n this.bpm = bpm;\n };\n\n p5.Metro.prototype.getBPM = function() {\n return this.clock.getRate() / this.tatums * 60;\n };\n\n p5.Metro.prototype._init = function() {\n this.metroTicks = 0;\n // this.setBPM(120);\n };\n\n // clear existing synced parts, add only this one\n p5.Metro.prototype.resetSync = function(part) {\n this.syncedParts = [part];\n };\n\n // push a new synced part to the array\n p5.Metro.prototype.pushSync = function(part) {\n this.syncedParts.push(part);\n };\n\n p5.Metro.prototype.start = function(timeFromNow) {\n var t = timeFromNow || 0;\n var now = p5sound.audiocontext.currentTime;\n this.clock.start(now + t);\n this.setBPM(this.bpm);\n };\n\n p5.Metro.prototype.stop = function(timeFromNow) {\n var t = timeFromNow || 0;\n var now = p5sound.audiocontext.currentTime;\n this.clock.stop(now + t);\n };\n\n p5.Metro.prototype.beatLength = function(tatums) {\n this.tatums = 1/tatums / 4; // lowest possible division of a beat\n };\n\n});\n","define([\"Tone/core/Tone\", \"Tone/core/Timeline\", \"Tone/type/Type\"], function (Tone) {\n\n\t\"use strict\";\n\n\t/**\n\t * @class A Timeline State. Provides the methods: setStateAtTime(\"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});","'use strict';\n\ndefine(function(require) {\n var p5sound = require('master');\n\n var BPM = 120;\n\n /**\n * Set the global tempo, in beats per minute, for all\n * p5.Parts. This method will impact all active p5.Parts.\n *\n * @method setBPM\n * @for p5\n * @param {Number} BPM Beats Per Minute\n * @param {Number} rampTime Seconds from now\n */\n p5.prototype.setBPM = function(bpm, rampTime) {\n BPM = bpm;\n for (var i in p5sound.parts) {\n if (p5sound.parts[i]) {\n p5sound.parts[i].setBPM(bpm, rampTime);\n }\n }\n };\n\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 */\n p5.Score = function() {\n // for all of the arguments\n this.parts = [];\n this.currentPart = 0;\n\n var thisScore = this;\n for (var i in arguments) {\n if (arguments[i] && this.parts[i]) {\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 }\n this.looping = false;\n };\n\n p5.Score.prototype.onended = function() {\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 p5.Score.prototype.start = function() {\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 p5.Score.prototype.stop = function() {\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 p5.Score.prototype.pause = function() {\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 p5.Score.prototype.loop = function() {\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 p5.Score.prototype.noLoop = function() {\n this.looping = false;\n };\n\n p5.Score.prototype.resetParts = function() {\n var self = this;\n this.parts.forEach(function(part) {\n self.resetParts[part];\n });\n };\n\n p5.Score.prototype.resetPart = function(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 p5.Score.prototype.setBPM = function(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 function 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\n});\n","'use strict';\n\ndefine(function (require) {\n var p5sound = require('master');\n var Clock = require('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 *
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 *
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 *
\n *\n * // load two soundfile and crossfade beetween them\n * let sound1,sound2;\n * let sound1Gain, sound2Gain, masterGain;\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 'master' gain to which we will connect both soundfiles\n * masterGain = new p5.Gain();\n * masterGain.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(masterGain); // connect its output to the 'master'\n * sound2.disconnect();\n * sound2Gain = new p5.Gain();\n * sound2Gain.setInput(sound2);\n * sound2Gain.connect(masterGain);\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 'master * volume control'\n * var masterVolume = constrain(map(mouseY,height,0,0,1), 0, 1);\n * masterGain.amp(masterVolume);\n * text('master', width/2, height - masterVolume * 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 *