wavesurfer.js 6.5.2 → 6.6.1

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.
Files changed (35) hide show
  1. package/README.md +19 -3
  2. package/dist/plugin/wavesurfer.cursor.js +1 -1
  3. package/dist/plugin/wavesurfer.cursor.min.js +1 -1
  4. package/dist/plugin/wavesurfer.elan.js +1 -1
  5. package/dist/plugin/wavesurfer.elan.min.js +1 -1
  6. package/dist/plugin/wavesurfer.markers.js +1 -1
  7. package/dist/plugin/wavesurfer.markers.min.js +1 -1
  8. package/dist/plugin/wavesurfer.mediasession.js +1 -1
  9. package/dist/plugin/wavesurfer.mediasession.min.js +1 -1
  10. package/dist/plugin/wavesurfer.microphone.js +1 -1
  11. package/dist/plugin/wavesurfer.microphone.min.js +1 -1
  12. package/dist/plugin/wavesurfer.minimap.js +1 -1
  13. package/dist/plugin/wavesurfer.minimap.min.js +1 -1
  14. package/dist/plugin/wavesurfer.playhead.js +1 -1
  15. package/dist/plugin/wavesurfer.playhead.min.js +1 -1
  16. package/dist/plugin/wavesurfer.regions.js +1 -1
  17. package/dist/plugin/wavesurfer.regions.min.js +1 -1
  18. package/dist/plugin/wavesurfer.spectrogram.js +128 -34
  19. package/dist/plugin/wavesurfer.spectrogram.js.map +1 -1
  20. package/dist/plugin/wavesurfer.spectrogram.min.js +2 -2
  21. package/dist/plugin/wavesurfer.spectrogram.min.js.map +1 -1
  22. package/dist/plugin/wavesurfer.timeline.js +1 -1
  23. package/dist/plugin/wavesurfer.timeline.min.js +1 -1
  24. package/dist/wavesurfer-html-init.js +1 -1
  25. package/dist/wavesurfer-html-init.min.js +1 -1
  26. package/dist/wavesurfer.js +160 -6
  27. package/dist/wavesurfer.js.map +1 -1
  28. package/dist/wavesurfer.min.js +2 -2
  29. package/dist/wavesurfer.min.js.map +1 -1
  30. package/package.json +4 -3
  31. package/src/drawer.canvasentry.js +43 -0
  32. package/src/drawer.js +0 -4
  33. package/src/drawer.multicanvas.js +71 -1
  34. package/src/plugin/spectrogram/index.js +121 -30
  35. package/src/wavesurfer.js +33 -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","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
