wavesurfer.js 5.2.0 → 6.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (58) hide show
  1. package/CHANGES.md +22 -0
  2. package/README.md +10 -0
  3. package/dist/plugin/wavesurfer.cursor.js +52 -50
  4. package/dist/plugin/wavesurfer.cursor.js.map +1 -1
  5. package/dist/plugin/wavesurfer.cursor.min.js +2 -2
  6. package/dist/plugin/wavesurfer.cursor.min.js.map +1 -1
  7. package/dist/plugin/wavesurfer.elan.js +9 -6
  8. package/dist/plugin/wavesurfer.elan.js.map +1 -1
  9. package/dist/plugin/wavesurfer.elan.min.js +2 -2
  10. package/dist/plugin/wavesurfer.elan.min.js.map +1 -1
  11. package/dist/plugin/wavesurfer.markers.js +141 -25
  12. package/dist/plugin/wavesurfer.markers.js.map +1 -1
  13. package/dist/plugin/wavesurfer.markers.min.js +2 -2
  14. package/dist/plugin/wavesurfer.markers.min.js.map +1 -1
  15. package/dist/plugin/wavesurfer.mediasession.js +5 -5
  16. package/dist/plugin/wavesurfer.mediasession.min.js +2 -2
  17. package/dist/plugin/wavesurfer.mediasession.min.js.map +1 -1
  18. package/dist/plugin/wavesurfer.microphone.js +4 -4
  19. package/dist/plugin/wavesurfer.microphone.min.js +2 -2
  20. package/dist/plugin/wavesurfer.microphone.min.js.map +1 -1
  21. package/dist/plugin/wavesurfer.minimap.js +25 -22
  22. package/dist/plugin/wavesurfer.minimap.js.map +1 -1
  23. package/dist/plugin/wavesurfer.minimap.min.js +2 -2
  24. package/dist/plugin/wavesurfer.minimap.min.js.map +1 -1
  25. package/dist/plugin/wavesurfer.playhead.js +4 -4
  26. package/dist/plugin/wavesurfer.playhead.min.js +2 -2
  27. package/dist/plugin/wavesurfer.playhead.min.js.map +1 -1
  28. package/dist/plugin/wavesurfer.regions.js +53 -16
  29. package/dist/plugin/wavesurfer.regions.js.map +1 -1
  30. package/dist/plugin/wavesurfer.regions.min.js +2 -2
  31. package/dist/plugin/wavesurfer.regions.min.js.map +1 -1
  32. package/dist/plugin/wavesurfer.spectrogram.js +70 -57
  33. package/dist/plugin/wavesurfer.spectrogram.js.map +1 -1
  34. package/dist/plugin/wavesurfer.spectrogram.min.js +2 -2
  35. package/dist/plugin/wavesurfer.spectrogram.min.js.map +1 -1
  36. package/dist/plugin/wavesurfer.timeline.js +39 -44
  37. package/dist/plugin/wavesurfer.timeline.js.map +1 -1
  38. package/dist/plugin/wavesurfer.timeline.min.js +2 -2
  39. package/dist/plugin/wavesurfer.timeline.min.js.map +1 -1
  40. package/dist/wavesurfer-html-init.js +5 -5
  41. package/dist/wavesurfer-html-init.min.js +2 -2
  42. package/dist/wavesurfer-html-init.min.js.map +1 -1
  43. package/dist/wavesurfer.js +209 -121
  44. package/dist/wavesurfer.js.map +1 -1
  45. package/dist/wavesurfer.min.js +2 -2
  46. package/dist/wavesurfer.min.js.map +1 -1
  47. package/package.json +23 -23
  48. package/src/drawer.canvasentry.js +30 -6
  49. package/src/drawer.js +1 -0
  50. package/src/drawer.multicanvas.js +19 -8
  51. package/src/mediaelement.js +1 -1
  52. package/src/plugin/cursor/index.js +68 -70
  53. package/src/plugin/markers/index.js +112 -23
  54. package/src/plugin/minimap/index.js +24 -21
  55. package/src/plugin/regions/index.js +30 -3
  56. package/src/plugin/regions/region.js +13 -4
  57. package/src/plugin/spectrogram/index.js +65 -50
  58. package/src/wavesurfer.js +31 -10
