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