wavesurfer.js 6.4.0 → 6.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +1 -1
- package/README.md +36 -48
- package/dist/plugin/wavesurfer.cursor.js +19 -8
- package/dist/plugin/wavesurfer.cursor.js.map +1 -1
- package/dist/plugin/wavesurfer.cursor.min.js +2 -2
- package/dist/plugin/wavesurfer.cursor.min.js.map +1 -1
- package/dist/plugin/wavesurfer.elan.js +6 -3
- package/dist/plugin/wavesurfer.elan.js.map +1 -1
- package/dist/plugin/wavesurfer.elan.min.js +2 -2
- package/dist/plugin/wavesurfer.elan.min.js.map +1 -1
- package/dist/plugin/wavesurfer.markers.js +6 -3
- package/dist/plugin/wavesurfer.markers.js.map +1 -1
- package/dist/plugin/wavesurfer.markers.min.js +2 -2
- package/dist/plugin/wavesurfer.markers.min.js.map +1 -1
- package/dist/plugin/wavesurfer.mediasession.js +4 -2
- package/dist/plugin/wavesurfer.mediasession.js.map +1 -1
- package/dist/plugin/wavesurfer.mediasession.min.js +2 -2
- package/dist/plugin/wavesurfer.mediasession.min.js.map +1 -1
- package/dist/plugin/wavesurfer.microphone.js +5 -2
- package/dist/plugin/wavesurfer.microphone.js.map +1 -1
- package/dist/plugin/wavesurfer.microphone.min.js +2 -2
- package/dist/plugin/wavesurfer.microphone.min.js.map +1 -1
- package/dist/plugin/wavesurfer.minimap.js +5 -2
- package/dist/plugin/wavesurfer.minimap.js.map +1 -1
- package/dist/plugin/wavesurfer.minimap.min.js +2 -2
- package/dist/plugin/wavesurfer.minimap.min.js.map +1 -1
- package/dist/plugin/wavesurfer.playhead.js +5 -2
- package/dist/plugin/wavesurfer.playhead.js.map +1 -1
- package/dist/plugin/wavesurfer.playhead.min.js +2 -2
- package/dist/plugin/wavesurfer.playhead.min.js.map +1 -1
- package/dist/plugin/wavesurfer.regions.js +106 -9
- package/dist/plugin/wavesurfer.regions.js.map +1 -1
- package/dist/plugin/wavesurfer.regions.min.js +2 -2
- package/dist/plugin/wavesurfer.regions.min.js.map +1 -1
- package/dist/plugin/wavesurfer.spectrogram.js +5 -2
- package/dist/plugin/wavesurfer.spectrogram.js.map +1 -1
- package/dist/plugin/wavesurfer.spectrogram.min.js +2 -2
- package/dist/plugin/wavesurfer.spectrogram.min.js.map +1 -1
- package/dist/plugin/wavesurfer.timeline.js +13 -5
- package/dist/plugin/wavesurfer.timeline.js.map +1 -1
- package/dist/plugin/wavesurfer.timeline.min.js +2 -2
- package/dist/plugin/wavesurfer.timeline.min.js.map +1 -1
- package/dist/wavesurfer-html-init.js +4 -2
- package/dist/wavesurfer-html-init.js.map +1 -1
- package/dist/wavesurfer-html-init.min.js +2 -2
- package/dist/wavesurfer-html-init.min.js.map +1 -1
- package/dist/wavesurfer.js +77 -27
- package/dist/wavesurfer.js.map +1 -1
- package/dist/wavesurfer.min.js +2 -2
- package/dist/wavesurfer.min.js.map +1 -1
- package/package.json +8 -8
- package/src/mediaelement.js +3 -0
- package/src/plugin/cursor/index.js +1 -1
- package/src/plugin/markers/index.js +1 -1
- package/src/plugin/regions/index.js +4 -0
- package/src/plugin/regions/region.js +76 -1
- package/src/util/silence-mode.js +7 -0
- package/src/wavesurfer.js +4 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wavesurfer.spectrogram.js","mappings":"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","sources":["webpack://WaveSurfer/webpack/universalModuleDefinition","webpack://WaveSurfer/./src/plugin/spectrogram/fft.js","webpack://WaveSurfer/./src/plugin/spectrogram/index.js","webpack://WaveSurfer/webpack/bootstrap","webpack://WaveSurfer/webpack/before-startup","webpack://WaveSurfer/webpack/startup","webpack://WaveSurfer/webpack/after-startup"],"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(\"WaveSurfer\", [], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"WaveSurfer\"] = factory();\n\telse\n\t\troot[\"WaveSurfer\"] = root[\"WaveSurfer\"] || {}, root[\"WaveSurfer\"][\"spectrogram\"] = factory();\n})(self, () => {\nreturn ","/* eslint-disable complexity, no-redeclare, no-var, one-var */\n\n/**\n * Calculate FFT - Based on https://github.com/corbanbrook/dsp.js\n *\n * @param {Number} bufferSize Buffer size\n * @param {Number} sampleRate Sample rate\n * @param {Function} windowFunc Window function\n * @param {Number} alpha Alpha channel\n */\nexport default function FFT(bufferSize, sampleRate, windowFunc, alpha) {\n this.bufferSize = bufferSize;\n this.sampleRate = sampleRate;\n this.bandwidth = (2 / bufferSize) * (sampleRate / 2);\n\n this.sinTable = new Float32Array(bufferSize);\n this.cosTable = new Float32Array(bufferSize);\n this.windowValues = new Float32Array(bufferSize);\n this.reverseTable = new Uint32Array(bufferSize);\n\n this.peakBand = 0;\n this.peak = 0;\n\n var i;\n switch (windowFunc) {\n case 'bartlett':\n for (i = 0; i < bufferSize; i++) {\n this.windowValues[i] =\n (2 / (bufferSize - 1)) *\n ((bufferSize - 1) / 2 - Math.abs(i - (bufferSize - 1) / 2));\n }\n break;\n case 'bartlettHann':\n for (i = 0; i < bufferSize; i++) {\n this.windowValues[i] =\n 0.62 -\n 0.48 * Math.abs(i / (bufferSize - 1) - 0.5) -\n 0.38 * Math.cos((Math.PI * 2 * i) / (bufferSize - 1));\n }\n break;\n case 'blackman':\n alpha = alpha || 0.16;\n for (i = 0; i < bufferSize; i++) {\n this.windowValues[i] =\n (1 - alpha) / 2 -\n 0.5 * Math.cos((Math.PI * 2 * i) / (bufferSize - 1)) +\n (alpha / 2) *\n Math.cos((4 * Math.PI * i) / (bufferSize - 1));\n }\n break;\n case 'cosine':\n for (i = 0; i < bufferSize; i++) {\n this.windowValues[i] = Math.cos(\n (Math.PI * i) / (bufferSize - 1) - Math.PI / 2\n );\n }\n break;\n case 'gauss':\n alpha = alpha || 0.25;\n for (i = 0; i < bufferSize; i++) {\n this.windowValues[i] = Math.pow(\n Math.E,\n -0.5 *\n Math.pow(\n (i - (bufferSize - 1) / 2) /\n ((alpha * (bufferSize - 1)) / 2),\n 2\n )\n );\n }\n break;\n case 'hamming':\n for (i = 0; i < bufferSize; i++) {\n this.windowValues[i] =\n 0.54 -\n 0.46 * Math.cos((Math.PI * 2 * i) / (bufferSize - 1));\n }\n break;\n case 'hann':\n case undefined:\n for (i = 0; i < bufferSize; i++) {\n this.windowValues[i] =\n 0.5 * (1 - Math.cos((Math.PI * 2 * i) / (bufferSize - 1)));\n }\n break;\n case 'lanczoz':\n for (i = 0; i < bufferSize; i++) {\n this.windowValues[i] =\n Math.sin(Math.PI * ((2 * i) / (bufferSize - 1) - 1)) /\n (Math.PI * ((2 * i) / (bufferSize - 1) - 1));\n }\n break;\n case 'rectangular':\n for (i = 0; i < bufferSize; i++) {\n this.windowValues[i] = 1;\n }\n break;\n case 'triangular':\n for (i = 0; i < bufferSize; i++) {\n this.windowValues[i] =\n (2 / bufferSize) *\n (bufferSize / 2 - Math.abs(i - (bufferSize - 1) / 2));\n }\n break;\n default:\n throw Error(\"No such window function '\" + windowFunc + \"'\");\n }\n\n var limit = 1;\n var bit = bufferSize >> 1;\n var i;\n\n while (limit < bufferSize) {\n for (i = 0; i < limit; i++) {\n this.reverseTable[i + limit] = this.reverseTable[i] + bit;\n }\n\n limit = limit << 1;\n bit = bit >> 1;\n }\n\n for (i = 0; i < bufferSize; i++) {\n this.sinTable[i] = Math.sin(-Math.PI / i);\n this.cosTable[i] = Math.cos(-Math.PI / i);\n }\n\n this.calculateSpectrum = function(buffer) {\n // Locally scope variables for speed up\n var bufferSize = this.bufferSize,\n cosTable = this.cosTable,\n sinTable = this.sinTable,\n reverseTable = this.reverseTable,\n real = new Float32Array(bufferSize),\n imag = new Float32Array(bufferSize),\n bSi = 2 / this.bufferSize,\n sqrt = Math.sqrt,\n rval,\n ival,\n mag,\n spectrum = new Float32Array(bufferSize / 2);\n\n var k = Math.floor(Math.log(bufferSize) / Math.LN2);\n\n if (Math.pow(2, k) !== bufferSize) {\n throw 'Invalid buffer size, must be a power of 2.';\n }\n if (bufferSize !== buffer.length) {\n throw 'Supplied buffer is not the same size as defined FFT. FFT Size: ' +\n bufferSize +\n ' Buffer Size: ' +\n buffer.length;\n }\n\n var halfSize = 1,\n phaseShiftStepReal,\n phaseShiftStepImag,\n currentPhaseShiftReal,\n currentPhaseShiftImag,\n off,\n tr,\n ti,\n tmpReal;\n\n for (var i = 0; i < bufferSize; i++) {\n real[i] =\n buffer[reverseTable[i]] * this.windowValues[reverseTable[i]];\n imag[i] = 0;\n }\n\n while (halfSize < bufferSize) {\n phaseShiftStepReal = cosTable[halfSize];\n phaseShiftStepImag = sinTable[halfSize];\n\n currentPhaseShiftReal = 1;\n currentPhaseShiftImag = 0;\n\n for (var fftStep = 0; fftStep < halfSize; fftStep++) {\n var i = fftStep;\n\n while (i < bufferSize) {\n off = i + halfSize;\n tr =\n currentPhaseShiftReal * real[off] -\n currentPhaseShiftImag * imag[off];\n ti =\n currentPhaseShiftReal * imag[off] +\n currentPhaseShiftImag * real[off];\n\n real[off] = real[i] - tr;\n imag[off] = imag[i] - ti;\n real[i] += tr;\n imag[i] += ti;\n\n i += halfSize << 1;\n }\n\n tmpReal = currentPhaseShiftReal;\n currentPhaseShiftReal =\n tmpReal * phaseShiftStepReal -\n currentPhaseShiftImag * phaseShiftStepImag;\n currentPhaseShiftImag =\n tmpReal * phaseShiftStepImag +\n currentPhaseShiftImag * phaseShiftStepReal;\n }\n\n halfSize = halfSize << 1;\n }\n\n for (var i = 0, N = bufferSize / 2; i < N; i++) {\n rval = real[i];\n ival = imag[i];\n mag = bSi * sqrt(rval * rval + ival * ival);\n\n if (mag > this.peak) {\n this.peakBand = i;\n this.peak = mag;\n }\n spectrum[i] = mag;\n }\n return spectrum;\n };\n}\n","/* eslint-enable complexity, no-redeclare, no-var, one-var */\n\nimport FFT from './fft';\n\n/**\n * @typedef {Object} SpectrogramPluginParams\n * @property {string|HTMLElement} container Selector of element or element in\n * which to render\n * @property {number} fftSamples=512 Number of samples to fetch to FFT. Must be\n * a power of 2.\n * @property {boolean} splitChannels=false Render with separate spectrograms for\n * the channels of the audio\n * @property {number} height=fftSamples/2 Height of the spectrogram view in CSS\n * pixels\n * @property {boolean} labels Set to true to display frequency labels.\n * @property {number} noverlap Size of the overlapping window. Must be <\n * fftSamples. Auto deduced from canvas size by default.\n * @property {string} windowFunc='hann' The window function to be used. One of\n * these: `'bartlett'`, `'bartlettHann'`, `'blackman'`, `'cosine'`, `'gauss'`,\n * `'hamming'`, `'hann'`, `'lanczoz'`, `'rectangular'`, `'triangular'`\n * @property {?number} alpha Some window functions have this extra value.\n * (Between 0 and 1)\n * @property {number} pixelRatio=wavesurfer.params.pixelRatio to control the\n * size of the spectrogram in relation with its canvas. 1 = Draw on the whole\n * canvas. 2 = Draw on a quarter (1/2 the length and 1/2 the width)\n * @property {number} frequencyMin=0 Min frequency to scale spectrogram.\n * @property {number} frequencyMax=12000 Max frequency to scale spectrogram.\n * Set this to samplerate/2 to draw whole range of spectrogram.\n * @property {?boolean} deferInit Set to true to manually call\n * `initPlugin('spectrogram')`\n * @property {?number[][]} colorMap A 256 long array of 4-element arrays.\n * Each entry should contain a float between 0 and 1 and specify\n * r, g, b, and alpha.\n */\n\n/**\n * Render a spectrogram visualisation of the audio.\n *\n * @implements {PluginClass}\n * @extends {Observer}\n * @example\n * // es6\n * import SpectrogramPlugin from 'wavesurfer.spectrogram.js';\n *\n * // commonjs\n * var SpectrogramPlugin = require('wavesurfer.spectrogram.js');\n *\n * // if you are using <script> tags\n * var SpectrogramPlugin = window.WaveSurfer.spectrogram;\n *\n * // ... initialising wavesurfer with the plugin\n * var wavesurfer = WaveSurfer.create({\n * // wavesurfer options ...\n * plugins: [\n * SpectrogramPlugin.create({\n * // plugin options ...\n * })\n * ]\n * });\n */\nexport default class SpectrogramPlugin {\n /**\n * Spectrogram plugin definition factory\n *\n * This function must be used to create a plugin definition which can be\n * used by wavesurfer to correctly instantiate the plugin.\n *\n * @param {SpectrogramPluginParams} params Parameters used to initialise the plugin\n * @return {PluginDefinition} An object representing the plugin.\n */\n static create(params) {\n return {\n name: 'spectrogram',\n deferInit: params && params.deferInit ? params.deferInit : false,\n params: params,\n staticProps: {\n FFT: FFT\n },\n instance: SpectrogramPlugin\n };\n }\n\n constructor(params, ws) {\n this.params = params;\n this.wavesurfer = ws;\n this.util = ws.util;\n\n this.frequenciesDataUrl = params.frequenciesDataUrl;\n this._onScroll = e => {\n this.updateScroll(e);\n };\n this._onRender = () => {\n this.render();\n };\n this._onWrapperClick = e => {\n this._wrapperClickHandler(e);\n };\n this._onReady = () => {\n const drawer = (this.drawer = ws.drawer);\n\n this.container =\n 'string' == typeof params.container\n ? document.querySelector(params.container)\n : params.container;\n\n if (!this.container) {\n throw Error('No container for WaveSurfer spectrogram');\n }\n if (params.colorMap) {\n if (params.colorMap.length < 256) {\n throw new Error('Colormap must contain 256 elements');\n }\n for (let i = 0; i < params.colorMap.length; i++) {\n const cmEntry = params.colorMap[i];\n if (cmEntry.length !== 4) {\n throw new Error(\n 'ColorMap entries must contain 4 values'\n );\n }\n }\n this.colorMap = params.colorMap;\n } else {\n this.colorMap = [];\n for (let i = 0; i < 256; i++) {\n const val = (255 - i) / 256;\n this.colorMap.push([val, val, val, 1]);\n }\n }\n this.width = drawer.width;\n this.pixelRatio = this.params.pixelRatio || ws.params.pixelRatio;\n this.fftSamples =\n this.params.fftSamples || ws.params.fftSamples || 512;\n this.height = this.params.height || this.fftSamples / 2;\n this.noverlap = params.noverlap;\n this.windowFunc = params.windowFunc;\n this.alpha = params.alpha;\n this.splitChannels = params.splitChannels;\n this.channels = this.splitChannels ? ws.backend.buffer.numberOfChannels : 1;\n\n // Getting file's original samplerate is difficult(#1248).\n // So set 12kHz default to render like wavesurfer.js 5.x.\n this.frequencyMin = params.frequencyMin || 0;\n this.frequencyMax = params.frequencyMax || 12000;\n\n this.createWrapper();\n this.createCanvas();\n this.render();\n\n drawer.wrapper.addEventListener('scroll', this._onScroll);\n ws.on('redraw', this._onRender);\n };\n }\n\n init() {\n // Check if wavesurfer is ready\n if (this.wavesurfer.isReady) {\n this._onReady();\n } else {\n this.wavesurfer.once('ready', this._onReady);\n }\n }\n\n destroy() {\n this.unAll();\n this.wavesurfer.un('ready', this._onReady);\n this.wavesurfer.un('redraw', this._onRender);\n this.drawer && this.drawer.wrapper.removeEventListener('scroll', this._onScroll);\n this.wavesurfer = null;\n this.util = null;\n this.params = null;\n if (this.wrapper) {\n this.wrapper.removeEventListener('click', this._onWrapperClick);\n this.wrapper.parentNode.removeChild(this.wrapper);\n this.wrapper = null;\n }\n }\n\n createWrapper() {\n const prevSpectrogram = this.container.querySelector('spectrogram');\n if (prevSpectrogram) {\n this.container.removeChild(prevSpectrogram);\n }\n const wsParams = this.wavesurfer.params;\n this.wrapper = document.createElement('spectrogram');\n // if labels are active\n if (this.params.labels) {\n const labelsEl = (this.labelsEl = document.createElement('canvas'));\n labelsEl.classList.add('spec-labels');\n this.drawer.style(labelsEl, {\n position: 'absolute',\n zIndex: 9,\n height: `${this.height * this.channels}px`,\n width: `55px`\n });\n this.wrapper.appendChild(labelsEl);\n this.loadLabels(\n 'rgba(68,68,68,0.5)',\n '12px',\n '10px',\n '',\n '#fff',\n '#f7f7f7',\n 'center',\n '#specLabels'\n );\n }\n\n this.drawer.style(this.wrapper, {\n display: 'block',\n position: 'relative',\n userSelect: 'none',\n webkitUserSelect: 'none',\n height: `${this.height * this.channels}px`\n });\n\n if (wsParams.fillParent || wsParams.scrollParent) {\n this.drawer.style(this.wrapper, {\n width: '100%',\n overflowX: 'hidden',\n overflowY: 'hidden'\n });\n }\n this.container.appendChild(this.wrapper);\n\n this.wrapper.addEventListener('click', this._onWrapperClick);\n }\n\n _wrapperClickHandler(event) {\n event.preventDefault();\n const relX = 'offsetX' in event ? event.offsetX : event.layerX;\n this.fireEvent('click', relX / this.width || 0);\n }\n\n createCanvas() {\n const canvas = (this.canvas = this.wrapper.appendChild(\n document.createElement('canvas')\n ));\n\n this.spectrCc = canvas.getContext('2d');\n\n this.util.style(canvas, {\n position: 'absolute',\n zIndex: 4\n });\n }\n\n render() {\n this.updateCanvasStyle();\n\n if (this.frequenciesDataUrl) {\n this.loadFrequenciesData(this.frequenciesDataUrl);\n } else {\n this.getFrequencies(this.drawSpectrogram);\n }\n }\n\n updateCanvasStyle() {\n const width = Math.round(this.width / this.pixelRatio) + 'px';\n this.canvas.width = this.width;\n this.canvas.height = this.fftSamples / 2 * this.channels;\n this.canvas.style.width = width;\n this.canvas.style.height = this.height + 'px';\n }\n\n drawSpectrogram(frequenciesData, my) {\n if (!isNaN(frequenciesData[0][0])) { // data is 1ch [sample, freq] format\n // to [channel, sample, freq] format\n frequenciesData = [frequenciesData];\n }\n\n const spectrCc = my.spectrCc;\n const height = my.fftSamples / 2;\n const width = my.width;\n const freqFrom = my.buffer.sampleRate / 2;\n const freqMin = my.frequencyMin;\n const freqMax = my.frequencyMax;\n\n if (!spectrCc) {\n return;\n }\n\n for (let c = 0; c < frequenciesData.length; c++) { // for each channel\n const pixels = my.resample(frequenciesData[c]);\n const imageData = new ImageData(width, height);\n\n for (let i = 0; i < pixels.length; i++) {\n for (let j = 0; j < pixels[i].length; j++) {\n const colorMap = my.colorMap[pixels[i][j]];\n const redIndex = ((height - j) * width + i) * 4;\n imageData.data[redIndex] = colorMap[0] * 255;\n imageData.data[redIndex + 1] = colorMap[1] * 255;\n imageData.data[redIndex + 2] = colorMap[2] * 255;\n imageData.data[redIndex + 3] = colorMap[3] * 255;\n }\n }\n\n // scale and stack spectrograms\n createImageBitmap(imageData).then(renderer =>\n spectrCc.drawImage(renderer,\n 0, height * (1 - freqMax / freqFrom), // source x, y\n width, height * (freqMax - freqMin) / freqFrom, // source width, height\n 0, height * c, // destination x, y\n width, height // destination width, height\n )\n );\n }\n }\n\n getFrequencies(callback) {\n const fftSamples = this.fftSamples;\n const buffer = (this.buffer = this.wavesurfer.backend.buffer);\n const channels = this.channels;\n\n if (!buffer) {\n this.fireEvent('error', 'Web Audio buffer is not available');\n return;\n }\n\n // This may differ from file samplerate. Browser resamples audio.\n const sampleRate = buffer.sampleRate;\n const frequencies = [];\n\n let noverlap = this.noverlap;\n if (!noverlap) {\n const uniqueSamplesPerPx = buffer.length / this.canvas.width;\n noverlap = Math.max(0, Math.round(fftSamples - uniqueSamplesPerPx));\n }\n\n const fft = new FFT(\n fftSamples,\n sampleRate,\n this.windowFunc,\n this.alpha\n );\n\n for (let c = 0; c < channels; c++) { // for each channel\n const channelData = buffer.getChannelData(c);\n const channelFreq = [];\n let currentOffset = 0;\n\n while (currentOffset + fftSamples < channelData.length) {\n const segment = channelData.slice(\n currentOffset,\n currentOffset + fftSamples\n );\n const spectrum = fft.calculateSpectrum(segment);\n const array = new Uint8Array(fftSamples / 2);\n let j;\n for (j = 0; j < fftSamples / 2; j++) {\n array[j] = Math.max(-255, Math.log10(spectrum[j]) * 45);\n }\n channelFreq.push(array);\n // channelFreq: [sample, freq]\n\n currentOffset += fftSamples - noverlap;\n }\n frequencies.push(channelFreq);\n // frequencies: [channel, sample, freq]\n }\n callback(frequencies, this);\n }\n\n loadFrequenciesData(url) {\n const request = this.util.fetchFile({ url: url });\n\n request.on('success', data =>\n this.drawSpectrogram(JSON.parse(data), this)\n );\n request.on('error', e => this.fireEvent('error', e));\n\n return request;\n }\n\n freqType(freq) {\n return freq >= 1000 ? (freq / 1000).toFixed(1) : Math.round(freq);\n }\n\n unitType(freq) {\n return freq >= 1000 ? 'KHz' : 'Hz';\n }\n\n loadLabels(\n bgFill,\n fontSizeFreq,\n fontSizeUnit,\n fontType,\n textColorFreq,\n textColorUnit,\n textAlign,\n container\n ) {\n const frequenciesHeight = this.height;\n bgFill = bgFill || 'rgba(68,68,68,0)';\n fontSizeFreq = fontSizeFreq || '12px';\n fontSizeUnit = fontSizeUnit || '10px';\n fontType = fontType || 'Helvetica';\n textColorFreq = textColorFreq || '#fff';\n textColorUnit = textColorUnit || '#fff';\n textAlign = textAlign || 'center';\n container = container || '#specLabels';\n const bgWidth = 55;\n const getMaxY = frequenciesHeight || 512;\n const labelIndex = 5 * (getMaxY / 256);\n const freqStart = this.frequencyMin;\n const step = (this.frequencyMax - freqStart) / labelIndex;\n\n // prepare canvas element for labels\n const ctx = this.labelsEl.getContext('2d');\n const dispScale = window.devicePixelRatio;\n this.labelsEl.height = this.height * this.channels * dispScale;\n this.labelsEl.width = bgWidth * dispScale;\n ctx.scale(dispScale, dispScale);\n\n if (!ctx) {\n return;\n }\n\n for (let c = 0; c < this.channels; c++) { // for each channel\n // fill background\n ctx.fillStyle = bgFill;\n ctx.fillRect(0, c * getMaxY, bgWidth, (1 + c) * getMaxY);\n ctx.fill();\n let i;\n\n // render labels\n for (i = 0; i <= labelIndex; i++) {\n ctx.textAlign = textAlign;\n ctx.textBaseline = 'middle';\n\n const freq = freqStart + step * i;\n const label = this.freqType(freq);\n const units = this.unitType(freq);\n const yLabelOffset = 2;\n const x = 16;\n let y;\n\n if (i == 0) {\n y = (1 + c) * getMaxY + i - 10;\n // unit label\n ctx.fillStyle = textColorUnit;\n ctx.font = fontSizeUnit + ' ' + fontType;\n ctx.fillText(units, x + 24, y);\n // freq label\n ctx.fillStyle = textColorFreq;\n ctx.font = fontSizeFreq + ' ' + fontType;\n ctx.fillText(label, x, y);\n } else {\n y = (1 + c) * getMaxY - i * 50 + yLabelOffset;\n // unit label\n ctx.fillStyle = textColorUnit;\n ctx.font = fontSizeUnit + ' ' + fontType;\n ctx.fillText(units, x + 24, y);\n // freq label\n ctx.fillStyle = textColorFreq;\n ctx.font = fontSizeFreq + ' ' + fontType;\n ctx.fillText(label, x, y);\n }\n }\n }\n }\n\n updateScroll(e) {\n if (this.wrapper) {\n this.wrapper.scrollLeft = e.target.scrollLeft;\n }\n }\n\n resample(oldMatrix) {\n const columnsNumber = this.width;\n const newMatrix = [];\n\n const oldPiece = 1 / oldMatrix.length;\n const newPiece = 1 / columnsNumber;\n let i;\n\n for (i = 0; i < columnsNumber; i++) {\n const column = new Array(oldMatrix[0].length);\n let j;\n\n for (j = 0; j < oldMatrix.length; j++) {\n const oldStart = j * oldPiece;\n const oldEnd = oldStart + oldPiece;\n const newStart = i * newPiece;\n const newEnd = newStart + newPiece;\n\n const overlap =\n oldEnd <= newStart || newEnd <= oldStart\n ? 0\n : Math.min(\n Math.max(oldEnd, newStart),\n Math.max(newEnd, oldStart)\n ) -\n Math.max(\n Math.min(oldEnd, newStart),\n Math.min(newEnd, oldStart)\n );\n let k;\n /* eslint-disable max-depth */\n if (overlap > 0) {\n for (k = 0; k < oldMatrix[0].length; k++) {\n if (column[k] == null) {\n column[k] = 0;\n }\n column[k] += (overlap / newPiece) * oldMatrix[j][k];\n }\n }\n /* eslint-enable max-depth */\n }\n\n const intColumn = new Uint8Array(oldMatrix[0].length);\n let m;\n\n for (m = 0; m < oldMatrix[0].length; m++) {\n intColumn[m] = column[m];\n }\n\n newMatrix.push(intColumn);\n }\n\n return newMatrix;\n }\n}\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","","// startup\n// Load entry module and return exports\n// This entry module is referenced by other modules so it can't be inlined\nvar __webpack_exports__ = __webpack_require__(\"./src/plugin/spectrogram/index.js\");\n",""],"names":["FFT","bufferSize","sampleRate","windowFunc","alpha","bandwidth","sinTable","Float32Array","cosTable","windowValues","reverseTable","Uint32Array","peakBand","peak","i","Math","abs","cos","PI","pow","E","undefined","sin","Error","limit","bit","calculateSpectrum","buffer","real","imag","bSi","sqrt","rval","ival","mag","spectrum","k","floor","log","LN2","length","halfSize","phaseShiftStepReal","phaseShiftStepImag","currentPhaseShiftReal","currentPhaseShiftImag","off","tr","ti","tmpReal","fftStep","N","SpectrogramPlugin","params","ws","wavesurfer","util","frequenciesDataUrl","_onScroll","e","updateScroll","_onRender","render","_onWrapperClick","_wrapperClickHandler","_onReady","drawer","container","document","querySelector","colorMap","cmEntry","val","push","width","pixelRatio","fftSamples","height","noverlap","splitChannels","channels","backend","numberOfChannels","frequencyMin","frequencyMax","createWrapper","createCanvas","wrapper","addEventListener","on","isReady","once","unAll","un","removeEventListener","parentNode","removeChild","prevSpectrogram","wsParams","createElement","labels","labelsEl","classList","add","style","position","zIndex","appendChild","loadLabels","display","userSelect","webkitUserSelect","fillParent","scrollParent","overflowX","overflowY","event","preventDefault","relX","offsetX","layerX","fireEvent","canvas","spectrCc","getContext","updateCanvasStyle","loadFrequenciesData","getFrequencies","drawSpectrogram","round","frequenciesData","my","isNaN","freqFrom","freqMin","freqMax","c","pixels","resample","imageData","ImageData","j","redIndex","data","createImageBitmap","then","renderer","drawImage","callback","frequencies","uniqueSamplesPerPx","max","fft","channelData","getChannelData","channelFreq","currentOffset","segment","slice","array","Uint8Array","log10","url","request","fetchFile","JSON","parse","freq","toFixed","bgFill","fontSizeFreq","fontSizeUnit","fontType","textColorFreq","textColorUnit","textAlign","frequenciesHeight","bgWidth","getMaxY","labelIndex","freqStart","step","ctx","dispScale","window","devicePixelRatio","scale","fillStyle","fillRect","fill","textBaseline","label","freqType","units","unitType","yLabelOffset","x","y","font","fillText","scrollLeft","target","oldMatrix","columnsNumber","newMatrix","oldPiece","newPiece","column","Array","oldStart","oldEnd","newStart","newEnd","overlap","min","intColumn","m","name","deferInit","staticProps","instance"],"sourceRoot":""}
|
|
1
|
+
{"version":3,"file":"wavesurfer.spectrogram.js","mappings":";;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+CAA+C;AAC/C,CAAC;AACD;;;;;;;;;;;;;;;;ACVA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACe,SAASA,GAAGA,CAACC,UAAU,EAAEC,UAAU,EAAEC,UAAU,EAAEC,KAAK,EAAE;EACnE,IAAI,CAACH,UAAU,GAAGA,UAAU;EAC5B,IAAI,CAACC,UAAU,GAAGA,UAAU;EAC5B,IAAI,CAACG,SAAS,GAAI,CAAC,GAAGJ,UAAU,IAAKC,UAAU,GAAG,CAAC,CAAC;EAEpD,IAAI,CAACI,QAAQ,GAAG,IAAIC,YAAY,CAACN,UAAU,CAAC;EAC5C,IAAI,CAACO,QAAQ,GAAG,IAAID,YAAY,CAACN,UAAU,CAAC;EAC5C,IAAI,CAACQ,YAAY,GAAG,IAAIF,YAAY,CAACN,UAAU,CAAC;EAChD,IAAI,CAACS,YAAY,GAAG,IAAIC,WAAW,CAACV,UAAU,CAAC;EAE/C,IAAI,CAACW,QAAQ,GAAG,CAAC;EACjB,IAAI,CAACC,IAAI,GAAG,CAAC;EAEb,IAAIC,CAAC;EACL,QAAQX,UAAU;IACd,KAAK,UAAU;MACX,KAAKW,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGb,UAAU,EAAEa,CAAC,EAAE,EAAE;QAC7B,IAAI,CAACL,YAAY,CAACK,CAAC,CAAC,GACf,CAAC,IAAIb,UAAU,GAAG,CAAC,CAAC,IACpB,CAACA,UAAU,GAAG,CAAC,IAAI,CAAC,GAAGc,IAAI,CAACC,GAAG,CAACF,CAAC,GAAG,CAACb,UAAU,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;MACnE;MACA;IACJ,KAAK,cAAc;MACf,KAAKa,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGb,UAAU,EAAEa,CAAC,EAAE,EAAE;QAC7B,IAAI,CAACL,YAAY,CAACK,CAAC,CAAC,GAChB,IAAI,GACJ,IAAI,GAAGC,IAAI,CAACC,GAAG,CAACF,CAAC,IAAIb,UAAU,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,GAC3C,IAAI,GAAGc,IAAI,CAACE,GAAG,CAAEF,IAAI,CAACG,EAAE,GAAG,CAAC,GAAGJ,CAAC,IAAKb,UAAU,GAAG,CAAC,CAAC,CAAC;MAC7D;MACA;IACJ,KAAK,UAAU;MACXG,KAAK,GAAGA,KAAK,IAAI,IAAI;MACrB,KAAKU,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGb,UAAU,EAAEa,CAAC,EAAE,EAAE;QAC7B,IAAI,CAACL,YAAY,CAACK,CAAC,CAAC,GAChB,CAAC,CAAC,GAAGV,KAAK,IAAI,CAAC,GACf,GAAG,GAAGW,IAAI,CAACE,GAAG,CAAEF,IAAI,CAACG,EAAE,GAAG,CAAC,GAAGJ,CAAC,IAAKb,UAAU,GAAG,CAAC,CAAC,CAAC,GACnDG,KAAK,GAAG,CAAC,GACNW,IAAI,CAACE,GAAG,CAAE,CAAC,GAAGF,IAAI,CAACG,EAAE,GAAGJ,CAAC,IAAKb,UAAU,GAAG,CAAC,CAAC,CAAC;MAC1D;MACA;IACJ,KAAK,QAAQ;MACT,KAAKa,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGb,UAAU,EAAEa,CAAC,EAAE,EAAE;QAC7B,IAAI,CAACL,YAAY,CAACK,CAAC,CAAC,GAAGC,IAAI,CAACE,GAAG,CAC1BF,IAAI,CAACG,EAAE,GAAGJ,CAAC,IAAKb,UAAU,GAAG,CAAC,CAAC,GAAGc,IAAI,CAACG,EAAE,GAAG,CAAC,CACjD;MACL;MACA;IACJ,KAAK,OAAO;MACRd,KAAK,GAAGA,KAAK,IAAI,IAAI;MACrB,KAAKU,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGb,UAAU,EAAEa,CAAC,EAAE,EAAE;QAC7B,IAAI,CAACL,YAAY,CAACK,CAAC,CAAC,GAAGC,IAAI,CAACI,GAAG,CAC3BJ,IAAI,CAACK,CAAC,EACN,CAAC,GAAG,GACAL,IAAI,CAACI,GAAG,CACJ,CAACL,CAAC,GAAG,CAACb,UAAU,GAAG,CAAC,IAAI,CAAC,KACnBG,KAAK,IAAIH,UAAU,GAAG,CAAC,CAAC,GAAI,CAAC,CAAC,EACpC,CAAC,CACJ,CACR;MACL;MACA;IACJ,KAAK,SAAS;MACV,KAAKa,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGb,UAAU,EAAEa,CAAC,EAAE,EAAE;QAC7B,IAAI,CAACL,YAAY,CAACK,CAAC,CAAC,GAChB,IAAI,GACJ,IAAI,GAAGC,IAAI,CAACE,GAAG,CAAEF,IAAI,CAACG,EAAE,GAAG,CAAC,GAAGJ,CAAC,IAAKb,UAAU,GAAG,CAAC,CAAC,CAAC;MAC7D;MACA;IACJ,KAAK,MAAM;IACX,KAAKoB,SAAS;MACV,KAAKP,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGb,UAAU,EAAEa,CAAC,EAAE,EAAE;QAC7B,IAAI,CAACL,YAAY,CAACK,CAAC,CAAC,GAChB,GAAG,IAAI,CAAC,GAAGC,IAAI,CAACE,GAAG,CAAEF,IAAI,CAACG,EAAE,GAAG,CAAC,GAAGJ,CAAC,IAAKb,UAAU,GAAG,CAAC,CAAC,CAAC,CAAC;MAClE;MACA;IACJ,KAAK,SAAS;MACV,KAAKa,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGb,UAAU,EAAEa,CAAC,EAAE,EAAE;QAC7B,IAAI,CAACL,YAAY,CAACK,CAAC,CAAC,GAChBC,IAAI,CAACO,GAAG,CAACP,IAAI,CAACG,EAAE,IAAK,CAAC,GAAGJ,CAAC,IAAKb,UAAU,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IACnDc,IAAI,CAACG,EAAE,IAAK,CAAC,GAAGJ,CAAC,IAAKb,UAAU,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;MACpD;MACA;IACJ,KAAK,aAAa;MACd,KAAKa,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGb,UAAU,EAAEa,CAAC,EAAE,EAAE;QAC7B,IAAI,CAACL,YAAY,CAACK,CAAC,CAAC,GAAG,CAAC;MAC5B;MACA;IACJ,KAAK,YAAY;MACb,KAAKA,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGb,UAAU,EAAEa,CAAC,EAAE,EAAE;QAC7B,IAAI,CAACL,YAAY,CAACK,CAAC,CAAC,GACf,CAAC,GAAGb,UAAU,IACdA,UAAU,GAAG,CAAC,GAAGc,IAAI,CAACC,GAAG,CAACF,CAAC,GAAG,CAACb,UAAU,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;MAC7D;MACA;IACJ;MACI,MAAMsB,KAAK,CAAC,2BAA2B,GAAGpB,UAAU,GAAG,GAAG,CAAC;EAAC;EAGpE,IAAIqB,KAAK,GAAG,CAAC;EACb,IAAIC,GAAG,GAAGxB,UAAU,IAAI,CAAC;EACzB,IAAIa,CAAC;EAEL,OAAOU,KAAK,GAAGvB,UAAU,EAAE;IACvB,KAAKa,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGU,KAAK,EAAEV,CAAC,EAAE,EAAE;MACxB,IAAI,CAACJ,YAAY,CAACI,CAAC,GAAGU,KAAK,CAAC,GAAG,IAAI,CAACd,YAAY,CAACI,CAAC,CAAC,GAAGW,GAAG;IAC7D;IAEAD,KAAK,GAAGA,KAAK,IAAI,CAAC;IAClBC,GAAG,GAAGA,GAAG,IAAI,CAAC;EAClB;EAEA,KAAKX,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGb,UAAU,EAAEa,CAAC,EAAE,EAAE;IAC7B,IAAI,CAACR,QAAQ,CAACQ,CAAC,CAAC,GAAGC,IAAI,CAACO,GAAG,CAAC,CAACP,IAAI,CAACG,EAAE,GAAGJ,CAAC,CAAC;IACzC,IAAI,CAACN,QAAQ,CAACM,CAAC,CAAC,GAAGC,IAAI,CAACE,GAAG,CAAC,CAACF,IAAI,CAACG,EAAE,GAAGJ,CAAC,CAAC;EAC7C;EAEA,IAAI,CAACY,iBAAiB,GAAG,UAASC,MAAM,EAAE;IACtC;IACA,IAAI1B,UAAU,GAAG,IAAI,CAACA,UAAU;MAC5BO,QAAQ,GAAG,IAAI,CAACA,QAAQ;MACxBF,QAAQ,GAAG,IAAI,CAACA,QAAQ;MACxBI,YAAY,GAAG,IAAI,CAACA,YAAY;MAChCkB,IAAI,GAAG,IAAIrB,YAAY,CAACN,UAAU,CAAC;MACnC4B,IAAI,GAAG,IAAItB,YAAY,CAACN,UAAU,CAAC;MACnC6B,GAAG,GAAG,CAAC,GAAG,IAAI,CAAC7B,UAAU;MACzB8B,IAAI,GAAGhB,IAAI,CAACgB,IAAI;MAChBC,IAAI;MACJC,IAAI;MACJC,GAAG;MACHC,QAAQ,GAAG,IAAI5B,YAAY,CAACN,UAAU,GAAG,CAAC,CAAC;IAE/C,IAAImC,CAAC,GAAGrB,IAAI,CAACsB,KAAK,CAACtB,IAAI,CAACuB,GAAG,CAACrC,UAAU,CAAC,GAAGc,IAAI,CAACwB,GAAG,CAAC;IAEnD,IAAIxB,IAAI,CAACI,GAAG,CAAC,CAAC,EAAEiB,CAAC,CAAC,KAAKnC,UAAU,EAAE;MAC/B,MAAM,4CAA4C;IACtD;IACA,IAAIA,UAAU,KAAK0B,MAAM,CAACa,MAAM,EAAE;MAC9B,MAAM,iEAAiE,GACnEvC,UAAU,GACV,gBAAgB,GAChB0B,MAAM,CAACa,MAAM;IACrB;IAEA,IAAIC,QAAQ,GAAG,CAAC;MACZC,kBAAkB;MAClBC,kBAAkB;MAClBC,qBAAqB;MACrBC,qBAAqB;MACrBC,GAAG;MACHC,EAAE;MACFC,EAAE;MACFC,OAAO;IAEX,KAAK,IAAInC,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGb,UAAU,EAAEa,CAAC,EAAE,EAAE;MACjCc,IAAI,CAACd,CAAC,CAAC,GACHa,MAAM,CAACjB,YAAY,CAACI,CAAC,CAAC,CAAC,GAAG,IAAI,CAACL,YAAY,CAACC,YAAY,CAACI,CAAC,CAAC,CAAC;MAChEe,IAAI,CAACf,CAAC,CAAC,GAAG,CAAC;IACf;IAEA,OAAO2B,QAAQ,GAAGxC,UAAU,EAAE;MAC1ByC,kBAAkB,GAAGlC,QAAQ,CAACiC,QAAQ,CAAC;MACvCE,kBAAkB,GAAGrC,QAAQ,CAACmC,QAAQ,CAAC;MAEvCG,qBAAqB,GAAG,CAAC;MACzBC,qBAAqB,GAAG,CAAC;MAEzB,KAAK,IAAIK,OAAO,GAAG,CAAC,EAAEA,OAAO,GAAGT,QAAQ,EAAES,OAAO,EAAE,EAAE;QACjD,IAAIpC,CAAC,GAAGoC,OAAO;QAEf,OAAOpC,CAAC,GAAGb,UAAU,EAAE;UACnB6C,GAAG,GAAGhC,CAAC,GAAG2B,QAAQ;UAClBM,EAAE,GACEH,qBAAqB,GAAGhB,IAAI,CAACkB,GAAG,CAAC,GACjCD,qBAAqB,GAAGhB,IAAI,CAACiB,GAAG,CAAC;UACrCE,EAAE,GACEJ,qBAAqB,GAAGf,IAAI,CAACiB,GAAG,CAAC,GACjCD,qBAAqB,GAAGjB,IAAI,CAACkB,GAAG,CAAC;UAErClB,IAAI,CAACkB,GAAG,CAAC,GAAGlB,IAAI,CAACd,CAAC,CAAC,GAAGiC,EAAE;UACxBlB,IAAI,CAACiB,GAAG,CAAC,GAAGjB,IAAI,CAACf,CAAC,CAAC,GAAGkC,EAAE;UACxBpB,IAAI,CAACd,CAAC,CAAC,IAAIiC,EAAE;UACblB,IAAI,CAACf,CAAC,CAAC,IAAIkC,EAAE;UAEblC,CAAC,IAAI2B,QAAQ,IAAI,CAAC;QACtB;QAEAQ,OAAO,GAAGL,qBAAqB;QAC/BA,qBAAqB,GACjBK,OAAO,GAAGP,kBAAkB,GAC5BG,qBAAqB,GAAGF,kBAAkB;QAC9CE,qBAAqB,GACjBI,OAAO,GAAGN,kBAAkB,GAC5BE,qBAAqB,GAAGH,kBAAkB;MAClD;MAEAD,QAAQ,GAAGA,QAAQ,IAAI,CAAC;IAC5B;IAEA,KAAK,IAAI3B,CAAC,GAAG,CAAC,EAAEqC,CAAC,GAAGlD,UAAU,GAAG,CAAC,EAAEa,CAAC,GAAGqC,CAAC,EAAErC,CAAC,EAAE,EAAE;MAC5CkB,IAAI,GAAGJ,IAAI,CAACd,CAAC,CAAC;MACdmB,IAAI,GAAGJ,IAAI,CAACf,CAAC,CAAC;MACdoB,GAAG,GAAGJ,GAAG,GAAGC,IAAI,CAACC,IAAI,GAAGA,IAAI,GAAGC,IAAI,GAAGA,IAAI,CAAC;MAE3C,IAAIC,GAAG,GAAG,IAAI,CAACrB,IAAI,EAAE;QACjB,IAAI,CAACD,QAAQ,GAAGE,CAAC;QACjB,IAAI,CAACD,IAAI,GAAGqB,GAAG;MACnB;MACAC,QAAQ,CAACrB,CAAC,CAAC,GAAGoB,GAAG;IACrB;IACA,OAAOC,QAAQ;EACnB,CAAC;AACL;AAACiB,MAAA,CAAAC,OAAA,GAAAA,OAAA,CAAAC,OAAA;;;;;;;;;;;;;;;;AC3ND,IAAAC,IAAA,GAAAC,sBAAA,CAAAC,mBAAA;AAAwB,SAAAD,uBAAAE,GAAA,WAAAA,GAAA,IAAAA,GAAA,CAAAC,UAAA,GAAAD,GAAA,KAAAJ,OAAA,EAAAI,GAAA;AAAA,SAAAE,QAAAF,GAAA,sCAAAE,OAAA,wBAAAC,MAAA,uBAAAA,MAAA,CAAAC,QAAA,aAAAJ,GAAA,kBAAAA,GAAA,gBAAAA,GAAA,WAAAA,GAAA,yBAAAG,MAAA,IAAAH,GAAA,CAAAK,WAAA,KAAAF,MAAA,IAAAH,GAAA,KAAAG,MAAA,CAAAG,SAAA,qBAAAN,GAAA,KAAAE,OAAA,CAAAF,GAAA;AAAA,SAAAO,gBAAAC,QAAA,EAAAC,WAAA,UAAAD,QAAA,YAAAC,WAAA,eAAAC,SAAA;AAAA,SAAAC,kBAAAC,MAAA,EAAAC,KAAA,aAAAzD,CAAA,MAAAA,CAAA,GAAAyD,KAAA,CAAA/B,MAAA,EAAA1B,CAAA,UAAA0D,UAAA,GAAAD,KAAA,CAAAzD,CAAA,GAAA0D,UAAA,CAAAC,UAAA,GAAAD,UAAA,CAAAC,UAAA,WAAAD,UAAA,CAAAE,YAAA,wBAAAF,UAAA,EAAAA,UAAA,CAAAG,QAAA,SAAAC,MAAA,CAAAC,cAAA,CAAAP,MAAA,EAAAQ,cAAA,CAAAN,UAAA,CAAAO,GAAA,GAAAP,UAAA;AAAA,SAAAQ,aAAAb,WAAA,EAAAc,UAAA,EAAAC,WAAA,QAAAD,UAAA,EAAAZ,iBAAA,CAAAF,WAAA,CAAAH,SAAA,EAAAiB,UAAA,OAAAC,WAAA,EAAAb,iBAAA,CAAAF,WAAA,EAAAe,WAAA,GAAAN,MAAA,CAAAC,cAAA,CAAAV,WAAA,iBAAAQ,QAAA,mBAAAR,WAAA;AAAA,SAAAW,eAAAK,GAAA,QAAAJ,GAAA,GAAAK,YAAA,CAAAD,GAAA,oBAAAvB,OAAA,CAAAmB,GAAA,iBAAAA,GAAA,GAAAM,MAAA,CAAAN,GAAA;AAAA,SAAAK,aAAAE,KAAA,EAAAC,IAAA,QAAA3B,OAAA,CAAA0B,KAAA,kBAAAA,KAAA,kBAAAA,KAAA,MAAAE,IAAA,GAAAF,KAAA,CAAAzB,MAAA,CAAA4B,WAAA,OAAAD,IAAA,KAAAnE,SAAA,QAAAqE,GAAA,GAAAF,IAAA,CAAAG,IAAA,CAAAL,KAAA,EAAAC,IAAA,oBAAA3B,OAAA,CAAA8B,GAAA,uBAAAA,GAAA,YAAAtB,SAAA,4DAAAmB,IAAA,gBAAAF,MAAA,GAAAO,MAAA,EAAAN,KAAA;AAExB;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;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;AAxBA,IAyBqBO,iBAAiB;EAsBlC,SAAAA,kBAAYC,MAAM,EAAEC,EAAE,EAAE;IAAA,IAAAC,KAAA;IAAA/B,eAAA,OAAA4B,iBAAA;IACpB,IAAI,CAACC,MAAM,GAAGA,MAAM;IACpB,IAAI,CAACG,UAAU,GAAGF,EAAE;IACpB,IAAI,CAACG,IAAI,GAAGH,EAAE,CAACG,IAAI;IAEnB,IAAI,CAACC,kBAAkB,GAAGL,MAAM,CAACK,kBAAkB;IACnD,IAAI,CAACC,SAAS,GAAG,UAAAC,CAAC,EAAI;MAClBL,KAAI,CAACM,YAAY,CAACD,CAAC,CAAC;IACxB,CAAC;IACD,IAAI,CAACE,SAAS,GAAG,YAAM;MACnBP,KAAI,CAACQ,MAAM,EAAE;IACjB,CAAC;IACD,IAAI,CAACC,eAAe,GAAG,UAAAJ,CAAC,EAAI;MACxBL,KAAI,CAACU,oBAAoB,CAACL,CAAC,CAAC;IAChC,CAAC;IACD,IAAI,CAACM,QAAQ,GAAG,YAAM;MAClB,IAAMC,MAAM,GAAIZ,KAAI,CAACY,MAAM,GAAGb,EAAE,CAACa,MAAO;MAExCZ,KAAI,CAACa,SAAS,GACV,QAAQ,IAAI,OAAOf,MAAM,CAACe,SAAS,GAC7BC,QAAQ,CAACC,aAAa,CAACjB,MAAM,CAACe,SAAS,CAAC,GACxCf,MAAM,CAACe,SAAS;MAE1B,IAAI,CAACb,KAAI,CAACa,SAAS,EAAE;QACjB,MAAMtF,KAAK,CAAC,yCAAyC,CAAC;MAC1D;MACA,IAAIuE,MAAM,CAACkB,QAAQ,EAAE;QACjB,IAAIlB,MAAM,CAACkB,QAAQ,CAACxE,MAAM,GAAG,GAAG,EAAE;UAC9B,MAAM,IAAIjB,KAAK,CAAC,oCAAoC,CAAC;QACzD;QACA,KAAK,IAAIT,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGgF,MAAM,CAACkB,QAAQ,CAACxE,MAAM,EAAE1B,CAAC,EAAE,EAAE;UAC7C,IAAMmG,OAAO,GAAGnB,MAAM,CAACkB,QAAQ,CAAClG,CAAC,CAAC;UAClC,IAAImG,OAAO,CAACzE,MAAM,KAAK,CAAC,EAAE;YACtB,MAAM,IAAIjB,KAAK,CACX,wCAAwC,CAC3C;UACL;QACJ;QACAyE,KAAI,CAACgB,QAAQ,GAAGlB,MAAM,CAACkB,QAAQ;MACnC,CAAC,MAAM;QACHhB,KAAI,CAACgB,QAAQ,GAAG,EAAE;QAClB,KAAK,IAAIlG,EAAC,GAAG,CAAC,EAAEA,EAAC,GAAG,GAAG,EAAEA,EAAC,EAAE,EAAE;UAC1B,IAAMoG,GAAG,GAAG,CAAC,GAAG,GAAGpG,EAAC,IAAI,GAAG;UAC3BkF,KAAI,CAACgB,QAAQ,CAACG,IAAI,CAAC,CAACD,GAAG,EAAEA,GAAG,EAAEA,GAAG,EAAE,CAAC,CAAC,CAAC;QAC1C;MACJ;MACAlB,KAAI,CAACoB,KAAK,GAAGR,MAAM,CAACQ,KAAK;MACzBpB,KAAI,CAACqB,UAAU,GAAGrB,KAAI,CAACF,MAAM,CAACuB,UAAU,IAAItB,EAAE,CAACD,MAAM,CAACuB,UAAU;MAChErB,KAAI,CAACsB,UAAU,GACXtB,KAAI,CAACF,MAAM,CAACwB,UAAU,IAAIvB,EAAE,CAACD,MAAM,CAACwB,UAAU,IAAI,GAAG;MACzDtB,KAAI,CAACuB,MAAM,GAAGvB,KAAI,CAACF,MAAM,CAACyB,MAAM,IAAIvB,KAAI,CAACsB,UAAU,GAAG,CAAC;MACvDtB,KAAI,CAACwB,QAAQ,GAAG1B,MAAM,CAAC0B,QAAQ;MAC/BxB,KAAI,CAAC7F,UAAU,GAAG2F,MAAM,CAAC3F,UAAU;MACnC6F,KAAI,CAAC5F,KAAK,GAAG0F,MAAM,CAAC1F,KAAK;MACzB4F,KAAI,CAACyB,aAAa,GAAG3B,MAAM,CAAC2B,aAAa;MACzCzB,KAAI,CAAC0B,QAAQ,GAAG1B,KAAI,CAACyB,aAAa,GAAG1B,EAAE,CAAC4B,OAAO,CAAChG,MAAM,CAACiG,gBAAgB,GAAG,CAAC;;MAE3E;MACA;MACA5B,KAAI,CAAC6B,YAAY,GAAG/B,MAAM,CAAC+B,YAAY,IAAI,CAAC;MAC5C7B,KAAI,CAAC8B,YAAY,GAAGhC,MAAM,CAACgC,YAAY,IAAI,KAAK;MAEhD9B,KAAI,CAAC+B,aAAa,EAAE;MACpB/B,KAAI,CAACgC,YAAY,EAAE;MACnBhC,KAAI,CAACQ,MAAM,EAAE;MAEbI,MAAM,CAACqB,OAAO,CAACC,gBAAgB,CAAC,QAAQ,EAAElC,KAAI,CAACI,SAAS,CAAC;MACzDL,EAAE,CAACoC,EAAE,CAAC,QAAQ,EAAEnC,KAAI,CAACO,SAAS,CAAC;IACnC,CAAC;EACL;EAACvB,YAAA,CAAAa,iBAAA;IAAAd,GAAA;IAAAqD,KAAA,EAED,SAAAC,KAAA,EAAO;MACH;MACA,IAAI,IAAI,CAACpC,UAAU,CAACqC,OAAO,EAAE;QACzB,IAAI,CAAC3B,QAAQ,EAAE;MACnB,CAAC,MAAM;QACH,IAAI,CAACV,UAAU,CAACsC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC5B,QAAQ,CAAC;MAChD;IACJ;EAAC;IAAA5B,GAAA;IAAAqD,KAAA,EAED,SAAAI,QAAA,EAAU;MACN,IAAI,CAACC,KAAK,EAAE;MACZ,IAAI,CAACxC,UAAU,CAACyC,EAAE,CAAC,OAAO,EAAE,IAAI,CAAC/B,QAAQ,CAAC;MAC1C,IAAI,CAACV,UAAU,CAACyC,EAAE,CAAC,QAAQ,EAAE,IAAI,CAACnC,SAAS,CAAC;MAC5C,IAAI,CAACK,MAAM,IAAI,IAAI,CAACA,MAAM,CAACqB,OAAO,CAACU,mBAAmB,CAAC,QAAQ,EAAE,IAAI,CAACvC,SAAS,CAAC;MAChF,IAAI,CAACH,UAAU,GAAG,IAAI;MACtB,IAAI,CAACC,IAAI,GAAG,IAAI;MAChB,IAAI,CAACJ,MAAM,GAAG,IAAI;MAClB,IAAI,IAAI,CAACmC,OAAO,EAAE;QACd,IAAI,CAACA,OAAO,CAACU,mBAAmB,CAAC,OAAO,EAAE,IAAI,CAAClC,eAAe,CAAC;QAC/D,IAAI,CAACwB,OAAO,CAACW,UAAU,CAACC,WAAW,CAAC,IAAI,CAACZ,OAAO,CAAC;QACjD,IAAI,CAACA,OAAO,GAAG,IAAI;MACvB;IACJ;EAAC;IAAAlD,GAAA;IAAAqD,KAAA,EAED,SAAAL,cAAA,EAAgB;MACZ,IAAMe,eAAe,GAAG,IAAI,CAACjC,SAAS,CAACE,aAAa,CAAC,aAAa,CAAC;MACnE,IAAI+B,eAAe,EAAE;QACjB,IAAI,CAACjC,SAAS,CAACgC,WAAW,CAACC,eAAe,CAAC;MAC/C;MACA,IAAMC,QAAQ,GAAG,IAAI,CAAC9C,UAAU,CAACH,MAAM;MACvC,IAAI,CAACmC,OAAO,GAAGnB,QAAQ,CAACkC,aAAa,CAAC,aAAa,CAAC;MACpD;MACA,IAAI,IAAI,CAAClD,MAAM,CAACmD,MAAM,EAAE;QACpB,IAAMC,QAAQ,GAAI,IAAI,CAACA,QAAQ,GAAGpC,QAAQ,CAACkC,aAAa,CAAC,QAAQ,CAAE;QACnEE,QAAQ,CAACC,SAAS,CAACC,GAAG,CAAC,aAAa,CAAC;QACrC,IAAI,CAACxC,MAAM,CAACyC,KAAK,CAACH,QAAQ,EAAE;UACxBI,QAAQ,EAAE,UAAU;UACpBC,MAAM,EAAE,CAAC;UACThC,MAAM,KAAAiC,MAAA,CAAK,IAAI,CAACjC,MAAM,GAAG,IAAI,CAACG,QAAQ,OAAI;UAC1CN,KAAK;QACT,CAAC,CAAC;QACF,IAAI,CAACa,OAAO,CAACwB,WAAW,CAACP,QAAQ,CAAC;QAClC,IAAI,CAACQ,UAAU,CACX,oBAAoB,EACpB,MAAM,EACN,MAAM,EACN,EAAE,EACF,MAAM,EACN,SAAS,EACT,QAAQ,EACR,aAAa,CAChB;MACL;MAEA,IAAI,CAAC9C,MAAM,CAACyC,KAAK,CAAC,IAAI,CAACpB,OAAO,EAAE;QAC5B0B,OAAO,EAAE,OAAO;QAChBL,QAAQ,EAAE,UAAU;QACpBM,UAAU,EAAE,MAAM;QAClBC,gBAAgB,EAAE,MAAM;QACxBtC,MAAM,KAAAiC,MAAA,CAAK,IAAI,CAACjC,MAAM,GAAG,IAAI,CAACG,QAAQ;MAC1C,CAAC,CAAC;MAEF,IAAIqB,QAAQ,CAACe,UAAU,IAAIf,QAAQ,CAACgB,YAAY,EAAE;QAC9C,IAAI,CAACnD,MAAM,CAACyC,KAAK,CAAC,IAAI,CAACpB,OAAO,EAAE;UAC5Bb,KAAK,EAAE,MAAM;UACb4C,SAAS,EAAE,QAAQ;UACnBC,SAAS,EAAE;QACf,CAAC,CAAC;MACN;MACA,IAAI,CAACpD,SAAS,CAAC4C,WAAW,CAAC,IAAI,CAACxB,OAAO,CAAC;MAExC,IAAI,CAACA,OAAO,CAACC,gBAAgB,CAAC,OAAO,EAAE,IAAI,CAACzB,eAAe,CAAC;IAChE;EAAC;IAAA1B,GAAA;IAAAqD,KAAA,EAED,SAAA1B,qBAAqBwD,KAAK,EAAE;MACxBA,KAAK,CAACC,cAAc,EAAE;MACtB,IAAMC,IAAI,GAAG,SAAS,IAAIF,KAAK,GAAGA,KAAK,CAACG,OAAO,GAAGH,KAAK,CAACI,MAAM;MAC9D,IAAI,CAACC,SAAS,CAAC,OAAO,EAAEH,IAAI,GAAG,IAAI,CAAChD,KAAK,IAAI,CAAC,CAAC;IACnD;EAAC;IAAArC,GAAA;IAAAqD,KAAA,EAED,SAAAJ,aAAA,EAAe;MACX,IAAMwC,MAAM,GAAI,IAAI,CAACA,MAAM,GAAG,IAAI,CAACvC,OAAO,CAACwB,WAAW,CAClD3C,QAAQ,CAACkC,aAAa,CAAC,QAAQ,CAAC,CAClC;MAEF,IAAI,CAACyB,QAAQ,GAAGD,MAAM,CAACE,UAAU,CAAC,IAAI,CAAC;MAEvC,IAAI,CAACxE,IAAI,CAACmD,KAAK,CAACmB,MAAM,EAAE;QACpBlB,QAAQ,EAAE,UAAU;QACpBC,MAAM,EAAE;MACZ,CAAC,CAAC;IACN;EAAC;IAAAxE,GAAA;IAAAqD,KAAA,EAED,SAAA5B,OAAA,EAAS;MACL,IAAI,CAACmE,iBAAiB,EAAE;MAExB,IAAI,IAAI,CAACxE,kBAAkB,EAAE;QACzB,IAAI,CAACyE,mBAAmB,CAAC,IAAI,CAACzE,kBAAkB,CAAC;MACrD,CAAC,MAAM;QACH,IAAI,CAAC0E,cAAc,CAAC,IAAI,CAACC,eAAe,CAAC;MAC7C;IACJ;EAAC;IAAA/F,GAAA;IAAAqD,KAAA,EAED,SAAAuC,kBAAA,EAAoB;MAChB,IAAMvD,KAAK,GAAGrG,IAAI,CAACgK,KAAK,CAAC,IAAI,CAAC3D,KAAK,GAAG,IAAI,CAACC,UAAU,CAAC,GAAG,IAAI;MAC7D,IAAI,CAACmD,MAAM,CAACpD,KAAK,GAAG,IAAI,CAACA,KAAK;MAC9B,IAAI,CAACoD,MAAM,CAACjD,MAAM,GAAG,IAAI,CAACD,UAAU,GAAG,CAAC,GAAG,IAAI,CAACI,QAAQ;MACxD,IAAI,CAAC8C,MAAM,CAACnB,KAAK,CAACjC,KAAK,GAAGA,KAAK;MAC/B,IAAI,CAACoD,MAAM,CAACnB,KAAK,CAAC9B,MAAM,GAAG,IAAI,CAACA,MAAM,GAAG,IAAI;IACjD;EAAC;IAAAxC,GAAA;IAAAqD,KAAA,EAED,SAAA0C,gBAAgBE,eAAe,EAAEC,EAAE,EAAE;MACjC,IAAI,CAACC,KAAK,CAACF,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE;QAAE;QACjC;QACAA,eAAe,GAAG,CAACA,eAAe,CAAC;MACvC;MAEA,IAAMP,QAAQ,GAAGQ,EAAE,CAACR,QAAQ;MAC5B,IAAMlD,MAAM,GAAG0D,EAAE,CAAC3D,UAAU,GAAG,CAAC;MAChC,IAAMF,KAAK,GAAG6D,EAAE,CAAC7D,KAAK;MACtB,IAAM+D,QAAQ,GAAGF,EAAE,CAACtJ,MAAM,CAACzB,UAAU,GAAG,CAAC;MACzC,IAAMkL,OAAO,GAAGH,EAAE,CAACpD,YAAY;MAC/B,IAAMwD,OAAO,GAAGJ,EAAE,CAACnD,YAAY;MAE/B,IAAI,CAAC2C,QAAQ,EAAE;QACX;MACJ;MAAC,IAAAa,KAAA,YAAAA,MAAAC,CAAA,EAEgD;QAAE;QAC/C,IAAMC,MAAM,GAAGP,EAAE,CAACQ,QAAQ,CAACT,eAAe,CAACO,CAAC,CAAC,CAAC;QAC9C,IAAMG,SAAS,GAAG,IAAIC,SAAS,CAACvE,KAAK,EAAEG,MAAM,CAAC;QAE9C,KAAK,IAAIzG,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAG0K,MAAM,CAAChJ,MAAM,EAAE1B,CAAC,EAAE,EAAE;UACpC,KAAK,IAAI8K,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGJ,MAAM,CAAC1K,CAAC,CAAC,CAAC0B,MAAM,EAAEoJ,CAAC,EAAE,EAAE;YACvC,IAAM5E,QAAQ,GAAGiE,EAAE,CAACjE,QAAQ,CAACwE,MAAM,CAAC1K,CAAC,CAAC,CAAC8K,CAAC,CAAC,CAAC;YAC1C,IAAMC,QAAQ,GAAG,CAAC,CAACtE,MAAM,GAAGqE,CAAC,IAAIxE,KAAK,GAAGtG,CAAC,IAAI,CAAC;YAC/C4K,SAAS,CAACI,IAAI,CAACD,QAAQ,CAAC,GAAG7E,QAAQ,CAAC,CAAC,CAAC,GAAG,GAAG;YAC5C0E,SAAS,CAACI,IAAI,CAACD,QAAQ,GAAG,CAAC,CAAC,GAAG7E,QAAQ,CAAC,CAAC,CAAC,GAAG,GAAG;YAChD0E,SAAS,CAACI,IAAI,CAACD,QAAQ,GAAG,CAAC,CAAC,GAAG7E,QAAQ,CAAC,CAAC,CAAC,GAAG,GAAG;YAChD0E,SAAS,CAACI,IAAI,CAACD,QAAQ,GAAG,CAAC,CAAC,GAAG7E,QAAQ,CAAC,CAAC,CAAC,GAAG,GAAG;UACpD;QACJ;;QAEA;QACA+E,iBAAiB,CAACL,SAAS,CAAC,CAACM,IAAI,CAAC,UAAAC,QAAQ;UAAA,OACtCxB,QAAQ,CAACyB,SAAS,CAACD,QAAQ,EACvB,CAAC,EAAE1E,MAAM,IAAI,CAAC,GAAG8D,OAAO,GAAGF,QAAQ,CAAC;UAAE;UACtC/D,KAAK,EAAEG,MAAM,IAAI8D,OAAO,GAAGD,OAAO,CAAC,GAAGD,QAAQ;UAAE;UAChD,CAAC,EAAE5D,MAAM,GAAGgE,CAAC;UAAE;UACfnE,KAAK,EAAEG,MAAM,CAAC;UAAA,CACjB;QAAA,EACJ;MACL,CAAC;MAxBD,KAAK,IAAIgE,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGP,eAAe,CAACxI,MAAM,EAAE+I,CAAC,EAAE;QAAAD,KAAA,CAAAC,CAAA;MAAA;IAyBnD;EAAC;IAAAxG,GAAA;IAAAqD,KAAA,EAED,SAAAyC,eAAesB,QAAQ,EAAE;MACrB,IAAM7E,UAAU,GAAG,IAAI,CAACA,UAAU;MAClC,IAAM3F,MAAM,GAAI,IAAI,CAACA,MAAM,GAAG,IAAI,CAACsE,UAAU,CAAC0B,OAAO,CAAChG,MAAO;MAC7D,IAAM+F,QAAQ,GAAG,IAAI,CAACA,QAAQ;MAE9B,IAAI,CAAC/F,MAAM,EAAE;QACT,IAAI,CAAC4I,SAAS,CAAC,OAAO,EAAE,mCAAmC,CAAC;QAC5D;MACJ;;MAEA;MACA,IAAMrK,UAAU,GAAGyB,MAAM,CAACzB,UAAU;MACpC,IAAMkM,WAAW,GAAG,EAAE;MAEtB,IAAI5E,QAAQ,GAAG,IAAI,CAACA,QAAQ;MAC5B,IAAI,CAACA,QAAQ,EAAE;QACX,IAAM6E,kBAAkB,GAAG1K,MAAM,CAACa,MAAM,GAAG,IAAI,CAACgI,MAAM,CAACpD,KAAK;QAC5DI,QAAQ,GAAGzG,IAAI,CAACuL,GAAG,CAAC,CAAC,EAAEvL,IAAI,CAACgK,KAAK,CAACzD,UAAU,GAAG+E,kBAAkB,CAAC,CAAC;MACvE;MAEA,IAAME,GAAG,GAAG,IAAIvM,YAAG,CACfsH,UAAU,EACVpH,UAAU,EACV,IAAI,CAACC,UAAU,EACf,IAAI,CAACC,KAAK,CACb;MAED,KAAK,IAAImL,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAG7D,QAAQ,EAAE6D,CAAC,EAAE,EAAE;QAAE;QACjC,IAAMiB,WAAW,GAAG7K,MAAM,CAAC8K,cAAc,CAAClB,CAAC,CAAC;QAC5C,IAAMmB,WAAW,GAAG,EAAE;QACtB,IAAIC,aAAa,GAAG,CAAC;QAErB,OAAOA,aAAa,GAAGrF,UAAU,GAAGkF,WAAW,CAAChK,MAAM,EAAE;UACpD,IAAMoK,OAAO,GAAGJ,WAAW,CAACK,KAAK,CAC7BF,aAAa,EACbA,aAAa,GAAGrF,UAAU,CAC7B;UACD,IAAMnF,QAAQ,GAAGoK,GAAG,CAAC7K,iBAAiB,CAACkL,OAAO,CAAC;UAC/C,IAAME,KAAK,GAAG,IAAIC,UAAU,CAACzF,UAAU,GAAG,CAAC,CAAC;UAC5C,IAAIsE,CAAC;UACL,KAAKA,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGtE,UAAU,GAAG,CAAC,EAAEsE,CAAC,EAAE,EAAE;YACjCkB,KAAK,CAAClB,CAAC,CAAC,GAAG7K,IAAI,CAACuL,GAAG,CAAC,CAAC,GAAG,EAAEvL,IAAI,CAACiM,KAAK,CAAC7K,QAAQ,CAACyJ,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;UAC3D;UACAc,WAAW,CAACvF,IAAI,CAAC2F,KAAK,CAAC;UACvB;;UAEAH,aAAa,IAAIrF,UAAU,GAAGE,QAAQ;QAC1C;QACA4E,WAAW,CAACjF,IAAI,CAACuF,WAAW,CAAC;QAC7B;MACJ;;MACAP,QAAQ,CAACC,WAAW,EAAE,IAAI,CAAC;IAC/B;EAAC;IAAArH,GAAA;IAAAqD,KAAA,EAED,SAAAwC,oBAAoBqC,GAAG,EAAE;MAAA,IAAAC,MAAA;MACrB,IAAMC,OAAO,GAAG,IAAI,CAACjH,IAAI,CAACkH,SAAS,CAAC;QAAEH,GAAG,EAAEA;MAAI,CAAC,CAAC;MAEjDE,OAAO,CAAChF,EAAE,CAAC,SAAS,EAAE,UAAA2D,IAAI;QAAA,OACtBoB,MAAI,CAACpC,eAAe,CAACuC,IAAI,CAACC,KAAK,CAACxB,IAAI,CAAC,EAAEoB,MAAI,CAAC;MAAA,EAC/C;MACDC,OAAO,CAAChF,EAAE,CAAC,OAAO,EAAE,UAAA9B,CAAC;QAAA,OAAI6G,MAAI,CAAC3C,SAAS,CAAC,OAAO,EAAElE,CAAC,CAAC;MAAA,EAAC;MAEpD,OAAO8G,OAAO;IAClB;EAAC;IAAApI,GAAA;IAAAqD,KAAA,EAED,SAAAmF,SAASC,IAAI,EAAE;MACX,OAAOA,IAAI,IAAI,IAAI,GAAG,CAACA,IAAI,GAAG,IAAI,EAAEC,OAAO,CAAC,CAAC,CAAC,GAAG1M,IAAI,CAACgK,KAAK,CAACyC,IAAI,CAAC;IACrE;EAAC;IAAAzI,GAAA;IAAAqD,KAAA,EAED,SAAAsF,SAASF,IAAI,EAAE;MACX,OAAOA,IAAI,IAAI,IAAI,GAAG,KAAK,GAAG,IAAI;IACtC;EAAC;IAAAzI,GAAA;IAAAqD,KAAA,EAED,SAAAsB,WACIiE,MAAM,EACNC,YAAY,EACZC,YAAY,EACZC,QAAQ,EACRC,aAAa,EACbC,aAAa,EACbC,SAAS,EACTpH,SAAS,EACX;MACE,IAAMqH,iBAAiB,GAAG,IAAI,CAAC3G,MAAM;MACrCoG,MAAM,GAAGA,MAAM,IAAI,kBAAkB;MACrCC,YAAY,GAAGA,YAAY,IAAI,MAAM;MACrCC,YAAY,GAAGA,YAAY,IAAI,MAAM;MACrCC,QAAQ,GAAGA,QAAQ,IAAI,WAAW;MAClCC,aAAa,GAAGA,aAAa,IAAI,MAAM;MACvCC,aAAa,GAAGA,aAAa,IAAI,MAAM;MACvCC,SAAS,GAAGA,SAAS,IAAI,QAAQ;MACjCpH,SAAS,GAAGA,SAAS,IAAI,aAAa;MACtC,IAAMsH,OAAO,GAAG,EAAE;MAClB,IAAMC,OAAO,GAAGF,iBAAiB,IAAI,GAAG;MACxC,IAAMG,UAAU,GAAG,CAAC,IAAID,OAAO,GAAG,GAAG,CAAC;MACtC,IAAME,SAAS,GAAG,IAAI,CAACzG,YAAY;MACnC,IAAM0G,IAAI,GAAG,CAAC,IAAI,CAACzG,YAAY,GAAGwG,SAAS,IAAID,UAAU;;MAEzD;MACA,IAAMG,GAAG,GAAG,IAAI,CAACtF,QAAQ,CAACwB,UAAU,CAAC,IAAI,CAAC;MAC1C,IAAM+D,SAAS,GAAGC,MAAM,CAACC,gBAAgB;MACzC,IAAI,CAACzF,QAAQ,CAAC3B,MAAM,GAAG,IAAI,CAACA,MAAM,GAAG,IAAI,CAACG,QAAQ,GAAG+G,SAAS;MAC9D,IAAI,CAACvF,QAAQ,CAAC9B,KAAK,GAAG+G,OAAO,GAAGM,SAAS;MACzCD,GAAG,CAACI,KAAK,CAACH,SAAS,EAAEA,SAAS,CAAC;MAE/B,IAAI,CAACD,GAAG,EAAE;QACN;MACJ;MAEA,KAAK,IAAIjD,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAG,IAAI,CAAC7D,QAAQ,EAAE6D,CAAC,EAAE,EAAE;QAAE;QACtC;QACAiD,GAAG,CAACK,SAAS,GAAGlB,MAAM;QACtBa,GAAG,CAACM,QAAQ,CAAC,CAAC,EAAEvD,CAAC,GAAG6C,OAAO,EAAED,OAAO,EAAE,CAAC,CAAC,GAAG5C,CAAC,IAAI6C,OAAO,CAAC;QACxDI,GAAG,CAACO,IAAI,EAAE;QACV,IAAIjO,CAAC;;QAEL;QACA,KAAKA,CAAC,GAAG,CAAC,EAAEA,CAAC,IAAIuN,UAAU,EAAEvN,CAAC,EAAE,EAAE;UAC9B0N,GAAG,CAACP,SAAS,GAAGA,SAAS;UACzBO,GAAG,CAACQ,YAAY,GAAG,QAAQ;UAE3B,IAAMxB,IAAI,GAAGc,SAAS,GAAGC,IAAI,GAAGzN,CAAC;UACjC,IAAMmO,KAAK,GAAG,IAAI,CAAC1B,QAAQ,CAACC,IAAI,CAAC;UACjC,IAAM0B,KAAK,GAAG,IAAI,CAACxB,QAAQ,CAACF,IAAI,CAAC;UACjC,IAAM2B,YAAY,GAAG,CAAC;UACtB,IAAMC,CAAC,GAAG,EAAE;UACZ,IAAIC,CAAC;UAEL,IAAIvO,CAAC,IAAI,CAAC,EAAE;YACRuO,CAAC,GAAG,CAAC,CAAC,GAAG9D,CAAC,IAAI6C,OAAO,GAAGtN,CAAC,GAAG,EAAE;YAC9B;YACA0N,GAAG,CAACK,SAAS,GAAGb,aAAa;YAC7BQ,GAAG,CAACc,IAAI,GAAGzB,YAAY,GAAG,GAAG,GAAGC,QAAQ;YACxCU,GAAG,CAACe,QAAQ,CAACL,KAAK,EAAEE,CAAC,GAAG,EAAE,EAAEC,CAAC,CAAC;YAC9B;YACAb,GAAG,CAACK,SAAS,GAAGd,aAAa;YAC7BS,GAAG,CAACc,IAAI,GAAG1B,YAAY,GAAG,GAAG,GAAGE,QAAQ;YACxCU,GAAG,CAACe,QAAQ,CAACN,KAAK,EAAEG,CAAC,EAAEC,CAAC,CAAC;UAC7B,CAAC,MAAM;YACHA,CAAC,GAAG,CAAC,CAAC,GAAG9D,CAAC,IAAI6C,OAAO,GAAGtN,CAAC,GAAG,EAAE,GAAGqO,YAAY;YAC7C;YACAX,GAAG,CAACK,SAAS,GAAGb,aAAa;YAC7BQ,GAAG,CAACc,IAAI,GAAGzB,YAAY,GAAG,GAAG,GAAGC,QAAQ;YACxCU,GAAG,CAACe,QAAQ,CAACL,KAAK,EAAEE,CAAC,GAAG,EAAE,EAAEC,CAAC,CAAC;YAC9B;YACAb,GAAG,CAACK,SAAS,GAAGd,aAAa;YAC7BS,GAAG,CAACc,IAAI,GAAG1B,YAAY,GAAG,GAAG,GAAGE,QAAQ;YACxCU,GAAG,CAACe,QAAQ,CAACN,KAAK,EAAEG,CAAC,EAAEC,CAAC,CAAC;UAC7B;QACJ;MACJ;IACJ;EAAC;IAAAtK,GAAA;IAAAqD,KAAA,EAED,SAAA9B,aAAaD,CAAC,EAAE;MACZ,IAAI,IAAI,CAAC4B,OAAO,EAAE;QACd,IAAI,CAACA,OAAO,CAACuH,UAAU,GAAGnJ,CAAC,CAAC/B,MAAM,CAACkL,UAAU;MACjD;IACJ;EAAC;IAAAzK,GAAA;IAAAqD,KAAA,EAED,SAAAqD,SAASgE,SAAS,EAAE;MAChB,IAAMC,aAAa,GAAG,IAAI,CAACtI,KAAK;MAChC,IAAMuI,SAAS,GAAG,EAAE;MAEpB,IAAMC,QAAQ,GAAG,CAAC,GAAGH,SAAS,CAACjN,MAAM;MACrC,IAAMqN,QAAQ,GAAG,CAAC,GAAGH,aAAa;MAClC,IAAI5O,CAAC;MAEL,KAAKA,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAG4O,aAAa,EAAE5O,CAAC,EAAE,EAAE;QAChC,IAAMgP,MAAM,GAAG,IAAIC,KAAK,CAACN,SAAS,CAAC,CAAC,CAAC,CAACjN,MAAM,CAAC;QAC7C,IAAIoJ,CAAC;QAEL,KAAKA,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAG6D,SAAS,CAACjN,MAAM,EAAEoJ,CAAC,EAAE,EAAE;UACnC,IAAMoE,QAAQ,GAAGpE,CAAC,GAAGgE,QAAQ;UAC7B,IAAMK,MAAM,GAAGD,QAAQ,GAAGJ,QAAQ;UAClC,IAAMM,QAAQ,GAAGpP,CAAC,GAAG+O,QAAQ;UAC7B,IAAMM,MAAM,GAAGD,QAAQ,GAAGL,QAAQ;UAElC,IAAMO,OAAO,GACTH,MAAM,IAAIC,QAAQ,IAAIC,MAAM,IAAIH,QAAQ,GAClC,CAAC,GACDjP,IAAI,CAACsP,GAAG,CACNtP,IAAI,CAACuL,GAAG,CAAC2D,MAAM,EAAEC,QAAQ,CAAC,EAC1BnP,IAAI,CAACuL,GAAG,CAAC6D,MAAM,EAAEH,QAAQ,CAAC,CAC7B,GACDjP,IAAI,CAACuL,GAAG,CACJvL,IAAI,CAACsP,GAAG,CAACJ,MAAM,EAAEC,QAAQ,CAAC,EAC1BnP,IAAI,CAACsP,GAAG,CAACF,MAAM,EAAEH,QAAQ,CAAC,CAC7B;UACT,IAAI5N,CAAC;UACL;UACA,IAAIgO,OAAO,GAAG,CAAC,EAAE;YACb,KAAKhO,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGqN,SAAS,CAAC,CAAC,CAAC,CAACjN,MAAM,EAAEJ,CAAC,EAAE,EAAE;cACtC,IAAI0N,MAAM,CAAC1N,CAAC,CAAC,IAAI,IAAI,EAAE;gBACnB0N,MAAM,CAAC1N,CAAC,CAAC,GAAG,CAAC;cACjB;cACA0N,MAAM,CAAC1N,CAAC,CAAC,IAAKgO,OAAO,GAAGP,QAAQ,GAAIJ,SAAS,CAAC7D,CAAC,CAAC,CAACxJ,CAAC,CAAC;YACvD;UACJ;UACA;QACJ;;QAEA,IAAMkO,SAAS,GAAG,IAAIvD,UAAU,CAAC0C,SAAS,CAAC,CAAC,CAAC,CAACjN,MAAM,CAAC;QACrD,IAAI+N,CAAC;QAEL,KAAKA,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGd,SAAS,CAAC,CAAC,CAAC,CAACjN,MAAM,EAAE+N,CAAC,EAAE,EAAE;UACtCD,SAAS,CAACC,CAAC,CAAC,GAAGT,MAAM,CAACS,CAAC,CAAC;QAC5B;QAEAZ,SAAS,CAACxI,IAAI,CAACmJ,SAAS,CAAC;MAC7B;MAEA,OAAOX,SAAS;IACpB;EAAC;IAAA5K,GAAA;IAAAqD,KAAA;IA3cD;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACI,SAAAoI,OAAc1K,MAAM,EAAE;MAClB,OAAO;QACH2K,IAAI,EAAE,aAAa;QACnBC,SAAS,EAAE5K,MAAM,IAAIA,MAAM,CAAC4K,SAAS,GAAG5K,MAAM,CAAC4K,SAAS,GAAG,KAAK;QAChE5K,MAAM,EAAEA,MAAM;QACdZ,WAAW,EAAE;UACTlF,GAAG,EAAEA;QACT,CAAC;QACDkE,QAAQ,EAAE2B;MACd,CAAC;IACL;EAAC;EAAA,OAAAA,iBAAA;AAAA;AAAAxC,kBAAA,GAAAwC,iBAAA;AAAAzC,MAAA,CAAAC,OAAA,GAAAA,OAAA,CAAAC,OAAA;;;;;;UChFL;UACA;;UAEA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;;UAEA;UACA;;UAEA;UACA;UACA;;;;UEtBA;UACA;UACA;UACA","sources":["webpack://WaveSurfer/webpack/universalModuleDefinition","webpack://WaveSurfer/./src/plugin/spectrogram/fft.js","webpack://WaveSurfer/./src/plugin/spectrogram/index.js","webpack://WaveSurfer/webpack/bootstrap","webpack://WaveSurfer/webpack/before-startup","webpack://WaveSurfer/webpack/startup","webpack://WaveSurfer/webpack/after-startup"],"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(\"WaveSurfer\", [], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"WaveSurfer\"] = factory();\n\telse\n\t\troot[\"WaveSurfer\"] = root[\"WaveSurfer\"] || {}, root[\"WaveSurfer\"][\"spectrogram\"] = factory();\n})(self, () => {\nreturn ","/* eslint-disable complexity, no-redeclare, no-var, one-var */\n\n/**\n * Calculate FFT - Based on https://github.com/corbanbrook/dsp.js\n *\n * @param {Number} bufferSize Buffer size\n * @param {Number} sampleRate Sample rate\n * @param {Function} windowFunc Window function\n * @param {Number} alpha Alpha channel\n */\nexport default function FFT(bufferSize, sampleRate, windowFunc, alpha) {\n this.bufferSize = bufferSize;\n this.sampleRate = sampleRate;\n this.bandwidth = (2 / bufferSize) * (sampleRate / 2);\n\n this.sinTable = new Float32Array(bufferSize);\n this.cosTable = new Float32Array(bufferSize);\n this.windowValues = new Float32Array(bufferSize);\n this.reverseTable = new Uint32Array(bufferSize);\n\n this.peakBand = 0;\n this.peak = 0;\n\n var i;\n switch (windowFunc) {\n case 'bartlett':\n for (i = 0; i < bufferSize; i++) {\n this.windowValues[i] =\n (2 / (bufferSize - 1)) *\n ((bufferSize - 1) / 2 - Math.abs(i - (bufferSize - 1) / 2));\n }\n break;\n case 'bartlettHann':\n for (i = 0; i < bufferSize; i++) {\n this.windowValues[i] =\n 0.62 -\n 0.48 * Math.abs(i / (bufferSize - 1) - 0.5) -\n 0.38 * Math.cos((Math.PI * 2 * i) / (bufferSize - 1));\n }\n break;\n case 'blackman':\n alpha = alpha || 0.16;\n for (i = 0; i < bufferSize; i++) {\n this.windowValues[i] =\n (1 - alpha) / 2 -\n 0.5 * Math.cos((Math.PI * 2 * i) / (bufferSize - 1)) +\n (alpha / 2) *\n Math.cos((4 * Math.PI * i) / (bufferSize - 1));\n }\n break;\n case 'cosine':\n for (i = 0; i < bufferSize; i++) {\n this.windowValues[i] = Math.cos(\n (Math.PI * i) / (bufferSize - 1) - Math.PI / 2\n );\n }\n break;\n case 'gauss':\n alpha = alpha || 0.25;\n for (i = 0; i < bufferSize; i++) {\n this.windowValues[i] = Math.pow(\n Math.E,\n -0.5 *\n Math.pow(\n (i - (bufferSize - 1) / 2) /\n ((alpha * (bufferSize - 1)) / 2),\n 2\n )\n );\n }\n break;\n case 'hamming':\n for (i = 0; i < bufferSize; i++) {\n this.windowValues[i] =\n 0.54 -\n 0.46 * Math.cos((Math.PI * 2 * i) / (bufferSize - 1));\n }\n break;\n case 'hann':\n case undefined:\n for (i = 0; i < bufferSize; i++) {\n this.windowValues[i] =\n 0.5 * (1 - Math.cos((Math.PI * 2 * i) / (bufferSize - 1)));\n }\n break;\n case 'lanczoz':\n for (i = 0; i < bufferSize; i++) {\n this.windowValues[i] =\n Math.sin(Math.PI * ((2 * i) / (bufferSize - 1) - 1)) /\n (Math.PI * ((2 * i) / (bufferSize - 1) - 1));\n }\n break;\n case 'rectangular':\n for (i = 0; i < bufferSize; i++) {\n this.windowValues[i] = 1;\n }\n break;\n case 'triangular':\n for (i = 0; i < bufferSize; i++) {\n this.windowValues[i] =\n (2 / bufferSize) *\n (bufferSize / 2 - Math.abs(i - (bufferSize - 1) / 2));\n }\n break;\n default:\n throw Error(\"No such window function '\" + windowFunc + \"'\");\n }\n\n var limit = 1;\n var bit = bufferSize >> 1;\n var i;\n\n while (limit < bufferSize) {\n for (i = 0; i < limit; i++) {\n this.reverseTable[i + limit] = this.reverseTable[i] + bit;\n }\n\n limit = limit << 1;\n bit = bit >> 1;\n }\n\n for (i = 0; i < bufferSize; i++) {\n this.sinTable[i] = Math.sin(-Math.PI / i);\n this.cosTable[i] = Math.cos(-Math.PI / i);\n }\n\n this.calculateSpectrum = function(buffer) {\n // Locally scope variables for speed up\n var bufferSize = this.bufferSize,\n cosTable = this.cosTable,\n sinTable = this.sinTable,\n reverseTable = this.reverseTable,\n real = new Float32Array(bufferSize),\n imag = new Float32Array(bufferSize),\n bSi = 2 / this.bufferSize,\n sqrt = Math.sqrt,\n rval,\n ival,\n mag,\n spectrum = new Float32Array(bufferSize / 2);\n\n var k = Math.floor(Math.log(bufferSize) / Math.LN2);\n\n if (Math.pow(2, k) !== bufferSize) {\n throw 'Invalid buffer size, must be a power of 2.';\n }\n if (bufferSize !== buffer.length) {\n throw 'Supplied buffer is not the same size as defined FFT. FFT Size: ' +\n bufferSize +\n ' Buffer Size: ' +\n buffer.length;\n }\n\n var halfSize = 1,\n phaseShiftStepReal,\n phaseShiftStepImag,\n currentPhaseShiftReal,\n currentPhaseShiftImag,\n off,\n tr,\n ti,\n tmpReal;\n\n for (var i = 0; i < bufferSize; i++) {\n real[i] =\n buffer[reverseTable[i]] * this.windowValues[reverseTable[i]];\n imag[i] = 0;\n }\n\n while (halfSize < bufferSize) {\n phaseShiftStepReal = cosTable[halfSize];\n phaseShiftStepImag = sinTable[halfSize];\n\n currentPhaseShiftReal = 1;\n currentPhaseShiftImag = 0;\n\n for (var fftStep = 0; fftStep < halfSize; fftStep++) {\n var i = fftStep;\n\n while (i < bufferSize) {\n off = i + halfSize;\n tr =\n currentPhaseShiftReal * real[off] -\n currentPhaseShiftImag * imag[off];\n ti =\n currentPhaseShiftReal * imag[off] +\n currentPhaseShiftImag * real[off];\n\n real[off] = real[i] - tr;\n imag[off] = imag[i] - ti;\n real[i] += tr;\n imag[i] += ti;\n\n i += halfSize << 1;\n }\n\n tmpReal = currentPhaseShiftReal;\n currentPhaseShiftReal =\n tmpReal * phaseShiftStepReal -\n currentPhaseShiftImag * phaseShiftStepImag;\n currentPhaseShiftImag =\n tmpReal * phaseShiftStepImag +\n currentPhaseShiftImag * phaseShiftStepReal;\n }\n\n halfSize = halfSize << 1;\n }\n\n for (var i = 0, N = bufferSize / 2; i < N; i++) {\n rval = real[i];\n ival = imag[i];\n mag = bSi * sqrt(rval * rval + ival * ival);\n\n if (mag > this.peak) {\n this.peakBand = i;\n this.peak = mag;\n }\n spectrum[i] = mag;\n }\n return spectrum;\n };\n}\n","/* eslint-enable complexity, no-redeclare, no-var, one-var */\n\nimport FFT from './fft';\n\n/**\n * @typedef {Object} SpectrogramPluginParams\n * @property {string|HTMLElement} container Selector of element or element in\n * which to render\n * @property {number} fftSamples=512 Number of samples to fetch to FFT. Must be\n * a power of 2.\n * @property {boolean} splitChannels=false Render with separate spectrograms for\n * the channels of the audio\n * @property {number} height=fftSamples/2 Height of the spectrogram view in CSS\n * pixels\n * @property {boolean} labels Set to true to display frequency labels.\n * @property {number} noverlap Size of the overlapping window. Must be <\n * fftSamples. Auto deduced from canvas size by default.\n * @property {string} windowFunc='hann' The window function to be used. One of\n * these: `'bartlett'`, `'bartlettHann'`, `'blackman'`, `'cosine'`, `'gauss'`,\n * `'hamming'`, `'hann'`, `'lanczoz'`, `'rectangular'`, `'triangular'`\n * @property {?number} alpha Some window functions have this extra value.\n * (Between 0 and 1)\n * @property {number} pixelRatio=wavesurfer.params.pixelRatio to control the\n * size of the spectrogram in relation with its canvas. 1 = Draw on the whole\n * canvas. 2 = Draw on a quarter (1/2 the length and 1/2 the width)\n * @property {number} frequencyMin=0 Min frequency to scale spectrogram.\n * @property {number} frequencyMax=12000 Max frequency to scale spectrogram.\n * Set this to samplerate/2 to draw whole range of spectrogram.\n * @property {?boolean} deferInit Set to true to manually call\n * `initPlugin('spectrogram')`\n * @property {?number[][]} colorMap A 256 long array of 4-element arrays.\n * Each entry should contain a float between 0 and 1 and specify\n * r, g, b, and alpha.\n */\n\n/**\n * Render a spectrogram visualisation of the audio.\n *\n * @implements {PluginClass}\n * @extends {Observer}\n * @example\n * // es6\n * import SpectrogramPlugin from 'wavesurfer.spectrogram.js';\n *\n * // commonjs\n * var SpectrogramPlugin = require('wavesurfer.spectrogram.js');\n *\n * // if you are using <script> tags\n * var SpectrogramPlugin = window.WaveSurfer.spectrogram;\n *\n * // ... initialising wavesurfer with the plugin\n * var wavesurfer = WaveSurfer.create({\n * // wavesurfer options ...\n * plugins: [\n * SpectrogramPlugin.create({\n * // plugin options ...\n * })\n * ]\n * });\n */\nexport default class SpectrogramPlugin {\n /**\n * Spectrogram plugin definition factory\n *\n * This function must be used to create a plugin definition which can be\n * used by wavesurfer to correctly instantiate the plugin.\n *\n * @param {SpectrogramPluginParams} params Parameters used to initialise the plugin\n * @return {PluginDefinition} An object representing the plugin.\n */\n static create(params) {\n return {\n name: 'spectrogram',\n deferInit: params && params.deferInit ? params.deferInit : false,\n params: params,\n staticProps: {\n FFT: FFT\n },\n instance: SpectrogramPlugin\n };\n }\n\n constructor(params, ws) {\n this.params = params;\n this.wavesurfer = ws;\n this.util = ws.util;\n\n this.frequenciesDataUrl = params.frequenciesDataUrl;\n this._onScroll = e => {\n this.updateScroll(e);\n };\n this._onRender = () => {\n this.render();\n };\n this._onWrapperClick = e => {\n this._wrapperClickHandler(e);\n };\n this._onReady = () => {\n const drawer = (this.drawer = ws.drawer);\n\n this.container =\n 'string' == typeof params.container\n ? document.querySelector(params.container)\n : params.container;\n\n if (!this.container) {\n throw Error('No container for WaveSurfer spectrogram');\n }\n if (params.colorMap) {\n if (params.colorMap.length < 256) {\n throw new Error('Colormap must contain 256 elements');\n }\n for (let i = 0; i < params.colorMap.length; i++) {\n const cmEntry = params.colorMap[i];\n if (cmEntry.length !== 4) {\n throw new Error(\n 'ColorMap entries must contain 4 values'\n );\n }\n }\n this.colorMap = params.colorMap;\n } else {\n this.colorMap = [];\n for (let i = 0; i < 256; i++) {\n const val = (255 - i) / 256;\n this.colorMap.push([val, val, val, 1]);\n }\n }\n this.width = drawer.width;\n this.pixelRatio = this.params.pixelRatio || ws.params.pixelRatio;\n this.fftSamples =\n this.params.fftSamples || ws.params.fftSamples || 512;\n this.height = this.params.height || this.fftSamples / 2;\n this.noverlap = params.noverlap;\n this.windowFunc = params.windowFunc;\n this.alpha = params.alpha;\n this.splitChannels = params.splitChannels;\n this.channels = this.splitChannels ? ws.backend.buffer.numberOfChannels : 1;\n\n // Getting file's original samplerate is difficult(#1248).\n // So set 12kHz default to render like wavesurfer.js 5.x.\n this.frequencyMin = params.frequencyMin || 0;\n this.frequencyMax = params.frequencyMax || 12000;\n\n this.createWrapper();\n this.createCanvas();\n this.render();\n\n drawer.wrapper.addEventListener('scroll', this._onScroll);\n ws.on('redraw', this._onRender);\n };\n }\n\n init() {\n // Check if wavesurfer is ready\n if (this.wavesurfer.isReady) {\n this._onReady();\n } else {\n this.wavesurfer.once('ready', this._onReady);\n }\n }\n\n destroy() {\n this.unAll();\n this.wavesurfer.un('ready', this._onReady);\n this.wavesurfer.un('redraw', this._onRender);\n this.drawer && this.drawer.wrapper.removeEventListener('scroll', this._onScroll);\n this.wavesurfer = null;\n this.util = null;\n this.params = null;\n if (this.wrapper) {\n this.wrapper.removeEventListener('click', this._onWrapperClick);\n this.wrapper.parentNode.removeChild(this.wrapper);\n this.wrapper = null;\n }\n }\n\n createWrapper() {\n const prevSpectrogram = this.container.querySelector('spectrogram');\n if (prevSpectrogram) {\n this.container.removeChild(prevSpectrogram);\n }\n const wsParams = this.wavesurfer.params;\n this.wrapper = document.createElement('spectrogram');\n // if labels are active\n if (this.params.labels) {\n const labelsEl = (this.labelsEl = document.createElement('canvas'));\n labelsEl.classList.add('spec-labels');\n this.drawer.style(labelsEl, {\n position: 'absolute',\n zIndex: 9,\n height: `${this.height * this.channels}px`,\n width: `55px`\n });\n this.wrapper.appendChild(labelsEl);\n this.loadLabels(\n 'rgba(68,68,68,0.5)',\n '12px',\n '10px',\n '',\n '#fff',\n '#f7f7f7',\n 'center',\n '#specLabels'\n );\n }\n\n this.drawer.style(this.wrapper, {\n display: 'block',\n position: 'relative',\n userSelect: 'none',\n webkitUserSelect: 'none',\n height: `${this.height * this.channels}px`\n });\n\n if (wsParams.fillParent || wsParams.scrollParent) {\n this.drawer.style(this.wrapper, {\n width: '100%',\n overflowX: 'hidden',\n overflowY: 'hidden'\n });\n }\n this.container.appendChild(this.wrapper);\n\n this.wrapper.addEventListener('click', this._onWrapperClick);\n }\n\n _wrapperClickHandler(event) {\n event.preventDefault();\n const relX = 'offsetX' in event ? event.offsetX : event.layerX;\n this.fireEvent('click', relX / this.width || 0);\n }\n\n createCanvas() {\n const canvas = (this.canvas = this.wrapper.appendChild(\n document.createElement('canvas')\n ));\n\n this.spectrCc = canvas.getContext('2d');\n\n this.util.style(canvas, {\n position: 'absolute',\n zIndex: 4\n });\n }\n\n render() {\n this.updateCanvasStyle();\n\n if (this.frequenciesDataUrl) {\n this.loadFrequenciesData(this.frequenciesDataUrl);\n } else {\n this.getFrequencies(this.drawSpectrogram);\n }\n }\n\n updateCanvasStyle() {\n const width = Math.round(this.width / this.pixelRatio) + 'px';\n this.canvas.width = this.width;\n this.canvas.height = this.fftSamples / 2 * this.channels;\n this.canvas.style.width = width;\n this.canvas.style.height = this.height + 'px';\n }\n\n drawSpectrogram(frequenciesData, my) {\n if (!isNaN(frequenciesData[0][0])) { // data is 1ch [sample, freq] format\n // to [channel, sample, freq] format\n frequenciesData = [frequenciesData];\n }\n\n const spectrCc = my.spectrCc;\n const height = my.fftSamples / 2;\n const width = my.width;\n const freqFrom = my.buffer.sampleRate / 2;\n const freqMin = my.frequencyMin;\n const freqMax = my.frequencyMax;\n\n if (!spectrCc) {\n return;\n }\n\n for (let c = 0; c < frequenciesData.length; c++) { // for each channel\n const pixels = my.resample(frequenciesData[c]);\n const imageData = new ImageData(width, height);\n\n for (let i = 0; i < pixels.length; i++) {\n for (let j = 0; j < pixels[i].length; j++) {\n const colorMap = my.colorMap[pixels[i][j]];\n const redIndex = ((height - j) * width + i) * 4;\n imageData.data[redIndex] = colorMap[0] * 255;\n imageData.data[redIndex + 1] = colorMap[1] * 255;\n imageData.data[redIndex + 2] = colorMap[2] * 255;\n imageData.data[redIndex + 3] = colorMap[3] * 255;\n }\n }\n\n // scale and stack spectrograms\n createImageBitmap(imageData).then(renderer =>\n spectrCc.drawImage(renderer,\n 0, height * (1 - freqMax / freqFrom), // source x, y\n width, height * (freqMax - freqMin) / freqFrom, // source width, height\n 0, height * c, // destination x, y\n width, height // destination width, height\n )\n );\n }\n }\n\n getFrequencies(callback) {\n const fftSamples = this.fftSamples;\n const buffer = (this.buffer = this.wavesurfer.backend.buffer);\n const channels = this.channels;\n\n if (!buffer) {\n this.fireEvent('error', 'Web Audio buffer is not available');\n return;\n }\n\n // This may differ from file samplerate. Browser resamples audio.\n const sampleRate = buffer.sampleRate;\n const frequencies = [];\n\n let noverlap = this.noverlap;\n if (!noverlap) {\n const uniqueSamplesPerPx = buffer.length / this.canvas.width;\n noverlap = Math.max(0, Math.round(fftSamples - uniqueSamplesPerPx));\n }\n\n const fft = new FFT(\n fftSamples,\n sampleRate,\n this.windowFunc,\n this.alpha\n );\n\n for (let c = 0; c < channels; c++) { // for each channel\n const channelData = buffer.getChannelData(c);\n const channelFreq = [];\n let currentOffset = 0;\n\n while (currentOffset + fftSamples < channelData.length) {\n const segment = channelData.slice(\n currentOffset,\n currentOffset + fftSamples\n );\n const spectrum = fft.calculateSpectrum(segment);\n const array = new Uint8Array(fftSamples / 2);\n let j;\n for (j = 0; j < fftSamples / 2; j++) {\n array[j] = Math.max(-255, Math.log10(spectrum[j]) * 45);\n }\n channelFreq.push(array);\n // channelFreq: [sample, freq]\n\n currentOffset += fftSamples - noverlap;\n }\n frequencies.push(channelFreq);\n // frequencies: [channel, sample, freq]\n }\n callback(frequencies, this);\n }\n\n loadFrequenciesData(url) {\n const request = this.util.fetchFile({ url: url });\n\n request.on('success', data =>\n this.drawSpectrogram(JSON.parse(data), this)\n );\n request.on('error', e => this.fireEvent('error', e));\n\n return request;\n }\n\n freqType(freq) {\n return freq >= 1000 ? (freq / 1000).toFixed(1) : Math.round(freq);\n }\n\n unitType(freq) {\n return freq >= 1000 ? 'KHz' : 'Hz';\n }\n\n loadLabels(\n bgFill,\n fontSizeFreq,\n fontSizeUnit,\n fontType,\n textColorFreq,\n textColorUnit,\n textAlign,\n container\n ) {\n const frequenciesHeight = this.height;\n bgFill = bgFill || 'rgba(68,68,68,0)';\n fontSizeFreq = fontSizeFreq || '12px';\n fontSizeUnit = fontSizeUnit || '10px';\n fontType = fontType || 'Helvetica';\n textColorFreq = textColorFreq || '#fff';\n textColorUnit = textColorUnit || '#fff';\n textAlign = textAlign || 'center';\n container = container || '#specLabels';\n const bgWidth = 55;\n const getMaxY = frequenciesHeight || 512;\n const labelIndex = 5 * (getMaxY / 256);\n const freqStart = this.frequencyMin;\n const step = (this.frequencyMax - freqStart) / labelIndex;\n\n // prepare canvas element for labels\n const ctx = this.labelsEl.getContext('2d');\n const dispScale = window.devicePixelRatio;\n this.labelsEl.height = this.height * this.channels * dispScale;\n this.labelsEl.width = bgWidth * dispScale;\n ctx.scale(dispScale, dispScale);\n\n if (!ctx) {\n return;\n }\n\n for (let c = 0; c < this.channels; c++) { // for each channel\n // fill background\n ctx.fillStyle = bgFill;\n ctx.fillRect(0, c * getMaxY, bgWidth, (1 + c) * getMaxY);\n ctx.fill();\n let i;\n\n // render labels\n for (i = 0; i <= labelIndex; i++) {\n ctx.textAlign = textAlign;\n ctx.textBaseline = 'middle';\n\n const freq = freqStart + step * i;\n const label = this.freqType(freq);\n const units = this.unitType(freq);\n const yLabelOffset = 2;\n const x = 16;\n let y;\n\n if (i == 0) {\n y = (1 + c) * getMaxY + i - 10;\n // unit label\n ctx.fillStyle = textColorUnit;\n ctx.font = fontSizeUnit + ' ' + fontType;\n ctx.fillText(units, x + 24, y);\n // freq label\n ctx.fillStyle = textColorFreq;\n ctx.font = fontSizeFreq + ' ' + fontType;\n ctx.fillText(label, x, y);\n } else {\n y = (1 + c) * getMaxY - i * 50 + yLabelOffset;\n // unit label\n ctx.fillStyle = textColorUnit;\n ctx.font = fontSizeUnit + ' ' + fontType;\n ctx.fillText(units, x + 24, y);\n // freq label\n ctx.fillStyle = textColorFreq;\n ctx.font = fontSizeFreq + ' ' + fontType;\n ctx.fillText(label, x, y);\n }\n }\n }\n }\n\n updateScroll(e) {\n if (this.wrapper) {\n this.wrapper.scrollLeft = e.target.scrollLeft;\n }\n }\n\n resample(oldMatrix) {\n const columnsNumber = this.width;\n const newMatrix = [];\n\n const oldPiece = 1 / oldMatrix.length;\n const newPiece = 1 / columnsNumber;\n let i;\n\n for (i = 0; i < columnsNumber; i++) {\n const column = new Array(oldMatrix[0].length);\n let j;\n\n for (j = 0; j < oldMatrix.length; j++) {\n const oldStart = j * oldPiece;\n const oldEnd = oldStart + oldPiece;\n const newStart = i * newPiece;\n const newEnd = newStart + newPiece;\n\n const overlap =\n oldEnd <= newStart || newEnd <= oldStart\n ? 0\n : Math.min(\n Math.max(oldEnd, newStart),\n Math.max(newEnd, oldStart)\n ) -\n Math.max(\n Math.min(oldEnd, newStart),\n Math.min(newEnd, oldStart)\n );\n let k;\n /* eslint-disable max-depth */\n if (overlap > 0) {\n for (k = 0; k < oldMatrix[0].length; k++) {\n if (column[k] == null) {\n column[k] = 0;\n }\n column[k] += (overlap / newPiece) * oldMatrix[j][k];\n }\n }\n /* eslint-enable max-depth */\n }\n\n const intColumn = new Uint8Array(oldMatrix[0].length);\n let m;\n\n for (m = 0; m < oldMatrix[0].length; m++) {\n intColumn[m] = column[m];\n }\n\n newMatrix.push(intColumn);\n }\n\n return newMatrix;\n }\n}\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","","// startup\n// Load entry module and return exports\n// This entry module is referenced by other modules so it can't be inlined\nvar __webpack_exports__ = __webpack_require__(\"./src/plugin/spectrogram/index.js\");\n",""],"names":["FFT","bufferSize","sampleRate","windowFunc","alpha","bandwidth","sinTable","Float32Array","cosTable","windowValues","reverseTable","Uint32Array","peakBand","peak","i","Math","abs","cos","PI","pow","E","undefined","sin","Error","limit","bit","calculateSpectrum","buffer","real","imag","bSi","sqrt","rval","ival","mag","spectrum","k","floor","log","LN2","length","halfSize","phaseShiftStepReal","phaseShiftStepImag","currentPhaseShiftReal","currentPhaseShiftImag","off","tr","ti","tmpReal","fftStep","N","module","exports","default","_fft","_interopRequireDefault","require","obj","__esModule","_typeof","Symbol","iterator","constructor","prototype","_classCallCheck","instance","Constructor","TypeError","_defineProperties","target","props","descriptor","enumerable","configurable","writable","Object","defineProperty","_toPropertyKey","key","_createClass","protoProps","staticProps","arg","_toPrimitive","String","input","hint","prim","toPrimitive","res","call","Number","SpectrogramPlugin","params","ws","_this","wavesurfer","util","frequenciesDataUrl","_onScroll","e","updateScroll","_onRender","render","_onWrapperClick","_wrapperClickHandler","_onReady","drawer","container","document","querySelector","colorMap","cmEntry","val","push","width","pixelRatio","fftSamples","height","noverlap","splitChannels","channels","backend","numberOfChannels","frequencyMin","frequencyMax","createWrapper","createCanvas","wrapper","addEventListener","on","value","init","isReady","once","destroy","unAll","un","removeEventListener","parentNode","removeChild","prevSpectrogram","wsParams","createElement","labels","labelsEl","classList","add","style","position","zIndex","concat","appendChild","loadLabels","display","userSelect","webkitUserSelect","fillParent","scrollParent","overflowX","overflowY","event","preventDefault","relX","offsetX","layerX","fireEvent","canvas","spectrCc","getContext","updateCanvasStyle","loadFrequenciesData","getFrequencies","drawSpectrogram","round","frequenciesData","my","isNaN","freqFrom","freqMin","freqMax","_loop","c","pixels","resample","imageData","ImageData","j","redIndex","data","createImageBitmap","then","renderer","drawImage","callback","frequencies","uniqueSamplesPerPx","max","fft","channelData","getChannelData","channelFreq","currentOffset","segment","slice","array","Uint8Array","log10","url","_this2","request","fetchFile","JSON","parse","freqType","freq","toFixed","unitType","bgFill","fontSizeFreq","fontSizeUnit","fontType","textColorFreq","textColorUnit","textAlign","frequenciesHeight","bgWidth","getMaxY","labelIndex","freqStart","step","ctx","dispScale","window","devicePixelRatio","scale","fillStyle","fillRect","fill","textBaseline","label","units","yLabelOffset","x","y","font","fillText","scrollLeft","oldMatrix","columnsNumber","newMatrix","oldPiece","newPiece","column","Array","oldStart","oldEnd","newStart","newEnd","overlap","min","intColumn","m","create","name","deferInit"],"sourceRoot":""}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/*!
|
|
2
|
-
* wavesurfer.js spectrogram plugin 6.
|
|
2
|
+
* wavesurfer.js spectrogram plugin 6.5.0 (2023-03-11)
|
|
3
3
|
* https://wavesurfer-js.org
|
|
4
4
|
* @license BSD-3-Clause
|
|
5
5
|
*/
|
|
6
|
-
!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define("WaveSurfer",[],t):"object"==typeof exports?exports.WaveSurfer=t():(e.WaveSurfer=e.WaveSurfer||{},e.WaveSurfer.spectrogram=t())}(self,(()=>(()=>{"use strict";var e={325:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e,t,a,r){switch(this.bufferSize=e,this.sampleRate=t,this.bandwidth=2/e*(t/2),this.sinTable=new Float32Array(e),this.cosTable=new Float32Array(e),this.windowValues=new Float32Array(e),this.reverseTable=new Uint32Array(e),this.peakBand=0,this.peak=0,a){case"bartlett":for(i=0;i<e;i++)this.windowValues[i]=2/(e-1)*((e-1)/2-Math.abs(i-(e-1)/2));break;case"bartlettHann":for(i=0;i<e;i++)this.windowValues[i]=.62-.48*Math.abs(i/(e-1)-.5)-.38*Math.cos(2*Math.PI*i/(e-1));break;case"blackman":for(r=r||.16,i=0;i<e;i++)this.windowValues[i]=(1-r)/2-.5*Math.cos(2*Math.PI*i/(e-1))+r/2*Math.cos(4*Math.PI*i/(e-1));break;case"cosine":for(i=0;i<e;i++)this.windowValues[i]=Math.cos(Math.PI*i/(e-1)-Math.PI/2);break;case"gauss":for(r=r||.25,i=0;i<e;i++)this.windowValues[i]=Math.pow(Math.E,-.5*Math.pow((i-(e-1)/2)/(r*(e-1)/2),2));break;case"hamming":for(i=0;i<e;i++)this.windowValues[i]=.54-.46*Math.cos(2*Math.PI*i/(e-1));break;case"hann":case void 0:for(i=0;i<e;i++)this.windowValues[i]=.5*(1-Math.cos(2*Math.PI*i/(e-1)));break;case"lanczoz":for(i=0;i<e;i++)this.windowValues[i]=Math.sin(Math.PI*(2*i/(e-1)-1))/(Math.PI*(2*i/(e-1)-1));break;case"rectangular":for(i=0;i<e;i++)this.windowValues[i]=1;break;case"triangular":for(i=0;i<e;i++)this.windowValues[i]=2/e*(e/2-Math.abs(i-(e-1)/2));break;default:throw Error("No such window function '"+a+"'")}var i,n=1,s=e>>1;for(;n<e;){for(i=0;i<n;i++)this.reverseTable[i+n]=this.reverseTable[i]+s;n<<=1,s>>=1}for(i=0;i<e;i++)this.sinTable[i]=Math.sin(-Math.PI/i),this.cosTable[i]=Math.cos(-Math.PI/i);this.calculateSpectrum=function(e){var t,a,r,i=this.bufferSize,n=this.cosTable,s=this.sinTable,l=this.reverseTable,o=new Float32Array(i),h=new Float32Array(i),f=2/this.bufferSize,c=Math.sqrt,u=new Float32Array(i/2),p=Math.floor(Math.log(i)/Math.LN2);if(Math.pow(2,p)!==i)throw"Invalid buffer size, must be a power of 2.";if(i!==e.length)throw"Supplied buffer is not the same size as defined FFT. FFT Size: "+i+" Buffer Size: "+e.length;for(var d,v,w,y,m,b,M,g,k=1,x=0;x<i;x++)o[x]=e[l[x]]*this.windowValues[l[x]],h[x]=0;for(;k<i;){d=n[k],v=s[k],w=1,y=0;for(var S=0;S<k;S++){for(x=S;x<i;)b=w*o[m=x+k]-y*h[m],M=w*h[m]+y*o[m],o[m]=o[x]-b,h[m]=h[x]-M,o[x]+=b,h[x]+=M,x+=k<<1;w=(g=w)*d-y*v,y=g*v+y*d}k<<=1}x=0;for(var C=i/2;x<C;x++)(r=f*c((t=o[x])*t+(a=h[x])*a))>this.peak&&(this.peakBand=x,this.peak=r),u[x]=r;return u}},e.exports=t.default},943:(e,t,a)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var r,i=(r=a(325))&&r.__esModule?r:{default:r};function n(e,t){for(var a=0;a<t.length;a++){var r=t[a];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}var s=function(){function e(t,a){var r=this;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.params=t,this.wavesurfer=a,this.util=a.util,this.frequenciesDataUrl=t.frequenciesDataUrl,this._onScroll=function(e){r.updateScroll(e)},this._onRender=function(){r.render()},this._onWrapperClick=function(e){r._wrapperClickHandler(e)},this._onReady=function(){var e=r.drawer=a.drawer;if(r.container="string"==typeof t.container?document.querySelector(t.container):t.container,!r.container)throw Error("No container for WaveSurfer spectrogram");if(t.colorMap){if(t.colorMap.length<256)throw new Error("Colormap must contain 256 elements");for(var i=0;i<t.colorMap.length;i++){if(4!==t.colorMap[i].length)throw new Error("ColorMap entries must contain 4 values")}r.colorMap=t.colorMap}else{r.colorMap=[];for(var n=0;n<256;n++){var s=(255-n)/256;r.colorMap.push([s,s,s,1])}}r.width=e.width,r.pixelRatio=r.params.pixelRatio||a.params.pixelRatio,r.fftSamples=r.params.fftSamples||a.params.fftSamples||512,r.height=r.params.height||r.fftSamples/2,r.noverlap=t.noverlap,r.windowFunc=t.windowFunc,r.alpha=t.alpha,r.splitChannels=t.splitChannels,r.channels=r.splitChannels?a.backend.buffer.numberOfChannels:1,r.frequencyMin=t.frequencyMin||0,r.frequencyMax=t.frequencyMax||12e3,r.createWrapper(),r.createCanvas(),r.render(),e.wrapper.addEventListener("scroll",r._onScroll),a.on("redraw",r._onRender)}}var t,a,r;return t=e,r=[{key:"create",value:function(t){return{name:"spectrogram",deferInit:!(!t||!t.deferInit)&&t.deferInit,params:t,staticProps:{FFT:i.default},instance:e}}}],(a=[{key:"init",value:function(){this.wavesurfer.isReady?this._onReady():this.wavesurfer.once("ready",this._onReady)}},{key:"destroy",value:function(){this.unAll(),this.wavesurfer.un("ready",this._onReady),this.wavesurfer.un("redraw",this._onRender),this.drawer&&this.drawer.wrapper.removeEventListener("scroll",this._onScroll),this.wavesurfer=null,this.util=null,this.params=null,this.wrapper&&(this.wrapper.removeEventListener("click",this._onWrapperClick),this.wrapper.parentNode.removeChild(this.wrapper),this.wrapper=null)}},{key:"createWrapper",value:function(){var e=this.container.querySelector("spectrogram");e&&this.container.removeChild(e);var t=this.wavesurfer.params;if(this.wrapper=document.createElement("spectrogram"),this.params.labels){var a=this.labelsEl=document.createElement("canvas");a.classList.add("spec-labels"),this.drawer.style(a,{position:"absolute",zIndex:9,height:"".concat(this.height*this.channels,"px"),width:"55px"}),this.wrapper.appendChild(a),this.loadLabels("rgba(68,68,68,0.5)","12px","10px","","#fff","#f7f7f7","center","#specLabels")}this.drawer.style(this.wrapper,{display:"block",position:"relative",userSelect:"none",webkitUserSelect:"none",height:"".concat(this.height*this.channels,"px")}),(t.fillParent||t.scrollParent)&&this.drawer.style(this.wrapper,{width:"100%",overflowX:"hidden",overflowY:"hidden"}),this.container.appendChild(this.wrapper),this.wrapper.addEventListener("click",this._onWrapperClick)}},{key:"_wrapperClickHandler",value:function(e){e.preventDefault();var t="offsetX"in e?e.offsetX:e.layerX;this.fireEvent("click",t/this.width||0)}},{key:"createCanvas",value:function(){var e=this.canvas=this.wrapper.appendChild(document.createElement("canvas"));this.spectrCc=e.getContext("2d"),this.util.style(e,{position:"absolute",zIndex:4})}},{key:"render",value:function(){this.updateCanvasStyle(),this.frequenciesDataUrl?this.loadFrequenciesData(this.frequenciesDataUrl):this.getFrequencies(this.drawSpectrogram)}},{key:"updateCanvasStyle",value:function(){var e=Math.round(this.width/this.pixelRatio)+"px";this.canvas.width=this.width,this.canvas.height=this.fftSamples/2*this.channels,this.canvas.style.width=e,this.canvas.style.height=this.height+"px"}},{key:"drawSpectrogram",value:function(e,t){isNaN(e[0][0])||(e=[e]);var a=t.spectrCc,r=t.fftSamples/2,i=t.width,n=t.buffer.sampleRate/2,s=t.frequencyMin,l=t.frequencyMax;if(a)for(var o=function(o){for(var h=t.resample(e[o]),f=new ImageData(i,r),c=0;c<h.length;c++)for(var u=0;u<h[c].length;u++){var p=t.colorMap[h[c][u]],d=4*((r-u)*i+c);f.data[d]=255*p[0],f.data[d+1]=255*p[1],f.data[d+2]=255*p[2],f.data[d+3]=255*p[3]}createImageBitmap(f).then((function(e){return a.drawImage(e,0,r*(1-l/n),i,r*(l-s)/n,0,r*o,i,r)}))},h=0;h<e.length;h++)o(h)}},{key:"getFrequencies",value:function(e){var t=this.fftSamples,a=this.buffer=this.wavesurfer.backend.buffer,r=this.channels;if(a){var n=a.sampleRate,s=[],l=this.noverlap;if(!l){var o=a.length/this.canvas.width;l=Math.max(0,Math.round(t-o))}for(var h=new i.default(t,n,this.windowFunc,this.alpha),f=0;f<r;f++){for(var c=a.getChannelData(f),u=[],p=0;p+t<c.length;){var d=c.slice(p,p+t),v=h.calculateSpectrum(d),w=new Uint8Array(t/2),y=void 0;for(y=0;y<t/2;y++)w[y]=Math.max(-255,45*Math.log10(v[y]));u.push(w),p+=t-l}s.push(u)}e(s,this)}else this.fireEvent("error","Web Audio buffer is not available")}},{key:"loadFrequenciesData",value:function(e){var t=this,a=this.util.fetchFile({url:e});return a.on("success",(function(e){return t.drawSpectrogram(JSON.parse(e),t)})),a.on("error",(function(e){return t.fireEvent("error",e)})),a}},{key:"freqType",value:function(e){return e>=1e3?(e/1e3).toFixed(1):Math.round(e)}},{key:"unitType",value:function(e){return e>=1e3?"KHz":"Hz"}},{key:"loadLabels",value:function(e,t,a,r,i,n,s,l){e=e||"rgba(68,68,68,0)",t=t||"12px",a=a||"10px",r=r||"Helvetica",i=i||"#fff",n=n||"#fff",s=s||"center",l=l||"#specLabels";var o=this.height||512,h=o/256*5,f=this.frequencyMin,c=(this.frequencyMax-f)/h,u=this.labelsEl.getContext("2d"),p=window.devicePixelRatio;if(this.labelsEl.height=this.height*this.channels*p,this.labelsEl.width=55*p,u.scale(p,p),u)for(var d=0;d<this.channels;d++){u.fillStyle=e,u.fillRect(0,d*o,55,(1+d)*o),u.fill();var v=void 0;for(v=0;v<=h;v++){u.textAlign=s,u.textBaseline="middle";var w=f+c*v,y=this.freqType(w),m=this.unitType(w),b=void 0;0==v?(b=(1+d)*o+v-10,u.fillStyle=n,u.font=a+" "+r,u.fillText(m,40,b),u.fillStyle=i,u.font=t+" "+r,u.fillText(y,16,b)):(b=(1+d)*o-50*v+2,u.fillStyle=n,u.font=a+" "+r,u.fillText(m,40,b),u.fillStyle=i,u.font=t+" "+r,u.fillText(y,16,b))}}}},{key:"updateScroll",value:function(e){this.wrapper&&(this.wrapper.scrollLeft=e.target.scrollLeft)}},{key:"resample",value:function(e){var t,a=this.width,r=[],i=1/e.length,n=1/a;for(t=0;t<a;t++){var s=new Array(e[0].length),l=void 0;for(l=0;l<e.length;l++){var o=l*i,h=o+i,f=t*n,c=f+n,u=h<=f||c<=o?0:Math.min(Math.max(h,f),Math.max(c,o))-Math.max(Math.min(h,f),Math.min(c,o)),p=void 0;if(u>0)for(p=0;p<e[0].length;p++)null==s[p]&&(s[p]=0),s[p]+=u/n*e[l][p]}var d=new Uint8Array(e[0].length),v=void 0;for(v=0;v<e[0].length;v++)d[v]=s[v];r.push(d)}return r}}])&&n(t.prototype,a),r&&n(t,r),Object.defineProperty(t,"prototype",{writable:!1}),e}();t.default=s,e.exports=t.default}},t={};var a=function a(r){var i=t[r];if(void 0!==i)return i.exports;var n=t[r]={exports:{}};return e[r](n,n.exports,a),n.exports}(943);return a})()));
|
|
6
|
+
!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define("WaveSurfer",[],t):"object"==typeof exports?exports.WaveSurfer=t():(e.WaveSurfer=e.WaveSurfer||{},e.WaveSurfer.spectrogram=t())}(self,(()=>(()=>{"use strict";var e={325:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e,t,r,a){switch(this.bufferSize=e,this.sampleRate=t,this.bandwidth=2/e*(t/2),this.sinTable=new Float32Array(e),this.cosTable=new Float32Array(e),this.windowValues=new Float32Array(e),this.reverseTable=new Uint32Array(e),this.peakBand=0,this.peak=0,r){case"bartlett":for(i=0;i<e;i++)this.windowValues[i]=2/(e-1)*((e-1)/2-Math.abs(i-(e-1)/2));break;case"bartlettHann":for(i=0;i<e;i++)this.windowValues[i]=.62-.48*Math.abs(i/(e-1)-.5)-.38*Math.cos(2*Math.PI*i/(e-1));break;case"blackman":for(a=a||.16,i=0;i<e;i++)this.windowValues[i]=(1-a)/2-.5*Math.cos(2*Math.PI*i/(e-1))+a/2*Math.cos(4*Math.PI*i/(e-1));break;case"cosine":for(i=0;i<e;i++)this.windowValues[i]=Math.cos(Math.PI*i/(e-1)-Math.PI/2);break;case"gauss":for(a=a||.25,i=0;i<e;i++)this.windowValues[i]=Math.pow(Math.E,-.5*Math.pow((i-(e-1)/2)/(a*(e-1)/2),2));break;case"hamming":for(i=0;i<e;i++)this.windowValues[i]=.54-.46*Math.cos(2*Math.PI*i/(e-1));break;case"hann":case void 0:for(i=0;i<e;i++)this.windowValues[i]=.5*(1-Math.cos(2*Math.PI*i/(e-1)));break;case"lanczoz":for(i=0;i<e;i++)this.windowValues[i]=Math.sin(Math.PI*(2*i/(e-1)-1))/(Math.PI*(2*i/(e-1)-1));break;case"rectangular":for(i=0;i<e;i++)this.windowValues[i]=1;break;case"triangular":for(i=0;i<e;i++)this.windowValues[i]=2/e*(e/2-Math.abs(i-(e-1)/2));break;default:throw Error("No such window function '"+r+"'")}var i,n=1,s=e>>1;for(;n<e;){for(i=0;i<n;i++)this.reverseTable[i+n]=this.reverseTable[i]+s;n<<=1,s>>=1}for(i=0;i<e;i++)this.sinTable[i]=Math.sin(-Math.PI/i),this.cosTable[i]=Math.cos(-Math.PI/i);this.calculateSpectrum=function(e){var t,r,a,i=this.bufferSize,n=this.cosTable,s=this.sinTable,o=this.reverseTable,l=new Float32Array(i),h=new Float32Array(i),f=2/this.bufferSize,c=Math.sqrt,u=new Float32Array(i/2),p=Math.floor(Math.log(i)/Math.LN2);if(Math.pow(2,p)!==i)throw"Invalid buffer size, must be a power of 2.";if(i!==e.length)throw"Supplied buffer is not the same size as defined FFT. FFT Size: "+i+" Buffer Size: "+e.length;for(var d,v,w,y,m,b,M,g,S=1,k=0;k<i;k++)l[k]=e[o[k]]*this.windowValues[o[k]],h[k]=0;for(;S<i;){d=n[S],v=s[S],w=1,y=0;for(var x=0;x<S;x++){for(k=x;k<i;)b=w*l[m=k+S]-y*h[m],M=w*h[m]+y*l[m],l[m]=l[k]-b,h[m]=h[k]-M,l[k]+=b,h[k]+=M,k+=S<<1;w=(g=w)*d-y*v,y=g*v+y*d}S<<=1}k=0;for(var C=i/2;k<C;k++)(a=f*c((t=l[k])*t+(r=h[k])*r))>this.peak&&(this.peakBand=k,this.peak=a),u[k]=a;return u}},e.exports=t.default},943:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var a,i=(a=r(325))&&a.__esModule?a:{default:a};function n(e){return n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},n(e)}function s(e,t){for(var r=0;r<t.length;r++){var a=t[r];a.enumerable=a.enumerable||!1,a.configurable=!0,"value"in a&&(a.writable=!0),Object.defineProperty(e,(i=a.key,s=void 0,s=function(e,t){if("object"!==n(e)||null===e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var a=r.call(e,t||"default");if("object"!==n(a))return a;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(i,"string"),"symbol"===n(s)?s:String(s)),a)}var i,s}var o=function(){function e(t,r){var a=this;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.params=t,this.wavesurfer=r,this.util=r.util,this.frequenciesDataUrl=t.frequenciesDataUrl,this._onScroll=function(e){a.updateScroll(e)},this._onRender=function(){a.render()},this._onWrapperClick=function(e){a._wrapperClickHandler(e)},this._onReady=function(){var e=a.drawer=r.drawer;if(a.container="string"==typeof t.container?document.querySelector(t.container):t.container,!a.container)throw Error("No container for WaveSurfer spectrogram");if(t.colorMap){if(t.colorMap.length<256)throw new Error("Colormap must contain 256 elements");for(var i=0;i<t.colorMap.length;i++){if(4!==t.colorMap[i].length)throw new Error("ColorMap entries must contain 4 values")}a.colorMap=t.colorMap}else{a.colorMap=[];for(var n=0;n<256;n++){var s=(255-n)/256;a.colorMap.push([s,s,s,1])}}a.width=e.width,a.pixelRatio=a.params.pixelRatio||r.params.pixelRatio,a.fftSamples=a.params.fftSamples||r.params.fftSamples||512,a.height=a.params.height||a.fftSamples/2,a.noverlap=t.noverlap,a.windowFunc=t.windowFunc,a.alpha=t.alpha,a.splitChannels=t.splitChannels,a.channels=a.splitChannels?r.backend.buffer.numberOfChannels:1,a.frequencyMin=t.frequencyMin||0,a.frequencyMax=t.frequencyMax||12e3,a.createWrapper(),a.createCanvas(),a.render(),e.wrapper.addEventListener("scroll",a._onScroll),r.on("redraw",a._onRender)}}var t,r,a;return t=e,a=[{key:"create",value:function(t){return{name:"spectrogram",deferInit:!(!t||!t.deferInit)&&t.deferInit,params:t,staticProps:{FFT:i.default},instance:e}}}],(r=[{key:"init",value:function(){this.wavesurfer.isReady?this._onReady():this.wavesurfer.once("ready",this._onReady)}},{key:"destroy",value:function(){this.unAll(),this.wavesurfer.un("ready",this._onReady),this.wavesurfer.un("redraw",this._onRender),this.drawer&&this.drawer.wrapper.removeEventListener("scroll",this._onScroll),this.wavesurfer=null,this.util=null,this.params=null,this.wrapper&&(this.wrapper.removeEventListener("click",this._onWrapperClick),this.wrapper.parentNode.removeChild(this.wrapper),this.wrapper=null)}},{key:"createWrapper",value:function(){var e=this.container.querySelector("spectrogram");e&&this.container.removeChild(e);var t=this.wavesurfer.params;if(this.wrapper=document.createElement("spectrogram"),this.params.labels){var r=this.labelsEl=document.createElement("canvas");r.classList.add("spec-labels"),this.drawer.style(r,{position:"absolute",zIndex:9,height:"".concat(this.height*this.channels,"px"),width:"55px"}),this.wrapper.appendChild(r),this.loadLabels("rgba(68,68,68,0.5)","12px","10px","","#fff","#f7f7f7","center","#specLabels")}this.drawer.style(this.wrapper,{display:"block",position:"relative",userSelect:"none",webkitUserSelect:"none",height:"".concat(this.height*this.channels,"px")}),(t.fillParent||t.scrollParent)&&this.drawer.style(this.wrapper,{width:"100%",overflowX:"hidden",overflowY:"hidden"}),this.container.appendChild(this.wrapper),this.wrapper.addEventListener("click",this._onWrapperClick)}},{key:"_wrapperClickHandler",value:function(e){e.preventDefault();var t="offsetX"in e?e.offsetX:e.layerX;this.fireEvent("click",t/this.width||0)}},{key:"createCanvas",value:function(){var e=this.canvas=this.wrapper.appendChild(document.createElement("canvas"));this.spectrCc=e.getContext("2d"),this.util.style(e,{position:"absolute",zIndex:4})}},{key:"render",value:function(){this.updateCanvasStyle(),this.frequenciesDataUrl?this.loadFrequenciesData(this.frequenciesDataUrl):this.getFrequencies(this.drawSpectrogram)}},{key:"updateCanvasStyle",value:function(){var e=Math.round(this.width/this.pixelRatio)+"px";this.canvas.width=this.width,this.canvas.height=this.fftSamples/2*this.channels,this.canvas.style.width=e,this.canvas.style.height=this.height+"px"}},{key:"drawSpectrogram",value:function(e,t){isNaN(e[0][0])||(e=[e]);var r=t.spectrCc,a=t.fftSamples/2,i=t.width,n=t.buffer.sampleRate/2,s=t.frequencyMin,o=t.frequencyMax;if(r)for(var l=function(l){for(var h=t.resample(e[l]),f=new ImageData(i,a),c=0;c<h.length;c++)for(var u=0;u<h[c].length;u++){var p=t.colorMap[h[c][u]],d=4*((a-u)*i+c);f.data[d]=255*p[0],f.data[d+1]=255*p[1],f.data[d+2]=255*p[2],f.data[d+3]=255*p[3]}createImageBitmap(f).then((function(e){return r.drawImage(e,0,a*(1-o/n),i,a*(o-s)/n,0,a*l,i,a)}))},h=0;h<e.length;h++)l(h)}},{key:"getFrequencies",value:function(e){var t=this.fftSamples,r=this.buffer=this.wavesurfer.backend.buffer,a=this.channels;if(r){var n=r.sampleRate,s=[],o=this.noverlap;if(!o){var l=r.length/this.canvas.width;o=Math.max(0,Math.round(t-l))}for(var h=new i.default(t,n,this.windowFunc,this.alpha),f=0;f<a;f++){for(var c=r.getChannelData(f),u=[],p=0;p+t<c.length;){var d=c.slice(p,p+t),v=h.calculateSpectrum(d),w=new Uint8Array(t/2),y=void 0;for(y=0;y<t/2;y++)w[y]=Math.max(-255,45*Math.log10(v[y]));u.push(w),p+=t-o}s.push(u)}e(s,this)}else this.fireEvent("error","Web Audio buffer is not available")}},{key:"loadFrequenciesData",value:function(e){var t=this,r=this.util.fetchFile({url:e});return r.on("success",(function(e){return t.drawSpectrogram(JSON.parse(e),t)})),r.on("error",(function(e){return t.fireEvent("error",e)})),r}},{key:"freqType",value:function(e){return e>=1e3?(e/1e3).toFixed(1):Math.round(e)}},{key:"unitType",value:function(e){return e>=1e3?"KHz":"Hz"}},{key:"loadLabels",value:function(e,t,r,a,i,n,s,o){e=e||"rgba(68,68,68,0)",t=t||"12px",r=r||"10px",a=a||"Helvetica",i=i||"#fff",n=n||"#fff",s=s||"center",o=o||"#specLabels";var l=this.height||512,h=l/256*5,f=this.frequencyMin,c=(this.frequencyMax-f)/h,u=this.labelsEl.getContext("2d"),p=window.devicePixelRatio;if(this.labelsEl.height=this.height*this.channels*p,this.labelsEl.width=55*p,u.scale(p,p),u)for(var d=0;d<this.channels;d++){u.fillStyle=e,u.fillRect(0,d*l,55,(1+d)*l),u.fill();var v=void 0;for(v=0;v<=h;v++){u.textAlign=s,u.textBaseline="middle";var w=f+c*v,y=this.freqType(w),m=this.unitType(w),b=void 0;0==v?(b=(1+d)*l+v-10,u.fillStyle=n,u.font=r+" "+a,u.fillText(m,40,b),u.fillStyle=i,u.font=t+" "+a,u.fillText(y,16,b)):(b=(1+d)*l-50*v+2,u.fillStyle=n,u.font=r+" "+a,u.fillText(m,40,b),u.fillStyle=i,u.font=t+" "+a,u.fillText(y,16,b))}}}},{key:"updateScroll",value:function(e){this.wrapper&&(this.wrapper.scrollLeft=e.target.scrollLeft)}},{key:"resample",value:function(e){var t,r=this.width,a=[],i=1/e.length,n=1/r;for(t=0;t<r;t++){var s=new Array(e[0].length),o=void 0;for(o=0;o<e.length;o++){var l=o*i,h=l+i,f=t*n,c=f+n,u=h<=f||c<=l?0:Math.min(Math.max(h,f),Math.max(c,l))-Math.max(Math.min(h,f),Math.min(c,l)),p=void 0;if(u>0)for(p=0;p<e[0].length;p++)null==s[p]&&(s[p]=0),s[p]+=u/n*e[o][p]}var d=new Uint8Array(e[0].length),v=void 0;for(v=0;v<e[0].length;v++)d[v]=s[v];a.push(d)}return a}}])&&s(t.prototype,r),a&&s(t,a),Object.defineProperty(t,"prototype",{writable:!1}),e}();t.default=o,e.exports=t.default}},t={};var r=function r(a){var i=t[a];if(void 0!==i)return i.exports;var n=t[a]={exports:{}};return e[a](n,n.exports,r),n.exports}(943);return r})()));
|
|
7
7
|
//# sourceMappingURL=wavesurfer.spectrogram.min.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wavesurfer.spectrogram.min.js","mappings":"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","sources":["webpack://WaveSurfer/webpack/universalModuleDefinition","webpack://WaveSurfer/./src/plugin/spectrogram/fft.js","webpack://WaveSurfer/./src/plugin/spectrogram/index.js","webpack://WaveSurfer/webpack/bootstrap","webpack://WaveSurfer/webpack/startup"],"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(\"WaveSurfer\", [], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"WaveSurfer\"] = factory();\n\telse\n\t\troot[\"WaveSurfer\"] = root[\"WaveSurfer\"] || {}, root[\"WaveSurfer\"][\"spectrogram\"] = factory();\n})(self, () => {\nreturn ","/* eslint-disable complexity, no-redeclare, no-var, one-var */\n\n/**\n * Calculate FFT - Based on https://github.com/corbanbrook/dsp.js\n *\n * @param {Number} bufferSize Buffer size\n * @param {Number} sampleRate Sample rate\n * @param {Function} windowFunc Window function\n * @param {Number} alpha Alpha channel\n */\nexport default function FFT(bufferSize, sampleRate, windowFunc, alpha) {\n this.bufferSize = bufferSize;\n this.sampleRate = sampleRate;\n this.bandwidth = (2 / bufferSize) * (sampleRate / 2);\n\n this.sinTable = new Float32Array(bufferSize);\n this.cosTable = new Float32Array(bufferSize);\n this.windowValues = new Float32Array(bufferSize);\n this.reverseTable = new Uint32Array(bufferSize);\n\n this.peakBand = 0;\n this.peak = 0;\n\n var i;\n switch (windowFunc) {\n case 'bartlett':\n for (i = 0; i < bufferSize; i++) {\n this.windowValues[i] =\n (2 / (bufferSize - 1)) *\n ((bufferSize - 1) / 2 - Math.abs(i - (bufferSize - 1) / 2));\n }\n break;\n case 'bartlettHann':\n for (i = 0; i < bufferSize; i++) {\n this.windowValues[i] =\n 0.62 -\n 0.48 * Math.abs(i / (bufferSize - 1) - 0.5) -\n 0.38 * Math.cos((Math.PI * 2 * i) / (bufferSize - 1));\n }\n break;\n case 'blackman':\n alpha = alpha || 0.16;\n for (i = 0; i < bufferSize; i++) {\n this.windowValues[i] =\n (1 - alpha) / 2 -\n 0.5 * Math.cos((Math.PI * 2 * i) / (bufferSize - 1)) +\n (alpha / 2) *\n Math.cos((4 * Math.PI * i) / (bufferSize - 1));\n }\n break;\n case 'cosine':\n for (i = 0; i < bufferSize; i++) {\n this.windowValues[i] = Math.cos(\n (Math.PI * i) / (bufferSize - 1) - Math.PI / 2\n );\n }\n break;\n case 'gauss':\n alpha = alpha || 0.25;\n for (i = 0; i < bufferSize; i++) {\n this.windowValues[i] = Math.pow(\n Math.E,\n -0.5 *\n Math.pow(\n (i - (bufferSize - 1) / 2) /\n ((alpha * (bufferSize - 1)) / 2),\n 2\n )\n );\n }\n break;\n case 'hamming':\n for (i = 0; i < bufferSize; i++) {\n this.windowValues[i] =\n 0.54 -\n 0.46 * Math.cos((Math.PI * 2 * i) / (bufferSize - 1));\n }\n break;\n case 'hann':\n case undefined:\n for (i = 0; i < bufferSize; i++) {\n this.windowValues[i] =\n 0.5 * (1 - Math.cos((Math.PI * 2 * i) / (bufferSize - 1)));\n }\n break;\n case 'lanczoz':\n for (i = 0; i < bufferSize; i++) {\n this.windowValues[i] =\n Math.sin(Math.PI * ((2 * i) / (bufferSize - 1) - 1)) /\n (Math.PI * ((2 * i) / (bufferSize - 1) - 1));\n }\n break;\n case 'rectangular':\n for (i = 0; i < bufferSize; i++) {\n this.windowValues[i] = 1;\n }\n break;\n case 'triangular':\n for (i = 0; i < bufferSize; i++) {\n this.windowValues[i] =\n (2 / bufferSize) *\n (bufferSize / 2 - Math.abs(i - (bufferSize - 1) / 2));\n }\n break;\n default:\n throw Error(\"No such window function '\" + windowFunc + \"'\");\n }\n\n var limit = 1;\n var bit = bufferSize >> 1;\n var i;\n\n while (limit < bufferSize) {\n for (i = 0; i < limit; i++) {\n this.reverseTable[i + limit] = this.reverseTable[i] + bit;\n }\n\n limit = limit << 1;\n bit = bit >> 1;\n }\n\n for (i = 0; i < bufferSize; i++) {\n this.sinTable[i] = Math.sin(-Math.PI / i);\n this.cosTable[i] = Math.cos(-Math.PI / i);\n }\n\n this.calculateSpectrum = function(buffer) {\n // Locally scope variables for speed up\n var bufferSize = this.bufferSize,\n cosTable = this.cosTable,\n sinTable = this.sinTable,\n reverseTable = this.reverseTable,\n real = new Float32Array(bufferSize),\n imag = new Float32Array(bufferSize),\n bSi = 2 / this.bufferSize,\n sqrt = Math.sqrt,\n rval,\n ival,\n mag,\n spectrum = new Float32Array(bufferSize / 2);\n\n var k = Math.floor(Math.log(bufferSize) / Math.LN2);\n\n if (Math.pow(2, k) !== bufferSize) {\n throw 'Invalid buffer size, must be a power of 2.';\n }\n if (bufferSize !== buffer.length) {\n throw 'Supplied buffer is not the same size as defined FFT. FFT Size: ' +\n bufferSize +\n ' Buffer Size: ' +\n buffer.length;\n }\n\n var halfSize = 1,\n phaseShiftStepReal,\n phaseShiftStepImag,\n currentPhaseShiftReal,\n currentPhaseShiftImag,\n off,\n tr,\n ti,\n tmpReal;\n\n for (var i = 0; i < bufferSize; i++) {\n real[i] =\n buffer[reverseTable[i]] * this.windowValues[reverseTable[i]];\n imag[i] = 0;\n }\n\n while (halfSize < bufferSize) {\n phaseShiftStepReal = cosTable[halfSize];\n phaseShiftStepImag = sinTable[halfSize];\n\n currentPhaseShiftReal = 1;\n currentPhaseShiftImag = 0;\n\n for (var fftStep = 0; fftStep < halfSize; fftStep++) {\n var i = fftStep;\n\n while (i < bufferSize) {\n off = i + halfSize;\n tr =\n currentPhaseShiftReal * real[off] -\n currentPhaseShiftImag * imag[off];\n ti =\n currentPhaseShiftReal * imag[off] +\n currentPhaseShiftImag * real[off];\n\n real[off] = real[i] - tr;\n imag[off] = imag[i] - ti;\n real[i] += tr;\n imag[i] += ti;\n\n i += halfSize << 1;\n }\n\n tmpReal = currentPhaseShiftReal;\n currentPhaseShiftReal =\n tmpReal * phaseShiftStepReal -\n currentPhaseShiftImag * phaseShiftStepImag;\n currentPhaseShiftImag =\n tmpReal * phaseShiftStepImag +\n currentPhaseShiftImag * phaseShiftStepReal;\n }\n\n halfSize = halfSize << 1;\n }\n\n for (var i = 0, N = bufferSize / 2; i < N; i++) {\n rval = real[i];\n ival = imag[i];\n mag = bSi * sqrt(rval * rval + ival * ival);\n\n if (mag > this.peak) {\n this.peakBand = i;\n this.peak = mag;\n }\n spectrum[i] = mag;\n }\n return spectrum;\n };\n}\n","/* eslint-enable complexity, no-redeclare, no-var, one-var */\n\nimport FFT from './fft';\n\n/**\n * @typedef {Object} SpectrogramPluginParams\n * @property {string|HTMLElement} container Selector of element or element in\n * which to render\n * @property {number} fftSamples=512 Number of samples to fetch to FFT. Must be\n * a power of 2.\n * @property {boolean} splitChannels=false Render with separate spectrograms for\n * the channels of the audio\n * @property {number} height=fftSamples/2 Height of the spectrogram view in CSS\n * pixels\n * @property {boolean} labels Set to true to display frequency labels.\n * @property {number} noverlap Size of the overlapping window. Must be <\n * fftSamples. Auto deduced from canvas size by default.\n * @property {string} windowFunc='hann' The window function to be used. One of\n * these: `'bartlett'`, `'bartlettHann'`, `'blackman'`, `'cosine'`, `'gauss'`,\n * `'hamming'`, `'hann'`, `'lanczoz'`, `'rectangular'`, `'triangular'`\n * @property {?number} alpha Some window functions have this extra value.\n * (Between 0 and 1)\n * @property {number} pixelRatio=wavesurfer.params.pixelRatio to control the\n * size of the spectrogram in relation with its canvas. 1 = Draw on the whole\n * canvas. 2 = Draw on a quarter (1/2 the length and 1/2 the width)\n * @property {number} frequencyMin=0 Min frequency to scale spectrogram.\n * @property {number} frequencyMax=12000 Max frequency to scale spectrogram.\n * Set this to samplerate/2 to draw whole range of spectrogram.\n * @property {?boolean} deferInit Set to true to manually call\n * `initPlugin('spectrogram')`\n * @property {?number[][]} colorMap A 256 long array of 4-element arrays.\n * Each entry should contain a float between 0 and 1 and specify\n * r, g, b, and alpha.\n */\n\n/**\n * Render a spectrogram visualisation of the audio.\n *\n * @implements {PluginClass}\n * @extends {Observer}\n * @example\n * // es6\n * import SpectrogramPlugin from 'wavesurfer.spectrogram.js';\n *\n * // commonjs\n * var SpectrogramPlugin = require('wavesurfer.spectrogram.js');\n *\n * // if you are using <script> tags\n * var SpectrogramPlugin = window.WaveSurfer.spectrogram;\n *\n * // ... initialising wavesurfer with the plugin\n * var wavesurfer = WaveSurfer.create({\n * // wavesurfer options ...\n * plugins: [\n * SpectrogramPlugin.create({\n * // plugin options ...\n * })\n * ]\n * });\n */\nexport default class SpectrogramPlugin {\n /**\n * Spectrogram plugin definition factory\n *\n * This function must be used to create a plugin definition which can be\n * used by wavesurfer to correctly instantiate the plugin.\n *\n * @param {SpectrogramPluginParams} params Parameters used to initialise the plugin\n * @return {PluginDefinition} An object representing the plugin.\n */\n static create(params) {\n return {\n name: 'spectrogram',\n deferInit: params && params.deferInit ? params.deferInit : false,\n params: params,\n staticProps: {\n FFT: FFT\n },\n instance: SpectrogramPlugin\n };\n }\n\n constructor(params, ws) {\n this.params = params;\n this.wavesurfer = ws;\n this.util = ws.util;\n\n this.frequenciesDataUrl = params.frequenciesDataUrl;\n this._onScroll = e => {\n this.updateScroll(e);\n };\n this._onRender = () => {\n this.render();\n };\n this._onWrapperClick = e => {\n this._wrapperClickHandler(e);\n };\n this._onReady = () => {\n const drawer = (this.drawer = ws.drawer);\n\n this.container =\n 'string' == typeof params.container\n ? document.querySelector(params.container)\n : params.container;\n\n if (!this.container) {\n throw Error('No container for WaveSurfer spectrogram');\n }\n if (params.colorMap) {\n if (params.colorMap.length < 256) {\n throw new Error('Colormap must contain 256 elements');\n }\n for (let i = 0; i < params.colorMap.length; i++) {\n const cmEntry = params.colorMap[i];\n if (cmEntry.length !== 4) {\n throw new Error(\n 'ColorMap entries must contain 4 values'\n );\n }\n }\n this.colorMap = params.colorMap;\n } else {\n this.colorMap = [];\n for (let i = 0; i < 256; i++) {\n const val = (255 - i) / 256;\n this.colorMap.push([val, val, val, 1]);\n }\n }\n this.width = drawer.width;\n this.pixelRatio = this.params.pixelRatio || ws.params.pixelRatio;\n this.fftSamples =\n this.params.fftSamples || ws.params.fftSamples || 512;\n this.height = this.params.height || this.fftSamples / 2;\n this.noverlap = params.noverlap;\n this.windowFunc = params.windowFunc;\n this.alpha = params.alpha;\n this.splitChannels = params.splitChannels;\n this.channels = this.splitChannels ? ws.backend.buffer.numberOfChannels : 1;\n\n // Getting file's original samplerate is difficult(#1248).\n // So set 12kHz default to render like wavesurfer.js 5.x.\n this.frequencyMin = params.frequencyMin || 0;\n this.frequencyMax = params.frequencyMax || 12000;\n\n this.createWrapper();\n this.createCanvas();\n this.render();\n\n drawer.wrapper.addEventListener('scroll', this._onScroll);\n ws.on('redraw', this._onRender);\n };\n }\n\n init() {\n // Check if wavesurfer is ready\n if (this.wavesurfer.isReady) {\n this._onReady();\n } else {\n this.wavesurfer.once('ready', this._onReady);\n }\n }\n\n destroy() {\n this.unAll();\n this.wavesurfer.un('ready', this._onReady);\n this.wavesurfer.un('redraw', this._onRender);\n this.drawer && this.drawer.wrapper.removeEventListener('scroll', this._onScroll);\n this.wavesurfer = null;\n this.util = null;\n this.params = null;\n if (this.wrapper) {\n this.wrapper.removeEventListener('click', this._onWrapperClick);\n this.wrapper.parentNode.removeChild(this.wrapper);\n this.wrapper = null;\n }\n }\n\n createWrapper() {\n const prevSpectrogram = this.container.querySelector('spectrogram');\n if (prevSpectrogram) {\n this.container.removeChild(prevSpectrogram);\n }\n const wsParams = this.wavesurfer.params;\n this.wrapper = document.createElement('spectrogram');\n // if labels are active\n if (this.params.labels) {\n const labelsEl = (this.labelsEl = document.createElement('canvas'));\n labelsEl.classList.add('spec-labels');\n this.drawer.style(labelsEl, {\n position: 'absolute',\n zIndex: 9,\n height: `${this.height * this.channels}px`,\n width: `55px`\n });\n this.wrapper.appendChild(labelsEl);\n this.loadLabels(\n 'rgba(68,68,68,0.5)',\n '12px',\n '10px',\n '',\n '#fff',\n '#f7f7f7',\n 'center',\n '#specLabels'\n );\n }\n\n this.drawer.style(this.wrapper, {\n display: 'block',\n position: 'relative',\n userSelect: 'none',\n webkitUserSelect: 'none',\n height: `${this.height * this.channels}px`\n });\n\n if (wsParams.fillParent || wsParams.scrollParent) {\n this.drawer.style(this.wrapper, {\n width: '100%',\n overflowX: 'hidden',\n overflowY: 'hidden'\n });\n }\n this.container.appendChild(this.wrapper);\n\n this.wrapper.addEventListener('click', this._onWrapperClick);\n }\n\n _wrapperClickHandler(event) {\n event.preventDefault();\n const relX = 'offsetX' in event ? event.offsetX : event.layerX;\n this.fireEvent('click', relX / this.width || 0);\n }\n\n createCanvas() {\n const canvas = (this.canvas = this.wrapper.appendChild(\n document.createElement('canvas')\n ));\n\n this.spectrCc = canvas.getContext('2d');\n\n this.util.style(canvas, {\n position: 'absolute',\n zIndex: 4\n });\n }\n\n render() {\n this.updateCanvasStyle();\n\n if (this.frequenciesDataUrl) {\n this.loadFrequenciesData(this.frequenciesDataUrl);\n } else {\n this.getFrequencies(this.drawSpectrogram);\n }\n }\n\n updateCanvasStyle() {\n const width = Math.round(this.width / this.pixelRatio) + 'px';\n this.canvas.width = this.width;\n this.canvas.height = this.fftSamples / 2 * this.channels;\n this.canvas.style.width = width;\n this.canvas.style.height = this.height + 'px';\n }\n\n drawSpectrogram(frequenciesData, my) {\n if (!isNaN(frequenciesData[0][0])) { // data is 1ch [sample, freq] format\n // to [channel, sample, freq] format\n frequenciesData = [frequenciesData];\n }\n\n const spectrCc = my.spectrCc;\n const height = my.fftSamples / 2;\n const width = my.width;\n const freqFrom = my.buffer.sampleRate / 2;\n const freqMin = my.frequencyMin;\n const freqMax = my.frequencyMax;\n\n if (!spectrCc) {\n return;\n }\n\n for (let c = 0; c < frequenciesData.length; c++) { // for each channel\n const pixels = my.resample(frequenciesData[c]);\n const imageData = new ImageData(width, height);\n\n for (let i = 0; i < pixels.length; i++) {\n for (let j = 0; j < pixels[i].length; j++) {\n const colorMap = my.colorMap[pixels[i][j]];\n const redIndex = ((height - j) * width + i) * 4;\n imageData.data[redIndex] = colorMap[0] * 255;\n imageData.data[redIndex + 1] = colorMap[1] * 255;\n imageData.data[redIndex + 2] = colorMap[2] * 255;\n imageData.data[redIndex + 3] = colorMap[3] * 255;\n }\n }\n\n // scale and stack spectrograms\n createImageBitmap(imageData).then(renderer =>\n spectrCc.drawImage(renderer,\n 0, height * (1 - freqMax / freqFrom), // source x, y\n width, height * (freqMax - freqMin) / freqFrom, // source width, height\n 0, height * c, // destination x, y\n width, height // destination width, height\n )\n );\n }\n }\n\n getFrequencies(callback) {\n const fftSamples = this.fftSamples;\n const buffer = (this.buffer = this.wavesurfer.backend.buffer);\n const channels = this.channels;\n\n if (!buffer) {\n this.fireEvent('error', 'Web Audio buffer is not available');\n return;\n }\n\n // This may differ from file samplerate. Browser resamples audio.\n const sampleRate = buffer.sampleRate;\n const frequencies = [];\n\n let noverlap = this.noverlap;\n if (!noverlap) {\n const uniqueSamplesPerPx = buffer.length / this.canvas.width;\n noverlap = Math.max(0, Math.round(fftSamples - uniqueSamplesPerPx));\n }\n\n const fft = new FFT(\n fftSamples,\n sampleRate,\n this.windowFunc,\n this.alpha\n );\n\n for (let c = 0; c < channels; c++) { // for each channel\n const channelData = buffer.getChannelData(c);\n const channelFreq = [];\n let currentOffset = 0;\n\n while (currentOffset + fftSamples < channelData.length) {\n const segment = channelData.slice(\n currentOffset,\n currentOffset + fftSamples\n );\n const spectrum = fft.calculateSpectrum(segment);\n const array = new Uint8Array(fftSamples / 2);\n let j;\n for (j = 0; j < fftSamples / 2; j++) {\n array[j] = Math.max(-255, Math.log10(spectrum[j]) * 45);\n }\n channelFreq.push(array);\n // channelFreq: [sample, freq]\n\n currentOffset += fftSamples - noverlap;\n }\n frequencies.push(channelFreq);\n // frequencies: [channel, sample, freq]\n }\n callback(frequencies, this);\n }\n\n loadFrequenciesData(url) {\n const request = this.util.fetchFile({ url: url });\n\n request.on('success', data =>\n this.drawSpectrogram(JSON.parse(data), this)\n );\n request.on('error', e => this.fireEvent('error', e));\n\n return request;\n }\n\n freqType(freq) {\n return freq >= 1000 ? (freq / 1000).toFixed(1) : Math.round(freq);\n }\n\n unitType(freq) {\n return freq >= 1000 ? 'KHz' : 'Hz';\n }\n\n loadLabels(\n bgFill,\n fontSizeFreq,\n fontSizeUnit,\n fontType,\n textColorFreq,\n textColorUnit,\n textAlign,\n container\n ) {\n const frequenciesHeight = this.height;\n bgFill = bgFill || 'rgba(68,68,68,0)';\n fontSizeFreq = fontSizeFreq || '12px';\n fontSizeUnit = fontSizeUnit || '10px';\n fontType = fontType || 'Helvetica';\n textColorFreq = textColorFreq || '#fff';\n textColorUnit = textColorUnit || '#fff';\n textAlign = textAlign || 'center';\n container = container || '#specLabels';\n const bgWidth = 55;\n const getMaxY = frequenciesHeight || 512;\n const labelIndex = 5 * (getMaxY / 256);\n const freqStart = this.frequencyMin;\n const step = (this.frequencyMax - freqStart) / labelIndex;\n\n // prepare canvas element for labels\n const ctx = this.labelsEl.getContext('2d');\n const dispScale = window.devicePixelRatio;\n this.labelsEl.height = this.height * this.channels * dispScale;\n this.labelsEl.width = bgWidth * dispScale;\n ctx.scale(dispScale, dispScale);\n\n if (!ctx) {\n return;\n }\n\n for (let c = 0; c < this.channels; c++) { // for each channel\n // fill background\n ctx.fillStyle = bgFill;\n ctx.fillRect(0, c * getMaxY, bgWidth, (1 + c) * getMaxY);\n ctx.fill();\n let i;\n\n // render labels\n for (i = 0; i <= labelIndex; i++) {\n ctx.textAlign = textAlign;\n ctx.textBaseline = 'middle';\n\n const freq = freqStart + step * i;\n const label = this.freqType(freq);\n const units = this.unitType(freq);\n const yLabelOffset = 2;\n const x = 16;\n let y;\n\n if (i == 0) {\n y = (1 + c) * getMaxY + i - 10;\n // unit label\n ctx.fillStyle = textColorUnit;\n ctx.font = fontSizeUnit + ' ' + fontType;\n ctx.fillText(units, x + 24, y);\n // freq label\n ctx.fillStyle = textColorFreq;\n ctx.font = fontSizeFreq + ' ' + fontType;\n ctx.fillText(label, x, y);\n } else {\n y = (1 + c) * getMaxY - i * 50 + yLabelOffset;\n // unit label\n ctx.fillStyle = textColorUnit;\n ctx.font = fontSizeUnit + ' ' + fontType;\n ctx.fillText(units, x + 24, y);\n // freq label\n ctx.fillStyle = textColorFreq;\n ctx.font = fontSizeFreq + ' ' + fontType;\n ctx.fillText(label, x, y);\n }\n }\n }\n }\n\n updateScroll(e) {\n if (this.wrapper) {\n this.wrapper.scrollLeft = e.target.scrollLeft;\n }\n }\n\n resample(oldMatrix) {\n const columnsNumber = this.width;\n const newMatrix = [];\n\n const oldPiece = 1 / oldMatrix.length;\n const newPiece = 1 / columnsNumber;\n let i;\n\n for (i = 0; i < columnsNumber; i++) {\n const column = new Array(oldMatrix[0].length);\n let j;\n\n for (j = 0; j < oldMatrix.length; j++) {\n const oldStart = j * oldPiece;\n const oldEnd = oldStart + oldPiece;\n const newStart = i * newPiece;\n const newEnd = newStart + newPiece;\n\n const overlap =\n oldEnd <= newStart || newEnd <= oldStart\n ? 0\n : Math.min(\n Math.max(oldEnd, newStart),\n Math.max(newEnd, oldStart)\n ) -\n Math.max(\n Math.min(oldEnd, newStart),\n Math.min(newEnd, oldStart)\n );\n let k;\n /* eslint-disable max-depth */\n if (overlap > 0) {\n for (k = 0; k < oldMatrix[0].length; k++) {\n if (column[k] == null) {\n column[k] = 0;\n }\n column[k] += (overlap / newPiece) * oldMatrix[j][k];\n }\n }\n /* eslint-enable max-depth */\n }\n\n const intColumn = new Uint8Array(oldMatrix[0].length);\n let m;\n\n for (m = 0; m < oldMatrix[0].length; m++) {\n intColumn[m] = column[m];\n }\n\n newMatrix.push(intColumn);\n }\n\n return newMatrix;\n }\n}\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// startup\n// Load entry module and return exports\n// This entry module is referenced by other modules so it can't be inlined\nvar __webpack_exports__ = __webpack_require__(943);\n"],"names":["root","factory","exports","module","define","amd","self","bufferSize","sampleRate","windowFunc","alpha","this","bandwidth","sinTable","Float32Array","cosTable","windowValues","reverseTable","Uint32Array","peakBand","peak","i","Math","abs","cos","PI","pow","E","undefined","sin","Error","limit","bit","calculateSpectrum","buffer","rval","ival","mag","real","imag","bSi","sqrt","spectrum","k","floor","log","LN2","length","phaseShiftStepReal","phaseShiftStepImag","currentPhaseShiftReal","currentPhaseShiftImag","off","tr","ti","tmpReal","halfSize","fftStep","N","SpectrogramPlugin","params","ws","wavesurfer","util","frequenciesDataUrl","_onScroll","e","updateScroll","_onRender","render","_onWrapperClick","_wrapperClickHandler","_onReady","drawer","container","document","querySelector","colorMap","val","push","width","pixelRatio","fftSamples","height","noverlap","splitChannels","channels","backend","numberOfChannels","frequencyMin","frequencyMax","createWrapper","createCanvas","wrapper","addEventListener","on","name","deferInit","staticProps","FFT","instance","isReady","once","unAll","un","removeEventListener","parentNode","removeChild","prevSpectrogram","wsParams","createElement","labels","labelsEl","classList","add","style","position","zIndex","appendChild","loadLabels","display","userSelect","webkitUserSelect","fillParent","scrollParent","overflowX","overflowY","event","preventDefault","relX","offsetX","layerX","fireEvent","canvas","spectrCc","getContext","updateCanvasStyle","loadFrequenciesData","getFrequencies","drawSpectrogram","round","frequenciesData","my","isNaN","freqFrom","freqMin","freqMax","c","pixels","resample","imageData","ImageData","j","redIndex","data","createImageBitmap","then","renderer","drawImage","callback","frequencies","uniqueSamplesPerPx","max","fft","channelData","getChannelData","channelFreq","currentOffset","segment","slice","array","Uint8Array","log10","url","request","fetchFile","JSON","parse","freq","toFixed","bgFill","fontSizeFreq","fontSizeUnit","fontType","textColorFreq","textColorUnit","textAlign","getMaxY","labelIndex","freqStart","step","ctx","dispScale","window","devicePixelRatio","scale","fillStyle","fillRect","fill","textBaseline","label","freqType","units","unitType","y","font","fillText","x","scrollLeft","target","oldMatrix","columnsNumber","newMatrix","oldPiece","newPiece","column","Array","oldStart","oldEnd","newStart","newEnd","overlap","min","intColumn","m","__webpack_module_cache__","__webpack_exports__","__webpack_require__","moduleId","cachedModule","__webpack_modules__"],"sourceRoot":""}
|
|
1
|
+
{"version":3,"file":"wavesurfer.spectrogram.min.js","mappings":"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","sources":["webpack://WaveSurfer/webpack/universalModuleDefinition","webpack://WaveSurfer/./src/plugin/spectrogram/fft.js","webpack://WaveSurfer/./src/plugin/spectrogram/index.js","webpack://WaveSurfer/webpack/bootstrap","webpack://WaveSurfer/webpack/startup"],"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(\"WaveSurfer\", [], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"WaveSurfer\"] = factory();\n\telse\n\t\troot[\"WaveSurfer\"] = root[\"WaveSurfer\"] || {}, root[\"WaveSurfer\"][\"spectrogram\"] = factory();\n})(self, () => {\nreturn ","/* eslint-disable complexity, no-redeclare, no-var, one-var */\n\n/**\n * Calculate FFT - Based on https://github.com/corbanbrook/dsp.js\n *\n * @param {Number} bufferSize Buffer size\n * @param {Number} sampleRate Sample rate\n * @param {Function} windowFunc Window function\n * @param {Number} alpha Alpha channel\n */\nexport default function FFT(bufferSize, sampleRate, windowFunc, alpha) {\n this.bufferSize = bufferSize;\n this.sampleRate = sampleRate;\n this.bandwidth = (2 / bufferSize) * (sampleRate / 2);\n\n this.sinTable = new Float32Array(bufferSize);\n this.cosTable = new Float32Array(bufferSize);\n this.windowValues = new Float32Array(bufferSize);\n this.reverseTable = new Uint32Array(bufferSize);\n\n this.peakBand = 0;\n this.peak = 0;\n\n var i;\n switch (windowFunc) {\n case 'bartlett':\n for (i = 0; i < bufferSize; i++) {\n this.windowValues[i] =\n (2 / (bufferSize - 1)) *\n ((bufferSize - 1) / 2 - Math.abs(i - (bufferSize - 1) / 2));\n }\n break;\n case 'bartlettHann':\n for (i = 0; i < bufferSize; i++) {\n this.windowValues[i] =\n 0.62 -\n 0.48 * Math.abs(i / (bufferSize - 1) - 0.5) -\n 0.38 * Math.cos((Math.PI * 2 * i) / (bufferSize - 1));\n }\n break;\n case 'blackman':\n alpha = alpha || 0.16;\n for (i = 0; i < bufferSize; i++) {\n this.windowValues[i] =\n (1 - alpha) / 2 -\n 0.5 * Math.cos((Math.PI * 2 * i) / (bufferSize - 1)) +\n (alpha / 2) *\n Math.cos((4 * Math.PI * i) / (bufferSize - 1));\n }\n break;\n case 'cosine':\n for (i = 0; i < bufferSize; i++) {\n this.windowValues[i] = Math.cos(\n (Math.PI * i) / (bufferSize - 1) - Math.PI / 2\n );\n }\n break;\n case 'gauss':\n alpha = alpha || 0.25;\n for (i = 0; i < bufferSize; i++) {\n this.windowValues[i] = Math.pow(\n Math.E,\n -0.5 *\n Math.pow(\n (i - (bufferSize - 1) / 2) /\n ((alpha * (bufferSize - 1)) / 2),\n 2\n )\n );\n }\n break;\n case 'hamming':\n for (i = 0; i < bufferSize; i++) {\n this.windowValues[i] =\n 0.54 -\n 0.46 * Math.cos((Math.PI * 2 * i) / (bufferSize - 1));\n }\n break;\n case 'hann':\n case undefined:\n for (i = 0; i < bufferSize; i++) {\n this.windowValues[i] =\n 0.5 * (1 - Math.cos((Math.PI * 2 * i) / (bufferSize - 1)));\n }\n break;\n case 'lanczoz':\n for (i = 0; i < bufferSize; i++) {\n this.windowValues[i] =\n Math.sin(Math.PI * ((2 * i) / (bufferSize - 1) - 1)) /\n (Math.PI * ((2 * i) / (bufferSize - 1) - 1));\n }\n break;\n case 'rectangular':\n for (i = 0; i < bufferSize; i++) {\n this.windowValues[i] = 1;\n }\n break;\n case 'triangular':\n for (i = 0; i < bufferSize; i++) {\n this.windowValues[i] =\n (2 / bufferSize) *\n (bufferSize / 2 - Math.abs(i - (bufferSize - 1) / 2));\n }\n break;\n default:\n throw Error(\"No such window function '\" + windowFunc + \"'\");\n }\n\n var limit = 1;\n var bit = bufferSize >> 1;\n var i;\n\n while (limit < bufferSize) {\n for (i = 0; i < limit; i++) {\n this.reverseTable[i + limit] = this.reverseTable[i] + bit;\n }\n\n limit = limit << 1;\n bit = bit >> 1;\n }\n\n for (i = 0; i < bufferSize; i++) {\n this.sinTable[i] = Math.sin(-Math.PI / i);\n this.cosTable[i] = Math.cos(-Math.PI / i);\n }\n\n this.calculateSpectrum = function(buffer) {\n // Locally scope variables for speed up\n var bufferSize = this.bufferSize,\n cosTable = this.cosTable,\n sinTable = this.sinTable,\n reverseTable = this.reverseTable,\n real = new Float32Array(bufferSize),\n imag = new Float32Array(bufferSize),\n bSi = 2 / this.bufferSize,\n sqrt = Math.sqrt,\n rval,\n ival,\n mag,\n spectrum = new Float32Array(bufferSize / 2);\n\n var k = Math.floor(Math.log(bufferSize) / Math.LN2);\n\n if (Math.pow(2, k) !== bufferSize) {\n throw 'Invalid buffer size, must be a power of 2.';\n }\n if (bufferSize !== buffer.length) {\n throw 'Supplied buffer is not the same size as defined FFT. FFT Size: ' +\n bufferSize +\n ' Buffer Size: ' +\n buffer.length;\n }\n\n var halfSize = 1,\n phaseShiftStepReal,\n phaseShiftStepImag,\n currentPhaseShiftReal,\n currentPhaseShiftImag,\n off,\n tr,\n ti,\n tmpReal;\n\n for (var i = 0; i < bufferSize; i++) {\n real[i] =\n buffer[reverseTable[i]] * this.windowValues[reverseTable[i]];\n imag[i] = 0;\n }\n\n while (halfSize < bufferSize) {\n phaseShiftStepReal = cosTable[halfSize];\n phaseShiftStepImag = sinTable[halfSize];\n\n currentPhaseShiftReal = 1;\n currentPhaseShiftImag = 0;\n\n for (var fftStep = 0; fftStep < halfSize; fftStep++) {\n var i = fftStep;\n\n while (i < bufferSize) {\n off = i + halfSize;\n tr =\n currentPhaseShiftReal * real[off] -\n currentPhaseShiftImag * imag[off];\n ti =\n currentPhaseShiftReal * imag[off] +\n currentPhaseShiftImag * real[off];\n\n real[off] = real[i] - tr;\n imag[off] = imag[i] - ti;\n real[i] += tr;\n imag[i] += ti;\n\n i += halfSize << 1;\n }\n\n tmpReal = currentPhaseShiftReal;\n currentPhaseShiftReal =\n tmpReal * phaseShiftStepReal -\n currentPhaseShiftImag * phaseShiftStepImag;\n currentPhaseShiftImag =\n tmpReal * phaseShiftStepImag +\n currentPhaseShiftImag * phaseShiftStepReal;\n }\n\n halfSize = halfSize << 1;\n }\n\n for (var i = 0, N = bufferSize / 2; i < N; i++) {\n rval = real[i];\n ival = imag[i];\n mag = bSi * sqrt(rval * rval + ival * ival);\n\n if (mag > this.peak) {\n this.peakBand = i;\n this.peak = mag;\n }\n spectrum[i] = mag;\n }\n return spectrum;\n };\n}\n","/* eslint-enable complexity, no-redeclare, no-var, one-var */\n\nimport FFT from './fft';\n\n/**\n * @typedef {Object} SpectrogramPluginParams\n * @property {string|HTMLElement} container Selector of element or element in\n * which to render\n * @property {number} fftSamples=512 Number of samples to fetch to FFT. Must be\n * a power of 2.\n * @property {boolean} splitChannels=false Render with separate spectrograms for\n * the channels of the audio\n * @property {number} height=fftSamples/2 Height of the spectrogram view in CSS\n * pixels\n * @property {boolean} labels Set to true to display frequency labels.\n * @property {number} noverlap Size of the overlapping window. Must be <\n * fftSamples. Auto deduced from canvas size by default.\n * @property {string} windowFunc='hann' The window function to be used. One of\n * these: `'bartlett'`, `'bartlettHann'`, `'blackman'`, `'cosine'`, `'gauss'`,\n * `'hamming'`, `'hann'`, `'lanczoz'`, `'rectangular'`, `'triangular'`\n * @property {?number} alpha Some window functions have this extra value.\n * (Between 0 and 1)\n * @property {number} pixelRatio=wavesurfer.params.pixelRatio to control the\n * size of the spectrogram in relation with its canvas. 1 = Draw on the whole\n * canvas. 2 = Draw on a quarter (1/2 the length and 1/2 the width)\n * @property {number} frequencyMin=0 Min frequency to scale spectrogram.\n * @property {number} frequencyMax=12000 Max frequency to scale spectrogram.\n * Set this to samplerate/2 to draw whole range of spectrogram.\n * @property {?boolean} deferInit Set to true to manually call\n * `initPlugin('spectrogram')`\n * @property {?number[][]} colorMap A 256 long array of 4-element arrays.\n * Each entry should contain a float between 0 and 1 and specify\n * r, g, b, and alpha.\n */\n\n/**\n * Render a spectrogram visualisation of the audio.\n *\n * @implements {PluginClass}\n * @extends {Observer}\n * @example\n * // es6\n * import SpectrogramPlugin from 'wavesurfer.spectrogram.js';\n *\n * // commonjs\n * var SpectrogramPlugin = require('wavesurfer.spectrogram.js');\n *\n * // if you are using <script> tags\n * var SpectrogramPlugin = window.WaveSurfer.spectrogram;\n *\n * // ... initialising wavesurfer with the plugin\n * var wavesurfer = WaveSurfer.create({\n * // wavesurfer options ...\n * plugins: [\n * SpectrogramPlugin.create({\n * // plugin options ...\n * })\n * ]\n * });\n */\nexport default class SpectrogramPlugin {\n /**\n * Spectrogram plugin definition factory\n *\n * This function must be used to create a plugin definition which can be\n * used by wavesurfer to correctly instantiate the plugin.\n *\n * @param {SpectrogramPluginParams} params Parameters used to initialise the plugin\n * @return {PluginDefinition} An object representing the plugin.\n */\n static create(params) {\n return {\n name: 'spectrogram',\n deferInit: params && params.deferInit ? params.deferInit : false,\n params: params,\n staticProps: {\n FFT: FFT\n },\n instance: SpectrogramPlugin\n };\n }\n\n constructor(params, ws) {\n this.params = params;\n this.wavesurfer = ws;\n this.util = ws.util;\n\n this.frequenciesDataUrl = params.frequenciesDataUrl;\n this._onScroll = e => {\n this.updateScroll(e);\n };\n this._onRender = () => {\n this.render();\n };\n this._onWrapperClick = e => {\n this._wrapperClickHandler(e);\n };\n this._onReady = () => {\n const drawer = (this.drawer = ws.drawer);\n\n this.container =\n 'string' == typeof params.container\n ? document.querySelector(params.container)\n : params.container;\n\n if (!this.container) {\n throw Error('No container for WaveSurfer spectrogram');\n }\n if (params.colorMap) {\n if (params.colorMap.length < 256) {\n throw new Error('Colormap must contain 256 elements');\n }\n for (let i = 0; i < params.colorMap.length; i++) {\n const cmEntry = params.colorMap[i];\n if (cmEntry.length !== 4) {\n throw new Error(\n 'ColorMap entries must contain 4 values'\n );\n }\n }\n this.colorMap = params.colorMap;\n } else {\n this.colorMap = [];\n for (let i = 0; i < 256; i++) {\n const val = (255 - i) / 256;\n this.colorMap.push([val, val, val, 1]);\n }\n }\n this.width = drawer.width;\n this.pixelRatio = this.params.pixelRatio || ws.params.pixelRatio;\n this.fftSamples =\n this.params.fftSamples || ws.params.fftSamples || 512;\n this.height = this.params.height || this.fftSamples / 2;\n this.noverlap = params.noverlap;\n this.windowFunc = params.windowFunc;\n this.alpha = params.alpha;\n this.splitChannels = params.splitChannels;\n this.channels = this.splitChannels ? ws.backend.buffer.numberOfChannels : 1;\n\n // Getting file's original samplerate is difficult(#1248).\n // So set 12kHz default to render like wavesurfer.js 5.x.\n this.frequencyMin = params.frequencyMin || 0;\n this.frequencyMax = params.frequencyMax || 12000;\n\n this.createWrapper();\n this.createCanvas();\n this.render();\n\n drawer.wrapper.addEventListener('scroll', this._onScroll);\n ws.on('redraw', this._onRender);\n };\n }\n\n init() {\n // Check if wavesurfer is ready\n if (this.wavesurfer.isReady) {\n this._onReady();\n } else {\n this.wavesurfer.once('ready', this._onReady);\n }\n }\n\n destroy() {\n this.unAll();\n this.wavesurfer.un('ready', this._onReady);\n this.wavesurfer.un('redraw', this._onRender);\n this.drawer && this.drawer.wrapper.removeEventListener('scroll', this._onScroll);\n this.wavesurfer = null;\n this.util = null;\n this.params = null;\n if (this.wrapper) {\n this.wrapper.removeEventListener('click', this._onWrapperClick);\n this.wrapper.parentNode.removeChild(this.wrapper);\n this.wrapper = null;\n }\n }\n\n createWrapper() {\n const prevSpectrogram = this.container.querySelector('spectrogram');\n if (prevSpectrogram) {\n this.container.removeChild(prevSpectrogram);\n }\n const wsParams = this.wavesurfer.params;\n this.wrapper = document.createElement('spectrogram');\n // if labels are active\n if (this.params.labels) {\n const labelsEl = (this.labelsEl = document.createElement('canvas'));\n labelsEl.classList.add('spec-labels');\n this.drawer.style(labelsEl, {\n position: 'absolute',\n zIndex: 9,\n height: `${this.height * this.channels}px`,\n width: `55px`\n });\n this.wrapper.appendChild(labelsEl);\n this.loadLabels(\n 'rgba(68,68,68,0.5)',\n '12px',\n '10px',\n '',\n '#fff',\n '#f7f7f7',\n 'center',\n '#specLabels'\n );\n }\n\n this.drawer.style(this.wrapper, {\n display: 'block',\n position: 'relative',\n userSelect: 'none',\n webkitUserSelect: 'none',\n height: `${this.height * this.channels}px`\n });\n\n if (wsParams.fillParent || wsParams.scrollParent) {\n this.drawer.style(this.wrapper, {\n width: '100%',\n overflowX: 'hidden',\n overflowY: 'hidden'\n });\n }\n this.container.appendChild(this.wrapper);\n\n this.wrapper.addEventListener('click', this._onWrapperClick);\n }\n\n _wrapperClickHandler(event) {\n event.preventDefault();\n const relX = 'offsetX' in event ? event.offsetX : event.layerX;\n this.fireEvent('click', relX / this.width || 0);\n }\n\n createCanvas() {\n const canvas = (this.canvas = this.wrapper.appendChild(\n document.createElement('canvas')\n ));\n\n this.spectrCc = canvas.getContext('2d');\n\n this.util.style(canvas, {\n position: 'absolute',\n zIndex: 4\n });\n }\n\n render() {\n this.updateCanvasStyle();\n\n if (this.frequenciesDataUrl) {\n this.loadFrequenciesData(this.frequenciesDataUrl);\n } else {\n this.getFrequencies(this.drawSpectrogram);\n }\n }\n\n updateCanvasStyle() {\n const width = Math.round(this.width / this.pixelRatio) + 'px';\n this.canvas.width = this.width;\n this.canvas.height = this.fftSamples / 2 * this.channels;\n this.canvas.style.width = width;\n this.canvas.style.height = this.height + 'px';\n }\n\n drawSpectrogram(frequenciesData, my) {\n if (!isNaN(frequenciesData[0][0])) { // data is 1ch [sample, freq] format\n // to [channel, sample, freq] format\n frequenciesData = [frequenciesData];\n }\n\n const spectrCc = my.spectrCc;\n const height = my.fftSamples / 2;\n const width = my.width;\n const freqFrom = my.buffer.sampleRate / 2;\n const freqMin = my.frequencyMin;\n const freqMax = my.frequencyMax;\n\n if (!spectrCc) {\n return;\n }\n\n for (let c = 0; c < frequenciesData.length; c++) { // for each channel\n const pixels = my.resample(frequenciesData[c]);\n const imageData = new ImageData(width, height);\n\n for (let i = 0; i < pixels.length; i++) {\n for (let j = 0; j < pixels[i].length; j++) {\n const colorMap = my.colorMap[pixels[i][j]];\n const redIndex = ((height - j) * width + i) * 4;\n imageData.data[redIndex] = colorMap[0] * 255;\n imageData.data[redIndex + 1] = colorMap[1] * 255;\n imageData.data[redIndex + 2] = colorMap[2] * 255;\n imageData.data[redIndex + 3] = colorMap[3] * 255;\n }\n }\n\n // scale and stack spectrograms\n createImageBitmap(imageData).then(renderer =>\n spectrCc.drawImage(renderer,\n 0, height * (1 - freqMax / freqFrom), // source x, y\n width, height * (freqMax - freqMin) / freqFrom, // source width, height\n 0, height * c, // destination x, y\n width, height // destination width, height\n )\n );\n }\n }\n\n getFrequencies(callback) {\n const fftSamples = this.fftSamples;\n const buffer = (this.buffer = this.wavesurfer.backend.buffer);\n const channels = this.channels;\n\n if (!buffer) {\n this.fireEvent('error', 'Web Audio buffer is not available');\n return;\n }\n\n // This may differ from file samplerate. Browser resamples audio.\n const sampleRate = buffer.sampleRate;\n const frequencies = [];\n\n let noverlap = this.noverlap;\n if (!noverlap) {\n const uniqueSamplesPerPx = buffer.length / this.canvas.width;\n noverlap = Math.max(0, Math.round(fftSamples - uniqueSamplesPerPx));\n }\n\n const fft = new FFT(\n fftSamples,\n sampleRate,\n this.windowFunc,\n this.alpha\n );\n\n for (let c = 0; c < channels; c++) { // for each channel\n const channelData = buffer.getChannelData(c);\n const channelFreq = [];\n let currentOffset = 0;\n\n while (currentOffset + fftSamples < channelData.length) {\n const segment = channelData.slice(\n currentOffset,\n currentOffset + fftSamples\n );\n const spectrum = fft.calculateSpectrum(segment);\n const array = new Uint8Array(fftSamples / 2);\n let j;\n for (j = 0; j < fftSamples / 2; j++) {\n array[j] = Math.max(-255, Math.log10(spectrum[j]) * 45);\n }\n channelFreq.push(array);\n // channelFreq: [sample, freq]\n\n currentOffset += fftSamples - noverlap;\n }\n frequencies.push(channelFreq);\n // frequencies: [channel, sample, freq]\n }\n callback(frequencies, this);\n }\n\n loadFrequenciesData(url) {\n const request = this.util.fetchFile({ url: url });\n\n request.on('success', data =>\n this.drawSpectrogram(JSON.parse(data), this)\n );\n request.on('error', e => this.fireEvent('error', e));\n\n return request;\n }\n\n freqType(freq) {\n return freq >= 1000 ? (freq / 1000).toFixed(1) : Math.round(freq);\n }\n\n unitType(freq) {\n return freq >= 1000 ? 'KHz' : 'Hz';\n }\n\n loadLabels(\n bgFill,\n fontSizeFreq,\n fontSizeUnit,\n fontType,\n textColorFreq,\n textColorUnit,\n textAlign,\n container\n ) {\n const frequenciesHeight = this.height;\n bgFill = bgFill || 'rgba(68,68,68,0)';\n fontSizeFreq = fontSizeFreq || '12px';\n fontSizeUnit = fontSizeUnit || '10px';\n fontType = fontType || 'Helvetica';\n textColorFreq = textColorFreq || '#fff';\n textColorUnit = textColorUnit || '#fff';\n textAlign = textAlign || 'center';\n container = container || '#specLabels';\n const bgWidth = 55;\n const getMaxY = frequenciesHeight || 512;\n const labelIndex = 5 * (getMaxY / 256);\n const freqStart = this.frequencyMin;\n const step = (this.frequencyMax - freqStart) / labelIndex;\n\n // prepare canvas element for labels\n const ctx = this.labelsEl.getContext('2d');\n const dispScale = window.devicePixelRatio;\n this.labelsEl.height = this.height * this.channels * dispScale;\n this.labelsEl.width = bgWidth * dispScale;\n ctx.scale(dispScale, dispScale);\n\n if (!ctx) {\n return;\n }\n\n for (let c = 0; c < this.channels; c++) { // for each channel\n // fill background\n ctx.fillStyle = bgFill;\n ctx.fillRect(0, c * getMaxY, bgWidth, (1 + c) * getMaxY);\n ctx.fill();\n let i;\n\n // render labels\n for (i = 0; i <= labelIndex; i++) {\n ctx.textAlign = textAlign;\n ctx.textBaseline = 'middle';\n\n const freq = freqStart + step * i;\n const label = this.freqType(freq);\n const units = this.unitType(freq);\n const yLabelOffset = 2;\n const x = 16;\n let y;\n\n if (i == 0) {\n y = (1 + c) * getMaxY + i - 10;\n // unit label\n ctx.fillStyle = textColorUnit;\n ctx.font = fontSizeUnit + ' ' + fontType;\n ctx.fillText(units, x + 24, y);\n // freq label\n ctx.fillStyle = textColorFreq;\n ctx.font = fontSizeFreq + ' ' + fontType;\n ctx.fillText(label, x, y);\n } else {\n y = (1 + c) * getMaxY - i * 50 + yLabelOffset;\n // unit label\n ctx.fillStyle = textColorUnit;\n ctx.font = fontSizeUnit + ' ' + fontType;\n ctx.fillText(units, x + 24, y);\n // freq label\n ctx.fillStyle = textColorFreq;\n ctx.font = fontSizeFreq + ' ' + fontType;\n ctx.fillText(label, x, y);\n }\n }\n }\n }\n\n updateScroll(e) {\n if (this.wrapper) {\n this.wrapper.scrollLeft = e.target.scrollLeft;\n }\n }\n\n resample(oldMatrix) {\n const columnsNumber = this.width;\n const newMatrix = [];\n\n const oldPiece = 1 / oldMatrix.length;\n const newPiece = 1 / columnsNumber;\n let i;\n\n for (i = 0; i < columnsNumber; i++) {\n const column = new Array(oldMatrix[0].length);\n let j;\n\n for (j = 0; j < oldMatrix.length; j++) {\n const oldStart = j * oldPiece;\n const oldEnd = oldStart + oldPiece;\n const newStart = i * newPiece;\n const newEnd = newStart + newPiece;\n\n const overlap =\n oldEnd <= newStart || newEnd <= oldStart\n ? 0\n : Math.min(\n Math.max(oldEnd, newStart),\n Math.max(newEnd, oldStart)\n ) -\n Math.max(\n Math.min(oldEnd, newStart),\n Math.min(newEnd, oldStart)\n );\n let k;\n /* eslint-disable max-depth */\n if (overlap > 0) {\n for (k = 0; k < oldMatrix[0].length; k++) {\n if (column[k] == null) {\n column[k] = 0;\n }\n column[k] += (overlap / newPiece) * oldMatrix[j][k];\n }\n }\n /* eslint-enable max-depth */\n }\n\n const intColumn = new Uint8Array(oldMatrix[0].length);\n let m;\n\n for (m = 0; m < oldMatrix[0].length; m++) {\n intColumn[m] = column[m];\n }\n\n newMatrix.push(intColumn);\n }\n\n return newMatrix;\n }\n}\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// startup\n// Load entry module and return exports\n// This entry module is referenced by other modules so it can't be inlined\nvar __webpack_exports__ = __webpack_require__(943);\n"],"names":["root","factory","exports","module","define","amd","self","bufferSize","sampleRate","windowFunc","alpha","this","bandwidth","sinTable","Float32Array","cosTable","windowValues","reverseTable","Uint32Array","peakBand","peak","i","Math","abs","cos","PI","pow","E","undefined","sin","Error","limit","bit","calculateSpectrum","buffer","rval","ival","mag","real","imag","bSi","sqrt","spectrum","k","floor","log","LN2","length","phaseShiftStepReal","phaseShiftStepImag","currentPhaseShiftReal","currentPhaseShiftImag","off","tr","ti","tmpReal","halfSize","fftStep","N","default","obj","_fft","require","__esModule","_typeof","Symbol","iterator","constructor","prototype","_defineProperties","target","props","descriptor","enumerable","configurable","writable","Object","defineProperty","arg","key","input","hint","prim","toPrimitive","res","call","TypeError","String","Number","_toPrimitive","SpectrogramPlugin","params","ws","_this","instance","Constructor","_classCallCheck","wavesurfer","util","frequenciesDataUrl","_onScroll","e","updateScroll","_onRender","render","_onWrapperClick","_wrapperClickHandler","_onReady","drawer","container","document","querySelector","colorMap","val","push","width","pixelRatio","fftSamples","height","noverlap","splitChannels","channels","backend","numberOfChannels","frequencyMin","frequencyMax","createWrapper","createCanvas","wrapper","addEventListener","on","protoProps","staticProps","value","name","deferInit","FFT","isReady","once","unAll","un","removeEventListener","parentNode","removeChild","prevSpectrogram","wsParams","createElement","labels","labelsEl","classList","add","style","position","zIndex","concat","appendChild","loadLabels","display","userSelect","webkitUserSelect","fillParent","scrollParent","overflowX","overflowY","event","preventDefault","relX","offsetX","layerX","fireEvent","canvas","spectrCc","getContext","updateCanvasStyle","loadFrequenciesData","getFrequencies","drawSpectrogram","round","frequenciesData","my","isNaN","freqFrom","freqMin","freqMax","_loop","c","pixels","resample","imageData","ImageData","j","redIndex","data","createImageBitmap","then","renderer","drawImage","callback","frequencies","uniqueSamplesPerPx","max","fft","channelData","getChannelData","channelFreq","currentOffset","segment","slice","array","Uint8Array","log10","url","_this2","request","fetchFile","JSON","parse","freq","toFixed","bgFill","fontSizeFreq","fontSizeUnit","fontType","textColorFreq","textColorUnit","textAlign","getMaxY","labelIndex","freqStart","step","ctx","dispScale","window","devicePixelRatio","scale","fillStyle","fillRect","fill","textBaseline","label","freqType","units","unitType","y","font","fillText","x","scrollLeft","oldMatrix","columnsNumber","newMatrix","oldPiece","newPiece","column","Array","oldStart","oldEnd","newStart","newEnd","overlap","min","intColumn","m","__webpack_module_cache__","__webpack_exports__","__webpack_require__","moduleId","cachedModule","__webpack_modules__"],"sourceRoot":""}
|