@@ -1 +1 @@
1
- {"version":3,"file":"wavesurfer.spectrogram.min.js","mappings":"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","sources":["webpack://WaveSurfer.[name]/webpack/universalModuleDefinition","webpack://WaveSurfer.[name]/./src/plugin/spectrogram/fft.js","webpack://WaveSurfer.[name]/./src/plugin/spectrogram/index.js","webpack://WaveSurfer.[name]/webpack/bootstrap","webpack://WaveSurfer.[name]/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, function() {\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} 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 {?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.fftSamples / 2;\n this.noverlap = params.noverlap;\n this.windowFunc = params.windowFunc;\n this.alpha = params.alpha;\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 left: 0,\n position: 'absolute',\n zIndex: 9,\n height: `${this.height / this.pixelRatio}px`,\n width: `${55 / this.pixelRatio}px`\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.pixelRatio}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.height;\n this.canvas.style.width = width;\n }\n\n drawSpectrogram(frequenciesData, my) {\n const spectrCc = my.spectrCc;\n const height = my.height;\n const width = my.width;\n const pixels = my.resample(frequenciesData);\n const heightFactor = my.buffer ? 2 / my.buffer.numberOfChannels : 1;\n if (spectrCc) {\n const imageData = spectrCc.createImageData(width, height);\n let i;\n let j;\n let k;\n\n for (i = 0; i < pixels.length; i++) {\n for (j = 0; j < pixels[i].length; j++) {\n const colorMap = my.colorMap[pixels[i][j]];\n /* eslint-disable max-depth */\n for (k = 0; k < heightFactor; k++) {\n let y = height - j * heightFactor;\n if (heightFactor === 2 && k === 1) {\n y--;\n }\n const redIndex = y * (width * 4) + 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 /* eslint-enable max-depth */\n }\n }\n spectrCc.putImageData(imageData, 0, 0);\n }\n }\n\n getFrequencies(callback) {\n const fftSamples = this.fftSamples;\n const buffer = (this.buffer = this.wavesurfer.backend.buffer);\n const channelOne = buffer.getChannelData(0);\n const bufferLength = buffer.length;\n const sampleRate = buffer.sampleRate;\n const frequencies = [];\n\n if (!buffer) {\n this.fireEvent('error', 'Web Audio buffer is not available');\n return;\n }\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 const maxSlicesCount = Math.floor(\n bufferLength / (fftSamples - noverlap)\n );\n let currentOffset = 0;\n\n while (currentOffset + fftSamples < channelOne.length) {\n const segment = channelOne.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 frequencies.push(array);\n currentOffset += fftSamples - noverlap;\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 = 0;\n const step =\n (this.wavesurfer.backend.ac.sampleRate / 2 - freqStart) /\n labelIndex;\n\n // prepare canvas element for labels\n const ctx = this.labelsEl.getContext('2d');\n this.labelsEl.height = this.height;\n this.labelsEl.width = bgWidth;\n\n if (ctx) {\n // fill background\n ctx.fillStyle = bgFill;\n ctx.fillRect(0, 0, bgWidth, 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 index = Math.round(\n (freq / (this.sampleRate / 2)) * this.fftSamples\n );\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 = 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 = getMaxY - i * 50 + yLabelOffset;\n // unit label\n ctx.fillStyle = textColorUnit;\n ctx.font = fontSizeUnit + ' ' + fontType;\n ctx.fillText(units, x + 24, y);\n // freq label\n ctx.fillStyle = textColorFreq;\n ctx.font = fontSizeFreq + ' ' + fontType;\n ctx.fillText(label, x, y);\n }\n }\n }\n }\n\n updateScroll(e) {\n if (this.wrapper) {\n this.wrapper.scrollLeft = e.target.scrollLeft;\n }\n }\n\n resample(oldMatrix) {\n const columnsNumber = this.width;\n const newMatrix = [];\n\n const oldPiece = 1 / oldMatrix.length;\n const newPiece = 1 / columnsNumber;\n let i;\n\n for (i = 0; i < columnsNumber; i++) {\n const column = new Array(oldMatrix[0].length);\n let j;\n\n for (j = 0; j < oldMatrix.length; j++) {\n const oldStart = j * oldPiece;\n const oldEnd = oldStart + oldPiece;\n const newStart = i * newPiece;\n const newEnd = newStart + newPiece;\n\n const overlap =\n oldEnd <= newStart || newEnd <= oldStart\n ? 0\n : Math.min(\n Math.max(oldEnd, newStart),\n Math.max(newEnd, oldStart)\n ) -\n Math.max(\n Math.min(oldEnd, newStart),\n Math.min(newEnd, oldStart)\n );\n let k;\n /* eslint-disable max-depth */\n if (overlap > 0) {\n for (k = 0; k < oldMatrix[0].length; k++) {\n if (column[k] == null) {\n column[k] = 0;\n }\n column[k] += (overlap / newPiece) * oldMatrix[j][k];\n }\n }\n /* eslint-enable max-depth */\n }\n\n const intColumn = new Uint8Array(oldMatrix[0].length);\n let m;\n\n for (m = 0; m < oldMatrix[0].length; m++) {\n intColumn[m] = column[m];\n }\n\n newMatrix.push(intColumn);\n }\n\n return newMatrix;\n }\n}\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// startup\n// Load entry module and return exports\n// This entry module is referenced by other modules so it can't be inlined\nvar __webpack_exports__ = __webpack_require__(943);\n"],"names":["root","factory","exports","module","define","amd","self","bufferSize","sampleRate","windowFunc","alpha","this","bandwidth","sinTable","Float32Array","cosTable","windowValues","reverseTable","Uint32Array","peakBand","peak","i","Math","abs","cos","PI","pow","E","undefined","sin","Error","limit","bit","calculateSpectrum","buffer","rval","ival","mag","real","imag","bSi","sqrt","spectrum","k","floor","log","LN2","length","phaseShiftStepReal","phaseShiftStepImag","currentPhaseShiftReal","currentPhaseShiftImag","off","tr","ti","tmpReal","halfSize","fftStep","N","SpectrogramPlugin","params","ws","wavesurfer","util","frequenciesDataUrl","_onScroll","e","updateScroll","_onRender","render","_onWrapperClick","_wrapperClickHandler","_onReady","drawer","container","document","querySelector","colorMap","val","push","width","pixelRatio","fftSamples","height","noverlap","createWrapper","createCanvas","wrapper","addEventListener","on","name","deferInit","staticProps","FFT","instance","isReady","once","unAll","un","removeEventListener","parentNode","removeChild","prevSpectrogram","wsParams","createElement","labels","labelsEl","classList","add","style","left","position","zIndex","appendChild","loadLabels","display","userSelect","webkitUserSelect","fillParent","scrollParent","overflowX","overflowY","event","preventDefault","relX","offsetX","layerX","fireEvent","canvas","spectrCc","getContext","updateCanvasStyle","loadFrequenciesData","getFrequencies","drawSpectrogram","round","frequenciesData","my","pixels","resample","heightFactor","numberOfChannels","j","imageData","createImageData","y","redIndex","data","putImageData","callback","backend","channelOne","getChannelData","bufferLength","frequencies","uniqueSamplesPerPx","max","fft","currentOffset","segment","slice","array","Uint8Array","log10","url","request","fetchFile","JSON","parse","freq","toFixed","bgFill","fontSizeFreq","fontSizeUnit","fontType","textColorFreq","textColorUnit","textAlign","getMaxY","labelIndex","step","ac","ctx","fillStyle","fillRect","fill","textBaseline","label","freqType","units","unitType","font","fillText","x","scrollLeft","target","oldMatrix","columnsNumber","newMatrix","oldPiece","newPiece","column","Array","oldStart","oldEnd","newStart","newEnd","overlap","min","intColumn","m","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","__webpack_modules__"],"sourceRoot":""}
1
+ {"version":3,"file":"wavesurfer.spectrogram.min.js","mappings":"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","sources":["webpack://WaveSurfer.[name]/webpack/universalModuleDefinition","webpack://WaveSurfer.[name]/./src/plugin/spectrogram/fft.js","webpack://WaveSurfer.[name]/./src/plugin/spectrogram/index.js","webpack://WaveSurfer.[name]/webpack/bootstrap","webpack://WaveSurfer.[name]/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, function() {\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 {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 {?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.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 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 left: 0,\n position: 'absolute',\n zIndex: 9,\n height: `${this.height * this.channels / this.pixelRatio}px`,\n width: `${55 / this.pixelRatio}px`\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 / this.pixelRatio}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.height * this.channels;\n this.canvas.style.width = width;\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.height;\n const width = my.width;\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 = spectrCc.createImageData(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 // stack spectrograms\n spectrCc.putImageData(imageData, 0, height * c);\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 = 0;\n const step =\n (this.wavesurfer.backend.ac.sampleRate / 2 - freqStart) /\n labelIndex;\n\n // prepare canvas element for labels\n const ctx = this.labelsEl.getContext('2d');\n this.labelsEl.height = this.height * this.channels;\n this.labelsEl.width = bgWidth;\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 index = Math.round(\n (freq / (this.sampleRate / 2)) * this.fftSamples\n );\n const label = this.freqType(freq);\n const units = this.unitType(freq);\n const yLabelOffset = 2;\n const x = 16;\n let y;\n\n if (i == 0) {\n y = (1 + c) * getMaxY + i - 10;\n // unit label\n ctx.fillStyle = textColorUnit;\n ctx.font = fontSizeUnit + ' ' + fontType;\n ctx.fillText(units, x + 24, y);\n // freq label\n ctx.fillStyle = textColorFreq;\n ctx.font = fontSizeFreq + ' ' + fontType;\n ctx.fillText(label, x, y);\n } else {\n y = (1 + c) * getMaxY - i * 50 + yLabelOffset;\n // unit label\n ctx.fillStyle = textColorUnit;\n ctx.font = fontSizeUnit + ' ' + fontType;\n ctx.fillText(units, x + 24, y);\n // freq label\n ctx.fillStyle = textColorFreq;\n ctx.font = fontSizeFreq + ' ' + fontType;\n ctx.fillText(label, x, y);\n }\n }\n }\n }\n\n updateScroll(e) {\n if (this.wrapper) {\n this.wrapper.scrollLeft = e.target.scrollLeft;\n }\n }\n\n resample(oldMatrix) {\n const columnsNumber = this.width;\n const newMatrix = [];\n\n const oldPiece = 1 / oldMatrix.length;\n const newPiece = 1 / columnsNumber;\n let i;\n\n for (i = 0; i < columnsNumber; i++) {\n const column = new Array(oldMatrix[0].length);\n let j;\n\n for (j = 0; j < oldMatrix.length; j++) {\n const oldStart = j * oldPiece;\n const oldEnd = oldStart + oldPiece;\n const newStart = i * newPiece;\n const newEnd = newStart + newPiece;\n\n const overlap =\n oldEnd <= newStart || newEnd <= oldStart\n ? 0\n : Math.min(\n Math.max(oldEnd, newStart),\n Math.max(newEnd, oldStart)\n ) -\n Math.max(\n Math.min(oldEnd, newStart),\n Math.min(newEnd, oldStart)\n );\n let k;\n /* eslint-disable max-depth */\n if (overlap > 0) {\n for (k = 0; k < oldMatrix[0].length; k++) {\n if (column[k] == null) {\n column[k] = 0;\n }\n column[k] += (overlap / newPiece) * oldMatrix[j][k];\n }\n }\n /* eslint-enable max-depth */\n }\n\n const intColumn = new Uint8Array(oldMatrix[0].length);\n let m;\n\n for (m = 0; m < oldMatrix[0].length; m++) {\n intColumn[m] = column[m];\n }\n\n newMatrix.push(intColumn);\n }\n\n return newMatrix;\n }\n}\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// startup\n// Load entry module and return exports\n// This entry module is referenced by other modules so it can't be inlined\nvar __webpack_exports__ = __webpack_require__(943);\n"],"names":["root","factory","exports","module","define","amd","self","bufferSize","sampleRate","windowFunc","alpha","this","bandwidth","sinTable","Float32Array","cosTable","windowValues","reverseTable","Uint32Array","peakBand","peak","i","Math","abs","cos","PI","pow","E","undefined","sin","Error","limit","bit","calculateSpectrum","buffer","rval","ival","mag","real","imag","bSi","sqrt","spectrum","k","floor","log","LN2","length","phaseShiftStepReal","phaseShiftStepImag","currentPhaseShiftReal","currentPhaseShiftImag","off","tr","ti","tmpReal","halfSize","fftStep","N","SpectrogramPlugin","params","ws","wavesurfer","util","frequenciesDataUrl","_onScroll","e","updateScroll","_onRender","render","_onWrapperClick","_wrapperClickHandler","_onReady","drawer","container","document","querySelector","colorMap","val","push","width","pixelRatio","fftSamples","height","noverlap","splitChannels","channels","backend","numberOfChannels","createWrapper","createCanvas","wrapper","addEventListener","on","name","deferInit","staticProps","FFT","instance","isReady","once","unAll","un","removeEventListener","parentNode","removeChild","prevSpectrogram","wsParams","createElement","labels","labelsEl","classList","add","style","left","position","zIndex","appendChild","loadLabels","display","userSelect","webkitUserSelect","fillParent","scrollParent","overflowX","overflowY","event","preventDefault","relX","offsetX","layerX","fireEvent","canvas","spectrCc","getContext","updateCanvasStyle","loadFrequenciesData","getFrequencies","drawSpectrogram","round","frequenciesData","my","isNaN","c","pixels","resample","imageData","createImageData","j","redIndex","data","putImageData","callback","frequencies","uniqueSamplesPerPx","max","fft","channelData","getChannelData","channelFreq","currentOffset","segment","slice","array","Uint8Array","log10","url","request","fetchFile","JSON","parse","freq","toFixed","bgFill","fontSizeFreq","fontSizeUnit","fontType","textColorFreq","textColorUnit","textAlign","getMaxY","labelIndex","step","ac","ctx","fillStyle","fillRect","fill","textBaseline","label","freqType","units","unitType","y","font","fillText","x","scrollLeft","target","oldMatrix","columnsNumber","newMatrix","oldPiece","newPiece","column","Array","oldStart","oldEnd","newStart","newEnd","overlap","min","intColumn","m","__webpack_module_cache__","__webpack_exports__","__webpack_require__","moduleId","cachedModule","__webpack_modules__"],"sourceRoot":""}
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * wavesurfer.js timeline plugin 5.2.0 (2021-08-16)
2
+ * wavesurfer.js timeline plugin 6.0.0 (2022-02-07)
3
3
  * https://wavesurfer-js.org
4
4
  * @license BSD-3-Clause
5
5
  */
