wavesurfer.js 6.6.1 → 6.6.3
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/README.md +1 -1
- package/dist/plugin/wavesurfer.cursor.js +1 -1
- package/dist/plugin/wavesurfer.cursor.min.js +1 -1
- package/dist/plugin/wavesurfer.elan.js +1 -1
- package/dist/plugin/wavesurfer.elan.min.js +1 -1
- package/dist/plugin/wavesurfer.markers.js +12 -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 +1 -1
- package/dist/plugin/wavesurfer.mediasession.min.js +1 -1
- package/dist/plugin/wavesurfer.microphone.js +1 -1
- package/dist/plugin/wavesurfer.microphone.min.js +1 -1
- package/dist/plugin/wavesurfer.minimap.js +1 -1
- package/dist/plugin/wavesurfer.minimap.min.js +1 -1
- package/dist/plugin/wavesurfer.playhead.js +1 -1
- package/dist/plugin/wavesurfer.playhead.min.js +1 -1
- package/dist/plugin/wavesurfer.regions.js +1 -1
- package/dist/plugin/wavesurfer.regions.min.js +1 -1
- package/dist/plugin/wavesurfer.spectrogram.js +34 -128
- 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 +1 -1
- package/dist/plugin/wavesurfer.timeline.min.js +1 -1
- package/dist/wavesurfer-html-init.js +1 -1
- package/dist/wavesurfer-html-init.min.js +1 -1
- package/dist/wavesurfer.js +16 -186
- 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 +1 -1
- package/src/drawer.canvasentry.js +0 -43
- package/src/drawer.js +4 -0
- package/src/drawer.multicanvas.js +1 -71
- package/src/plugin/markers/index.js +9 -2
- package/src/plugin/spectrogram/index.js +30 -121
- package/src/wavesurfer.js +0 -33
- package/src/webaudio.js +9 -26
|
@@ -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._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__(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","_onZoom","stretchCanvases","_onWrapperClick","_wrapperClickHandler","_onReady","drawer","container","document","querySelector","colorMap","val","push","width","pixelRatio","fftSamples","height","noverlap","splitChannels","channels","backend","numberOfChannels","canvases","canvasesTimeouts","scrollLeftTracker","frequencyMin","frequencyMax","createWrapper","addCanvas","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","clearTimeout","lastEntry","parentElement","pop","canvasesRequired","ceil","removeCanvas","updateCanvasStyle","loadFrequenciesData","getFrequencies","drawSpectrogram","updateCanvases","round","frequenciesData","my","isNaN","view","clientWidth","canvasNum","canvasLeft","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","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":""}
|
|
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":""}
|
package/dist/wavesurfer.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/*!
|
|
2
|
-
* wavesurfer.js 6.6.
|
|
2
|
+
* wavesurfer.js 6.6.3 (2023-04-04)
|
|
3
3
|
* https://wavesurfer-js.org
|
|
4
4
|
* @license BSD-3-Clause
|
|
5
5
|
*/
|
|
@@ -96,10 +96,6 @@ var CanvasEntry = /*#__PURE__*/function () {
|
|
|
96
96
|
* @type {object}
|
|
97
97
|
*/
|
|
98
98
|
this.canvasContextAttributes = {};
|
|
99
|
-
/**
|
|
100
|
-
* The Timeout id used to track this canvas entry.
|
|
101
|
-
*/
|
|
102
|
-
this.drawTimeout = null;
|
|
103
99
|
}
|
|
104
100
|
|
|
105
101
|
/**
|
|
@@ -165,17 +161,11 @@ var CanvasEntry = /*#__PURE__*/function () {
|
|
|
165
161
|
key: "clearWave",
|
|
166
162
|
value: function clearWave() {
|
|
167
163
|
// wave
|
|
168
|
-
this.waveCtx.save();
|
|
169
|
-
this.waveCtx.setTransform(1, 0, 0, 1, 0, 0);
|
|
170
164
|
this.waveCtx.clearRect(0, 0, this.waveCtx.canvas.width, this.waveCtx.canvas.height);
|
|
171
|
-
this.waveCtx.restore();
|
|
172
165
|
|
|
173
166
|
// progress
|
|
174
167
|
if (this.hasProgressCanvas) {
|
|
175
|
-
this.progressCtx.save();
|
|
176
|
-
this.progressCtx.setTransform(1, 0, 0, 1, 0, 0);
|
|
177
168
|
this.progressCtx.clearRect(0, 0, this.progressCtx.canvas.width, this.progressCtx.canvas.height);
|
|
178
|
-
this.progressCtx.restore();
|
|
179
169
|
}
|
|
180
170
|
}
|
|
181
171
|
|
|
@@ -433,48 +423,6 @@ var CanvasEntry = /*#__PURE__*/function () {
|
|
|
433
423
|
return this.wave.toDataURL(format, quality);
|
|
434
424
|
}
|
|
435
425
|
}
|
|
436
|
-
|
|
437
|
-
/**
|
|
438
|
-
* Stretches existing canvas
|
|
439
|
-
* @param {Number} newTotalWidth total width of wave in pixels
|
|
440
|
-
*/
|
|
441
|
-
}, {
|
|
442
|
-
key: "stretchCanvas",
|
|
443
|
-
value: function stretchCanvas(newTotalWidth) {
|
|
444
|
-
//Calculate the start and width of this canvas
|
|
445
|
-
var start = Math.round(this.start * newTotalWidth);
|
|
446
|
-
var width = Math.round(this.end * newTotalWidth - start);
|
|
447
|
-
|
|
448
|
-
//Stretch canvas
|
|
449
|
-
var elementSize = {
|
|
450
|
-
width: width + 'px'
|
|
451
|
-
};
|
|
452
|
-
var elementStart = {
|
|
453
|
-
left: start + 'px'
|
|
454
|
-
};
|
|
455
|
-
(0, _style.default)(this.wave, elementSize);
|
|
456
|
-
(0, _style.default)(this.wave, elementStart);
|
|
457
|
-
if (this.hasProgressCanvas) {
|
|
458
|
-
(0, _style.default)(this.progress, elementSize);
|
|
459
|
-
(0, _style.default)(this.progress, elementStart);
|
|
460
|
-
}
|
|
461
|
-
}
|
|
462
|
-
|
|
463
|
-
/**
|
|
464
|
-
* Set the left offset of the canvas
|
|
465
|
-
* @param {Number} position in px for the canvas to start
|
|
466
|
-
*/
|
|
467
|
-
}, {
|
|
468
|
-
key: "setLeft",
|
|
469
|
-
value: function setLeft(position) {
|
|
470
|
-
var elementStart = {
|
|
471
|
-
left: position + 'px'
|
|
472
|
-
};
|
|
473
|
-
(0, _style.default)(this.wave, elementStart);
|
|
474
|
-
if (this.hasProgressCanvas) {
|
|
475
|
-
(0, _style.default)(this.progress, elementStart);
|
|
476
|
-
}
|
|
477
|
-
}
|
|
478
426
|
}]);
|
|
479
427
|
return CanvasEntry;
|
|
480
428
|
}();
|
|
@@ -782,6 +730,9 @@ var Drawer = /*#__PURE__*/function (_util$Observer) {
|
|
|
782
730
|
}, {
|
|
783
731
|
key: "setWidth",
|
|
784
732
|
value: function setWidth(width) {
|
|
733
|
+
if (this.width == width) {
|
|
734
|
+
return false;
|
|
735
|
+
}
|
|
785
736
|
this.width = width;
|
|
786
737
|
if (this.params.fillParent || this.params.scrollParent) {
|
|
787
738
|
this.style(this.wrapper, {
|
|
@@ -1053,14 +1004,6 @@ var MultiCanvas = /*#__PURE__*/function (_Drawer) {
|
|
|
1053
1004
|
* @type {boolean}
|
|
1054
1005
|
*/
|
|
1055
1006
|
_this.vertical = params.vertical;
|
|
1056
|
-
|
|
1057
|
-
/**
|
|
1058
|
-
* Whether to use the optimsized zoom rendering
|
|
1059
|
-
* Automatically toggles to true if stretchCanvases() function is called
|
|
1060
|
-
*
|
|
1061
|
-
* @type {boolean}
|
|
1062
|
-
*/
|
|
1063
|
-
_this.optimiseZoom = false;
|
|
1064
1007
|
return _this;
|
|
1065
1008
|
}
|
|
1066
1009
|
|
|
@@ -1132,15 +1075,10 @@ var MultiCanvas = /*#__PURE__*/function (_Drawer) {
|
|
|
1132
1075
|
}
|
|
1133
1076
|
var canvasWidth = this.maxCanvasWidth + this.overlap;
|
|
1134
1077
|
var lastCanvas = this.canvases.length - 1;
|
|
1135
|
-
var leftOffset = 0;
|
|
1136
1078
|
this.canvases.forEach(function (entry, i) {
|
|
1137
1079
|
if (i == lastCanvas) {
|
|
1138
1080
|
canvasWidth = _this2.width - _this2.maxCanvasWidth * lastCanvas;
|
|
1139
1081
|
}
|
|
1140
|
-
|
|
1141
|
-
//Set left offset and add to next entry
|
|
1142
|
-
entry.setLeft(leftOffset);
|
|
1143
|
-
leftOffset += canvasWidth / _this2.params.pixelRatio;
|
|
1144
1082
|
_this2.updateDimensions(entry, canvasWidth, _this2.height);
|
|
1145
1083
|
entry.clearWave();
|
|
1146
1084
|
});
|
|
@@ -1386,38 +1324,7 @@ var MultiCanvas = /*#__PURE__*/function (_Drawer) {
|
|
|
1386
1324
|
this.canvases.forEach(function (entry, i) {
|
|
1387
1325
|
_this6.setFillStyles(entry, waveColor, progressColor);
|
|
1388
1326
|
_this6.applyCanvasTransforms(entry, _this6.params.vertical);
|
|
1389
|
-
|
|
1390
|
-
//Optimising zoom functionality
|
|
1391
|
-
//If there's a wrapper, optimise for the view
|
|
1392
|
-
var priority = 0;
|
|
1393
|
-
if (_this6.wrapper) {
|
|
1394
|
-
var canvasRect = entry.wave.getBoundingClientRect();
|
|
1395
|
-
var wrapperRect = _this6.wrapper.getBoundingClientRect();
|
|
1396
|
-
|
|
1397
|
-
//Determine whether canvas is in viewframe or not and assign priority
|
|
1398
|
-
if (Math.floor(canvasRect['left']) > Math.ceil(wrapperRect['right'])) {
|
|
1399
|
-
//Canvas is to the right of view window
|
|
1400
|
-
var distance = canvasRect['left'] - wrapperRect['right'];
|
|
1401
|
-
priority = Math.ceil(distance / wrapperRect['width']);
|
|
1402
|
-
} else if (Math.ceil(canvasRect['right']) < Math.floor(wrapperRect['left'])) {
|
|
1403
|
-
//Canvas is to the left of the view window
|
|
1404
|
-
var _distance = wrapperRect['left'] - canvasRect['right'];
|
|
1405
|
-
priority = Math.ceil(_distance / wrapperRect['width']);
|
|
1406
|
-
}
|
|
1407
|
-
} else {
|
|
1408
|
-
//Everything is equal priority
|
|
1409
|
-
}
|
|
1410
|
-
|
|
1411
|
-
//This staggers the drawing of canvases so they don't all draw at once
|
|
1412
|
-
entry.clearWave();
|
|
1413
|
-
clearTimeout(entry.drawTimeout);
|
|
1414
|
-
entry.drawTimeout = setTimeout(function () {
|
|
1415
|
-
entry.drawLines(peaks, absmax, halfH, offsetY, start, end);
|
|
1416
|
-
entry.drawTimeout = null;
|
|
1417
|
-
}, 25 * priority);
|
|
1418
|
-
} else {
|
|
1419
|
-
entry.drawLines(peaks, absmax, halfH, offsetY, start, end);
|
|
1420
|
-
}
|
|
1327
|
+
entry.drawLines(peaks, absmax, halfH, offsetY, start, end);
|
|
1421
1328
|
});
|
|
1422
1329
|
}
|
|
1423
1330
|
|
|
@@ -1610,31 +1517,6 @@ var MultiCanvas = /*#__PURE__*/function (_Drawer) {
|
|
|
1610
1517
|
}
|
|
1611
1518
|
}
|
|
1612
1519
|
|
|
1613
|
-
/**
|
|
1614
|
-
* Stretches the canvases to mimic zoom without recalculation
|
|
1615
|
-
*
|
|
1616
|
-
* @param {Number} desiredWidth new width of the wave display
|
|
1617
|
-
* @param {Number} progress Value between 0 and 1 for wave progress
|
|
1618
|
-
*/
|
|
1619
|
-
}, {
|
|
1620
|
-
key: "stretchCanvases",
|
|
1621
|
-
value: function stretchCanvases(desiredWidth, progress) {
|
|
1622
|
-
if (!this.optimiseZoom) {
|
|
1623
|
-
//Enable optimsed zooming
|
|
1624
|
-
this.optimiseZoom = true;
|
|
1625
|
-
}
|
|
1626
|
-
var totalCanvasWidth = Math.round(desiredWidth / this.params.pixelRatio);
|
|
1627
|
-
this.width = desiredWidth;
|
|
1628
|
-
for (var i = 0; i < this.canvases.length; i++) {
|
|
1629
|
-
this.canvases[i].stretchCanvas(totalCanvasWidth);
|
|
1630
|
-
}
|
|
1631
|
-
|
|
1632
|
-
//Update progress
|
|
1633
|
-
var progressPos = progress * totalCanvasWidth;
|
|
1634
|
-
this.updateProgress(progressPos);
|
|
1635
|
-
this.recenterOnPosition(progressPos, true);
|
|
1636
|
-
}
|
|
1637
|
-
|
|
1638
1520
|
/**
|
|
1639
1521
|
* Render the new progress
|
|
1640
1522
|
*
|
|
@@ -4764,23 +4646,6 @@ var WaveSurfer = /*#__PURE__*/function (_util$Observer) {
|
|
|
4764
4646
|
this.drawBuffer();
|
|
4765
4647
|
}
|
|
4766
4648
|
|
|
4767
|
-
/**
|
|
4768
|
-
* Calls getPeaks() and drawPeaks()
|
|
4769
|
-
* @param {WaveSurfer} wavesurfer the Wavesurfer to get/draw peaks from/to
|
|
4770
|
-
* @param {number} width The width of the area that should be drawn
|
|
4771
|
-
* @param {number} start The x-offset of the beginning of the area that
|
|
4772
|
-
* should be rendered
|
|
4773
|
-
* @param {number} end The x-offset of the end of the area that should be
|
|
4774
|
-
* rendered
|
|
4775
|
-
*/
|
|
4776
|
-
}, {
|
|
4777
|
-
key: "getAndDrawPeaks",
|
|
4778
|
-
value: function getAndDrawPeaks(wavesurfer, width, start, end) {
|
|
4779
|
-
var peaks;
|
|
4780
|
-
peaks = wavesurfer.backend.getPeaks(width, start, end);
|
|
4781
|
-
wavesurfer.drawer.drawPeaks(peaks, width, start, end);
|
|
4782
|
-
}
|
|
4783
|
-
|
|
4784
4649
|
/**
|
|
4785
4650
|
* Get the correct peaks for current wave view-port and render wave
|
|
4786
4651
|
*
|
|
@@ -4843,25 +4708,6 @@ var WaveSurfer = /*#__PURE__*/function (_util$Observer) {
|
|
|
4843
4708
|
this.fireEvent('zoom', pxPerSec);
|
|
4844
4709
|
}
|
|
4845
4710
|
|
|
4846
|
-
/**
|
|
4847
|
-
* Call this function while moving the zoom slider to stretch the canvases
|
|
4848
|
-
* of the wave without recalculating
|
|
4849
|
-
*
|
|
4850
|
-
* @param {Number} pxPerSec value returned from the zoom slider
|
|
4851
|
-
*/
|
|
4852
|
-
}, {
|
|
4853
|
-
key: "zooming",
|
|
4854
|
-
value: function zooming(pxPerSec) {
|
|
4855
|
-
//Calculate the new width, this cannot be smaller than the parent container width
|
|
4856
|
-
var desiredWidth = Math.round(this.getDuration() * pxPerSec * this.params.pixelRatio);
|
|
4857
|
-
var parentWidth = this.drawer.getWidth();
|
|
4858
|
-
desiredWidth = Math.max(parentWidth, desiredWidth);
|
|
4859
|
-
|
|
4860
|
-
//Stretch canvases
|
|
4861
|
-
this.drawer.stretchCanvases(desiredWidth, this.backend.getPlayedPercents());
|
|
4862
|
-
this.fireEvent('zoom', pxPerSec);
|
|
4863
|
-
}
|
|
4864
|
-
|
|
4865
4711
|
/**
|
|
4866
4712
|
* Decode buffer and load
|
|
4867
4713
|
*
|
|
@@ -5335,7 +5181,7 @@ var WaveSurfer = /*#__PURE__*/function (_util$Observer) {
|
|
|
5335
5181
|
return WaveSurfer;
|
|
5336
5182
|
}(util.Observer);
|
|
5337
5183
|
exports["default"] = WaveSurfer;
|
|
5338
|
-
_defineProperty(WaveSurfer, "VERSION", "6.6.
|
|
5184
|
+
_defineProperty(WaveSurfer, "VERSION", "6.6.3");
|
|
5339
5185
|
/**
|
|
5340
5186
|
* Functions in the `util` property are available as a static property of the
|
|
5341
5187
|
* WaveSurfer class
|
|
@@ -5387,7 +5233,7 @@ var FINISHED = 'finished';
|
|
|
5387
5233
|
/**
|
|
5388
5234
|
* WebAudio backend
|
|
5389
5235
|
*
|
|
5390
|
-
* @extends {Observer}
|
|
5236
|
+
* @extends {util.Observer}
|
|
5391
5237
|
*/
|
|
5392
5238
|
var WebAudio = /*#__PURE__*/function (_util$Observer) {
|
|
5393
5239
|
_inherits(WebAudio, _util$Observer);
|
|
@@ -5406,8 +5252,6 @@ var WebAudio = /*#__PURE__*/function (_util$Observer) {
|
|
|
5406
5252
|
/** audioContext: allows to process audio with WebAudio API */
|
|
5407
5253
|
_defineProperty(_assertThisInitialized(_this), "audioContext", null);
|
|
5408
5254
|
/** @private */
|
|
5409
|
-
_defineProperty(_assertThisInitialized(_this), "offlineAudioContext", null);
|
|
5410
|
-
/** @private */
|
|
5411
5255
|
_defineProperty(_assertThisInitialized(_this), "stateBehaviors", (_defineProperty2 = {}, _defineProperty(_defineProperty2, PLAYING, {
|
|
5412
5256
|
init: function init() {
|
|
5413
5257
|
this.addOnAudioProcess();
|
|
@@ -5420,9 +5264,7 @@ var WebAudio = /*#__PURE__*/function (_util$Observer) {
|
|
|
5420
5264
|
return this.startPosition + this.getPlayedTime();
|
|
5421
5265
|
}
|
|
5422
5266
|
}), _defineProperty(_defineProperty2, PAUSED, {
|
|
5423
|
-
init: function init() {
|
|
5424
|
-
this.removeOnAudioProcess();
|
|
5425
|
-
},
|
|
5267
|
+
init: function init() {},
|
|
5426
5268
|
getPlayedPercents: function getPlayedPercents() {
|
|
5427
5269
|
var duration = this.getDuration();
|
|
5428
5270
|
return this.getCurrentTime() / duration || 0;
|
|
@@ -5432,7 +5274,6 @@ var WebAudio = /*#__PURE__*/function (_util$Observer) {
|
|
|
5432
5274
|
}
|
|
5433
5275
|
}), _defineProperty(_defineProperty2, FINISHED, {
|
|
5434
5276
|
init: function init() {
|
|
5435
|
-
this.removeOnAudioProcess();
|
|
5436
5277
|
this.fireEvent('finish');
|
|
5437
5278
|
},
|
|
5438
5279
|
getPlayedPercents: function getPlayedPercents() {
|
|
@@ -5495,7 +5336,7 @@ var WebAudio = /*#__PURE__*/function (_util$Observer) {
|
|
|
5495
5336
|
*/
|
|
5496
5337
|
_createClass(WebAudio, [{
|
|
5497
5338
|
key: "supportsWebAudio",
|
|
5498
|
-
value:
|
|
5339
|
+
value:
|
|
5499
5340
|
/**
|
|
5500
5341
|
* Does the browser support this backend
|
|
5501
5342
|
*
|
|
@@ -5621,14 +5462,8 @@ var WebAudio = /*#__PURE__*/function (_util$Observer) {
|
|
|
5621
5462
|
value: function createScriptNode() {
|
|
5622
5463
|
if (this.params.audioScriptProcessor) {
|
|
5623
5464
|
this.scriptNode = this.params.audioScriptProcessor;
|
|
5624
|
-
|
|
5625
|
-
if (this.ac.createScriptProcessor) {
|
|
5626
|
-
this.scriptNode = this.ac.createScriptProcessor(WebAudio.scriptBufferSize);
|
|
5627
|
-
} else {
|
|
5628
|
-
this.scriptNode = this.ac.createJavaScriptNode(WebAudio.scriptBufferSize);
|
|
5629
|
-
}
|
|
5465
|
+
this.scriptNode.connect(this.ac.destination);
|
|
5630
5466
|
}
|
|
5631
|
-
this.scriptNode.connect(this.ac.destination);
|
|
5632
5467
|
}
|
|
5633
5468
|
|
|
5634
5469
|
/** @private */
|
|
@@ -5636,25 +5471,21 @@ var WebAudio = /*#__PURE__*/function (_util$Observer) {
|
|
|
5636
5471
|
key: "addOnAudioProcess",
|
|
5637
5472
|
value: function addOnAudioProcess() {
|
|
5638
5473
|
var _this2 = this;
|
|
5639
|
-
|
|
5474
|
+
var loop = function loop() {
|
|
5640
5475
|
var time = _this2.getCurrentTime();
|
|
5641
|
-
if (time >= _this2.getDuration()) {
|
|
5476
|
+
if (time >= _this2.getDuration() && _this2.state !== _this2.states[FINISHED]) {
|
|
5642
5477
|
_this2.setState(FINISHED);
|
|
5643
5478
|
_this2.fireEvent('pause');
|
|
5644
|
-
} else if (time >= _this2.scheduledPause) {
|
|
5479
|
+
} else if (time >= _this2.scheduledPause && _this2.state !== _this2.states[PAUSED]) {
|
|
5645
5480
|
_this2.pause();
|
|
5646
5481
|
} else if (_this2.state === _this2.states[PLAYING]) {
|
|
5647
5482
|
_this2.fireEvent('audioprocess', time);
|
|
5483
|
+
util.frame(loop)();
|
|
5648
5484
|
}
|
|
5649
5485
|
};
|
|
5486
|
+
loop();
|
|
5650
5487
|
}
|
|
5651
5488
|
|
|
5652
|
-
/** @private */
|
|
5653
|
-
}, {
|
|
5654
|
-
key: "removeOnAudioProcess",
|
|
5655
|
-
value: function removeOnAudioProcess() {
|
|
5656
|
-
this.scriptNode.onaudioprocess = null;
|
|
5657
|
-
}
|
|
5658
5489
|
/** Create analyser node to perform audio analysis */
|
|
5659
5490
|
}, {
|
|
5660
5491
|
key: "createAnalyserNode",
|
|
@@ -5915,7 +5746,7 @@ var WebAudio = /*#__PURE__*/function (_util$Observer) {
|
|
|
5915
5746
|
this.disconnectFilters();
|
|
5916
5747
|
this.disconnectSource();
|
|
5917
5748
|
this.gainNode.disconnect();
|
|
5918
|
-
this.scriptNode.disconnect();
|
|
5749
|
+
this.scriptNode && this.scriptNode.disconnect();
|
|
5919
5750
|
this.analyser.disconnect();
|
|
5920
5751
|
|
|
5921
5752
|
// close the audioContext if closeAudioContext option is set to true
|
|
@@ -6174,7 +6005,6 @@ var WebAudio = /*#__PURE__*/function (_util$Observer) {
|
|
|
6174
6005
|
return WebAudio;
|
|
6175
6006
|
}(util.Observer);
|
|
6176
6007
|
exports["default"] = WebAudio;
|
|
6177
|
-
_defineProperty(WebAudio, "scriptBufferSize", 256);
|
|
6178
6008
|
module.exports = exports.default;
|
|
6179
6009
|
|
|
6180
6010
|
/***/ }),
|