+ {"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._onZoom = () => {\n this.stretchCanvases();\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 this.canvases = [];\n this.canvasesTimeouts = [];\n this.scrollLeftTracker = 0; //Tracks the desired scrollLeft value\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.addCanvas();\n this.render();\n\n drawer.wrapper.addEventListener('scroll', this._onScroll);\n ws.on('zoom', this._onZoom);\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 /**\n * Add a canvas to this.canvases\n */\n addCanvas() {\n const canvas = (this.wrapper.appendChild(\n document.createElement('canvas')\n ));\n\n this.util.style(canvas, {\n position: 'absolute',\n zIndex: 4\n });\n\n this.canvases.push(canvas);\n this.canvasesTimeouts.push(null);\n }\n\n /**\n * Remove a canvas from this.canvases\n */\n removeCanvas() {\n //Stop drawing (if drawing)\n clearTimeout(this.canvasesTimeouts[this.canvasesTimeouts.length - 1]);\n\n let lastEntry = this.canvases[this.canvases.length - 1];\n lastEntry.parentElement.removeChild(lastEntry);\n\n this.canvases.pop();\n this.canvasesTimeouts.pop();\n }\n\n /**\n * Ensure the correct number of canvases for the size of the spectrogram\n */\n updateCanvases() {\n let canvasesRequired = Math.ceil(this.width / 4000);\n\n while (this.canvases.length < canvasesRequired) {\n this.addCanvas();\n }\n while (this.canvases.length > canvasesRequired) {\n this.removeCanvas();\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 this.updateCanvases();\n //width per canvas\n for (let i = 0; i < this.canvases.length; i++) {\n this.canvases[i].width = Math.round(this.width / this.canvases.length);\n this.canvases[i].height = this.fftSamples / 2 * this.channels;\n this.canvases[i].style.width = Math.round(this.canvases[i].width / this.pixelRatio) + 'px';\n this.canvases[i].style.height = this.height + 'px';\n }\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 my.updateCanvasStyle();\n\n //Stop canvases still being drawn\n for (let i = 0; i < my.canvasesTimeouts.length; i++) {\n clearTimeout(my.canvasesTimeouts[i]);\n }\n\n const view = [my.scrollLeftTracker, my.scrollLeftTracker + my.wrapper.clientWidth];\n\n for (let canvasNum = 0; canvasNum < my.canvases.length; canvasNum++) {\n const canvasLeft = canvasNum * Math.floor(my.width / my.canvases.length / my.pixelRatio);\n const canvasRight = (canvasNum + 1) * Math.floor(my.width / my.canvases.length / my.pixelRatio);\n const canvasBound = [canvasLeft, canvasRight];\n my.canvases[canvasNum].style['left'] = canvasLeft + 'px';\n\n //Optimise drawing for the view\n let priority = 0;\n if (canvasBound[0] > view[1]) {\n //Canvas is to the right of view window\n let distance = canvasBound[0] - view[1];\n priority = Math.ceil(distance / (view[1] - view[0]));\n } else if (canvasBound[1] < view[0]) {\n //Canvas is to the left of the view window\n let distance = view[0] - canvasBound[1];\n priority = Math.ceil(distance / (view[1] - view[0]));\n }\n\n //delay = 25ms * number of viewport widths away the canvas is\n my.canvasesTimeouts[canvasNum] = setTimeout(my.drawToCanvas, 25 * priority, frequenciesData, my, canvasNum);\n }\n }\n\n /**\n * Draw spectrogram channel to a specific canvas\n * @param {[Number, Number, Number]} frequenciesData spectrogram data in [channel, sample, freq] format\n * @param {SpectrogramPlugin} my variable with 'this' in it\n * @param {Number} canvasNum Canvas to draw to\n */\n drawToCanvas(frequenciesData, my, canvasNum) {\n const height = my.fftSamples / 2;\n const freqFrom = my.buffer.sampleRate / 2;\n const freqMin = my.frequencyMin;\n const freqMax = my.frequencyMax;\n\n for (let channel = 0; channel < frequenciesData.length; channel++) {\n\n //Get pixels from frequency data and apply to image\n const relevantFreqs = frequenciesData[channel].slice(canvasNum * Math.round(frequenciesData[channel].length / my.canvases.length), (canvasNum + 1) * Math.round(frequenciesData[channel].length / my.canvases.length));\n const pixels = my.resample(relevantFreqs);\n const imageData = new ImageData(pixels.length, 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) * imageData.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 //Draw image to canvas\n createImageBitmap(imageData).then(renderer => {\n if (my.canvases[canvasNum]) { //Check canvas still exists after creating image\n my.canvases[canvasNum].getContext('2d').drawImage(renderer,\n 0, height * (1 - freqMax / freqFrom), // source x, y\n imageData.width, height * (freqMax - freqMin) / freqFrom, // source width, height\n 0, height * channel, // destination x, y\n my.canvases[canvasNum].width, height // destination width, height\n );\n }\n });\n }\n //Drawing is finished\n my.canvasesTimeouts[canvasNum] = null;\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.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.scrollLeftTracker = e.target.scrollLeft;\n this.wrapper.scrollLeft = e.target.scrollLeft;\n }\n }\n\n resample(oldMatrix) {\n const columnsNumber = oldMatrix.length;\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 stretchCanvases() {\n for (let i = 0; i < this.canvases.length; i++) {\n this.canvases[i].style.width = Math.round(this.drawer.width / this.canvases.length / this.pixelRatio) + 'px';\n const canvasLeft = i * Math.floor(this.drawer.width / this.canvases.length / this.pixelRatio);\n this.canvases[i].style['left'] = canvasLeft + 'px';\n }\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","_onZoom","stretchCanvases","_onWrapperClick","_wrapperClickHandler","_onReady","drawer","container","document","querySelector","colorMap","cmEntry","val","push","width","pixelRatio","fftSamples","height","noverlap","splitChannels","channels","backend","numberOfChannels","canvases","canvasesTimeouts","scrollLeftTracker","frequencyMin","frequencyMax","createWrapper","addCanvas","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","removeCanvas","clearTimeout","lastEntry","parentElement","pop","updateCanvases","canvasesRequired","ceil","updateCanvasStyle","loadFrequenciesData","getFrequencies","drawSpectrogram","round","frequenciesData","my","isNaN","view","clientWidth","canvasNum","canvasLeft","canvasRight","canvasBound","priority","distance","setTimeout","drawToCanvas","freqFrom","freqMin","freqMax","_loop","channel","relevantFreqs","slice","pixels","resample","imageData","ImageData","j","redIndex","data","createImageBitmap","then","renderer","getContext","drawImage","callback","frequencies","uniqueSamplesPerPx","max","fft","c","channelData","getChannelData","channelFreq","currentOffset","segment","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.5.2 (2023-03-12)
2
+ * wavesurfer.js spectrogram plugin 6.6.1 (2023-03-18)
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,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})()));
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(s=0;s<e;s++)this.windowValues[s]=2/(e-1)*((e-1)/2-Math.abs(s-(e-1)/2));break;case"bartlettHann":for(s=0;s<e;s++)this.windowValues[s]=.62-.48*Math.abs(s/(e-1)-.5)-.38*Math.cos(2*Math.PI*s/(e-1));break;case"blackman":for(r=r||.16,s=0;s<e;s++)this.windowValues[s]=(1-r)/2-.5*Math.cos(2*Math.PI*s/(e-1))+r/2*Math.cos(4*Math.PI*s/(e-1));break;case"cosine":for(s=0;s<e;s++)this.windowValues[s]=Math.cos(Math.PI*s/(e-1)-Math.PI/2);break;case"gauss":for(r=r||.25,s=0;s<e;s++)this.windowValues[s]=Math.pow(Math.E,-.5*Math.pow((s-(e-1)/2)/(r*(e-1)/2),2));break;case"hamming":for(s=0;s<e;s++)this.windowValues[s]=.54-.46*Math.cos(2*Math.PI*s/(e-1));break;case"hann":case void 0:for(s=0;s<e;s++)this.windowValues[s]=.5*(1-Math.cos(2*Math.PI*s/(e-1)));break;case"lanczoz":for(s=0;s<e;s++)this.windowValues[s]=Math.sin(Math.PI*(2*s/(e-1)-1))/(Math.PI*(2*s/(e-1)-1));break;case"rectangular":for(s=0;s<e;s++)this.windowValues[s]=1;break;case"triangular":for(s=0;s<e;s++)this.windowValues[s]=2/e*(e/2-Math.abs(s-(e-1)/2));break;default:throw Error("No such window function '"+a+"'")}var s,i=1,n=e>>1;for(;i<e;){for(s=0;s<i;s++)this.reverseTable[s+i]=this.reverseTable[s]+n;i<<=1,n>>=1}for(s=0;s<e;s++)this.sinTable[s]=Math.sin(-Math.PI/s),this.cosTable[s]=Math.cos(-Math.PI/s);this.calculateSpectrum=function(e){var t,a,r,s=this.bufferSize,i=this.cosTable,n=this.sinTable,o=this.reverseTable,l=new Float32Array(s),h=new Float32Array(s),c=2/this.bufferSize,f=Math.sqrt,u=new Float32Array(s/2),p=Math.floor(Math.log(s)/Math.LN2);if(Math.pow(2,p)!==s)throw"Invalid buffer size, must be a power of 2.";if(s!==e.length)throw"Supplied buffer is not the same size as defined FFT. FFT Size: "+s+" Buffer Size: "+e.length;for(var v,d,w,m,y,b,g,M,k=1,x=0;x<s;x++)l[x]=e[o[x]]*this.windowValues[o[x]],h[x]=0;for(;k<s;){v=i[k],d=n[k],w=1,m=0;for(var S=0;S<k;S++){for(x=S;x<s;)b=w*l[y=x+k]-m*h[y],g=w*h[y]+m*l[y],l[y]=l[x]-b,h[y]=h[x]-g,l[x]+=b,h[x]+=g,x+=k<<1;w=(M=w)*v-m*d,m=M*d+m*v}k<<=1}x=0;for(var T=s/2;x<T;x++)(r=c*f((t=l[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,s=(r=a(325))&&r.__esModule?r:{default:r};function i(e){return i="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},i(e)}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,(s=r.key,n=void 0,n=function(e,t){if("object"!==i(e)||null===e)return e;var a=e[Symbol.toPrimitive];if(void 0!==a){var r=a.call(e,t||"default");if("object"!==i(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(s,"string"),"symbol"===i(n)?n:String(n)),r)}var s,n}var o=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._onZoom=function(){r.stretchCanvases()},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 s=0;s<t.colorMap.length;s++){if(4!==t.colorMap[s].length)throw new Error("ColorMap entries must contain 4 values")}r.colorMap=t.colorMap}else{r.colorMap=[];for(var i=0;i<256;i++){var n=(255-i)/256;r.colorMap.push([n,n,n,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.canvases=[],r.canvasesTimeouts=[],r.scrollLeftTracker=0,r.frequencyMin=t.frequencyMin||0,r.frequencyMax=t.frequencyMax||12e3,r.createWrapper(),r.addCanvas(),r.render(),e.wrapper.addEventListener("scroll",r._onScroll),a.on("zoom",r._onZoom),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:s.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:"addCanvas",value:function(){var e=this.wrapper.appendChild(document.createElement("canvas"));this.util.style(e,{position:"absolute",zIndex:4}),this.canvases.push(e),this.canvasesTimeouts.push(null)}},{key:"removeCanvas",value:function(){clearTimeout(this.canvasesTimeouts[this.canvasesTimeouts.length-1]);var e=this.canvases[this.canvases.length-1];e.parentElement.removeChild(e),this.canvases.pop(),this.canvasesTimeouts.pop()}},{key:"updateCanvases",value:function(){for(var e=Math.ceil(this.width/4e3);this.canvases.length<e;)this.addCanvas();for(;this.canvases.length>e;)this.removeCanvas()}},{key:"render",value:function(){this.updateCanvasStyle(),this.frequenciesDataUrl?this.loadFrequenciesData(this.frequenciesDataUrl):this.getFrequencies(this.drawSpectrogram)}},{key:"updateCanvasStyle",value:function(){this.updateCanvases();for(var e=0;e<this.canvases.length;e++)this.canvases[e].width=Math.round(this.width/this.canvases.length),this.canvases[e].height=this.fftSamples/2*this.channels,this.canvases[e].style.width=Math.round(this.canvases[e].width/this.pixelRatio)+"px",this.canvases[e].style.height=this.height+"px"}},{key:"drawSpectrogram",value:function(e,t){isNaN(e[0][0])||(e=[e]),t.updateCanvasStyle();for(var a=0;a<t.canvasesTimeouts.length;a++)clearTimeout(t.canvasesTimeouts[a]);for(var r=[t.scrollLeftTracker,t.scrollLeftTracker+t.wrapper.clientWidth],s=0;s<t.canvases.length;s++){var i=s*Math.floor(t.width/t.canvases.length/t.pixelRatio),n=[i,(s+1)*Math.floor(t.width/t.canvases.length/t.pixelRatio)];t.canvases[s].style.left=i+"px";var o=0;if(n[0]>r[1]){var l=n[0]-r[1];o=Math.ceil(l/(r[1]-r[0]))}else if(n[1]<r[0]){var h=r[0]-n[1];o=Math.ceil(h/(r[1]-r[0]))}t.canvasesTimeouts[s]=setTimeout(t.drawToCanvas,25*o,e,t,s)}}},{key:"drawToCanvas",value:function(e,t,a){for(var r=t.fftSamples/2,s=t.buffer.sampleRate/2,i=t.frequencyMin,n=t.frequencyMax,o=function(o){for(var l=e[o].slice(a*Math.round(e[o].length/t.canvases.length),(a+1)*Math.round(e[o].length/t.canvases.length)),h=t.resample(l),c=new ImageData(h.length,r),f=0;f<h.length;f++)for(var u=0;u<h[f].length;u++){var p=t.colorMap[h[f][u]],v=4*((r-u)*c.width+f);c.data[v]=255*p[0],c.data[v+1]=255*p[1],c.data[v+2]=255*p[2],c.data[v+3]=255*p[3]}createImageBitmap(c).then((function(e){t.canvases[a]&&t.canvases[a].getContext("2d").drawImage(e,0,r*(1-n/s),c.width,r*(n-i)/s,0,r*o,t.canvases[a].width,r)}))},l=0;l<e.length;l++)o(l);t.canvasesTimeouts[a]=null}},{key:"getFrequencies",value:function(e){var t=this.fftSamples,a=this.buffer=this.wavesurfer.backend.buffer,r=this.channels;if(a){var i=a.sampleRate,n=[],o=this.noverlap;if(!o){var l=a.length/this.width;o=Math.max(0,Math.round(t-l))}for(var h=new s.default(t,i,this.windowFunc,this.alpha),c=0;c<r;c++){for(var f=a.getChannelData(c),u=[],p=0;p+t<f.length;){var v=f.slice(p,p+t),d=h.calculateSpectrum(v),w=new Uint8Array(t/2),m=void 0;for(m=0;m<t/2;m++)w[m]=Math.max(-255,45*Math.log10(d[m]));u.push(w),p+=t-o}n.push(u)}e(n,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,s,i,n,o){e=e||"rgba(68,68,68,0)",t=t||"12px",a=a||"10px",r=r||"Helvetica",s=s||"#fff",i=i||"#fff",n=n||"center",o=o||"#specLabels";var l=this.height||512,h=l/256*5,c=this.frequencyMin,f=(this.frequencyMax-c)/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 v=0;v<this.channels;v++){u.fillStyle=e,u.fillRect(0,v*l,55,(1+v)*l),u.fill();var d=void 0;for(d=0;d<=h;d++){u.textAlign=n,u.textBaseline="middle";var w=c+f*d,m=this.freqType(w),y=this.unitType(w),b=void 0;0==d?(b=(1+v)*l+d-10,u.fillStyle=i,u.font=a+" "+r,u.fillText(y,40,b),u.fillStyle=s,u.font=t+" "+r,u.fillText(m,16,b)):(b=(1+v)*l-50*d+2,u.fillStyle=i,u.font=a+" "+r,u.fillText(y,40,b),u.fillStyle=s,u.font=t+" "+r,u.fillText(m,16,b))}}}},{key:"updateScroll",value:function(e){this.wrapper&&(this.scrollLeftTracker=e.target.scrollLeft,this.wrapper.scrollLeft=e.target.scrollLeft)}},{key:"resample",value:function(e){var t,a=e.length,r=[],s=1/e.length,i=1/a;for(t=0;t<a;t++){var n=new Array(e[0].length),o=void 0;for(o=0;o<e.length;o++){var l=o*s,h=l+s,c=t*i,f=c+i,u=h<=c||f<=l?0:Math.min(Math.max(h,c),Math.max(f,l))-Math.max(Math.min(h,c),Math.min(f,l)),p=void 0;if(u>0)for(p=0;p<e[0].length;p++)null==n[p]&&(n[p]=0),n[p]+=u/i*e[o][p]}var v=new Uint8Array(e[0].length),d=void 0;for(d=0;d<e[0].length;d++)v[d]=n[d];r.push(v)}return r}},{key:"stretchCanvases",value:function(){for(var e=0;e<this.canvases.length;e++){this.canvases[e].style.width=Math.round(this.drawer.width/this.canvases.length/this.pixelRatio)+"px";var t=e*Math.floor(this.drawer.width/this.canvases.length/this.pixelRatio);this.canvases[e].style.left=t+"px"}}}])&&n(t.prototype,a),r&&n(t,r),Object.defineProperty(t,"prototype",{writable:!1}),e}();t.default=o,e.exports=t.default}},t={};var a=function a(r){var s=t[r];if(void 0!==s)return s.exports;var i=t[r]={exports:{}};return e[r](i,i.exports,a),i.exports}(943);return a})()));
7
7
  //# sourceMappingURL=wavesurfer.spectrogram.min.js.map