@@ -28,13 +28,15 @@ return /******/ (() => { // webpackBootstrap
28
28
  Object.defineProperty(exports, "__esModule", ({
29
29
  value: true
30
30
  }));
31
- exports.default = void 0;
31
+ exports["default"] = void 0;
32
32
 
33
33
  function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
34
34
 
35
35
  function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
36
36
 
37
- function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
37
+ function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; }
38
+
39
+ function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
38
40
 
39
41
  /**
40
42
  * @typedef {Object} TimelinePluginParams
@@ -104,12 +106,41 @@ var TimelinePlugin = /*#__PURE__*/function () {
104
106
  * @param {TimelinePluginParams} params Plugin parameters
105
107
  * @param {object} ws Wavesurfer instance
106
108
  */
107
- function TimelinePlugin(params, ws) {
109
+ function TimelinePlugin(params, _ws) {
108
110
  var _this = this;
109
111
 
110
112
  _classCallCheck(this, TimelinePlugin);
111
113
 
112
- _initialiseProps.call(this);
114
+ _defineProperty(this, "_onScroll", function () {
115
+ if (_this.wrapper && _this.drawer.wrapper) {
116
+ _this.wrapper.scrollLeft = _this.drawer.wrapper.scrollLeft;
117
+ }
118
+ });
119
+
120
+ _defineProperty(this, "_onRedraw", function () {
121
+ return _this.render();
122
+ });
123
+
124
+ _defineProperty(this, "_onReady", function () {
125
+ var ws = _this.wavesurfer;
126
+ _this.drawer = ws.drawer;
127
+ _this.pixelRatio = ws.drawer.params.pixelRatio;
128
+ _this.maxCanvasWidth = ws.drawer.maxCanvasWidth || ws.drawer.width;
129
+ _this.maxCanvasElementWidth = ws.drawer.maxCanvasElementWidth || Math.round(_this.maxCanvasWidth / _this.pixelRatio); // add listeners
130
+
131
+ ws.drawer.wrapper.addEventListener('scroll', _this._onScroll);
132
+ ws.on('redraw', _this._onRedraw);
133
+ ws.on('zoom', _this._onZoom);
134
+
135
+ _this.render();
136
+ });
137
+
138
+ _defineProperty(this, "_onWrapperClick", function (e) {
139
+ e.preventDefault();
140
+ var relX = 'offsetX' in e ? e.offsetX : e.layerX;
141
+
142
+ _this.fireEvent('click', relX / _this.wrapper.scrollWidth || 0);
143
+ });
113
144
 
114
145
  this.container = 'string' == typeof params.container ? document.querySelector(params.container) : params.container;
115
146
 
@@ -117,8 +148,8 @@ var TimelinePlugin = /*#__PURE__*/function () {
117
148
  throw new Error('No container for wavesurfer timeline');
118
149
  }
119
150
 
120
- this.wavesurfer = ws;
121
- this.util = ws.util;
151
+ this.wavesurfer = _ws;
152
+ this.util = _ws.util;
122
153
  this.params = Object.assign({}, {
123
154
  height: 20,
124
155
  notchPercentHeight: 90,
@@ -606,43 +637,7 @@ var TimelinePlugin = /*#__PURE__*/function () {
606
637
  return TimelinePlugin;
607
638
  }();
608
639
 
609
- exports.default = TimelinePlugin;
610
-
611
- var _initialiseProps = function _initialiseProps() {
612
- var _this5 = this;
613
-
614
- this._onScroll = function () {
615
- if (_this5.wrapper && _this5.drawer.wrapper) {
616
- _this5.wrapper.scrollLeft = _this5.drawer.wrapper.scrollLeft;
617
- }
618
- };
619
-
620
- this._onRedraw = function () {
621
- return _this5.render();
622
- };
623
-
624
- this._onReady = function () {
625
- var ws = _this5.wavesurfer;
626
- _this5.drawer = ws.drawer;
627
- _this5.pixelRatio = ws.drawer.params.pixelRatio;
628
- _this5.maxCanvasWidth = ws.drawer.maxCanvasWidth || ws.drawer.width;
629
- _this5.maxCanvasElementWidth = ws.drawer.maxCanvasElementWidth || Math.round(_this5.maxCanvasWidth / _this5.pixelRatio); // add listeners
630
-
631
- ws.drawer.wrapper.addEventListener('scroll', _this5._onScroll);
632
- ws.on('redraw', _this5._onRedraw);
633
- ws.on('zoom', _this5._onZoom);
634
-
635
- _this5.render();
636
- };
637
-
638
- this._onWrapperClick = function (e) {
639
- e.preventDefault();
640
- var relX = 'offsetX' in e ? e.offsetX : e.layerX;
641
-
642
- _this5.fireEvent('click', relX / _this5.wrapper.scrollWidth || 0);
643
- };
644
- };
645
-
640
+ exports["default"] = TimelinePlugin;
646
641
  module.exports = exports.default;
647
642
 
648
643
  /***/ })
@@ -1 +1 @@
1
- {"version":3,"file":"wavesurfer.timeline.js","mappings":"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","sources":["webpack://WaveSurfer.[name]/webpack/universalModuleDefinition","webpack://WaveSurfer.[name]/./src/plugin/timeline/index.js","webpack://WaveSurfer.[name]/webpack/bootstrap","webpack://WaveSurfer.[name]/webpack/before-startup","webpack://WaveSurfer.[name]/webpack/startup","webpack://WaveSurfer.[name]/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\"][\"timeline\"] = factory();\n})(self, function() {\nreturn ","/**\n * @typedef {Object} TimelinePluginParams\n * @desc Extends the `WavesurferParams` wavesurfer was initialised with\n * @property {!string|HTMLElement} container CSS selector or HTML element where\n * the timeline should be drawn. This is the only required parameter.\n * @property {number} notchPercentHeight=90 Height of notches in percent\n * @property {string} unlabeledNotchColor='#c0c0c0' The colour of the notches\n * that do not have labels\n * @property {string} primaryColor='#000' The colour of the main notches\n * @property {string} secondaryColor='#c0c0c0' The colour of the secondary\n * notches\n * @property {string} primaryFontColor='#000' The colour of the labels next to\n * the main notches\n * @property {string} secondaryFontColor='#000' The colour of the labels next to\n * the secondary notches\n * @property {number} labelPadding=5 The padding between the label and the notch\n * @property {?number} zoomDebounce A debounce timeout to increase rendering\n * performance for large files\n * @property {string} fontFamily='Arial'\n * @property {number} fontSize=10 Font size of labels in pixels\n * @property {?number} duration Length of the track in seconds. Overrides\n * getDuration() for setting length of timeline\n * @property {function} formatTimeCallback (sec, pxPerSec) -> label\n * @property {function} timeInterval (pxPerSec) -> seconds between notches\n * @property {function} primaryLabelInterval (pxPerSec) -> cadence between\n * labels in primary color\n * @property {function} secondaryLabelInterval (pxPerSec) -> cadence between\n * labels in secondary color\n * @property {?number} offset Offset for the timeline start in seconds. May also be\n * negative.\n * @property {?boolean} deferInit Set to true to manually call\n * `initPlugin('timeline')`\n */\n\n/**\n * Adds a timeline to the waveform.\n *\n * @implements {PluginClass}\n * @extends {Observer}\n * @example\n * // es6\n * import TimelinePlugin from 'wavesurfer.timeline.js';\n *\n * // commonjs\n * var TimelinePlugin = require('wavesurfer.timeline.js');\n *\n * // if you are using <script> tags\n * var TimelinePlugin = window.WaveSurfer.timeline;\n *\n * // ... initialising wavesurfer with the plugin\n * var wavesurfer = WaveSurfer.create({\n * // wavesurfer options ...\n * plugins: [\n * TimelinePlugin.create({\n * // plugin options ...\n * })\n * ]\n * });\n */\nexport default class TimelinePlugin {\n /**\n * Timeline 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 {TimelinePluginParams} params parameters use to initialise the plugin\n * @return {PluginDefinition} an object representing the plugin\n */\n static create(params) {\n return {\n name: 'timeline',\n deferInit: params && params.deferInit ? params.deferInit : false,\n params: params,\n instance: TimelinePlugin\n };\n }\n\n // event handlers\n _onScroll = () => {\n if (this.wrapper && this.drawer.wrapper) {\n this.wrapper.scrollLeft = this.drawer.wrapper.scrollLeft;\n }\n };\n\n /**\n * @returns {void}\n */\n _onRedraw = () => this.render();\n\n _onReady = () => {\n const ws = this.wavesurfer;\n this.drawer = ws.drawer;\n this.pixelRatio = ws.drawer.params.pixelRatio;\n this.maxCanvasWidth = ws.drawer.maxCanvasWidth || ws.drawer.width;\n this.maxCanvasElementWidth =\n ws.drawer.maxCanvasElementWidth ||\n Math.round(this.maxCanvasWidth / this.pixelRatio);\n\n // add listeners\n ws.drawer.wrapper.addEventListener('scroll', this._onScroll);\n ws.on('redraw', this._onRedraw);\n ws.on('zoom', this._onZoom);\n\n this.render();\n };\n\n /**\n * @param {object} e Click event\n */\n _onWrapperClick = e => {\n e.preventDefault();\n const relX = 'offsetX' in e ? e.offsetX : e.layerX;\n this.fireEvent('click', relX / this.wrapper.scrollWidth || 0);\n };\n\n /**\n * Creates an instance of TimelinePlugin.\n *\n * You probably want to use TimelinePlugin.create()\n *\n * @param {TimelinePluginParams} params Plugin parameters\n * @param {object} ws Wavesurfer instance\n */\n constructor(params, ws) {\n this.container =\n 'string' == typeof params.container\n ? document.querySelector(params.container)\n : params.container;\n\n if (!this.container) {\n throw new Error('No container for wavesurfer timeline');\n }\n\n this.wavesurfer = ws;\n this.util = ws.util;\n this.params = Object.assign(\n {},\n {\n height: 20,\n notchPercentHeight: 90,\n labelPadding: 5,\n unlabeledNotchColor: '#c0c0c0',\n primaryColor: '#000',\n secondaryColor: '#c0c0c0',\n primaryFontColor: '#000',\n secondaryFontColor: '#000',\n fontFamily: 'Arial',\n fontSize: 10,\n duration: null,\n zoomDebounce: false,\n formatTimeCallback: this.defaultFormatTimeCallback,\n timeInterval: this.defaultTimeInterval,\n primaryLabelInterval: this.defaultPrimaryLabelInterval,\n secondaryLabelInterval: this.defaultSecondaryLabelInterval,\n offset: 0\n },\n params\n );\n\n this.canvases = [];\n this.wrapper = null;\n this.drawer = null;\n this.pixelRatio = null;\n this.maxCanvasWidth = null;\n this.maxCanvasElementWidth = null;\n /**\n * This event handler has to be in the constructor function because it\n * relies on the debounce function which is only available after\n * instantiation\n *\n * Use a debounced function if `params.zoomDebounce` is defined\n *\n * @returns {void}\n */\n this._onZoom = this.params.zoomDebounce\n ? this.wavesurfer.util.debounce(\n () => this.render(),\n this.params.zoomDebounce\n )\n : () => this.render();\n }\n\n /**\n * Initialisation function used by the plugin API\n */\n init() {\n // Check if ws is ready\n if (this.wavesurfer.isReady) {\n this._onReady();\n } else {\n this.wavesurfer.once('ready', this._onReady);\n }\n }\n\n /**\n * Destroy function used by the plugin API\n */\n destroy() {\n this.unAll();\n this.wavesurfer.un('redraw', this._onRedraw);\n this.wavesurfer.un('zoom', this._onZoom);\n this.wavesurfer.un('ready', this._onReady);\n this.wavesurfer.drawer.wrapper.removeEventListener(\n 'scroll',\n this._onScroll\n );\n if (this.wrapper && this.wrapper.parentNode) {\n this.wrapper.removeEventListener('click', this._onWrapperClick);\n this.wrapper.parentNode.removeChild(this.wrapper);\n this.wrapper = null;\n }\n }\n\n /**\n * Create a timeline element to wrap the canvases drawn by this plugin\n *\n */\n createWrapper() {\n const wsParams = this.wavesurfer.params;\n this.container.innerHTML = '';\n this.wrapper = this.container.appendChild(\n document.createElement('timeline')\n );\n this.util.style(this.wrapper, {\n display: 'block',\n position: 'relative',\n userSelect: 'none',\n webkitUserSelect: 'none',\n height: `${this.params.height}px`\n });\n\n if (wsParams.fillParent || wsParams.scrollParent) {\n this.util.style(this.wrapper, {\n width: '100%',\n overflowX: 'hidden',\n overflowY: 'hidden'\n });\n }\n\n this.wrapper.addEventListener('click', this._onWrapperClick);\n }\n\n /**\n * Render the timeline (also updates the already rendered timeline)\n *\n */\n render() {\n if (!this.wrapper) {\n this.createWrapper();\n }\n this.updateCanvases();\n this.updateCanvasesPositioning();\n this.renderCanvases();\n }\n\n /**\n * Add new timeline canvas\n *\n */\n addCanvas() {\n const canvas = this.wrapper.appendChild(\n document.createElement('canvas')\n );\n this.canvases.push(canvas);\n this.util.style(canvas, {\n position: 'absolute',\n zIndex: 4\n });\n }\n\n /**\n * Remove timeline canvas\n *\n */\n removeCanvas() {\n const canvas = this.canvases.pop();\n canvas.parentElement.removeChild(canvas);\n }\n\n /**\n * Make sure the correct of timeline canvas elements exist and are cached in\n * this.canvases\n *\n */\n updateCanvases() {\n const totalWidth = Math.round(this.drawer.wrapper.scrollWidth);\n const requiredCanvases = Math.ceil(\n totalWidth / this.maxCanvasElementWidth\n );\n\n while (this.canvases.length < requiredCanvases) {\n this.addCanvas();\n }\n\n while (this.canvases.length > requiredCanvases) {\n this.removeCanvas();\n }\n }\n\n /**\n * Update the dimensions and positioning style for all the timeline canvases\n *\n */\n updateCanvasesPositioning() {\n // cache length for performance\n const canvasesLength = this.canvases.length;\n this.canvases.forEach((canvas, i) => {\n // canvas width is the max element width, or if it is the last the\n // required width\n const canvasWidth =\n i === canvasesLength - 1\n ? this.drawer.wrapper.scrollWidth -\n this.maxCanvasElementWidth * (canvasesLength - 1)\n : this.maxCanvasElementWidth;\n // set dimensions and style\n canvas.width = canvasWidth * this.pixelRatio;\n // on certain pixel ratios the canvas appears cut off at the bottom,\n // therefore leave 1px extra\n canvas.height = (this.params.height + 1) * this.pixelRatio;\n this.util.style(canvas, {\n width: `${canvasWidth}px`,\n height: `${this.params.height}px`,\n left: `${i * this.maxCanvasElementWidth}px`\n });\n });\n }\n\n /**\n * Render the timeline labels and notches\n *\n */\n renderCanvases() {\n const duration =\n this.params.duration ||\n this.wavesurfer.backend.getDuration();\n\n if (duration <= 0) {\n return;\n }\n const wsParams = this.wavesurfer.params;\n const fontSize = this.params.fontSize * wsParams.pixelRatio;\n const totalSeconds = parseInt(duration, 10) + 1;\n const width =\n wsParams.fillParent && !wsParams.scrollParent\n ? this.drawer.getWidth()\n : this.drawer.wrapper.scrollWidth * wsParams.pixelRatio;\n const height1 = this.params.height * this.pixelRatio;\n const height2 =\n this.params.height *\n (this.params.notchPercentHeight / 100) *\n this.pixelRatio;\n const pixelsPerSecond = width / duration;\n\n const formatTime = this.params.formatTimeCallback;\n // if parameter is function, call the function with\n // pixelsPerSecond, otherwise simply take the value as-is\n const intervalFnOrVal = option =>\n typeof option === 'function' ? option(pixelsPerSecond) : option;\n const timeInterval = intervalFnOrVal(this.params.timeInterval);\n const primaryLabelInterval = intervalFnOrVal(\n this.params.primaryLabelInterval\n );\n const secondaryLabelInterval = intervalFnOrVal(\n this.params.secondaryLabelInterval\n );\n\n let curPixel = pixelsPerSecond * this.params.offset;\n let curSeconds = 0;\n let i;\n // build an array of position data with index, second and pixel data,\n // this is then used multiple times below\n const positioning = [];\n for (i = 0; i < totalSeconds / timeInterval; i++) {\n positioning.push([i, curSeconds, curPixel]);\n curSeconds += timeInterval;\n curPixel += pixelsPerSecond * timeInterval;\n }\n\n // iterate over each position\n const renderPositions = cb => {\n positioning.forEach(pos => {\n cb(pos[0], pos[1], pos[2]);\n });\n };\n\n // render primary labels\n this.setFillStyles(this.params.primaryColor);\n this.setFonts(`${fontSize}px ${this.params.fontFamily}`);\n this.setFillStyles(this.params.primaryFontColor);\n renderPositions((i, curSeconds, curPixel) => {\n if (i % primaryLabelInterval === 0) {\n this.fillRect(curPixel, 0, 1, height1);\n this.fillText(\n formatTime(curSeconds, pixelsPerSecond),\n curPixel + this.params.labelPadding * this.pixelRatio,\n height1\n );\n }\n });\n\n // render secondary labels\n this.setFillStyles(this.params.secondaryColor);\n this.setFonts(`${fontSize}px ${this.params.fontFamily}`);\n this.setFillStyles(this.params.secondaryFontColor);\n renderPositions((i, curSeconds, curPixel) => {\n if (i % secondaryLabelInterval === 0) {\n this.fillRect(curPixel, 0, 1, height1);\n this.fillText(\n formatTime(curSeconds, pixelsPerSecond),\n curPixel + this.params.labelPadding * this.pixelRatio,\n height1\n );\n }\n });\n\n // render the actual notches (when no labels are used)\n this.setFillStyles(this.params.unlabeledNotchColor);\n renderPositions((i, curSeconds, curPixel) => {\n if (\n i % secondaryLabelInterval !== 0 &&\n i % primaryLabelInterval !== 0\n ) {\n this.fillRect(curPixel, 0, 1, height2);\n }\n });\n }\n\n /**\n * Set the canvas fill style\n *\n * @param {DOMString|CanvasGradient|CanvasPattern} fillStyle Fill style to\n * use\n */\n setFillStyles(fillStyle) {\n this.canvases.forEach(canvas => {\n const context = canvas.getContext('2d');\n if (context) {\n context.fillStyle = fillStyle;\n }\n });\n }\n\n /**\n * Set the canvas font\n *\n * @param {DOMString} font Font to use\n */\n setFonts(font) {\n this.canvases.forEach(canvas => {\n const context = canvas.getContext('2d');\n if (context) {\n context.font = font;\n }\n });\n }\n\n /**\n * Draw a rectangle on the canvases\n *\n * (it figures out the offset for each canvas)\n *\n * @param {number} x X-position\n * @param {number} y Y-position\n * @param {number} width Width\n * @param {number} height Height\n */\n fillRect(x, y, width, height) {\n this.canvases.forEach((canvas, i) => {\n const leftOffset = i * this.maxCanvasWidth;\n\n const intersection = {\n x1: Math.max(x, i * this.maxCanvasWidth),\n y1: y,\n x2: Math.min(x + width, i * this.maxCanvasWidth + canvas.width),\n y2: y + height\n };\n\n if (intersection.x1 < intersection.x2) {\n const context = canvas\n .getContext('2d');\n if (context) {\n context\n .fillRect(\n intersection.x1 - leftOffset,\n intersection.y1,\n intersection.x2 - intersection.x1,\n intersection.y2 - intersection.y1\n );\n }\n }\n });\n }\n\n /**\n * Fill a given text on the canvases\n *\n * @param {string} text Text to render\n * @param {number} x X-position\n * @param {number} y Y-position\n */\n fillText(text, x, y) {\n let textWidth;\n let xOffset = 0;\n\n this.canvases.forEach(canvas => {\n const context = canvas.getContext('2d');\n if (context) {\n const canvasWidth = context.canvas.width;\n\n if (xOffset > x + textWidth) {\n return;\n }\n\n if (xOffset + canvasWidth > x && context) {\n textWidth = context.measureText(text).width;\n context.fillText(text, x - xOffset, y);\n }\n\n xOffset += canvasWidth;\n }\n });\n }\n\n /**\n * Turn the time into a suitable label for the time.\n *\n * @param {number} seconds Seconds to format\n * @param {number} pxPerSec Pixels per second\n * @returns {number} Time\n */\n defaultFormatTimeCallback(seconds, pxPerSec) {\n if (seconds / 60 > 1) {\n // calculate minutes and seconds from seconds count\n const minutes = parseInt(seconds / 60, 10);\n seconds = parseInt(seconds % 60, 10);\n // fill up seconds with zeroes\n seconds = seconds < 10 ? '0' + seconds : seconds;\n return `${minutes}:${seconds}`;\n }\n return Math.round(seconds * 1000) / 1000;\n }\n\n /**\n * Return how many seconds should be between each notch\n *\n * @param {number} pxPerSec Pixels per second\n * @returns {number} Time\n */\n defaultTimeInterval(pxPerSec) {\n if (pxPerSec >= 25) {\n return 1;\n } else if (pxPerSec * 5 >= 25) {\n return 5;\n } else if (pxPerSec * 15 >= 25) {\n return 15;\n }\n return Math.ceil(0.5 / pxPerSec) * 60;\n }\n\n /**\n * Return the cadence of notches that get labels in the primary color.\n *\n * @param {number} pxPerSec Pixels per second\n * @returns {number} Cadence\n */\n defaultPrimaryLabelInterval(pxPerSec) {\n if (pxPerSec >= 25) {\n return 10;\n } else if (pxPerSec * 5 >= 25) {\n return 6;\n } else if (pxPerSec * 15 >= 25) {\n return 4;\n }\n return 4;\n }\n\n /**\n * Return the cadence of notches that get labels in the secondary color.\n *\n * @param {number} pxPerSec Pixels per second\n * @returns {number} Cadence\n */\n defaultSecondaryLabelInterval(pxPerSec) {\n if (pxPerSec >= 25) {\n return 5;\n } else if (pxPerSec * 5 >= 25) {\n return 2;\n } else if (pxPerSec * 15 >= 25) {\n return 2;\n }\n return 2;\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/timeline/index.js\");\n",""],"names":["TimelinePlugin","params","ws","container","document","querySelector","Error","wavesurfer","util","Object","assign","height","notchPercentHeight","labelPadding","unlabeledNotchColor","primaryColor","secondaryColor","primaryFontColor","secondaryFontColor","fontFamily","fontSize","duration","zoomDebounce","formatTimeCallback","defaultFormatTimeCallback","timeInterval","defaultTimeInterval","primaryLabelInterval","defaultPrimaryLabelInterval","secondaryLabelInterval","defaultSecondaryLabelInterval","offset","canvases","wrapper","drawer","pixelRatio","maxCanvasWidth","maxCanvasElementWidth","_onZoom","debounce","render","isReady","_onReady","once","unAll","un","_onRedraw","removeEventListener","_onScroll","parentNode","_onWrapperClick","removeChild","wsParams","innerHTML","appendChild","createElement","style","display","position","userSelect","webkitUserSelect","fillParent","scrollParent","width","overflowX","overflowY","addEventListener","createWrapper","updateCanvases","updateCanvasesPositioning","renderCanvases","canvas","push","zIndex","pop","parentElement","totalWidth","Math","round","scrollWidth","requiredCanvases","ceil","length","addCanvas","removeCanvas","canvasesLength","forEach","i","canvasWidth","left","backend","getDuration","totalSeconds","parseInt","getWidth","height1","height2","pixelsPerSecond","formatTime","intervalFnOrVal","option","curPixel","curSeconds","positioning","renderPositions","cb","pos","setFillStyles","setFonts","fillRect","fillText","fillStyle","context","getContext","font","x","y","leftOffset","intersection","x1","max","y1","x2","min","y2","text","textWidth","xOffset","measureText","seconds","pxPerSec","minutes","name","deferInit","instance","scrollLeft","on","e","preventDefault","relX","offsetX","layerX","fireEvent"],"sourceRoot":""}
1
+ {"version":3,"file":"wavesurfer.timeline.js","mappings":"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","sources":["webpack://WaveSurfer.[name]/webpack/universalModuleDefinition","webpack://WaveSurfer.[name]/./src/plugin/timeline/index.js","webpack://WaveSurfer.[name]/webpack/bootstrap","webpack://WaveSurfer.[name]/webpack/before-startup","webpack://WaveSurfer.[name]/webpack/startup","webpack://WaveSurfer.[name]/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\"][\"timeline\"] = factory();\n})(self, function() {\nreturn ","/**\n * @typedef {Object} TimelinePluginParams\n * @desc Extends the `WavesurferParams` wavesurfer was initialised with\n * @property {!string|HTMLElement} container CSS selector or HTML element where\n * the timeline should be drawn. This is the only required parameter.\n * @property {number} notchPercentHeight=90 Height of notches in percent\n * @property {string} unlabeledNotchColor='#c0c0c0' The colour of the notches\n * that do not have labels\n * @property {string} primaryColor='#000' The colour of the main notches\n * @property {string} secondaryColor='#c0c0c0' The colour of the secondary\n * notches\n * @property {string} primaryFontColor='#000' The colour of the labels next to\n * the main notches\n * @property {string} secondaryFontColor='#000' The colour of the labels next to\n * the secondary notches\n * @property {number} labelPadding=5 The padding between the label and the notch\n * @property {?number} zoomDebounce A debounce timeout to increase rendering\n * performance for large files\n * @property {string} fontFamily='Arial'\n * @property {number} fontSize=10 Font size of labels in pixels\n * @property {?number} duration Length of the track in seconds. Overrides\n * getDuration() for setting length of timeline\n * @property {function} formatTimeCallback (sec, pxPerSec) -> label\n * @property {function} timeInterval (pxPerSec) -> seconds between notches\n * @property {function} primaryLabelInterval (pxPerSec) -> cadence between\n * labels in primary color\n * @property {function} secondaryLabelInterval (pxPerSec) -> cadence between\n * labels in secondary color\n * @property {?number} offset Offset for the timeline start in seconds. May also be\n * negative.\n * @property {?boolean} deferInit Set to true to manually call\n * `initPlugin('timeline')`\n */\n\n/**\n * Adds a timeline to the waveform.\n *\n * @implements {PluginClass}\n * @extends {Observer}\n * @example\n * // es6\n * import TimelinePlugin from 'wavesurfer.timeline.js';\n *\n * // commonjs\n * var TimelinePlugin = require('wavesurfer.timeline.js');\n *\n * // if you are using <script> tags\n * var TimelinePlugin = window.WaveSurfer.timeline;\n *\n * // ... initialising wavesurfer with the plugin\n * var wavesurfer = WaveSurfer.create({\n * // wavesurfer options ...\n * plugins: [\n * TimelinePlugin.create({\n * // plugin options ...\n * })\n * ]\n * });\n */\nexport default class TimelinePlugin {\n /**\n * Timeline 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 {TimelinePluginParams} params parameters use to initialise the plugin\n * @return {PluginDefinition} an object representing the plugin\n */\n static create(params) {\n return {\n name: 'timeline',\n deferInit: params && params.deferInit ? params.deferInit : false,\n params: params,\n instance: TimelinePlugin\n };\n }\n\n // event handlers\n _onScroll = () => {\n if (this.wrapper && this.drawer.wrapper) {\n this.wrapper.scrollLeft = this.drawer.wrapper.scrollLeft;\n }\n };\n\n /**\n * @returns {void}\n */\n _onRedraw = () => this.render();\n\n _onReady = () => {\n const ws = this.wavesurfer;\n this.drawer = ws.drawer;\n this.pixelRatio = ws.drawer.params.pixelRatio;\n this.maxCanvasWidth = ws.drawer.maxCanvasWidth || ws.drawer.width;\n this.maxCanvasElementWidth =\n ws.drawer.maxCanvasElementWidth ||\n Math.round(this.maxCanvasWidth / this.pixelRatio);\n\n // add listeners\n ws.drawer.wrapper.addEventListener('scroll', this._onScroll);\n ws.on('redraw', this._onRedraw);\n ws.on('zoom', this._onZoom);\n\n this.render();\n };\n\n /**\n * @param {object} e Click event\n */\n _onWrapperClick = e => {\n e.preventDefault();\n const relX = 'offsetX' in e ? e.offsetX : e.layerX;\n this.fireEvent('click', relX / this.wrapper.scrollWidth || 0);\n };\n\n /**\n * Creates an instance of TimelinePlugin.\n *\n * You probably want to use TimelinePlugin.create()\n *\n * @param {TimelinePluginParams} params Plugin parameters\n * @param {object} ws Wavesurfer instance\n */\n constructor(params, ws) {\n this.container =\n 'string' == typeof params.container\n ? document.querySelector(params.container)\n : params.container;\n\n if (!this.container) {\n throw new Error('No container for wavesurfer timeline');\n }\n\n this.wavesurfer = ws;\n this.util = ws.util;\n this.params = Object.assign(\n {},\n {\n height: 20,\n notchPercentHeight: 90,\n labelPadding: 5,\n unlabeledNotchColor: '#c0c0c0',\n primaryColor: '#000',\n secondaryColor: '#c0c0c0',\n primaryFontColor: '#000',\n secondaryFontColor: '#000',\n fontFamily: 'Arial',\n fontSize: 10,\n duration: null,\n zoomDebounce: false,\n formatTimeCallback: this.defaultFormatTimeCallback,\n timeInterval: this.defaultTimeInterval,\n primaryLabelInterval: this.defaultPrimaryLabelInterval,\n secondaryLabelInterval: this.defaultSecondaryLabelInterval,\n offset: 0\n },\n params\n );\n\n this.canvases = [];\n this.wrapper = null;\n this.drawer = null;\n this.pixelRatio = null;\n this.maxCanvasWidth = null;\n this.maxCanvasElementWidth = null;\n /**\n * This event handler has to be in the constructor function because it\n * relies on the debounce function which is only available after\n * instantiation\n *\n * Use a debounced function if `params.zoomDebounce` is defined\n *\n * @returns {void}\n */\n this._onZoom = this.params.zoomDebounce\n ? this.wavesurfer.util.debounce(\n () => this.render(),\n this.params.zoomDebounce\n )\n : () => this.render();\n }\n\n /**\n * Initialisation function used by the plugin API\n */\n init() {\n // Check if ws is ready\n if (this.wavesurfer.isReady) {\n this._onReady();\n } else {\n this.wavesurfer.once('ready', this._onReady);\n }\n }\n\n /**\n * Destroy function used by the plugin API\n */\n destroy() {\n this.unAll();\n this.wavesurfer.un('redraw', this._onRedraw);\n this.wavesurfer.un('zoom', this._onZoom);\n this.wavesurfer.un('ready', this._onReady);\n this.wavesurfer.drawer.wrapper.removeEventListener(\n 'scroll',\n this._onScroll\n );\n if (this.wrapper && this.wrapper.parentNode) {\n this.wrapper.removeEventListener('click', this._onWrapperClick);\n this.wrapper.parentNode.removeChild(this.wrapper);\n this.wrapper = null;\n }\n }\n\n /**\n * Create a timeline element to wrap the canvases drawn by this plugin\n *\n */\n createWrapper() {\n const wsParams = this.wavesurfer.params;\n this.container.innerHTML = '';\n this.wrapper = this.container.appendChild(\n document.createElement('timeline')\n );\n this.util.style(this.wrapper, {\n display: 'block',\n position: 'relative',\n userSelect: 'none',\n webkitUserSelect: 'none',\n height: `${this.params.height}px`\n });\n\n if (wsParams.fillParent || wsParams.scrollParent) {\n this.util.style(this.wrapper, {\n width: '100%',\n overflowX: 'hidden',\n overflowY: 'hidden'\n });\n }\n\n this.wrapper.addEventListener('click', this._onWrapperClick);\n }\n\n /**\n * Render the timeline (also updates the already rendered timeline)\n *\n */\n render() {\n if (!this.wrapper) {\n this.createWrapper();\n }\n this.updateCanvases();\n this.updateCanvasesPositioning();\n this.renderCanvases();\n }\n\n /**\n * Add new timeline canvas\n *\n */\n addCanvas() {\n const canvas = this.wrapper.appendChild(\n document.createElement('canvas')\n );\n this.canvases.push(canvas);\n this.util.style(canvas, {\n position: 'absolute',\n zIndex: 4\n });\n }\n\n /**\n * Remove timeline canvas\n *\n */\n removeCanvas() {\n const canvas = this.canvases.pop();\n canvas.parentElement.removeChild(canvas);\n }\n\n /**\n * Make sure the correct of timeline canvas elements exist and are cached in\n * this.canvases\n *\n */\n updateCanvases() {\n const totalWidth = Math.round(this.drawer.wrapper.scrollWidth);\n const requiredCanvases = Math.ceil(\n totalWidth / this.maxCanvasElementWidth\n );\n\n while (this.canvases.length < requiredCanvases) {\n this.addCanvas();\n }\n\n while (this.canvases.length > requiredCanvases) {\n this.removeCanvas();\n }\n }\n\n /**\n * Update the dimensions and positioning style for all the timeline canvases\n *\n */\n updateCanvasesPositioning() {\n // cache length for performance\n const canvasesLength = this.canvases.length;\n this.canvases.forEach((canvas, i) => {\n // canvas width is the max element width, or if it is the last the\n // required width\n const canvasWidth =\n i === canvasesLength - 1\n ? this.drawer.wrapper.scrollWidth -\n this.maxCanvasElementWidth * (canvasesLength - 1)\n : this.maxCanvasElementWidth;\n // set dimensions and style\n canvas.width = canvasWidth * this.pixelRatio;\n // on certain pixel ratios the canvas appears cut off at the bottom,\n // therefore leave 1px extra\n canvas.height = (this.params.height + 1) * this.pixelRatio;\n this.util.style(canvas, {\n width: `${canvasWidth}px`,\n height: `${this.params.height}px`,\n left: `${i * this.maxCanvasElementWidth}px`\n });\n });\n }\n\n /**\n * Render the timeline labels and notches\n *\n */\n renderCanvases() {\n const duration =\n this.params.duration ||\n this.wavesurfer.backend.getDuration();\n\n if (duration <= 0) {\n return;\n }\n const wsParams = this.wavesurfer.params;\n const fontSize = this.params.fontSize * wsParams.pixelRatio;\n const totalSeconds = parseInt(duration, 10) + 1;\n const width =\n wsParams.fillParent && !wsParams.scrollParent\n ? this.drawer.getWidth()\n : this.drawer.wrapper.scrollWidth * wsParams.pixelRatio;\n const height1 = this.params.height * this.pixelRatio;\n const height2 =\n this.params.height *\n (this.params.notchPercentHeight / 100) *\n this.pixelRatio;\n const pixelsPerSecond = width / duration;\n\n const formatTime = this.params.formatTimeCallback;\n // if parameter is function, call the function with\n // pixelsPerSecond, otherwise simply take the value as-is\n const intervalFnOrVal = option =>\n typeof option === 'function' ? option(pixelsPerSecond) : option;\n const timeInterval = intervalFnOrVal(this.params.timeInterval);\n const primaryLabelInterval = intervalFnOrVal(\n this.params.primaryLabelInterval\n );\n const secondaryLabelInterval = intervalFnOrVal(\n this.params.secondaryLabelInterval\n );\n\n let curPixel = pixelsPerSecond * this.params.offset;\n let curSeconds = 0;\n let i;\n // build an array of position data with index, second and pixel data,\n // this is then used multiple times below\n const positioning = [];\n for (i = 0; i < totalSeconds / timeInterval; i++) {\n positioning.push([i, curSeconds, curPixel]);\n curSeconds += timeInterval;\n curPixel += pixelsPerSecond * timeInterval;\n }\n\n // iterate over each position\n const renderPositions = cb => {\n positioning.forEach(pos => {\n cb(pos[0], pos[1], pos[2]);\n });\n };\n\n // render primary labels\n this.setFillStyles(this.params.primaryColor);\n this.setFonts(`${fontSize}px ${this.params.fontFamily}`);\n this.setFillStyles(this.params.primaryFontColor);\n renderPositions((i, curSeconds, curPixel) => {\n if (i % primaryLabelInterval === 0) {\n this.fillRect(curPixel, 0, 1, height1);\n this.fillText(\n formatTime(curSeconds, pixelsPerSecond),\n curPixel + this.params.labelPadding * this.pixelRatio,\n height1\n );\n }\n });\n\n // render secondary labels\n this.setFillStyles(this.params.secondaryColor);\n this.setFonts(`${fontSize}px ${this.params.fontFamily}`);\n this.setFillStyles(this.params.secondaryFontColor);\n renderPositions((i, curSeconds, curPixel) => {\n if (i % secondaryLabelInterval === 0) {\n this.fillRect(curPixel, 0, 1, height1);\n this.fillText(\n formatTime(curSeconds, pixelsPerSecond),\n curPixel + this.params.labelPadding * this.pixelRatio,\n height1\n );\n }\n });\n\n // render the actual notches (when no labels are used)\n this.setFillStyles(this.params.unlabeledNotchColor);\n renderPositions((i, curSeconds, curPixel) => {\n if (\n i % secondaryLabelInterval !== 0 &&\n i % primaryLabelInterval !== 0\n ) {\n this.fillRect(curPixel, 0, 1, height2);\n }\n });\n }\n\n /**\n * Set the canvas fill style\n *\n * @param {DOMString|CanvasGradient|CanvasPattern} fillStyle Fill style to\n * use\n */\n setFillStyles(fillStyle) {\n this.canvases.forEach(canvas => {\n const context = canvas.getContext('2d');\n if (context) {\n context.fillStyle = fillStyle;\n }\n });\n }\n\n /**\n * Set the canvas font\n *\n * @param {DOMString} font Font to use\n */\n setFonts(font) {\n this.canvases.forEach(canvas => {\n const context = canvas.getContext('2d');\n if (context) {\n context.font = font;\n }\n });\n }\n\n /**\n * Draw a rectangle on the canvases\n *\n * (it figures out the offset for each canvas)\n *\n * @param {number} x X-position\n * @param {number} y Y-position\n * @param {number} width Width\n * @param {number} height Height\n */\n fillRect(x, y, width, height) {\n this.canvases.forEach((canvas, i) => {\n const leftOffset = i * this.maxCanvasWidth;\n\n const intersection = {\n x1: Math.max(x, i * this.maxCanvasWidth),\n y1: y,\n x2: Math.min(x + width, i * this.maxCanvasWidth + canvas.width),\n y2: y + height\n };\n\n if (intersection.x1 < intersection.x2) {\n const context = canvas\n .getContext('2d');\n if (context) {\n context\n .fillRect(\n intersection.x1 - leftOffset,\n intersection.y1,\n intersection.x2 - intersection.x1,\n intersection.y2 - intersection.y1\n );\n }\n }\n });\n }\n\n /**\n * Fill a given text on the canvases\n *\n * @param {string} text Text to render\n * @param {number} x X-position\n * @param {number} y Y-position\n */\n fillText(text, x, y) {\n let textWidth;\n let xOffset = 0;\n\n this.canvases.forEach(canvas => {\n const context = canvas.getContext('2d');\n if (context) {\n const canvasWidth = context.canvas.width;\n\n if (xOffset > x + textWidth) {\n return;\n }\n\n if (xOffset + canvasWidth > x && context) {\n textWidth = context.measureText(text).width;\n context.fillText(text, x - xOffset, y);\n }\n\n xOffset += canvasWidth;\n }\n });\n }\n\n /**\n * Turn the time into a suitable label for the time.\n *\n * @param {number} seconds Seconds to format\n * @param {number} pxPerSec Pixels per second\n * @returns {number} Time\n */\n defaultFormatTimeCallback(seconds, pxPerSec) {\n if (seconds / 60 > 1) {\n // calculate minutes and seconds from seconds count\n const minutes = parseInt(seconds / 60, 10);\n seconds = parseInt(seconds % 60, 10);\n // fill up seconds with zeroes\n seconds = seconds < 10 ? '0' + seconds : seconds;\n return `${minutes}:${seconds}`;\n }\n return Math.round(seconds * 1000) / 1000;\n }\n\n /**\n * Return how many seconds should be between each notch\n *\n * @param {number} pxPerSec Pixels per second\n * @returns {number} Time\n */\n defaultTimeInterval(pxPerSec) {\n if (pxPerSec >= 25) {\n return 1;\n } else if (pxPerSec * 5 >= 25) {\n return 5;\n } else if (pxPerSec * 15 >= 25) {\n return 15;\n }\n return Math.ceil(0.5 / pxPerSec) * 60;\n }\n\n /**\n * Return the cadence of notches that get labels in the primary color.\n *\n * @param {number} pxPerSec Pixels per second\n * @returns {number} Cadence\n */\n defaultPrimaryLabelInterval(pxPerSec) {\n if (pxPerSec >= 25) {\n return 10;\n } else if (pxPerSec * 5 >= 25) {\n return 6;\n } else if (pxPerSec * 15 >= 25) {\n return 4;\n }\n return 4;\n }\n\n /**\n * Return the cadence of notches that get labels in the secondary color.\n *\n * @param {number} pxPerSec Pixels per second\n * @returns {number} Cadence\n */\n defaultSecondaryLabelInterval(pxPerSec) {\n if (pxPerSec >= 25) {\n return 5;\n } else if (pxPerSec * 5 >= 25) {\n return 2;\n } else if (pxPerSec * 15 >= 25) {\n return 2;\n }\n return 2;\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/timeline/index.js\");\n",""],"names":["TimelinePlugin","params","ws","wrapper","drawer","scrollLeft","render","wavesurfer","pixelRatio","maxCanvasWidth","width","maxCanvasElementWidth","Math","round","addEventListener","_onScroll","on","_onRedraw","_onZoom","e","preventDefault","relX","offsetX","layerX","fireEvent","scrollWidth","container","document","querySelector","Error","util","Object","assign","height","notchPercentHeight","labelPadding","unlabeledNotchColor","primaryColor","secondaryColor","primaryFontColor","secondaryFontColor","fontFamily","fontSize","duration","zoomDebounce","formatTimeCallback","defaultFormatTimeCallback","timeInterval","defaultTimeInterval","primaryLabelInterval","defaultPrimaryLabelInterval","secondaryLabelInterval","defaultSecondaryLabelInterval","offset","canvases","debounce","isReady","_onReady","once","unAll","un","removeEventListener","parentNode","_onWrapperClick","removeChild","wsParams","innerHTML","appendChild","createElement","style","display","position","userSelect","webkitUserSelect","fillParent","scrollParent","overflowX","overflowY","createWrapper","updateCanvases","updateCanvasesPositioning","renderCanvases","canvas","push","zIndex","pop","parentElement","totalWidth","requiredCanvases","ceil","length","addCanvas","removeCanvas","canvasesLength","forEach","i","canvasWidth","left","backend","getDuration","totalSeconds","parseInt","getWidth","height1","height2","pixelsPerSecond","formatTime","intervalFnOrVal","option","curPixel","curSeconds","positioning","renderPositions","cb","pos","setFillStyles","setFonts","fillRect","fillText","fillStyle","context","getContext","font","x","y","leftOffset","intersection","x1","max","y1","x2","min","y2","text","textWidth","xOffset","measureText","seconds","pxPerSec","minutes","name","deferInit","instance"],"sourceRoot":""}
@@ -1,7 +1,7 @@
1
1
  /*!
2
- * wavesurfer.js timeline plugin 5.2.0 (2021-08-16)
2
+ * wavesurfer.js timeline plugin 6.0.0 (2022-02-07)
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.timeline=t())}(self,(function(){return(()=>{"use strict";var e={171:(e,t)=>{function a(e,t){for(var a=0;a<t.length;a++){var r=t[a];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var r=function(){function e(t,a){var r=this;if(function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),i.call(this),this.container="string"==typeof t.container?document.querySelector(t.container):t.container,!this.container)throw new Error("No container for wavesurfer timeline");this.wavesurfer=a,this.util=a.util,this.params=Object.assign({},{height:20,notchPercentHeight:90,labelPadding:5,unlabeledNotchColor:"#c0c0c0",primaryColor:"#000",secondaryColor:"#c0c0c0",primaryFontColor:"#000",secondaryFontColor:"#000",fontFamily:"Arial",fontSize:10,duration:null,zoomDebounce:!1,formatTimeCallback:this.defaultFormatTimeCallback,timeInterval:this.defaultTimeInterval,primaryLabelInterval:this.defaultPrimaryLabelInterval,secondaryLabelInterval:this.defaultSecondaryLabelInterval,offset:0},t),this.canvases=[],this.wrapper=null,this.drawer=null,this.pixelRatio=null,this.maxCanvasWidth=null,this.maxCanvasElementWidth=null,this._onZoom=this.params.zoomDebounce?this.wavesurfer.util.debounce((function(){return r.render()}),this.params.zoomDebounce):function(){return r.render()}}var t,r,n;return t=e,n=[{key:"create",value:function(t){return{name:"timeline",deferInit:!(!t||!t.deferInit)&&t.deferInit,params:t,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("redraw",this._onRedraw),this.wavesurfer.un("zoom",this._onZoom),this.wavesurfer.un("ready",this._onReady),this.wavesurfer.drawer.wrapper.removeEventListener("scroll",this._onScroll),this.wrapper&&this.wrapper.parentNode&&(this.wrapper.removeEventListener("click",this._onWrapperClick),this.wrapper.parentNode.removeChild(this.wrapper),this.wrapper=null)}},{key:"createWrapper",value:function(){var e=this.wavesurfer.params;this.container.innerHTML="",this.wrapper=this.container.appendChild(document.createElement("timeline")),this.util.style(this.wrapper,{display:"block",position:"relative",userSelect:"none",webkitUserSelect:"none",height:"".concat(this.params.height,"px")}),(e.fillParent||e.scrollParent)&&this.util.style(this.wrapper,{width:"100%",overflowX:"hidden",overflowY:"hidden"}),this.wrapper.addEventListener("click",this._onWrapperClick)}},{key:"render",value:function(){this.wrapper||this.createWrapper(),this.updateCanvases(),this.updateCanvasesPositioning(),this.renderCanvases()}},{key:"addCanvas",value:function(){var e=this.wrapper.appendChild(document.createElement("canvas"));this.canvases.push(e),this.util.style(e,{position:"absolute",zIndex:4})}},{key:"removeCanvas",value:function(){var e=this.canvases.pop();e.parentElement.removeChild(e)}},{key:"updateCanvases",value:function(){for(var e=Math.round(this.drawer.wrapper.scrollWidth),t=Math.ceil(e/this.maxCanvasElementWidth);this.canvases.length<t;)this.addCanvas();for(;this.canvases.length>t;)this.removeCanvas()}},{key:"updateCanvasesPositioning",value:function(){var e=this,t=this.canvases.length;this.canvases.forEach((function(a,r){var i=r===t-1?e.drawer.wrapper.scrollWidth-e.maxCanvasElementWidth*(t-1):e.maxCanvasElementWidth;a.width=i*e.pixelRatio,a.height=(e.params.height+1)*e.pixelRatio,e.util.style(a,{width:"".concat(i,"px"),height:"".concat(e.params.height,"px"),left:"".concat(r*e.maxCanvasElementWidth,"px")})}))}},{key:"renderCanvases",value:function(){var e=this,t=this.params.duration||this.wavesurfer.backend.getDuration();if(!(t<=0)){var a,r=this.wavesurfer.params,i=this.params.fontSize*r.pixelRatio,n=parseInt(t,10)+1,s=r.fillParent&&!r.scrollParent?this.drawer.getWidth():this.drawer.wrapper.scrollWidth*r.pixelRatio,o=this.params.height*this.pixelRatio,l=this.params.height*(this.params.notchPercentHeight/100)*this.pixelRatio,h=s/t,c=this.params.formatTimeCallback,u=function(e){return"function"==typeof e?e(h):e},p=u(this.params.timeInterval),f=u(this.params.primaryLabelInterval),d=u(this.params.secondaryLabelInterval),v=h*this.params.offset,m=0,y=[];for(a=0;a<n/p;a++)y.push([a,m,v]),m+=p,v+=h*p;var w=function(e){y.forEach((function(t){e(t[0],t[1],t[2])}))};this.setFillStyles(this.params.primaryColor),this.setFonts("".concat(i,"px ").concat(this.params.fontFamily)),this.setFillStyles(this.params.primaryFontColor),w((function(t,a,r){t%f==0&&(e.fillRect(r,0,1,o),e.fillText(c(a,h),r+e.params.labelPadding*e.pixelRatio,o))})),this.setFillStyles(this.params.secondaryColor),this.setFonts("".concat(i,"px ").concat(this.params.fontFamily)),this.setFillStyles(this.params.secondaryFontColor),w((function(t,a,r){t%d==0&&(e.fillRect(r,0,1,o),e.fillText(c(a,h),r+e.params.labelPadding*e.pixelRatio,o))})),this.setFillStyles(this.params.unlabeledNotchColor),w((function(t,a,r){t%d!=0&&t%f!=0&&e.fillRect(r,0,1,l)}))}}},{key:"setFillStyles",value:function(e){this.canvases.forEach((function(t){var a=t.getContext("2d");a&&(a.fillStyle=e)}))}},{key:"setFonts",value:function(e){this.canvases.forEach((function(t){var a=t.getContext("2d");a&&(a.font=e)}))}},{key:"fillRect",value:function(e,t,a,r){var i=this;this.canvases.forEach((function(n,s){var o=s*i.maxCanvasWidth,l={x1:Math.max(e,s*i.maxCanvasWidth),y1:t,x2:Math.min(e+a,s*i.maxCanvasWidth+n.width),y2:t+r};if(l.x1<l.x2){var h=n.getContext("2d");h&&h.fillRect(l.x1-o,l.y1,l.x2-l.x1,l.y2-l.y1)}}))}},{key:"fillText",value:function(e,t,a){var r,i=0;this.canvases.forEach((function(n){var s=n.getContext("2d");if(s){var o=s.canvas.width;if(i>t+r)return;i+o>t&&s&&(r=s.measureText(e).width,s.fillText(e,t-i,a)),i+=o}}))}},{key:"defaultFormatTimeCallback",value:function(e,t){if(e/60>1){var a=parseInt(e/60,10);return e=(e=parseInt(e%60,10))<10?"0"+e:e,"".concat(a,":").concat(e)}return Math.round(1e3*e)/1e3}},{key:"defaultTimeInterval",value:function(e){return e>=25?1:5*e>=25?5:15*e>=25?15:60*Math.ceil(.5/e)}},{key:"defaultPrimaryLabelInterval",value:function(e){return e>=25?10:5*e>=25?6:4}},{key:"defaultSecondaryLabelInterval",value:function(e){return e>=25?5:2}}])&&a(t.prototype,r),n&&a(t,n),e}();t.default=r;var i=function(){var e=this;this._onScroll=function(){e.wrapper&&e.drawer.wrapper&&(e.wrapper.scrollLeft=e.drawer.wrapper.scrollLeft)},this._onRedraw=function(){return e.render()},this._onReady=function(){var t=e.wavesurfer;e.drawer=t.drawer,e.pixelRatio=t.drawer.params.pixelRatio,e.maxCanvasWidth=t.drawer.maxCanvasWidth||t.drawer.width,e.maxCanvasElementWidth=t.drawer.maxCanvasElementWidth||Math.round(e.maxCanvasWidth/e.pixelRatio),t.drawer.wrapper.addEventListener("scroll",e._onScroll),t.on("redraw",e._onRedraw),t.on("zoom",e._onZoom),e.render()},this._onWrapperClick=function(t){t.preventDefault();var a="offsetX"in t?t.offsetX:t.layerX;e.fireEvent("click",a/e.wrapper.scrollWidth||0)}};e.exports=t.default}},t={};return function a(r){var i=t[r];if(void 0!==i)return i.exports;var n=t[r]={exports:{}};return e[r](n,n.exports,a),n.exports}(171)})()}));
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.timeline=t())}(self,(function(){return(()=>{"use strict";var e={171:(e,t)=>{function a(e,t){for(var a=0;a<t.length;a++){var r=t[a];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function r(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var i=function(){function e(t,a){var i=this;if(function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),r(this,"_onScroll",(function(){i.wrapper&&i.drawer.wrapper&&(i.wrapper.scrollLeft=i.drawer.wrapper.scrollLeft)})),r(this,"_onRedraw",(function(){return i.render()})),r(this,"_onReady",(function(){var e=i.wavesurfer;i.drawer=e.drawer,i.pixelRatio=e.drawer.params.pixelRatio,i.maxCanvasWidth=e.drawer.maxCanvasWidth||e.drawer.width,i.maxCanvasElementWidth=e.drawer.maxCanvasElementWidth||Math.round(i.maxCanvasWidth/i.pixelRatio),e.drawer.wrapper.addEventListener("scroll",i._onScroll),e.on("redraw",i._onRedraw),e.on("zoom",i._onZoom),i.render()})),r(this,"_onWrapperClick",(function(e){e.preventDefault();var t="offsetX"in e?e.offsetX:e.layerX;i.fireEvent("click",t/i.wrapper.scrollWidth||0)})),this.container="string"==typeof t.container?document.querySelector(t.container):t.container,!this.container)throw new Error("No container for wavesurfer timeline");this.wavesurfer=a,this.util=a.util,this.params=Object.assign({},{height:20,notchPercentHeight:90,labelPadding:5,unlabeledNotchColor:"#c0c0c0",primaryColor:"#000",secondaryColor:"#c0c0c0",primaryFontColor:"#000",secondaryFontColor:"#000",fontFamily:"Arial",fontSize:10,duration:null,zoomDebounce:!1,formatTimeCallback:this.defaultFormatTimeCallback,timeInterval:this.defaultTimeInterval,primaryLabelInterval:this.defaultPrimaryLabelInterval,secondaryLabelInterval:this.defaultSecondaryLabelInterval,offset:0},t),this.canvases=[],this.wrapper=null,this.drawer=null,this.pixelRatio=null,this.maxCanvasWidth=null,this.maxCanvasElementWidth=null,this._onZoom=this.params.zoomDebounce?this.wavesurfer.util.debounce((function(){return i.render()}),this.params.zoomDebounce):function(){return i.render()}}var t,i,n;return t=e,n=[{key:"create",value:function(t){return{name:"timeline",deferInit:!(!t||!t.deferInit)&&t.deferInit,params:t,instance:e}}}],(i=[{key:"init",value:function(){this.wavesurfer.isReady?this._onReady():this.wavesurfer.once("ready",this._onReady)}},{key:"destroy",value:function(){this.unAll(),this.wavesurfer.un("redraw",this._onRedraw),this.wavesurfer.un("zoom",this._onZoom),this.wavesurfer.un("ready",this._onReady),this.wavesurfer.drawer.wrapper.removeEventListener("scroll",this._onScroll),this.wrapper&&this.wrapper.parentNode&&(this.wrapper.removeEventListener("click",this._onWrapperClick),this.wrapper.parentNode.removeChild(this.wrapper),this.wrapper=null)}},{key:"createWrapper",value:function(){var e=this.wavesurfer.params;this.container.innerHTML="",this.wrapper=this.container.appendChild(document.createElement("timeline")),this.util.style(this.wrapper,{display:"block",position:"relative",userSelect:"none",webkitUserSelect:"none",height:"".concat(this.params.height,"px")}),(e.fillParent||e.scrollParent)&&this.util.style(this.wrapper,{width:"100%",overflowX:"hidden",overflowY:"hidden"}),this.wrapper.addEventListener("click",this._onWrapperClick)}},{key:"render",value:function(){this.wrapper||this.createWrapper(),this.updateCanvases(),this.updateCanvasesPositioning(),this.renderCanvases()}},{key:"addCanvas",value:function(){var e=this.wrapper.appendChild(document.createElement("canvas"));this.canvases.push(e),this.util.style(e,{position:"absolute",zIndex:4})}},{key:"removeCanvas",value:function(){var e=this.canvases.pop();e.parentElement.removeChild(e)}},{key:"updateCanvases",value:function(){for(var e=Math.round(this.drawer.wrapper.scrollWidth),t=Math.ceil(e/this.maxCanvasElementWidth);this.canvases.length<t;)this.addCanvas();for(;this.canvases.length>t;)this.removeCanvas()}},{key:"updateCanvasesPositioning",value:function(){var e=this,t=this.canvases.length;this.canvases.forEach((function(a,r){var i=r===t-1?e.drawer.wrapper.scrollWidth-e.maxCanvasElementWidth*(t-1):e.maxCanvasElementWidth;a.width=i*e.pixelRatio,a.height=(e.params.height+1)*e.pixelRatio,e.util.style(a,{width:"".concat(i,"px"),height:"".concat(e.params.height,"px"),left:"".concat(r*e.maxCanvasElementWidth,"px")})}))}},{key:"renderCanvases",value:function(){var e=this,t=this.params.duration||this.wavesurfer.backend.getDuration();if(!(t<=0)){var a,r=this.wavesurfer.params,i=this.params.fontSize*r.pixelRatio,n=parseInt(t,10)+1,s=r.fillParent&&!r.scrollParent?this.drawer.getWidth():this.drawer.wrapper.scrollWidth*r.pixelRatio,o=this.params.height*this.pixelRatio,l=this.params.height*(this.params.notchPercentHeight/100)*this.pixelRatio,h=s/t,c=this.params.formatTimeCallback,u=function(e){return"function"==typeof e?e(h):e},p=u(this.params.timeInterval),f=u(this.params.primaryLabelInterval),d=u(this.params.secondaryLabelInterval),v=h*this.params.offset,m=0,y=[];for(a=0;a<n/p;a++)y.push([a,m,v]),m+=p,v+=h*p;var w=function(e){y.forEach((function(t){e(t[0],t[1],t[2])}))};this.setFillStyles(this.params.primaryColor),this.setFonts("".concat(i,"px ").concat(this.params.fontFamily)),this.setFillStyles(this.params.primaryFontColor),w((function(t,a,r){t%f==0&&(e.fillRect(r,0,1,o),e.fillText(c(a,h),r+e.params.labelPadding*e.pixelRatio,o))})),this.setFillStyles(this.params.secondaryColor),this.setFonts("".concat(i,"px ").concat(this.params.fontFamily)),this.setFillStyles(this.params.secondaryFontColor),w((function(t,a,r){t%d==0&&(e.fillRect(r,0,1,o),e.fillText(c(a,h),r+e.params.labelPadding*e.pixelRatio,o))})),this.setFillStyles(this.params.unlabeledNotchColor),w((function(t,a,r){t%d!=0&&t%f!=0&&e.fillRect(r,0,1,l)}))}}},{key:"setFillStyles",value:function(e){this.canvases.forEach((function(t){var a=t.getContext("2d");a&&(a.fillStyle=e)}))}},{key:"setFonts",value:function(e){this.canvases.forEach((function(t){var a=t.getContext("2d");a&&(a.font=e)}))}},{key:"fillRect",value:function(e,t,a,r){var i=this;this.canvases.forEach((function(n,s){var o=s*i.maxCanvasWidth,l={x1:Math.max(e,s*i.maxCanvasWidth),y1:t,x2:Math.min(e+a,s*i.maxCanvasWidth+n.width),y2:t+r};if(l.x1<l.x2){var h=n.getContext("2d");h&&h.fillRect(l.x1-o,l.y1,l.x2-l.x1,l.y2-l.y1)}}))}},{key:"fillText",value:function(e,t,a){var r,i=0;this.canvases.forEach((function(n){var s=n.getContext("2d");if(s){var o=s.canvas.width;if(i>t+r)return;i+o>t&&s&&(r=s.measureText(e).width,s.fillText(e,t-i,a)),i+=o}}))}},{key:"defaultFormatTimeCallback",value:function(e,t){if(e/60>1){var a=parseInt(e/60,10);return e=(e=parseInt(e%60,10))<10?"0"+e:e,"".concat(a,":").concat(e)}return Math.round(1e3*e)/1e3}},{key:"defaultTimeInterval",value:function(e){return e>=25?1:5*e>=25?5:15*e>=25?15:60*Math.ceil(.5/e)}},{key:"defaultPrimaryLabelInterval",value:function(e){return e>=25?10:5*e>=25?6:4}},{key:"defaultSecondaryLabelInterval",value:function(e){return e>=25?5:2}}])&&a(t.prototype,i),n&&a(t,n),Object.defineProperty(t,"prototype",{writable:!1}),e}();t.default=i,e.exports=t.default}},t={};var a=function a(r){var i=t[r];if(void 0!==i)return i.exports;var n=t[r]={exports:{}};return e[r](n,n.exports,a),n.exports}(171);return a})()}));
7
7
  //# sourceMappingURL=wavesurfer.timeline.min.js.map