{"version":3,"sources":["webpack://Meyda/webpack/universalModuleDefinition","webpack://Meyda/webpack/bootstrap","webpack://Meyda/./node_modules/assert/assert.js","webpack://Meyda/./node_modules/dct/index.js","webpack://Meyda/./node_modules/dct/src/dct.js","webpack://Meyda/./node_modules/fftjs/dist/fft.js","webpack://Meyda/./node_modules/fftjs/dist/utils.js","webpack://Meyda/./node_modules/node-libs-browser/node_modules/util/node_modules/inherits/inherits_browser.js","webpack://Meyda/./node_modules/node-libs-browser/node_modules/util/support/isBufferBrowser.js","webpack://Meyda/./node_modules/node-libs-browser/node_modules/util/util.js","webpack://Meyda/./node_modules/object-assign/index.js","webpack://Meyda/./node_modules/process/browser.js","webpack://Meyda/(webpack)/buildin/global.js","webpack://Meyda/./src/extractors/chroma.js","webpack://Meyda/./src/extractors/energy.js","webpack://Meyda/./src/extractors/extractorUtilities.js","webpack://Meyda/./src/extractors/loudness.js","webpack://Meyda/./src/extractors/mfcc.js","webpack://Meyda/./src/extractors/perceptualSharpness.js","webpack://Meyda/./src/extractors/perceptualSpread.js","webpack://Meyda/./src/extractors/powerSpectrum.js","webpack://Meyda/./src/extractors/rms.js","webpack://Meyda/./src/extractors/spectralCentroid.js","webpack://Meyda/./src/extractors/spectralFlatness.js","webpack://Meyda/./src/extractors/spectralFlux.js","webpack://Meyda/./src/extractors/spectralKurtosis.js","webpack://Meyda/./src/extractors/spectralRolloff.js","webpack://Meyda/./src/extractors/spectralSkewness.js","webpack://Meyda/./src/extractors/spectralSlope.js","webpack://Meyda/./src/extractors/spectralSpread.js","webpack://Meyda/./src/extractors/zcr.js","webpack://Meyda/./src/featureExtractors.js","webpack://Meyda/./src/index.js","webpack://Meyda/./src/main.js","webpack://Meyda/./src/meyda-wa.js","webpack://Meyda/./src/utilities.js","webpack://Meyda/./src/windowing.js"],"names":["args","ampSpectrum","TypeError","chromaFilterBank","chromagram","map","row","i","reduce","acc","v","j","maxVal","Math","max","arguments","signal","energy","length","pow","abs","mu","amplitudeSpect","numerator","denominator","k","barkScale","NUM_BARK_BANDS","specific","Float32Array","total","normalisedSpectrum","bbLimits","Int32Array","currentBandEnd","currentBand","sum","dct","require","melFilterBank","numberOfMFCCCoefficients","min","powSpec","powerSpectrum","numFilters","filtered","Array","Error","loggedMelBands","bufferSize","log","loggedMelBandsArray","prototype","slice","call","mfccs","loudnessValue","loudness","spec","output","exp","spread","rms","sqrt","previousSignal","sf","x","ampspec","mu1","mu2","mu3","mu4","nyqBin","sampleRate","ec","threshold","n","ampSum","freqSum","freqs","powFreqSum","ampFreqSum","curFreq","zcr","buffer","complexSpectrum","amplitudeSpectrum","module","exports","Meyda","audioContext","spn","melBands","chromaBands","callback","windowingFunction","featureExtractors","extractors","EXTRACTION_STARTED","_featuresToExtract","windowing","utilities","_errors","notPow2","featureUndef","invalidFeatureFmt","invalidInput","noAC","noSource","createMeydaAnalyzer","options","MeydaAnalyzer","Object","assign","extract","feature","preparedSignal","prepareSignalWithSpectrum","windowedSignal","previousComplexSpectrum","previousAmpSpectrum","el","fft","real","imag","window","_this","_m","errors","source","hopSize","startImmediately","channel","inputs","outputs","createScriptProcessor","connect","destination","inputData","previousInputData","frame","previousFrame","setSource","onaudioprocess","e","inputBuffer","getChannelData","set","frames","forEach","f","features","disconnect","console","error","windows","isPowerOfTwo","num","message","pointwiseBufferMult","a","b","c","applyWindow","windowname","createBarkScale","atan","typedToArray","t","arrayToTyped","from","_normalize","range","normalize","normalizeToOne","apply","mean","prev","cur","_melToFreq","melValue","freqValue","_freqToMel","melToFreq","mV","freqToMel","fV","createMelFilterBank","melValues","melValuesInFreq","lowerLimitFreq","upperLimitFreq","lowerLimitMel","upperLimitMel","valueToAdd","fftBinsOfFreq","floor","filterBank","Number","valueOf","hzToOctaves","freq","A440","log2","normalizeByColumn","emptyRow","colDenominators","cell","createChromaFilterBank","centerOctave","octaveWidth","baseC","numOutputBins","frequencyBins","fill","_","binWidthBins","concat","halfNumFilters","round","filterPeaks","frq","weights","octaveWeights","frameLength","hopLength","numFrames","blackman","size","blackmanBuffer","coeff1","PI","coeff2","cos","sine","coeff","sineBuffer","sin","hanning","hanningBuffer","hamming","hammingBuffer"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD,O;QCVA;QACA;;QAEA;QACA;;QAEA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;;QAEA;QACA;;QAEA;QACA;;QAEA;QACA;QACA;;;QAGA;QACA;;QAEA;QACA;;QAEA;QACA;QACA;QACA,0CAA0C,gCAAgC;QAC1E;QACA;;QAEA;QACA;QACA;QACA,wDAAwD,kBAAkB;QAC1E;QACA,iDAAiD,cAAc;QAC/D;;QAEA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA,yCAAyC,iCAAiC;QAC1E,gHAAgH,mBAAmB,EAAE;QACrI;QACA;;QAEA;QACA;QACA;QACA,2BAA2B,0BAA0B,EAAE;QACvD,iCAAiC,eAAe;QAChD;QACA;QACA;;QAEA;QACA,sDAAsD,+DAA+D;;QAErH;QACA;;;QAGA;QACA;;;;;;;;;;;;;AClFA,8CAAa;;AAEb,mBAAmB,mBAAO,CAAC,4DAAe;;AAE1C;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,uCAAuC,SAAS;AAChD;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,WAAW,mBAAO,CAAC,yEAAO;AAC1B;AACA;AACA;AACA,0BAA0B;AAC1B,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA,8BAA8B;AAC9B;AACA,mDAAmD;;AAEnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,gBAAgB;AAChB,gDAAgD;;AAEhD;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,GAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA,GAAG;AACH,sBAAsB;;AAEtB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,QAAQ;AACjC;AACA;AACA;AACA;AACA;AACA,yBAAyB,QAAQ;AACjC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;;AAEA;AACA;AACA;;AAEA,yBAAyB;AACzB;;AAEA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,gCAAgC,oBAAoB;;AAEpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;ACzfA,iBAAiB,mBAAO,CAAC,mDAAc;;;;;;;;;;;;ACAvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA,iBAAiB,OAAO;AACxB,mBAAmB,OAAO;AAC1B;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA,6CAA6C,UAAU;;AAEvD;AACA;AACA;AACA,KAAK;AACL,GAAG;AACH;;AAEA;;;;;;;;;;;;;ACzCa;;AAEb,YAAY,mBAAO,CAAC,mDAAS;;AAE7B;AACA;;AAEA;;AAEA;AACA;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,iBAAiB,OAAO;AACxB;AACA;AACA;;AAEA,kBAAkB,QAAQ;AAC1B;AACA;AACA;AACA;AACA,iBAAiB,WAAW;AAC5B;;AAEA;AACA,mBAAmB,eAAe;AAClC;;AAEA;AACA,qBAAqB,eAAe;AACpC;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA,GAAG;;AAEH;AACA;;AAEA;AACA;AACA;AACA,E;;;;;;;;;;;;AC5Ha;;AAEb;;AAEA,kCAAkC,0BAA0B,0CAA0C,gBAAgB,OAAO,kBAAkB,EAAE,aAAa,EAAE,OAAO,wBAAwB,EAAE;;AAEjM;AACA;;AAEA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA,qDAAqD;AACrD,qDAAqD;AACrD;AACA,mBAAmB,OAAO;AAC1B,qCAAqC;;AAErC;AACA;;AAEA,gFAAgF;AAChF,4CAA4C;AAC5C;AACA,mCAAmC;AACnC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,UAAU;AACV;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,E;;;;;;;;;;;ACxFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACtBA;AACA;AACA;AACA;AACA;AACA,C;;;;;;;;;;;ACLA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,mBAAmB,iBAAiB;AACpC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,mBAAmB,sBAAsB;AACzC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,GAAG;AACH,uBAAuB,SAAS;AAChC;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;;;AAGA;AACA;AACA;;;AAGA;AACA;;AAEA;AACA;AACA,GAAG;;AAEH;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,4CAA4C,KAAK;;AAEjD;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,KAAK;AACL;;AAEA;;AAEA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;;;AAGA;AACA;AACA,mCAAmC,OAAO;AAC1C;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;;;AAGA;AACA;AACA,yDAAyD;AACzD;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX,SAAS;AACT;AACA;AACA,WAAW;AACX;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,mBAAmB,mBAAO,CAAC,yGAAoB;;AAE/C;AACA;AACA;;;AAGA;AACA;AACA;;;AAGA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,SAAS;AACpB;AACA,WAAW,SAAS;AACpB;AACA,mBAAmB,mBAAO,CAAC,8GAAU;;AAErC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA,mBAAmB,sBAAsB;AACzC;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,KAAK;;AAEL;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,mBAAmB,sBAAsB;AACzC;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,kCAAkC;AAC7D,2BAA2B,mDAAmD;AAC9E;;AAEA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;AC9rBA;AACA;AACA;AACA;AACA;;AAEa;AACb;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA,gCAAgC;AAChC;AACA;AACA;AACA;;AAEA;AACA;AACA,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAG;AACH,kCAAkC;AAClC;AACA;AACA;;AAEA;AACA,EAAE;AACF;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,gBAAgB,sBAAsB;AACtC;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,kBAAkB,oBAAoB;AACtC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;;;;;;;;;;;ACzFA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;;;;AAIA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,uBAAuB,sBAAsB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,qCAAqC;;AAErC;AACA;AACA;;AAEA,2BAA2B;AAC3B;AACA;AACA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","file":"meyda.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"Meyda\"] = factory();\n\telse\n\t\troot[\"Meyda\"] = factory();\n})(window, function() {\nreturn "," \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 = \"./src/index.js\");\n","'use strict';\n\nvar objectAssign = require('object-assign');\n\n// compare and isBuffer taken from https://github.com/feross/buffer/blob/680e9e5e488f22aac27599a57dc844a6315928dd/index.js\n// original notice:\n\n/*!\n * The buffer module from node.js, for the browser.\n *\n * @author Feross Aboukhadijeh \n * @license MIT\n */\nfunction compare(a, b) {\n if (a === b) {\n return 0;\n }\n\n var x = a.length;\n var y = b.length;\n\n for (var i = 0, len = Math.min(x, y); i < len; ++i) {\n if (a[i] !== b[i]) {\n x = a[i];\n y = b[i];\n break;\n }\n }\n\n if (x < y) {\n return -1;\n }\n if (y < x) {\n return 1;\n }\n return 0;\n}\nfunction isBuffer(b) {\n if (global.Buffer && typeof global.Buffer.isBuffer === 'function') {\n return global.Buffer.isBuffer(b);\n }\n return !!(b != null && b._isBuffer);\n}\n\n// based on node assert, original notice:\n// NB: The URL to the CommonJS spec is kept just for tradition.\n// node-assert has evolved a lot since then, both in API and behavior.\n\n// http://wiki.commonjs.org/wiki/Unit_Testing/1.0\n//\n// THIS IS NOT TESTED NOR LIKELY TO WORK OUTSIDE V8!\n//\n// Originally from narwhal.js (http://narwhaljs.org)\n// Copyright (c) 2009 Thomas Robinson <280north.com>\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the 'Software'), to\n// deal in the Software without restriction, including without limitation the\n// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n// sell copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN\n// ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\n// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n\nvar util = require('util/');\nvar hasOwn = Object.prototype.hasOwnProperty;\nvar pSlice = Array.prototype.slice;\nvar functionsHaveNames = (function () {\n return function foo() {}.name === 'foo';\n}());\nfunction pToString (obj) {\n return Object.prototype.toString.call(obj);\n}\nfunction isView(arrbuf) {\n if (isBuffer(arrbuf)) {\n return false;\n }\n if (typeof global.ArrayBuffer !== 'function') {\n return false;\n }\n if (typeof ArrayBuffer.isView === 'function') {\n return ArrayBuffer.isView(arrbuf);\n }\n if (!arrbuf) {\n return false;\n }\n if (arrbuf instanceof DataView) {\n return true;\n }\n if (arrbuf.buffer && arrbuf.buffer instanceof ArrayBuffer) {\n return true;\n }\n return false;\n}\n// 1. The assert module provides functions that throw\n// AssertionError's when particular conditions are not met. The\n// assert module must conform to the following interface.\n\nvar assert = module.exports = ok;\n\n// 2. The AssertionError is defined in assert.\n// new assert.AssertionError({ message: message,\n// actual: actual,\n// expected: expected })\n\nvar regex = /\\s*function\\s+([^\\(\\s]*)\\s*/;\n// based on https://github.com/ljharb/function.prototype.name/blob/adeeeec8bfcc6068b187d7d9fb3d5bb1d3a30899/implementation.js\nfunction getName(func) {\n if (!util.isFunction(func)) {\n return;\n }\n if (functionsHaveNames) {\n return func.name;\n }\n var str = func.toString();\n var match = str.match(regex);\n return match && match[1];\n}\nassert.AssertionError = function AssertionError(options) {\n this.name = 'AssertionError';\n this.actual = options.actual;\n this.expected = options.expected;\n this.operator = options.operator;\n if (options.message) {\n this.message = options.message;\n this.generatedMessage = false;\n } else {\n this.message = getMessage(this);\n this.generatedMessage = true;\n }\n var stackStartFunction = options.stackStartFunction || fail;\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, stackStartFunction);\n } else {\n // non v8 browsers so we can have a stacktrace\n var err = new Error();\n if (err.stack) {\n var out = err.stack;\n\n // try to strip useless frames\n var fn_name = getName(stackStartFunction);\n var idx = out.indexOf('\\n' + fn_name);\n if (idx >= 0) {\n // once we have located the function frame\n // we need to strip out everything before it (and its line)\n var next_line = out.indexOf('\\n', idx + 1);\n out = out.substring(next_line + 1);\n }\n\n this.stack = out;\n }\n }\n};\n\n// assert.AssertionError instanceof Error\nutil.inherits(assert.AssertionError, Error);\n\nfunction truncate(s, n) {\n if (typeof s === 'string') {\n return s.length < n ? s : s.slice(0, n);\n } else {\n return s;\n }\n}\nfunction inspect(something) {\n if (functionsHaveNames || !util.isFunction(something)) {\n return util.inspect(something);\n }\n var rawname = getName(something);\n var name = rawname ? ': ' + rawname : '';\n return '[Function' + name + ']';\n}\nfunction getMessage(self) {\n return truncate(inspect(self.actual), 128) + ' ' +\n self.operator + ' ' +\n truncate(inspect(self.expected), 128);\n}\n\n// At present only the three keys mentioned above are used and\n// understood by the spec. Implementations or sub modules can pass\n// other keys to the AssertionError's constructor - they will be\n// ignored.\n\n// 3. All of the following functions must throw an AssertionError\n// when a corresponding condition is not met, with a message that\n// may be undefined if not provided. All assertion methods provide\n// both the actual and expected values to the assertion error for\n// display purposes.\n\nfunction fail(actual, expected, message, operator, stackStartFunction) {\n throw new assert.AssertionError({\n message: message,\n actual: actual,\n expected: expected,\n operator: operator,\n stackStartFunction: stackStartFunction\n });\n}\n\n// EXTENSION! allows for well behaved errors defined elsewhere.\nassert.fail = fail;\n\n// 4. Pure assertion tests whether a value is truthy, as determined\n// by !!guard.\n// assert.ok(guard, message_opt);\n// This statement is equivalent to assert.equal(true, !!guard,\n// message_opt);. To test strictly for the value true, use\n// assert.strictEqual(true, guard, message_opt);.\n\nfunction ok(value, message) {\n if (!value) fail(value, true, message, '==', assert.ok);\n}\nassert.ok = ok;\n\n// 5. The equality assertion tests shallow, coercive equality with\n// ==.\n// assert.equal(actual, expected, message_opt);\n\nassert.equal = function equal(actual, expected, message) {\n if (actual != expected) fail(actual, expected, message, '==', assert.equal);\n};\n\n// 6. The non-equality assertion tests for whether two objects are not equal\n// with != assert.notEqual(actual, expected, message_opt);\n\nassert.notEqual = function notEqual(actual, expected, message) {\n if (actual == expected) {\n fail(actual, expected, message, '!=', assert.notEqual);\n }\n};\n\n// 7. The equivalence assertion tests a deep equality relation.\n// assert.deepEqual(actual, expected, message_opt);\n\nassert.deepEqual = function deepEqual(actual, expected, message) {\n if (!_deepEqual(actual, expected, false)) {\n fail(actual, expected, message, 'deepEqual', assert.deepEqual);\n }\n};\n\nassert.deepStrictEqual = function deepStrictEqual(actual, expected, message) {\n if (!_deepEqual(actual, expected, true)) {\n fail(actual, expected, message, 'deepStrictEqual', assert.deepStrictEqual);\n }\n};\n\nfunction _deepEqual(actual, expected, strict, memos) {\n // 7.1. All identical values are equivalent, as determined by ===.\n if (actual === expected) {\n return true;\n } else if (isBuffer(actual) && isBuffer(expected)) {\n return compare(actual, expected) === 0;\n\n // 7.2. If the expected value is a Date object, the actual value is\n // equivalent if it is also a Date object that refers to the same time.\n } else if (util.isDate(actual) && util.isDate(expected)) {\n return actual.getTime() === expected.getTime();\n\n // 7.3 If the expected value is a RegExp object, the actual value is\n // equivalent if it is also a RegExp object with the same source and\n // properties (`global`, `multiline`, `lastIndex`, `ignoreCase`).\n } else if (util.isRegExp(actual) && util.isRegExp(expected)) {\n return actual.source === expected.source &&\n actual.global === expected.global &&\n actual.multiline === expected.multiline &&\n actual.lastIndex === expected.lastIndex &&\n actual.ignoreCase === expected.ignoreCase;\n\n // 7.4. Other pairs that do not both pass typeof value == 'object',\n // equivalence is determined by ==.\n } else if ((actual === null || typeof actual !== 'object') &&\n (expected === null || typeof expected !== 'object')) {\n return strict ? actual === expected : actual == expected;\n\n // If both values are instances of typed arrays, wrap their underlying\n // ArrayBuffers in a Buffer each to increase performance\n // This optimization requires the arrays to have the same type as checked by\n // Object.prototype.toString (aka pToString). Never perform binary\n // comparisons for Float*Arrays, though, since e.g. +0 === -0 but their\n // bit patterns are not identical.\n } else if (isView(actual) && isView(expected) &&\n pToString(actual) === pToString(expected) &&\n !(actual instanceof Float32Array ||\n actual instanceof Float64Array)) {\n return compare(new Uint8Array(actual.buffer),\n new Uint8Array(expected.buffer)) === 0;\n\n // 7.5 For all other Object pairs, including Array objects, equivalence is\n // determined by having the same number of owned properties (as verified\n // with Object.prototype.hasOwnProperty.call), the same set of keys\n // (although not necessarily the same order), equivalent values for every\n // corresponding key, and an identical 'prototype' property. Note: this\n // accounts for both named and indexed properties on Arrays.\n } else if (isBuffer(actual) !== isBuffer(expected)) {\n return false;\n } else {\n memos = memos || {actual: [], expected: []};\n\n var actualIndex = memos.actual.indexOf(actual);\n if (actualIndex !== -1) {\n if (actualIndex === memos.expected.indexOf(expected)) {\n return true;\n }\n }\n\n memos.actual.push(actual);\n memos.expected.push(expected);\n\n return objEquiv(actual, expected, strict, memos);\n }\n}\n\nfunction isArguments(object) {\n return Object.prototype.toString.call(object) == '[object Arguments]';\n}\n\nfunction objEquiv(a, b, strict, actualVisitedObjects) {\n if (a === null || a === undefined || b === null || b === undefined)\n return false;\n // if one is a primitive, the other must be same\n if (util.isPrimitive(a) || util.isPrimitive(b))\n return a === b;\n if (strict && Object.getPrototypeOf(a) !== Object.getPrototypeOf(b))\n return false;\n var aIsArgs = isArguments(a);\n var bIsArgs = isArguments(b);\n if ((aIsArgs && !bIsArgs) || (!aIsArgs && bIsArgs))\n return false;\n if (aIsArgs) {\n a = pSlice.call(a);\n b = pSlice.call(b);\n return _deepEqual(a, b, strict);\n }\n var ka = objectKeys(a);\n var kb = objectKeys(b);\n var key, i;\n // having the same number of owned properties (keys incorporates\n // hasOwnProperty)\n if (ka.length !== kb.length)\n return false;\n //the same set of keys (although not necessarily the same order),\n ka.sort();\n kb.sort();\n //~~~cheap key test\n for (i = ka.length - 1; i >= 0; i--) {\n if (ka[i] !== kb[i])\n return false;\n }\n //equivalent values for every corresponding key, and\n //~~~possibly expensive deep test\n for (i = ka.length - 1; i >= 0; i--) {\n key = ka[i];\n if (!_deepEqual(a[key], b[key], strict, actualVisitedObjects))\n return false;\n }\n return true;\n}\n\n// 8. The non-equivalence assertion tests for any deep inequality.\n// assert.notDeepEqual(actual, expected, message_opt);\n\nassert.notDeepEqual = function notDeepEqual(actual, expected, message) {\n if (_deepEqual(actual, expected, false)) {\n fail(actual, expected, message, 'notDeepEqual', assert.notDeepEqual);\n }\n};\n\nassert.notDeepStrictEqual = notDeepStrictEqual;\nfunction notDeepStrictEqual(actual, expected, message) {\n if (_deepEqual(actual, expected, true)) {\n fail(actual, expected, message, 'notDeepStrictEqual', notDeepStrictEqual);\n }\n}\n\n\n// 9. The strict equality assertion tests strict equality, as determined by ===.\n// assert.strictEqual(actual, expected, message_opt);\n\nassert.strictEqual = function strictEqual(actual, expected, message) {\n if (actual !== expected) {\n fail(actual, expected, message, '===', assert.strictEqual);\n }\n};\n\n// 10. The strict non-equality assertion tests for strict inequality, as\n// determined by !==. assert.notStrictEqual(actual, expected, message_opt);\n\nassert.notStrictEqual = function notStrictEqual(actual, expected, message) {\n if (actual === expected) {\n fail(actual, expected, message, '!==', assert.notStrictEqual);\n }\n};\n\nfunction expectedException(actual, expected) {\n if (!actual || !expected) {\n return false;\n }\n\n if (Object.prototype.toString.call(expected) == '[object RegExp]') {\n return expected.test(actual);\n }\n\n try {\n if (actual instanceof expected) {\n return true;\n }\n } catch (e) {\n // Ignore. The instanceof check doesn't work for arrow functions.\n }\n\n if (Error.isPrototypeOf(expected)) {\n return false;\n }\n\n return expected.call({}, actual) === true;\n}\n\nfunction _tryBlock(block) {\n var error;\n try {\n block();\n } catch (e) {\n error = e;\n }\n return error;\n}\n\nfunction _throws(shouldThrow, block, expected, message) {\n var actual;\n\n if (typeof block !== 'function') {\n throw new TypeError('\"block\" argument must be a function');\n }\n\n if (typeof expected === 'string') {\n message = expected;\n expected = null;\n }\n\n actual = _tryBlock(block);\n\n message = (expected && expected.name ? ' (' + expected.name + ').' : '.') +\n (message ? ' ' + message : '.');\n\n if (shouldThrow && !actual) {\n fail(actual, expected, 'Missing expected exception' + message);\n }\n\n var userProvidedMessage = typeof message === 'string';\n var isUnwantedException = !shouldThrow && util.isError(actual);\n var isUnexpectedException = !shouldThrow && actual && !expected;\n\n if ((isUnwantedException &&\n userProvidedMessage &&\n expectedException(actual, expected)) ||\n isUnexpectedException) {\n fail(actual, expected, 'Got unwanted exception' + message);\n }\n\n if ((shouldThrow && actual && expected &&\n !expectedException(actual, expected)) || (!shouldThrow && actual)) {\n throw actual;\n }\n}\n\n// 11. Expected to throw an error:\n// assert.throws(block, Error_opt, message_opt);\n\nassert.throws = function(block, /*optional*/error, /*optional*/message) {\n _throws(true, block, error, message);\n};\n\n// EXTENSION! This is annoying to write outside this module.\nassert.doesNotThrow = function(block, /*optional*/error, /*optional*/message) {\n _throws(false, block, error, message);\n};\n\nassert.ifError = function(err) { if (err) throw err; };\n\n// Expose a strict only variant of assert\nfunction strict(value, message) {\n if (!value) fail(value, true, message, '==', strict);\n}\nassert.strict = objectAssign(strict, assert, {\n equal: assert.strictEqual,\n deepEqual: assert.deepStrictEqual,\n notEqual: assert.notStrictEqual,\n notDeepEqual: assert.notDeepStrictEqual\n});\nassert.strict.strict = assert.strict;\n\nvar objectKeys = Object.keys || function (obj) {\n var keys = [];\n for (var key in obj) {\n if (hasOwn.call(obj, key)) keys.push(key);\n }\n return keys;\n};\n","module.exports = require('./src/dct.js');\n","/*===========================================================================*\\\n * Discrete Cosine Transform\n *\n * (c) Vail Systems. Joshua Jung and Ben Bryan. 2015\n *\n * This code is not designed to be highly optimized but as an educational\n * tool to understand the Mel-scale and its related coefficients used in\n * human speech analysis.\n\\*===========================================================================*/\nvar cosMap = null;\n\n// Builds a cosine map for the given input size. This allows multiple input sizes to be memoized automagically\n// if you want to run the DCT over and over.\nvar memoizeCosines = function(N) {\n cosMap = cosMap || {};\n cosMap[N] = new Array(N*N);\n\n var PI_N = Math.PI / N;\n\n for (var k = 0; k < N; k++) {\n for (var n = 0; n < N; n++) {\n cosMap[N][n + (k * N)] = Math.cos(PI_N * (n + 0.5) * k);\n }\n }\n};\n\nfunction dct(signal, scale) {\n var L = signal.length;\n scale = scale || 2;\n\n if (!cosMap || !cosMap[L]) memoizeCosines(L);\n\n var coefficients = signal.map(function () {return 0;});\n\n return coefficients.map(function (__, ix) {\n return scale * signal.reduce(function (prev, cur, ix_, arr) {\n return prev + (cur * cosMap[L][ix_ + (ix * L)]);\n }, 0);\n });\n};\n\nmodule.exports = dct;\n","'use strict';\n\nvar utils = require('./utils');\n\n// real to complex fft\nvar fft = function fft(signal) {\n\n var complexSignal = {};\n\n if (signal.real === undefined || signal.imag === undefined) {\n complexSignal = utils.constructComplexArray(signal);\n } else {\n complexSignal.real = signal.real.slice();\n complexSignal.imag = signal.imag.slice();\n }\n\n var N = complexSignal.real.length;\n var logN = Math.log2(N);\n\n if (Math.round(logN) != logN) throw new Error('Input size must be a power of 2.');\n\n if (complexSignal.real.length != complexSignal.imag.length) {\n throw new Error('Real and imaginary components must have the same length.');\n }\n\n var bitReversedIndices = utils.bitReverseArray(N);\n\n // sort array\n var ordered = {\n 'real': [],\n 'imag': []\n };\n\n for (var i = 0; i < N; i++) {\n ordered.real[bitReversedIndices[i]] = complexSignal.real[i];\n ordered.imag[bitReversedIndices[i]] = complexSignal.imag[i];\n }\n\n for (var _i = 0; _i < N; _i++) {\n complexSignal.real[_i] = ordered.real[_i];\n complexSignal.imag[_i] = ordered.imag[_i];\n }\n // iterate over the number of stages\n for (var n = 1; n <= logN; n++) {\n var currN = Math.pow(2, n);\n\n // find twiddle factors\n for (var k = 0; k < currN / 2; k++) {\n var twiddle = utils.euler(k, currN);\n\n // on each block of FT, implement the butterfly diagram\n for (var m = 0; m < N / currN; m++) {\n var currEvenIndex = currN * m + k;\n var currOddIndex = currN * m + k + currN / 2;\n\n var currEvenIndexSample = {\n 'real': complexSignal.real[currEvenIndex],\n 'imag': complexSignal.imag[currEvenIndex]\n };\n var currOddIndexSample = {\n 'real': complexSignal.real[currOddIndex],\n 'imag': complexSignal.imag[currOddIndex]\n };\n\n var odd = utils.multiply(twiddle, currOddIndexSample);\n\n var subtractionResult = utils.subtract(currEvenIndexSample, odd);\n complexSignal.real[currOddIndex] = subtractionResult.real;\n complexSignal.imag[currOddIndex] = subtractionResult.imag;\n\n var additionResult = utils.add(odd, currEvenIndexSample);\n complexSignal.real[currEvenIndex] = additionResult.real;\n complexSignal.imag[currEvenIndex] = additionResult.imag;\n }\n }\n }\n\n return complexSignal;\n};\n\n// complex to real ifft\nvar ifft = function ifft(signal) {\n\n if (signal.real === undefined || signal.imag === undefined) {\n throw new Error(\"IFFT only accepts a complex input.\");\n }\n\n var N = signal.real.length;\n\n var complexSignal = {\n 'real': [],\n 'imag': []\n };\n\n //take complex conjugate in order to be able to use the regular FFT for IFFT\n for (var i = 0; i < N; i++) {\n var currentSample = {\n 'real': signal.real[i],\n 'imag': signal.imag[i]\n };\n\n var conjugateSample = utils.conj(currentSample);\n complexSignal.real[i] = conjugateSample.real;\n complexSignal.imag[i] = conjugateSample.imag;\n }\n\n //compute\n var X = fft(complexSignal);\n\n //normalize\n complexSignal.real = X.real.map(function (val) {\n return val / N;\n });\n\n complexSignal.imag = X.imag.map(function (val) {\n return val / N;\n });\n\n return complexSignal;\n};\n\nmodule.exports = {\n fft: fft,\n ifft: ifft\n};","'use strict';\n\n// memoization of the reversal of different lengths.\n\nfunction _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } }\n\nvar memoizedReversal = {};\nvar memoizedZeroBuffers = {};\n\nvar constructComplexArray = function constructComplexArray(signal) {\n var complexSignal = {};\n\n complexSignal.real = signal.real === undefined ? signal.slice() : signal.real.slice();\n\n var bufferSize = complexSignal.real.length;\n\n if (memoizedZeroBuffers[bufferSize] === undefined) {\n memoizedZeroBuffers[bufferSize] = Array.apply(null, Array(bufferSize)).map(Number.prototype.valueOf, 0);\n }\n\n complexSignal.imag = memoizedZeroBuffers[bufferSize].slice();\n\n return complexSignal;\n};\n\nvar bitReverseArray = function bitReverseArray(N) {\n if (memoizedReversal[N] === undefined) {\n var maxBinaryLength = (N - 1).toString(2).length; //get the binary length of the largest index.\n var templateBinary = '0'.repeat(maxBinaryLength); //create a template binary of that length.\n var reversed = {};\n for (var n = 0; n < N; n++) {\n var currBinary = n.toString(2); //get binary value of current index.\n\n //prepend zeros from template to current binary. This makes binary values of all indices have the same length.\n currBinary = templateBinary.substr(currBinary.length) + currBinary;\n\n currBinary = [].concat(_toConsumableArray(currBinary)).reverse().join(''); //reverse\n reversed[n] = parseInt(currBinary, 2); //convert to decimal\n }\n memoizedReversal[N] = reversed; //save\n }\n return memoizedReversal[N];\n};\n\n// complex multiplication\nvar multiply = function multiply(a, b) {\n return {\n 'real': a.real * b.real - a.imag * b.imag,\n 'imag': a.real * b.imag + a.imag * b.real\n };\n};\n\n// complex addition\nvar add = function add(a, b) {\n return {\n 'real': a.real + b.real,\n 'imag': a.imag + b.imag\n };\n};\n\n// complex subtraction\nvar subtract = function subtract(a, b) {\n return {\n 'real': a.real - b.real,\n 'imag': a.imag - b.imag\n };\n};\n\n// euler's identity e^x = cos(x) + sin(x)\nvar euler = function euler(kn, N) {\n var x = -2 * Math.PI * kn / N;\n return { 'real': Math.cos(x), 'imag': Math.sin(x) };\n};\n\n// complex conjugate\nvar conj = function conj(a) {\n a.imag *= -1;\n return a;\n};\n\nmodule.exports = {\n bitReverseArray: bitReverseArray,\n multiply: multiply,\n add: add,\n subtract: subtract,\n euler: euler,\n conj: conj,\n constructComplexArray: constructComplexArray\n};","if (typeof Object.create === 'function') {\n // implementation from standard node.js 'util' module\n module.exports = function inherits(ctor, superCtor) {\n ctor.super_ = superCtor\n ctor.prototype = Object.create(superCtor.prototype, {\n constructor: {\n value: ctor,\n enumerable: false,\n writable: true,\n configurable: true\n }\n });\n };\n} else {\n // old school shim for old browsers\n module.exports = function inherits(ctor, superCtor) {\n ctor.super_ = superCtor\n var TempCtor = function () {}\n TempCtor.prototype = superCtor.prototype\n ctor.prototype = new TempCtor()\n ctor.prototype.constructor = ctor\n }\n}\n","module.exports = function isBuffer(arg) {\n return arg && typeof arg === 'object'\n && typeof arg.copy === 'function'\n && typeof arg.fill === 'function'\n && typeof arg.readUInt8 === 'function';\n}","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\nvar getOwnPropertyDescriptors = Object.getOwnPropertyDescriptors ||\n function getOwnPropertyDescriptors(obj) {\n var keys = Object.keys(obj);\n var descriptors = {};\n for (var i = 0; i < keys.length; i++) {\n descriptors[keys[i]] = Object.getOwnPropertyDescriptor(obj, keys[i]);\n }\n return descriptors;\n };\n\nvar formatRegExp = /%[sdj%]/g;\nexports.format = function(f) {\n if (!isString(f)) {\n var objects = [];\n for (var i = 0; i < arguments.length; i++) {\n objects.push(inspect(arguments[i]));\n }\n return objects.join(' ');\n }\n\n var i = 1;\n var args = arguments;\n var len = args.length;\n var str = String(f).replace(formatRegExp, function(x) {\n if (x === '%%') return '%';\n if (i >= len) return x;\n switch (x) {\n case '%s': return String(args[i++]);\n case '%d': return Number(args[i++]);\n case '%j':\n try {\n return JSON.stringify(args[i++]);\n } catch (_) {\n return '[Circular]';\n }\n default:\n return x;\n }\n });\n for (var x = args[i]; i < len; x = args[++i]) {\n if (isNull(x) || !isObject(x)) {\n str += ' ' + x;\n } else {\n str += ' ' + inspect(x);\n }\n }\n return str;\n};\n\n\n// Mark that a method should not be used.\n// Returns a modified function which warns once by default.\n// If --no-deprecation is set, then it is a no-op.\nexports.deprecate = function(fn, msg) {\n if (typeof process !== 'undefined' && process.noDeprecation === true) {\n return fn;\n }\n\n // Allow for deprecating things in the process of starting up.\n if (typeof process === 'undefined') {\n return function() {\n return exports.deprecate(fn, msg).apply(this, arguments);\n };\n }\n\n var warned = false;\n function deprecated() {\n if (!warned) {\n if (process.throwDeprecation) {\n throw new Error(msg);\n } else if (process.traceDeprecation) {\n console.trace(msg);\n } else {\n console.error(msg);\n }\n warned = true;\n }\n return fn.apply(this, arguments);\n }\n\n return deprecated;\n};\n\n\nvar debugs = {};\nvar debugEnviron;\nexports.debuglog = function(set) {\n if (isUndefined(debugEnviron))\n debugEnviron = process.env.NODE_DEBUG || '';\n set = set.toUpperCase();\n if (!debugs[set]) {\n if (new RegExp('\\\\b' + set + '\\\\b', 'i').test(debugEnviron)) {\n var pid = process.pid;\n debugs[set] = function() {\n var msg = exports.format.apply(exports, arguments);\n console.error('%s %d: %s', set, pid, msg);\n };\n } else {\n debugs[set] = function() {};\n }\n }\n return debugs[set];\n};\n\n\n/**\n * Echos the value of a value. Trys to print the value out\n * in the best way possible given the different types.\n *\n * @param {Object} obj The object to print out.\n * @param {Object} opts Optional options object that alters the output.\n */\n/* legacy: obj, showHidden, depth, colors*/\nfunction inspect(obj, opts) {\n // default options\n var ctx = {\n seen: [],\n stylize: stylizeNoColor\n };\n // legacy...\n if (arguments.length >= 3) ctx.depth = arguments[2];\n if (arguments.length >= 4) ctx.colors = arguments[3];\n if (isBoolean(opts)) {\n // legacy...\n ctx.showHidden = opts;\n } else if (opts) {\n // got an \"options\" object\n exports._extend(ctx, opts);\n }\n // set default options\n if (isUndefined(ctx.showHidden)) ctx.showHidden = false;\n if (isUndefined(ctx.depth)) ctx.depth = 2;\n if (isUndefined(ctx.colors)) ctx.colors = false;\n if (isUndefined(ctx.customInspect)) ctx.customInspect = true;\n if (ctx.colors) ctx.stylize = stylizeWithColor;\n return formatValue(ctx, obj, ctx.depth);\n}\nexports.inspect = inspect;\n\n\n// http://en.wikipedia.org/wiki/ANSI_escape_code#graphics\ninspect.colors = {\n 'bold' : [1, 22],\n 'italic' : [3, 23],\n 'underline' : [4, 24],\n 'inverse' : [7, 27],\n 'white' : [37, 39],\n 'grey' : [90, 39],\n 'black' : [30, 39],\n 'blue' : [34, 39],\n 'cyan' : [36, 39],\n 'green' : [32, 39],\n 'magenta' : [35, 39],\n 'red' : [31, 39],\n 'yellow' : [33, 39]\n};\n\n// Don't use 'blue' not visible on cmd.exe\ninspect.styles = {\n 'special': 'cyan',\n 'number': 'yellow',\n 'boolean': 'yellow',\n 'undefined': 'grey',\n 'null': 'bold',\n 'string': 'green',\n 'date': 'magenta',\n // \"name\": intentionally not styling\n 'regexp': 'red'\n};\n\n\nfunction stylizeWithColor(str, styleType) {\n var style = inspect.styles[styleType];\n\n if (style) {\n return '\\u001b[' + inspect.colors[style][0] + 'm' + str +\n '\\u001b[' + inspect.colors[style][1] + 'm';\n } else {\n return str;\n }\n}\n\n\nfunction stylizeNoColor(str, styleType) {\n return str;\n}\n\n\nfunction arrayToHash(array) {\n var hash = {};\n\n array.forEach(function(val, idx) {\n hash[val] = true;\n });\n\n return hash;\n}\n\n\nfunction formatValue(ctx, value, recurseTimes) {\n // Provide a hook for user-specified inspect functions.\n // Check that value is an object with an inspect function on it\n if (ctx.customInspect &&\n value &&\n isFunction(value.inspect) &&\n // Filter out the util module, it's inspect function is special\n value.inspect !== exports.inspect &&\n // Also filter out any prototype objects using the circular check.\n !(value.constructor && value.constructor.prototype === value)) {\n var ret = value.inspect(recurseTimes, ctx);\n if (!isString(ret)) {\n ret = formatValue(ctx, ret, recurseTimes);\n }\n return ret;\n }\n\n // Primitive types cannot have properties\n var primitive = formatPrimitive(ctx, value);\n if (primitive) {\n return primitive;\n }\n\n // Look up the keys of the object.\n var keys = Object.keys(value);\n var visibleKeys = arrayToHash(keys);\n\n if (ctx.showHidden) {\n keys = Object.getOwnPropertyNames(value);\n }\n\n // IE doesn't make error fields non-enumerable\n // http://msdn.microsoft.com/en-us/library/ie/dww52sbt(v=vs.94).aspx\n if (isError(value)\n && (keys.indexOf('message') >= 0 || keys.indexOf('description') >= 0)) {\n return formatError(value);\n }\n\n // Some type of object without properties can be shortcutted.\n if (keys.length === 0) {\n if (isFunction(value)) {\n var name = value.name ? ': ' + value.name : '';\n return ctx.stylize('[Function' + name + ']', 'special');\n }\n if (isRegExp(value)) {\n return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');\n }\n if (isDate(value)) {\n return ctx.stylize(Date.prototype.toString.call(value), 'date');\n }\n if (isError(value)) {\n return formatError(value);\n }\n }\n\n var base = '', array = false, braces = ['{', '}'];\n\n // Make Array say that they are Array\n if (isArray(value)) {\n array = true;\n braces = ['[', ']'];\n }\n\n // Make functions say that they are functions\n if (isFunction(value)) {\n var n = value.name ? ': ' + value.name : '';\n base = ' [Function' + n + ']';\n }\n\n // Make RegExps say that they are RegExps\n if (isRegExp(value)) {\n base = ' ' + RegExp.prototype.toString.call(value);\n }\n\n // Make dates with properties first say the date\n if (isDate(value)) {\n base = ' ' + Date.prototype.toUTCString.call(value);\n }\n\n // Make error with message first say the error\n if (isError(value)) {\n base = ' ' + formatError(value);\n }\n\n if (keys.length === 0 && (!array || value.length == 0)) {\n return braces[0] + base + braces[1];\n }\n\n if (recurseTimes < 0) {\n if (isRegExp(value)) {\n return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');\n } else {\n return ctx.stylize('[Object]', 'special');\n }\n }\n\n ctx.seen.push(value);\n\n var output;\n if (array) {\n output = formatArray(ctx, value, recurseTimes, visibleKeys, keys);\n } else {\n output = keys.map(function(key) {\n return formatProperty(ctx, value, recurseTimes, visibleKeys, key, array);\n });\n }\n\n ctx.seen.pop();\n\n return reduceToSingleString(output, base, braces);\n}\n\n\nfunction formatPrimitive(ctx, value) {\n if (isUndefined(value))\n return ctx.stylize('undefined', 'undefined');\n if (isString(value)) {\n var simple = '\\'' + JSON.stringify(value).replace(/^\"|\"$/g, '')\n .replace(/'/g, \"\\\\'\")\n .replace(/\\\\\"/g, '\"') + '\\'';\n return ctx.stylize(simple, 'string');\n }\n if (isNumber(value))\n return ctx.stylize('' + value, 'number');\n if (isBoolean(value))\n return ctx.stylize('' + value, 'boolean');\n // For some reason typeof null is \"object\", so special case here.\n if (isNull(value))\n return ctx.stylize('null', 'null');\n}\n\n\nfunction formatError(value) {\n return '[' + Error.prototype.toString.call(value) + ']';\n}\n\n\nfunction formatArray(ctx, value, recurseTimes, visibleKeys, keys) {\n var output = [];\n for (var i = 0, l = value.length; i < l; ++i) {\n if (hasOwnProperty(value, String(i))) {\n output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,\n String(i), true));\n } else {\n output.push('');\n }\n }\n keys.forEach(function(key) {\n if (!key.match(/^\\d+$/)) {\n output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,\n key, true));\n }\n });\n return output;\n}\n\n\nfunction formatProperty(ctx, value, recurseTimes, visibleKeys, key, array) {\n var name, str, desc;\n desc = Object.getOwnPropertyDescriptor(value, key) || { value: value[key] };\n if (desc.get) {\n if (desc.set) {\n str = ctx.stylize('[Getter/Setter]', 'special');\n } else {\n str = ctx.stylize('[Getter]', 'special');\n }\n } else {\n if (desc.set) {\n str = ctx.stylize('[Setter]', 'special');\n }\n }\n if (!hasOwnProperty(visibleKeys, key)) {\n name = '[' + key + ']';\n }\n if (!str) {\n if (ctx.seen.indexOf(desc.value) < 0) {\n if (isNull(recurseTimes)) {\n str = formatValue(ctx, desc.value, null);\n } else {\n str = formatValue(ctx, desc.value, recurseTimes - 1);\n }\n if (str.indexOf('\\n') > -1) {\n if (array) {\n str = str.split('\\n').map(function(line) {\n return ' ' + line;\n }).join('\\n').substr(2);\n } else {\n str = '\\n' + str.split('\\n').map(function(line) {\n return ' ' + line;\n }).join('\\n');\n }\n }\n } else {\n str = ctx.stylize('[Circular]', 'special');\n }\n }\n if (isUndefined(name)) {\n if (array && key.match(/^\\d+$/)) {\n return str;\n }\n name = JSON.stringify('' + key);\n if (name.match(/^\"([a-zA-Z_][a-zA-Z_0-9]*)\"$/)) {\n name = name.substr(1, name.length - 2);\n name = ctx.stylize(name, 'name');\n } else {\n name = name.replace(/'/g, \"\\\\'\")\n .replace(/\\\\\"/g, '\"')\n .replace(/(^\"|\"$)/g, \"'\");\n name = ctx.stylize(name, 'string');\n }\n }\n\n return name + ': ' + str;\n}\n\n\nfunction reduceToSingleString(output, base, braces) {\n var numLinesEst = 0;\n var length = output.reduce(function(prev, cur) {\n numLinesEst++;\n if (cur.indexOf('\\n') >= 0) numLinesEst++;\n return prev + cur.replace(/\\u001b\\[\\d\\d?m/g, '').length + 1;\n }, 0);\n\n if (length > 60) {\n return braces[0] +\n (base === '' ? '' : base + '\\n ') +\n ' ' +\n output.join(',\\n ') +\n ' ' +\n braces[1];\n }\n\n return braces[0] + base + ' ' + output.join(', ') + ' ' + braces[1];\n}\n\n\n// NOTE: These type checking functions intentionally don't use `instanceof`\n// because it is fragile and can be easily faked with `Object.create()`.\nfunction isArray(ar) {\n return Array.isArray(ar);\n}\nexports.isArray = isArray;\n\nfunction isBoolean(arg) {\n return typeof arg === 'boolean';\n}\nexports.isBoolean = isBoolean;\n\nfunction isNull(arg) {\n return arg === null;\n}\nexports.isNull = isNull;\n\nfunction isNullOrUndefined(arg) {\n return arg == null;\n}\nexports.isNullOrUndefined = isNullOrUndefined;\n\nfunction isNumber(arg) {\n return typeof arg === 'number';\n}\nexports.isNumber = isNumber;\n\nfunction isString(arg) {\n return typeof arg === 'string';\n}\nexports.isString = isString;\n\nfunction isSymbol(arg) {\n return typeof arg === 'symbol';\n}\nexports.isSymbol = isSymbol;\n\nfunction isUndefined(arg) {\n return arg === void 0;\n}\nexports.isUndefined = isUndefined;\n\nfunction isRegExp(re) {\n return isObject(re) && objectToString(re) === '[object RegExp]';\n}\nexports.isRegExp = isRegExp;\n\nfunction isObject(arg) {\n return typeof arg === 'object' && arg !== null;\n}\nexports.isObject = isObject;\n\nfunction isDate(d) {\n return isObject(d) && objectToString(d) === '[object Date]';\n}\nexports.isDate = isDate;\n\nfunction isError(e) {\n return isObject(e) &&\n (objectToString(e) === '[object Error]' || e instanceof Error);\n}\nexports.isError = isError;\n\nfunction isFunction(arg) {\n return typeof arg === 'function';\n}\nexports.isFunction = isFunction;\n\nfunction isPrimitive(arg) {\n return arg === null ||\n typeof arg === 'boolean' ||\n typeof arg === 'number' ||\n typeof arg === 'string' ||\n typeof arg === 'symbol' || // ES6 symbol\n typeof arg === 'undefined';\n}\nexports.isPrimitive = isPrimitive;\n\nexports.isBuffer = require('./support/isBuffer');\n\nfunction objectToString(o) {\n return Object.prototype.toString.call(o);\n}\n\n\nfunction pad(n) {\n return n < 10 ? '0' + n.toString(10) : n.toString(10);\n}\n\n\nvar months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep',\n 'Oct', 'Nov', 'Dec'];\n\n// 26 Feb 16:19:34\nfunction timestamp() {\n var d = new Date();\n var time = [pad(d.getHours()),\n pad(d.getMinutes()),\n pad(d.getSeconds())].join(':');\n return [d.getDate(), months[d.getMonth()], time].join(' ');\n}\n\n\n// log is just a thin wrapper to console.log that prepends a timestamp\nexports.log = function() {\n console.log('%s - %s', timestamp(), exports.format.apply(exports, arguments));\n};\n\n\n/**\n * Inherit the prototype methods from one constructor into another.\n *\n * The Function.prototype.inherits from lang.js rewritten as a standalone\n * function (not on Function.prototype). NOTE: If this file is to be loaded\n * during bootstrapping this function needs to be rewritten using some native\n * functions as prototype setup using normal JavaScript does not work as\n * expected during bootstrapping (see mirror.js in r114903).\n *\n * @param {function} ctor Constructor function which needs to inherit the\n * prototype.\n * @param {function} superCtor Constructor function to inherit prototype from.\n */\nexports.inherits = require('inherits');\n\nexports._extend = function(origin, add) {\n // Don't do anything if add isn't an object\n if (!add || !isObject(add)) return origin;\n\n var keys = Object.keys(add);\n var i = keys.length;\n while (i--) {\n origin[keys[i]] = add[keys[i]];\n }\n return origin;\n};\n\nfunction hasOwnProperty(obj, prop) {\n return Object.prototype.hasOwnProperty.call(obj, prop);\n}\n\nvar kCustomPromisifiedSymbol = typeof Symbol !== 'undefined' ? Symbol('util.promisify.custom') : undefined;\n\nexports.promisify = function promisify(original) {\n if (typeof original !== 'function')\n throw new TypeError('The \"original\" argument must be of type Function');\n\n if (kCustomPromisifiedSymbol && original[kCustomPromisifiedSymbol]) {\n var fn = original[kCustomPromisifiedSymbol];\n if (typeof fn !== 'function') {\n throw new TypeError('The \"util.promisify.custom\" argument must be of type Function');\n }\n Object.defineProperty(fn, kCustomPromisifiedSymbol, {\n value: fn, enumerable: false, writable: false, configurable: true\n });\n return fn;\n }\n\n function fn() {\n var promiseResolve, promiseReject;\n var promise = new Promise(function (resolve, reject) {\n promiseResolve = resolve;\n promiseReject = reject;\n });\n\n var args = [];\n for (var i = 0; i < arguments.length; i++) {\n args.push(arguments[i]);\n }\n args.push(function (err, value) {\n if (err) {\n promiseReject(err);\n } else {\n promiseResolve(value);\n }\n });\n\n try {\n original.apply(this, args);\n } catch (err) {\n promiseReject(err);\n }\n\n return promise;\n }\n\n Object.setPrototypeOf(fn, Object.getPrototypeOf(original));\n\n if (kCustomPromisifiedSymbol) Object.defineProperty(fn, kCustomPromisifiedSymbol, {\n value: fn, enumerable: false, writable: false, configurable: true\n });\n return Object.defineProperties(\n fn,\n getOwnPropertyDescriptors(original)\n );\n}\n\nexports.promisify.custom = kCustomPromisifiedSymbol\n\nfunction callbackifyOnRejected(reason, cb) {\n // `!reason` guard inspired by bluebird (Ref: https://goo.gl/t5IS6M).\n // Because `null` is a special error value in callbacks which means \"no error\n // occurred\", we error-wrap so the callback consumer can distinguish between\n // \"the promise rejected with null\" or \"the promise fulfilled with undefined\".\n if (!reason) {\n var newReason = new Error('Promise was rejected with a falsy value');\n newReason.reason = reason;\n reason = newReason;\n }\n return cb(reason);\n}\n\nfunction callbackify(original) {\n if (typeof original !== 'function') {\n throw new TypeError('The \"original\" argument must be of type Function');\n }\n\n // We DO NOT return the promise as it gives the user a false sense that\n // the promise is actually somehow related to the callback's execution\n // and that the callback throwing will reject the promise.\n function callbackified() {\n var args = [];\n for (var i = 0; i < arguments.length; i++) {\n args.push(arguments[i]);\n }\n\n var maybeCb = args.pop();\n if (typeof maybeCb !== 'function') {\n throw new TypeError('The last argument must be of type Function');\n }\n var self = this;\n var cb = function() {\n return maybeCb.apply(self, arguments);\n };\n // In true node style we process the callback on `nextTick` with all the\n // implications (stack, `uncaughtException`, `async_hooks`)\n original.apply(this, args)\n .then(function(ret) { process.nextTick(cb, null, ret) },\n function(rej) { process.nextTick(callbackifyOnRejected, rej, cb) });\n }\n\n Object.setPrototypeOf(callbackified, Object.getPrototypeOf(original));\n Object.defineProperties(callbackified,\n getOwnPropertyDescriptors(original));\n return callbackified;\n}\nexports.callbackify = callbackify;\n","/*\nobject-assign\n(c) Sindre Sorhus\n@license MIT\n*/\n\n'use strict';\n/* eslint-disable no-unused-vars */\nvar getOwnPropertySymbols = Object.getOwnPropertySymbols;\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\nvar propIsEnumerable = Object.prototype.propertyIsEnumerable;\n\nfunction toObject(val) {\n\tif (val === null || val === undefined) {\n\t\tthrow new TypeError('Object.assign cannot be called with null or undefined');\n\t}\n\n\treturn Object(val);\n}\n\nfunction shouldUseNative() {\n\ttry {\n\t\tif (!Object.assign) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Detect buggy property enumeration order in older V8 versions.\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=4118\n\t\tvar test1 = new String('abc'); // eslint-disable-line no-new-wrappers\n\t\ttest1[5] = 'de';\n\t\tif (Object.getOwnPropertyNames(test1)[0] === '5') {\n\t\t\treturn false;\n\t\t}\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=3056\n\t\tvar test2 = {};\n\t\tfor (var i = 0; i < 10; i++) {\n\t\t\ttest2['_' + String.fromCharCode(i)] = i;\n\t\t}\n\t\tvar order2 = Object.getOwnPropertyNames(test2).map(function (n) {\n\t\t\treturn test2[n];\n\t\t});\n\t\tif (order2.join('') !== '0123456789') {\n\t\t\treturn false;\n\t\t}\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=3056\n\t\tvar test3 = {};\n\t\t'abcdefghijklmnopqrst'.split('').forEach(function (letter) {\n\t\t\ttest3[letter] = letter;\n\t\t});\n\t\tif (Object.keys(Object.assign({}, test3)).join('') !==\n\t\t\t\t'abcdefghijklmnopqrst') {\n\t\t\treturn false;\n\t\t}\n\n\t\treturn true;\n\t} catch (err) {\n\t\t// We don't expect any of the above to throw, but better to be safe.\n\t\treturn false;\n\t}\n}\n\nmodule.exports = shouldUseNative() ? Object.assign : function (target, source) {\n\tvar from;\n\tvar to = toObject(target);\n\tvar symbols;\n\n\tfor (var s = 1; s < arguments.length; s++) {\n\t\tfrom = Object(arguments[s]);\n\n\t\tfor (var key in from) {\n\t\t\tif (hasOwnProperty.call(from, key)) {\n\t\t\t\tto[key] = from[key];\n\t\t\t}\n\t\t}\n\n\t\tif (getOwnPropertySymbols) {\n\t\t\tsymbols = getOwnPropertySymbols(from);\n\t\t\tfor (var i = 0; i < symbols.length; i++) {\n\t\t\t\tif (propIsEnumerable.call(from, symbols[i])) {\n\t\t\t\t\tto[symbols[i]] = from[symbols[i]];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn to;\n};\n","// shim for using process in browser\nvar process = module.exports = {};\n\n// cached from whatever global is present so that test runners that stub it\n// don't break things. But we need to wrap it in a try catch in case it is\n// wrapped in strict mode code which doesn't define any globals. It's inside a\n// function because try/catches deoptimize in certain engines.\n\nvar cachedSetTimeout;\nvar cachedClearTimeout;\n\nfunction defaultSetTimout() {\n throw new Error('setTimeout has not been defined');\n}\nfunction defaultClearTimeout () {\n throw new Error('clearTimeout has not been defined');\n}\n(function () {\n try {\n if (typeof setTimeout === 'function') {\n cachedSetTimeout = setTimeout;\n } else {\n cachedSetTimeout = defaultSetTimout;\n }\n } catch (e) {\n cachedSetTimeout = defaultSetTimout;\n }\n try {\n if (typeof clearTimeout === 'function') {\n cachedClearTimeout = clearTimeout;\n } else {\n cachedClearTimeout = defaultClearTimeout;\n }\n } catch (e) {\n cachedClearTimeout = defaultClearTimeout;\n }\n} ())\nfunction runTimeout(fun) {\n if (cachedSetTimeout === setTimeout) {\n //normal enviroments in sane situations\n return setTimeout(fun, 0);\n }\n // if setTimeout wasn't available but was latter defined\n if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {\n cachedSetTimeout = setTimeout;\n return setTimeout(fun, 0);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedSetTimeout(fun, 0);\n } catch(e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedSetTimeout.call(null, fun, 0);\n } catch(e){\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error\n return cachedSetTimeout.call(this, fun, 0);\n }\n }\n\n\n}\nfunction runClearTimeout(marker) {\n if (cachedClearTimeout === clearTimeout) {\n //normal enviroments in sane situations\n return clearTimeout(marker);\n }\n // if clearTimeout wasn't available but was latter defined\n if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {\n cachedClearTimeout = clearTimeout;\n return clearTimeout(marker);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedClearTimeout(marker);\n } catch (e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedClearTimeout.call(null, marker);\n } catch (e){\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.\n // Some versions of I.E. have different rules for clearTimeout vs setTimeout\n return cachedClearTimeout.call(this, marker);\n }\n }\n\n\n\n}\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n if (!draining || !currentQueue) {\n return;\n }\n draining = false;\n if (currentQueue.length) {\n queue = currentQueue.concat(queue);\n } else {\n queueIndex = -1;\n }\n if (queue.length) {\n drainQueue();\n }\n}\n\nfunction drainQueue() {\n if (draining) {\n return;\n }\n var timeout = runTimeout(cleanUpNextTick);\n draining = true;\n\n var len = queue.length;\n while(len) {\n currentQueue = queue;\n queue = [];\n while (++queueIndex < len) {\n if (currentQueue) {\n currentQueue[queueIndex].run();\n }\n }\n queueIndex = -1;\n len = queue.length;\n }\n currentQueue = null;\n draining = false;\n runClearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n var args = new Array(arguments.length - 1);\n if (arguments.length > 1) {\n for (var i = 1; i < arguments.length; i++) {\n args[i - 1] = arguments[i];\n }\n }\n queue.push(new Item(fun, args));\n if (queue.length === 1 && !draining) {\n runTimeout(drainQueue);\n }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n this.fun = fun;\n this.array = array;\n}\nItem.prototype.run = function () {\n this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\nprocess.prependListener = noop;\nprocess.prependOnceListener = noop;\n\nprocess.listeners = function (name) { return [] }\n\nprocess.binding = function (name) {\n throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n","var g;\n\n// This works in non-strict mode\ng = (function() {\n\treturn this;\n})();\n\ntry {\n\t// This works if eval is allowed (see CSP)\n\tg = g || new Function(\"return this\")();\n} catch (e) {\n\t// This works if the window reference is available\n\tif (typeof window === \"object\") g = window;\n}\n\n// g can still be undefined, but nothing to do about it...\n// We return undefined, instead of nothing here, so it's\n// easier to handle this case. if(!global) { ...}\n\nmodule.exports = g;\n","export default function(args) {\n if (typeof args.ampSpectrum !== 'object') {\n throw new TypeError('Valid ampSpectrum is required to generate chroma');\n }\n if (typeof args.chromaFilterBank !== 'object') {\n throw new TypeError('Valid chromaFilterBank is required to generate chroma');\n }\n\n var chromagram = args.chromaFilterBank.map((row, i) =>\n args.ampSpectrum.reduce((acc, v, j) => acc + v * row[j], 0)\n );\n var maxVal = Math.max(...chromagram);\n\n\n return maxVal\n ? chromagram.map(v => v / maxVal)\n : chromagram;\n}\n","import * as assert from 'assert';\n\nexport default function() {\n if (typeof arguments[0].signal !== 'object') {\n throw new TypeError();\n }\n\n var energy = 0;\n for (var i = 0; i < arguments[0].signal.length; i++) {\n energy += Math.pow(Math.abs(arguments[0].signal[i]), 2);\n }\n\n return energy;\n}\n","export function mu(i, amplitudeSpect) {\n var numerator = 0;\n var denominator = 0;\n for (var k = 0; k < amplitudeSpect.length; k++) {\n numerator += Math.pow(k, i) * Math.abs(amplitudeSpect[k]);\n denominator += amplitudeSpect[k];\n }\n\n return numerator / denominator;\n}\n","export default function(args) {\n if (typeof args.ampSpectrum !== 'object' ||\n typeof args.barkScale !== 'object') {\n throw new TypeError();\n }\n\n var NUM_BARK_BANDS = 24;\n var specific = new Float32Array(NUM_BARK_BANDS);\n var total = 0;\n var normalisedSpectrum = args.ampSpectrum;\n var bbLimits = new Int32Array(NUM_BARK_BANDS + 1);\n\n bbLimits[0] = 0;\n var currentBandEnd = args.barkScale[normalisedSpectrum.length - 1] /\n NUM_BARK_BANDS;\n var currentBand = 1;\n for (let i = 0; i < normalisedSpectrum.length; i++) {\n while (args.barkScale[i] > currentBandEnd) {\n bbLimits[currentBand++] = i;\n currentBandEnd = currentBand *\n\t\t\t\t\t\t\t\targs.barkScale[normalisedSpectrum.length - 1] /\n NUM_BARK_BANDS;\n }\n }\n\n bbLimits[NUM_BARK_BANDS] = normalisedSpectrum.length - 1;\n\n //process\n\n for (let i = 0; i < NUM_BARK_BANDS; i++) {\n let sum = 0;\n for (let j = bbLimits[i]; j < bbLimits[i + 1]; j++) {\n\n sum += normalisedSpectrum[j];\n }\n\n specific[i] = Math.pow(sum, 0.23);\n }\n\n //get total loudness\n for (let i = 0; i < specific.length; i++) {\n total += specific[i];\n }\n\n return {\n specific: specific,\n total: total,\n };\n}\n","import powerSpectrum from './powerSpectrum';\nimport freqToMel from './../utilities';\nimport melToFreq from './../utilities';\n\nvar dct = require('dct');\n\nexport default function(args) {\n if (typeof args.ampSpectrum !== 'object') {\n throw new TypeError('Valid ampSpectrum is required to generate MFCC');\n }\n if (typeof args.melFilterBank !== 'object') {\n throw new TypeError('Valid melFilterBank is required to generate MFCC');\n }\n\n let numberOfMFCCCoefficients = Math.min(40, Math.max(1, args.numberOfMFCCCoefficients || 13));\n\n // Tutorial from:\n // http://practicalcryptography.com/miscellaneous/machine-learning\n // /guide-mel-frequency-cepstral-coefficients-mfccs/\n let powSpec = powerSpectrum(args);\n let numFilters = args.melFilterBank.length;\n let filtered = Array(numFilters);\n\n if (numFilters < numberOfMFCCCoefficients) {\n throw new Error(\"Insufficient filter bank for requested number of coefficients\");\n }\n\n let loggedMelBands = new Float32Array(numFilters);\n\n for (let i = 0; i < loggedMelBands.length; i++) {\n filtered[i] = new Float32Array(args.bufferSize / 2);\n loggedMelBands[i] = 0;\n for (let j = 0; j < (args.bufferSize / 2); j++) {\n //point-wise multiplication between power spectrum and filterbanks.\n filtered[i][j] = args.melFilterBank[i][j] * powSpec[j];\n\n //summing up all of the coefficients into one array\n loggedMelBands[i] += filtered[i][j];\n }\n\n //log each coefficient.\n loggedMelBands[i] = Math.log(loggedMelBands[i] + 1);\n }\n\n //dct\n let loggedMelBandsArray = Array.prototype.slice.call(loggedMelBands);\n let mfccs = dct(loggedMelBandsArray).slice(0, numberOfMFCCCoefficients);\n\n return mfccs;\n}\n","import loudness from './loudness';\n\nexport default function() {\n if (typeof arguments[0].signal !== 'object') {\n throw new TypeError();\n }\n\n var loudnessValue = loudness(arguments[0]);\n var spec = loudnessValue.specific;\n var output = 0;\n\n for (var i = 0; i < spec.length; i++) {\n if (i < 15) {\n output += (i + 1) * spec[i + 1];\n } else {\n output += 0.066 * Math.exp(0.171 * (i + 1));\n }\n }\n\n output *= 0.11 / loudnessValue.total;\n\n return output;\n}\n","import loudness from './loudness';\n\nexport default function() {\n if (typeof arguments[0].signal !== 'object') {\n throw new TypeError();\n }\n\n var loudnessValue = loudness(arguments[0]);\n\n var max = 0;\n for (var i = 0; i < loudnessValue.specific.length; i++) {\n if (loudnessValue.specific[i] > max) {\n max = loudnessValue.specific[i];\n }\n }\n\n var spread = Math.pow((loudnessValue.total - max) / loudnessValue.total, 2);\n\n return spread;\n}\n","export default function() {\n if (typeof arguments[0].ampSpectrum !== 'object') {\n throw new TypeError();\n }\n\n var powerSpectrum = new Float32Array(arguments[0].ampSpectrum.length);\n for (var i = 0; i < powerSpectrum.length; i++) {\n powerSpectrum[i] = Math.pow(arguments[0].ampSpectrum[i], 2);\n }\n\n return powerSpectrum;\n}\n","export default function(args) {\n if (typeof args.signal !== 'object') {\n throw new TypeError();\n }\n\n var rms = 0;\n for (var i = 0; i < args.signal.length; i++) {\n rms += Math.pow(args.signal[i], 2);\n }\n\n rms = rms / args.signal.length;\n rms = Math.sqrt(rms);\n\n return rms;\n}\n","import {mu} from './extractorUtilities';\n\nexport default function() {\n if (typeof arguments[0].ampSpectrum !== 'object') {\n throw new TypeError();\n }\n\n return mu(1, arguments[0].ampSpectrum);\n}\n","export default function() {\n if (typeof arguments[0].ampSpectrum !== 'object') {\n throw new TypeError();\n }\n\n var numerator = 0;\n var denominator = 0;\n for (var i = 0; i < arguments[0].ampSpectrum.length; i++) {\n numerator += Math.log(arguments[0].ampSpectrum[i]);\n denominator += arguments[0].ampSpectrum[i];\n }\n\n return Math.exp(numerator / arguments[0].ampSpectrum.length) *\n arguments[0].ampSpectrum.length / denominator;\n}\n","export default function(args) {\n if (typeof args.signal !== 'object' ||\n typeof args.previousSignal != 'object'\n\t\t) {\n throw new TypeError();\n }\n\n let sf = 0;\n for (let i = -(args.bufferSize / 2); i < signal.length / 2 - 1; i++) {\n x = Math.abs(args.signal[i]) - Math.abs(args.previousSignal[i]);\n sf += (x + Math.abs(x)) / 2;\n }\n\n return sf;\n}\n","import {mu} from './extractorUtilities';\n\nexport default function() {\n if (typeof arguments[0].ampSpectrum !== 'object') {\n throw new TypeError();\n }\n\n var ampspec = arguments[0].ampSpectrum;\n var mu1 = mu(1, ampspec);\n var mu2 = mu(2, ampspec);\n var mu3 = mu(3, ampspec);\n var mu4 = mu(4, ampspec);\n var numerator = -3 * Math.pow(mu1, 4) + 6 * mu1 * mu2 - 4 * mu1 * mu3 + mu4;\n var denominator = Math.pow(Math.sqrt(mu2 - Math.pow(mu1, 2)), 4);\n return numerator / denominator;\n}\n","export default function() {\n if (typeof arguments[0].ampSpectrum !== 'object') {\n throw new TypeError();\n }\n\n var ampspec = arguments[0].ampSpectrum;\n\n //calculate nyquist bin\n var nyqBin = arguments[0].sampleRate / (2 * (ampspec.length - 1));\n var ec = 0;\n for (var i = 0; i < ampspec.length; i++) {\n ec += ampspec[i];\n }\n\n var threshold = 0.99 * ec;\n var n = ampspec.length - 1;\n while (ec > threshold && n >= 0) {\n ec -= ampspec[n];\n --n;\n }\n\n return (n + 1) * nyqBin;\n}\n","import {mu} from './extractorUtilities';\n\nexport default function(args) {\n if (typeof args.ampSpectrum !== 'object') {\n throw new TypeError();\n }\n\n var mu1 = mu(1, args.ampSpectrum);\n var mu2 = mu(2, args.ampSpectrum);\n var mu3 = mu(3, args.ampSpectrum);\n var numerator = 2 * Math.pow(mu1, 3) - 3 * mu1 * mu2 + mu3;\n var denominator = Math.pow(Math.sqrt(mu2 - Math.pow(mu1, 2)), 3);\n return numerator / denominator;\n}\n","export default function(args) {\n if (typeof args.ampSpectrum !== 'object') {\n throw new TypeError();\n }\n\n //linear regression\n let ampSum = 0;\n let freqSum = 0;\n let freqs = new Float32Array(args.ampSpectrum.length);\n let powFreqSum = 0;\n let ampFreqSum = 0;\n\n for (var i = 0; i < args.ampSpectrum.length; i++) {\n ampSum += args.ampSpectrum[i];\n let curFreq = i * args.sampleRate / args.bufferSize;\n freqs[i] = curFreq;\n powFreqSum += curFreq * curFreq;\n freqSum += curFreq;\n ampFreqSum += curFreq * args.ampSpectrum[i];\n }\n\n return (args.ampSpectrum.length * ampFreqSum - freqSum * ampSum) / (ampSum * (\n powFreqSum - Math.pow(freqSum, 2)));\n}\n","import {mu} from './extractorUtilities';\n\nexport default function(args) {\n if (typeof args.ampSpectrum !== 'object') {\n throw new TypeError();\n }\n\n return Math.sqrt(mu(2, args.ampSpectrum) -\n Math.pow(mu(1, args.ampSpectrum), 2));\n}\n","export default function() {\n if (typeof arguments[0].signal !== 'object') {\n throw new TypeError();\n }\n\n var zcr = 0;\n for (var i = 1; i < arguments[0].signal.length; i++) {\n if ((arguments[0].signal[i-1] >= 0 && arguments[0].signal[i] < 0) ||\n (arguments[0].signal[i-1] < 0 && arguments[0].signal[i] >= 0)) {\n zcr++;\n }\n }\n\n return zcr;\n}\n","import rms from './extractors/rms';\nimport energy from './extractors/energy';\nimport spectralSlope from './extractors/spectralSlope';\nimport spectralCentroid from './extractors/spectralCentroid';\nimport spectralRolloff from './extractors/spectralRolloff';\nimport spectralFlatness from './extractors/spectralFlatness';\nimport spectralSpread from './extractors/spectralSpread';\nimport spectralSkewness from './extractors/spectralSkewness';\nimport spectralKurtosis from './extractors/spectralKurtosis';\nimport zcr from './extractors/zcr';\nimport loudness from './extractors/loudness';\nimport perceptualSpread from './extractors/perceptualSpread';\nimport perceptualSharpness from './extractors/perceptualSharpness';\nimport mfcc from './extractors/mfcc';\nimport chroma from './extractors/chroma';\nimport powerSpectrum from './extractors/powerSpectrum';\nimport spectralFlux from './extractors/spectralFlux';\n\nlet buffer = function(args) {\n return args.signal;\n};\n\nlet complexSpectrum = function (args) {\n return args.complexSpectrum;\n};\n\nlet amplitudeSpectrum = function (args) {\n return args.ampSpectrum;\n};\n\nexport {\n buffer,\n rms,\n energy,\n complexSpectrum,\n\n spectralSlope,\n spectralCentroid,\n spectralRolloff,\n spectralFlatness,\n spectralSpread,\n spectralSkewness,\n spectralKurtosis,\n amplitudeSpectrum,\n\n zcr,\n loudness,\n perceptualSpread,\n perceptualSharpness,\n powerSpectrum,\n mfcc,\n chroma,\n spectralFlux\n};\n","module.exports = require('./main').default;","import * as utilities from './utilities';\nimport * as extractors from './featureExtractors';\nimport {fft, ifft} from 'fftjs';\nimport {MeydaAnalyzer} from './meyda-wa';\n\n/**\n * Meyda Module\n * @module meyda\n */\n\n/**\n * Options for constructing a MeydaAnalyzer\n * @typedef {Object} MeydaOptions\n * @property {AudioContext} audioContext - The Audio Context for the MeydaAnalyzer to operate in.\n * @property {AudioNode} source - The Audio Node for Meyda to listen to.\n * @property {number} [bufferSize] - The size of the buffer.\n * @property {number} [hopSize] - The hop size between buffers.\n * @property {number} [sampleRate] - The number of samples per second in the audio context.\n * @property {Function} [callback] - A function to receive the frames of audio features\n * @property {string} [windowingFunction] - The Windowing Function to apply to the signal before transformation to the frequency domain\n * @property {string|Array.} [featureExtractors] - Specify the feature extractors you want to run on the audio.\n * @property {boolean} [startImmediately] - Pass `true` to start feature extraction immediately\n * @property {number} [numberOfMFCCCoefficients] - The number of MFCC co-efficients that the MFCC feature extractor should return\n */\n\n /**\n * Web Audio context\n * Either an {@link AudioContext|https://developer.mozilla.org/en-US/docs/Web/API/AudioContext}\n * or an {@link OfflineAudioContext|https://developer.mozilla.org/en-US/docs/Web/API/OfflineAudioContext}\n * @typedef {Object} AudioContext\n */\n\n/**\n * AudioNode\n * A Web AudioNode\n * @typedef {Object} AudioNode\n */\n\n/**\n * ScriptProcessorNode\n * A Web Audio ScriptProcessorNode\n * @typedef {Object} ScriptProcessorNode\n */\n\n/**\n * @class Meyda\n * @hideconstructor\n * @classdesc\n * The schema for the default export of the Meyda library.\n * @example\n * var Meyda = require('meyda');\n */\nvar Meyda = {\n /**\n * Meyda stores a reference to the relevant audio context here for use inside\n * the Web Audio API.\n * @instance\n * @member {AudioContext}\n */\n audioContext: null,\n /**\n * Meyda keeps an internal ScriptProcessorNode in which it runs audio feature\n * extraction. The ScriptProcessorNode is stored in this member variable.\n * @instance\n * @member {ScriptProcessorNode}\n */\n spn: null,\n /**\n * The length of each buffer that Meyda will extract audio on. When recieving\n * input via the Web Audio API, the Script Processor Node chunks incoming audio\n * into arrays of this length. Longer buffers allow for more precision in the\n * frequency domain, but increase the amount of time it takes for Meyda to\n * output a set of audio features for the buffer. You can calculate how many\n * sets of audio features Meyda will output per second by dividing the\n * buffer size by the sample rate. If you're using Meyda for visualisation,\n * make sure that you're collecting audio features at a rate that's faster\n * than or equal to the video frame rate you expect.\n * @instance\n * @member {number}\n */\n bufferSize: 512,\n /**\n * The number of samples per second of the incoming audio. This affects\n * feature extraction outside of the context of the Web Audio API, and must be\n * set accurately - otherwise calculations will be off.\n * @instance\n * @member {number}\n */\n sampleRate: 44100,\n /**\n * The number of Mel bands to use in the Mel Frequency Cepstral Co-efficients\n * feature extractor\n * @instance\n * @member {number}\n */\n melBands: 26,\n /**\n * The number of bands to divide the spectrum into for the Chroma feature\n * extractor. 12 is the standard number of semitones per octave in the western\n * music tradition, but Meyda can use an arbitrary number of bands, which\n * can be useful for microtonal music.\n * @instance\n * @member {number}\n */\n chromaBands: 12,\n /**\n * A function you can provide that will be called for each buffer that Meyda\n * receives from its source node\n * @instance\n * @member {Function}\n */\n callback: null,\n /**\n * Specify the windowing function to apply to the buffer before the\n * transformation from the time domain to the frequency domain is performed\n *\n * The default windowing function is the hanning window.\n *\n * @instance\n * @member {string}\n */\n windowingFunction: 'hanning',\n /**\n * @member {object}\n */\n featureExtractors: extractors,\n EXTRACTION_STARTED: false,\n /**\n * The number of MFCC co-efficients that the MFCC feature extractor should return\n * @instance\n * @member {number}\n */\n numberOfMFCCCoefficients: 13,\n _featuresToExtract: [],\n windowing: utilities.applyWindow,\n _errors: {\n notPow2: new Error(\n 'Meyda: Buffer size must be a power of 2, e.g. 64 or 512'),\n featureUndef: new Error('Meyda: No features defined.'),\n invalidFeatureFmt: new Error('Meyda: Invalid feature format'),\n invalidInput: new Error('Meyda: Invalid input.'),\n noAC: new Error('Meyda: No AudioContext specified.'),\n noSource: new Error('Meyda: No source node specified.'),\n },\n\n /**\n * @summary\n * Create a MeydaAnalyzer\n *\n * A factory function for creating a MeydaAnalyzer, the interface for using\n * Meyda in the context of Web Audio.\n *\n * @method\n * @param {MeydaOptions} options Options - an object containing configuration\n * @returns {MeydaAnalyzer}\n * @example\n * const analyzer = Meyda.createMeydaAnalyzer({\n * \"audioContext\": audioContext,\n * \"source\": source,\n * \"bufferSize\": 512,\n * \"featureExtractors\": [\"rms\"],\n * \"inputs\": 2,\n * \"callback\": features => {\n * levelRangeElement.value = features.rms;\n * }\n * });\n */\n createMeydaAnalyzer: function (options) {\n return new MeydaAnalyzer(options, Object.assign({}, Meyda));\n },\n\n /**\n * Extract an audio feature from a buffer\n *\n * Unless `meyda.windowingFunction` is set otherwise, `extract` will\n * internally apply a hanning window to the buffer prior to conversion into\n * the frequency domain.\n *\n * @function\n * @param {(string|Array.)} feature - the feature you want to extract\n * @param {Array.} signal\n * An array of numbers that represents the signal. It should be of length\n * `meyda.bufferSize`\n * @param {Array.} [previousSignal] - the previous buffer\n * @returns {object} Features\n * @example\n * meyda.bufferSize = 2048;\n * const features = meyda.extract(['zcr', 'spectralCentroid'], signal);\n */\n extract: function (feature, signal, previousSignal) {\n if (!signal)\n throw this._errors.invalidInput;\n else if (typeof signal != 'object')\n throw this._errors.invalidInput;\n else if (!feature)\n throw this._errors.featureUndef;\n else if (!utilities.isPowerOfTwo(signal.length))\n throw this._errors.notPow2;\n\n if (typeof this.barkScale == 'undefined' ||\n this.barkScale.length != this.bufferSize) {\n this.barkScale = utilities.createBarkScale(\n this.bufferSize,\n this.sampleRate,\n this.bufferSize\n );\n }\n\n // Recalculate mel bank if buffer length changed\n if (typeof this.melFilterBank == 'undefined' ||\n this.barkScale.length != this.bufferSize ||\n this.melFilterBank.length != this.melBands) {\n this.melFilterBank = utilities.createMelFilterBank(\n Math.max(this.melBands, this.numberOfMFCCCoefficients),\n this.sampleRate,\n this.bufferSize);\n }\n\n // Recalculate chroma bank if buffer length changed\n if (typeof this.chromaFilterBank == 'undefined' ||\n this.chromaFilterBank.length != this.chromaBands) {\n this.chromaFilterBank = utilities.createChromaFilterBank(\n this.chromaBands,\n this.sampleRate,\n this.bufferSize);\n }\n\n if (typeof signal.buffer == 'undefined') {\n //signal is a normal array, convert to F32A\n this.signal = utilities.arrayToTyped(signal);\n } else {\n this.signal = signal;\n }\n\n let preparedSignal = prepareSignalWithSpectrum(\n signal,\n this.windowingFunction,\n this.bufferSize);\n\n this.signal = preparedSignal.windowedSignal;\n this.complexSpectrum = preparedSignal.complexSpectrum;\n this.ampSpectrum = preparedSignal.ampSpectrum;\n\n if (previousSignal) {\n let preparedSignal = prepareSignalWithSpectrum(previousSignal,\n this.windowingFunction,\n this.bufferSize);\n\n this.previousSignal = preparedSignal.windowedSignal;\n this.previousComplexSpectrum = preparedSignal.complexSpectrum;\n this.previousAmpSpectrum = preparedSignal.ampSpectrum;\n }\n\n const extract = (feature) => {\n return this.featureExtractors[feature]({\n ampSpectrum:this.ampSpectrum,\n chromaFilterBank: this.chromaFilterBank,\n complexSpectrum:this.complexSpectrum,\n signal:this.signal,\n bufferSize:this.bufferSize,\n sampleRate:this.sampleRate,\n barkScale:this.barkScale,\n melFilterBank:this.melFilterBank,\n previousSignal:this.previousSignal,\n previousAmpSpectrum:this.previousAmpSpectrum,\n previousComplexSpectrum:this.previousComplexSpectrum,\n numberOfMFCCCoefficients:this.numberOfMFCCCoefficients,\n });\n };\n\n if (typeof feature === 'object') {\n return feature.reduce((acc, el) =>\n Object.assign({}, acc, {\n [el]: extract(el),\n }), {});\n } else if (typeof feature === 'string') {\n return extract(feature);\n } else {\n throw this._errors.invalidFeatureFmt;\n }\n },\n};\n\nvar prepareSignalWithSpectrum = function (signal,\n windowingFunction,\n bufferSize) {\n var preparedSignal = {};\n\n if (typeof signal.buffer == 'undefined') {\n //signal is a normal array, convert to F32A\n preparedSignal.signal = utilities.arrayToTyped(signal);\n } else {\n preparedSignal.signal = signal;\n }\n\n preparedSignal.windowedSignal = utilities.applyWindow(\n preparedSignal.signal,\n windowingFunction);\n\n preparedSignal.complexSpectrum = fft(preparedSignal.windowedSignal);\n preparedSignal.ampSpectrum = new Float32Array(bufferSize / 2);\n for (var i = 0; i < bufferSize / 2; i++) {\n preparedSignal.ampSpectrum[i] = Math.sqrt(\n Math.pow(preparedSignal.complexSpectrum.real[i], 2) +\n Math.pow(preparedSignal.complexSpectrum.imag[i], 2));\n }\n\n return preparedSignal;\n};\n\n/**\n * The Meyda class\n * @type {Meyda}\n */\nexport default Meyda;\n\nif (typeof window !== 'undefined') window.Meyda = Meyda;\n","import * as utilities from './utilities';\nimport * as featureExtractors from './featureExtractors';\n\n/**\n * MeydaAnalyzer\n * @classdesc\n * Meyda's interface to the Web Audio API. MeydaAnalyzer abstracts an API on\n * top of the Web Audio API's ScriptProcessorNode, running the Meyda audio\n * feature extractors inside that context.\n *\n * MeydaAnalyzer's constructor should not be called directly - MeydaAnalyzer\n * objects should be generated using the {@link Meyda.createMeydaAnalyzer}\n * factory function in the main Meyda class.\n *\n * @example\n * const analyzer = Meyda.createMeydaAnalyzer({\n * \"audioContext\": audioContext,\n * \"source\": source,\n * \"bufferSize\": 512,\n * \"featureExtractors\": [\"rms\"],\n * \"inputs\": 2,\n * \"numberOfMFCCCoefficients\": 20\n * \"callback\": features => {\n * levelRangeElement.value = features.rms;\n * }\n * });\n * @hideconstructor\n */\nexport class MeydaAnalyzer {\n constructor(options, _this) {\n this._m = _this;\n if (!options.audioContext) {\n throw this._m.errors.noAC;\n }\n else if (options.bufferSize &&\n !utilities.isPowerOfTwo(options.bufferSize)) {\n throw this._m._errors.notPow2;\n }\n else if (!options.source) {\n throw this._m._errors.noSource;\n }\n\n this._m.audioContext = options.audioContext;\n\n // TODO: validate options\n this._m.bufferSize = options.bufferSize || this._m.bufferSize || 256;\n this._m.hopSize = options.hopSize || this._m.hopSize || this._m.bufferSize;\n this._m.sampleRate = options.sampleRate\n || this._m.audioContext.sampleRate || 44100;\n this._m.callback = options.callback;\n this._m.windowingFunction = options.windowingFunction || 'hanning';\n this._m.featureExtractors = featureExtractors;\n this._m.EXTRACTION_STARTED = options.startImmediately || false;\n this._m.channel = typeof options.channel === 'number' ? options.channel : 0;\n this._m.inputs = options.inputs || 1;\n this._m.outputs = options.outputs || 1;\n this._m.numberOfMFCCCoefficients = options.numberOfMFCCCoefficients || this._m.numberOfMFCCCoefficients || 13;\n\n //create nodes\n this._m.spn = this._m.audioContext.createScriptProcessor(\n this._m.bufferSize,\n this._m.inputs,\n this._m.outputs);\n this._m.spn.connect(this._m.audioContext.destination);\n\n this._m._featuresToExtract = options.featureExtractors || [];\n\n //always recalculate BS and MFB when a new Meyda analyzer is created.\n this._m.barkScale = utilities.createBarkScale(\n this._m.bufferSize,\n this._m.sampleRate,\n this._m.bufferSize);\n this._m.melFilterBank = utilities.createMelFilterBank(\n Math.max(this._m.melBands, this._m.numberOfMFCCCoefficients),\n this._m.sampleRate,\n this._m.bufferSize);\n\n this._m.inputData = null;\n this._m.previousInputData = null;\n\n this._m.frame = null;\n this._m.previousFrame = null;\n\n this.setSource(options.source);\n\n this._m.spn.onaudioprocess = (e)=> {\n if (this._m.inputData !== null) {\n this._m.previousInputData = this._m.inputData;\n }\n\n this._m.inputData = e.inputBuffer.getChannelData(this._m.channel);\n\n if (!this._m.previousInputData) {\n var buffer = this._m.inputData;\n } else {\n var buffer = new Float32Array(this._m.previousInputData.length + this._m.inputData.length - this._m.hopSize);\n buffer.set(this._m.previousInputData.slice(this._m.hopSize));\n buffer.set(this._m.inputData, this._m.previousInputData.length - this._m.hopSize);\n };\n\n var frames = utilities.frame(buffer, this._m.bufferSize, this._m.hopSize);\n\n frames.forEach(f => {\n this._m.frame = f;\n\n var features = this._m.extract(\n this._m._featuresToExtract,\n this._m.frame,\n this._m.previousFrame);\n\n // call callback if applicable\n if (typeof this._m.callback === 'function' && this._m.EXTRACTION_STARTED) {\n this._m.callback(features);\n }\n\n this._m.previousFrame = this._m.frame;\n });\n };\n }\n\n /**\n * Start feature extraction\n * The audio features will be passed to the callback function that was defined\n * in the MeydaOptions that were passed to the factory when constructing the\n * MeydaAnalyzer.\n * @param {(string|Array.)} [features]\n * Change the features that Meyda is extracting. Defaults to the features that\n * were set upon construction in the options parameter.\n * @example\n * analyzer.start('chroma');\n */\n start(features) {\n this._m._featuresToExtract = features || this._m._featuresToExtract;\n this._m.EXTRACTION_STARTED = true;\n }\n\n /**\n * Stop feature extraction.\n * @example\n * analyzer.stop();\n */\n stop() {\n this._m.EXTRACTION_STARTED = false;\n }\n\n /**\n * Set the Audio Node for Meyda to listen to.\n * @param {AudioNode} source - The Audio Node for Meyda to listen to\n * @example\n * analyzer.setSource(audioSourceNode);\n */\n setSource(source) {\n this._m.source && this._m.source.disconnect(this._m.spn);\n this._m.source = source;\n this._m.source.connect(this._m.spn);\n }\n\n /**\n * Set the channel of the audio node for Meyda to listen to\n * @param {number} channel - the index of the channel on the input audio node\n * for Meyda to listen to.\n * @example\n * analyzer.setChannel(0);\n */\n setChannel(channel) {\n if (channel <= this._m.inputs) {\n this._m.channel = channel;\n } else {\n console.error(`Channel ${channel} does not exist. Make sure you've provided a value for 'inputs' that is greater than ${channel} when instantiating the MeydaAnalyzer`);\n }\n }\n\n /**\n * Get a set of features from the current frame.\n * @param {(string|Array.)} [features]\n * Change the features that Meyda is extracting\n * @example\n * analyzer.get('spectralFlatness');\n */\n get(features) {\n if (this._m.inputData) {\n return this._m.extract(\n (features || this._m._featuresToExtract),\n this._m.inputData,\n this._m.previousInputData);\n } else {\n return null;\n }\n }\n}\n","import * as windowing from './windowing';\n\nlet windows = {};\n\nexport function isPowerOfTwo(num) {\n while (((num % 2) === 0) && num > 1) {\n num /= 2;\n }\n\n return (num === 1);\n}\n\nexport function error(message) {\n throw new Error('Meyda: ' + message);\n}\n\nexport function pointwiseBufferMult(a, b) {\n let c = [];\n for (let i = 0; i < Math.min(a.length, b.length); i++) {\n c[i] = a[i] * b[i];\n }\n\n return c;\n}\n\nexport function applyWindow(signal, windowname) {\n if (windowname !== 'rect') {\n if (windowname === '' || !windowname) windowname = 'hanning';\n if (!windows[windowname]) windows[windowname] = {};\n\n if (!windows[windowname][signal.length]) {\n try {\n windows[windowname][signal.length] = windowing[windowname](\n signal.length\n );\n }\n catch (e) {\n throw new Error('Invalid windowing function');\n }\n }\n\n signal = pointwiseBufferMult(signal, windows[windowname][signal.length]);\n }\n\n return signal;\n}\n\nexport function createBarkScale(length, sampleRate, bufferSize) {\n let barkScale = new Float32Array(length);\n\n for (var i = 0; i < barkScale.length; i++) {\n barkScale[i] = i * sampleRate / (bufferSize);\n barkScale[i] = 13 * Math.atan(barkScale[i] / 1315.8) +\n 3.5 * Math.atan(Math.pow((barkScale[i] / 7518), 2));\n }\n\n return barkScale;\n}\n\nexport function typedToArray(t) {\n // utility to convert typed arrays to normal arrays\n return Array.prototype.slice.call(t);\n}\n\nexport function arrayToTyped(t) {\n // utility to convert arrays to typed F32 arrays\n return Float32Array.from(t);\n}\n\nexport function _normalize(num, range) {\n return num / range;\n}\n\nexport function normalize(a, range) {\n return a.map(function (n) { return _normalize(n, range); });\n}\n\nexport function normalizeToOne(a) {\n var max = Math.max.apply(null, a);\n\n return a.map(function (n) {\n return n / max;\n });\n}\n\nexport function mean(a) {\n return a.reduce(function (prev, cur) { return prev + cur; }) / a.length;\n}\n\nfunction _melToFreq(melValue) {\n var freqValue = 700 * (Math.exp(melValue / 1125) - 1);\n return freqValue;\n}\n\nfunction _freqToMel(freqValue) {\n var melValue = 1125 * Math.log(1 + (freqValue / 700));\n return melValue;\n}\n\nexport function melToFreq(mV) { return _melToFreq(mV); }\n\nexport function freqToMel(fV) { return _freqToMel(fV); }\n\nexport function createMelFilterBank(numFilters, sampleRate, bufferSize) {\n //the +2 is the upper and lower limits\n let melValues = new Float32Array(numFilters + 2);\n let melValuesInFreq = new Float32Array(numFilters + 2);\n\n //Generate limits in Hz - from 0 to the nyquist.\n let lowerLimitFreq = 0;\n let upperLimitFreq = sampleRate / 2;\n\n //Convert the limits to Mel\n let lowerLimitMel = _freqToMel(lowerLimitFreq);\n let upperLimitMel = _freqToMel(upperLimitFreq);\n\n //Find the range\n let range = upperLimitMel - lowerLimitMel;\n\n //Find the range as part of the linear interpolation\n let valueToAdd = range / (numFilters + 1);\n\n let fftBinsOfFreq = Array(numFilters + 2);\n\n for (let i = 0; i < melValues.length; i++) {\n // Initialising the mel frequencies\n // They're a linear interpolation between the lower and upper limits.\n melValues[i] = i * valueToAdd;\n\n // Convert back to Hz\n melValuesInFreq[i] = _melToFreq(melValues[i]);\n\n // Find the corresponding bins\n fftBinsOfFreq[i] = Math.floor((bufferSize + 1) *\n melValuesInFreq[i] / sampleRate);\n }\n\n var filterBank = Array(numFilters);\n for (let j = 0; j < filterBank.length; j++) {\n // Create a two dimensional array of size numFilters * (buffersize/2)+1\n // pre-populating the arrays with 0s.\n filterBank[j] = Array.apply(\n null,\n new Array((bufferSize / 2) + 1)).map(Number.prototype.valueOf, 0);\n\n //creating the lower and upper slopes for each bin\n for (let i = fftBinsOfFreq[j]; i < fftBinsOfFreq[j + 1]; i++) {\n filterBank[j][i] = (i - fftBinsOfFreq[j]) /\n (fftBinsOfFreq[j + 1] - fftBinsOfFreq[j]);\n }\n\n for (let i = fftBinsOfFreq[j + 1]; i < fftBinsOfFreq[j + 2]; i++) {\n filterBank[j][i] = (fftBinsOfFreq[j + 2] - i) /\n (fftBinsOfFreq[j + 2] - fftBinsOfFreq[j + 1]);\n }\n }\n\n return filterBank;\n}\n\nexport function hzToOctaves(freq, A440) {\n return Math.log2(16 * freq / A440);\n}\n\nexport function normalizeByColumn (a) {\n var emptyRow = a[0].map(() => 0);\n var colDenominators = a.reduce((acc, row) => {\n row.forEach((cell, j) => {\n acc[j] += Math.pow(cell, 2);\n });\n return acc;\n }, emptyRow).map(Math.sqrt);\n return a.map((row, i) => row.map((v, j) => v / (colDenominators[j] || 1) ));\n};\n\nexport function createChromaFilterBank(numFilters, sampleRate, bufferSize, centerOctave=5, octaveWidth=2, baseC=true, A440=440) {\n var numOutputBins = Math.floor(bufferSize / 2) + 1;\n\n\n var frequencyBins = new Array(bufferSize).fill(0)\n .map((_, i) => numFilters * hzToOctaves(sampleRate * i / bufferSize, A440));\n\n // Set a value for the 0 Hz bin that is 1.5 octaves below bin 1\n // (so chroma is 50% rotated from bin 1, and bin width is broad)\n frequencyBins[0] = frequencyBins[1] - 1.5 * numFilters;\n\n var binWidthBins = frequencyBins\n .slice(1)\n .map((v, i) => Math.max(v - frequencyBins[i]), 1)\n .concat([1]);\n\n var halfNumFilters = Math.round(numFilters / 2);\n\n var filterPeaks = new Array(numFilters).fill(0)\n .map((_, i) => frequencyBins.map(frq =>\n ((10 * numFilters + halfNumFilters + frq - i) % numFilters) - halfNumFilters\n ));\n\n var weights = filterPeaks.map((row, i) => row.map((_, j) => (\n Math.exp(-0.5 * Math.pow(2 * filterPeaks[i][j] / binWidthBins[j], 2))\n )));\n\n weights = normalizeByColumn(weights);\n\n if (octaveWidth) {\n var octaveWeights = frequencyBins.map(v =>\n Math.exp(-0.5 * Math.pow((v / numFilters - centerOctave) / octaveWidth, 2))\n );\n weights = weights.map(row => row.map((cell, j) => cell * octaveWeights[j]));\n }\n\n if (baseC) {\n weights = [...weights.slice(3), ...weights.slice(0, 3)];\n }\n\n return weights.map(row => row.slice(0, numOutputBins));\n}\n\nexport function frame(buffer, frameLength, hopLength) {\n if (buffer.length < frameLength) {\n throw new Error('Buffer is too short for frame length');\n }\n if (hopLength < 1) {\n throw new Error('Hop length cannot be less that 1');\n }\n if (frameLength < 1) {\n throw new Error('Frame length cannot be less that 1');\n }\n\n const numFrames = 1 + Math.floor((buffer.length - frameLength) / hopLength);\n\n return new Array(numFrames).fill(0).map((_, i) =>\n buffer.slice(i * hopLength, (i * hopLength) + frameLength));\n}\n","export function blackman(size) {\n let blackmanBuffer = new Float32Array(size);\n let coeff1 = 2 * Math.PI / (size - 1);\n let coeff2 = 2 * coeff1;\n\n //According to http://uk.mathworks.com/help/signal/ref/blackman.html\n //first half of the window\n for (let i = 0; i < size / 2; i++) {\n blackmanBuffer[i] = 0.42 - 0.5 * Math.cos(i * coeff1) +\n 0.08 * Math.cos(i * coeff2);\n }\n\n //second half of the window\n for (let i = size / 2; i > 0; i--) {\n blackmanBuffer[size - i] = blackmanBuffer[i - 1];\n }\n\n return blackmanBuffer;\n}\n\nexport function sine(size) {\n let coeff = Math.PI / (size - 1);\n let sineBuffer = new Float32Array(size);\n\n for (let i = 0; i < size; i++) {\n sineBuffer[i] = Math.sin(coeff * i);\n }\n\n return sineBuffer;\n}\n\nexport function hanning(size) {\n let hanningBuffer = new Float32Array(size);\n for (let i = 0; i < size; i++) {\n // According to the R documentation\n // http://ugrad.stat.ubc.ca/R/library/e1071/html/hanning.window.html\n hanningBuffer[i] = 0.5 - 0.5 * Math.cos(2 * Math.PI * i / (size - 1));\n }\n\n return hanningBuffer;\n}\n\nexport function hamming(size) {\n let hammingBuffer = new Float32Array(size);\n for (let i = 0; i < size; i++) {\n //According to http://uk.mathworks.com/help/signal/ref/hamming.html\n hammingBuffer[i] = 0.54 - 0.46 * Math.cos(2 * Math.PI * (i / size - 1));\n }\n\n return hammingBuffer;\n}\n"],"sourceRoot":""}