From 605fe78e0b69460ee33be38560c09179e1892ec8 Mon Sep 17 00:00:00 2001 From: katspaugh <381895+katspaugh@users.noreply.github.com> Date: Thu, 30 Jan 2025 10:02:23 +0100 Subject: [PATCH] Chore: prettier --- cypress/e2e/spectrogram.cy.js | 4 +- examples/phase-vocoder/phase-vocoder.min.js | 570 +++++++++++++++++++- examples/record-sync.js | 2 +- src/plugins/spectrogram.ts | 66 ++- src/renderer.ts | 3 +- src/wavesurfer.ts | 5 +- 6 files changed, 606 insertions(+), 44 deletions(-) diff --git a/cypress/e2e/spectrogram.cy.js b/cypress/e2e/spectrogram.cy.js index 89938c72e..18d711c17 100644 --- a/cypress/e2e/spectrogram.cy.js +++ b/cypress/e2e/spectrogram.cy.js @@ -83,7 +83,7 @@ xdescribe('WaveSurfer Spectrogram plugin tests', () => { }) }) - scales.forEach(scale => { + scales.forEach((scale) => { it(`should display correct frequency labels with 1kHz tone (${scale})`, () => { cy.visit('cypress/e2e/index.html') cy.window().then((win) => { @@ -99,7 +99,7 @@ xdescribe('WaveSurfer Spectrogram plugin tests', () => { scale: scale, frequencyMin: 0, frequencyMax: 4000, - splitChannels: false + splitChannels: false, }), ], }) diff --git a/examples/phase-vocoder/phase-vocoder.min.js b/examples/phase-vocoder/phase-vocoder.min.js index ee9da8459..21231292c 100644 --- a/examples/phase-vocoder/phase-vocoder.min.js +++ b/examples/phase-vocoder/phase-vocoder.min.js @@ -1 +1,569 @@ -!function t(e,s,r){function i(o,f){if(!s[o]){if(!e[o]){var h="function"==typeof require&&require;if(!f&&h)return h(o,!0);if(n)return n(o,!0);var u=new Error("Cannot find module '"+o+"'");throw u.code="MODULE_NOT_FOUND",u}var a=s[o]={exports:{}};e[o][0].call(a.exports,(function(t){return i(e[o][1][t]||t)}),a,a.exports,t,e,s,r)}return s[o].exports}for(var n="function"==typeof require&&require,o=0;oi;i<<=1)r++;this._width=r%2==0?r-1:r,this._bitrev=new Array(1<>>o&3)<>>1),r=0;r>>1]=t[r];return s},r.prototype.createComplexArray=function(){const t=new Array(this._csize);for(var e=0;e>>1],s[r+1]=0;return s},r.prototype.completeSpectrum=function(t){for(var e=this._csize,s=e>>>1,r=2;r>=2;i>=2;i>>=2){var u=(n=r/i<<1)>>>2;for(t=0;t>>1,i>>>1)}else for(t=0,e=0;t>>1,i>>>1)}var f=this._inv?-1:1,h=this.table;for(i>>=2;i>=2;i>>=2){var u=(n=r/i<<1)>>>1,a=u>>>1,p=a>>>1;for(t=0;t=e||this.magnitudes[t-2]>=e?t++:this.magnitudes[t+1]>=e||this.magnitudes[t+2]>=e?t++:(this.peakIndexes[this.nbPeaks]=t,this.nbPeaks++,t+=2)}}shiftPeaks(t){this.freqComplexBufferShifted.fill(0);for(var e=0;ethis.magnitudes.length)break;var s=0,r=this.fftSize;if(e>0){let t=this.peakIndexes[e-1];s=n-Math.floor((n-t)/2)}if(e=this.magnitudes.length)break;let s=2*Math.PI*(e-t)/this.fftSize,r=Math.cos(s*this.timeCursor),f=Math.sin(s*this.timeCursor),h=2*t,u=h+1,a=this.freqComplexBuffer[h],p=this.freqComplexBuffer[u],l=a*r-p*f,c=a*f+p*r,d=2*e,v=d+1;this.freqComplexBufferShifted[d]+=l,this.freqComplexBufferShifted[v]+=c}}}})},{"./ola-processor.js":2,"fft.js":1}]},{},[3]); \ No newline at end of file +!(function t(e, s, r) { + function i(o, f) { + if (!s[o]) { + if (!e[o]) { + var h = 'function' == typeof require && require + if (!f && h) return h(o, !0) + if (n) return n(o, !0) + var u = new Error("Cannot find module '" + o + "'") + throw ((u.code = 'MODULE_NOT_FOUND'), u) + } + var a = (s[o] = { exports: {} }) + e[o][0].call( + a.exports, + function (t) { + return i(e[o][1][t] || t) + }, + a, + a.exports, + t, + e, + s, + r, + ) + } + return s[o].exports + } + for (var n = 'function' == typeof require && require, o = 0; o < r.length; o++) i(r[o]) + return i +})( + { + 1: [ + function (t, e, s) { + 'use strict' + function r(t) { + if (((this.size = 0 | t), this.size <= 1 || 0 != (this.size & (this.size - 1)))) + throw new Error('FFT size must be a power of two and bigger than 1') + this._csize = t << 1 + for (var e = new Array(2 * this.size), s = 0; s < e.length; s += 2) { + const t = (Math.PI * s) / this.size + ;(e[s] = Math.cos(t)), (e[s + 1] = -Math.sin(t)) + } + this.table = e + for (var r = 0, i = 1; this.size > i; i <<= 1) r++ + ;(this._width = r % 2 == 0 ? r - 1 : r), (this._bitrev = new Array(1 << this._width)) + for (var n = 0; n < this._bitrev.length; n++) { + this._bitrev[n] = 0 + for (var o = 0; o < this._width; o += 2) { + var f = this._width - o - 2 + this._bitrev[n] |= ((n >>> o) & 3) << f + } + } + ;(this._out = null), (this._data = null), (this._inv = 0) + } + ;(e.exports = r), + (r.prototype.fromComplexArray = function (t, e) { + for (var s = e || new Array(t.length >>> 1), r = 0; r < t.length; r += 2) s[r >>> 1] = t[r] + return s + }), + (r.prototype.createComplexArray = function () { + const t = new Array(this._csize) + for (var e = 0; e < t.length; e++) t[e] = 0 + return t + }), + (r.prototype.toComplexArray = function (t, e) { + for (var s = e || this.createComplexArray(), r = 0; r < s.length; r += 2) + (s[r] = t[r >>> 1]), (s[r + 1] = 0) + return s + }), + (r.prototype.completeSpectrum = function (t) { + for (var e = this._csize, s = e >>> 1, r = 2; r < s; r += 2) (t[e - r] = t[r]), (t[e - r + 1] = -t[r + 1]) + }), + (r.prototype.transform = function (t, e) { + if (t === e) throw new Error('Input and output buffers must be different') + ;(this._out = t), + (this._data = e), + (this._inv = 0), + this._transform4(), + (this._out = null), + (this._data = null) + }), + (r.prototype.realTransform = function (t, e) { + if (t === e) throw new Error('Input and output buffers must be different') + ;(this._out = t), + (this._data = e), + (this._inv = 0), + this._realTransform4(), + (this._out = null), + (this._data = null) + }), + (r.prototype.inverseTransform = function (t, e) { + if (t === e) throw new Error('Input and output buffers must be different') + ;(this._out = t), (this._data = e), (this._inv = 1), this._transform4() + for (var s = 0; s < t.length; s++) t[s] /= this.size + ;(this._out = null), (this._data = null) + }), + (r.prototype._transform4 = function () { + var t, + e, + s = this._out, + r = this._csize, + i = 1 << this._width, + n = (r / i) << 1, + o = this._bitrev + if (4 === n) + for (t = 0, e = 0; t < r; t += n, e++) { + const s = o[e] + this._singleTransform2(t, s, i) + } + else + for (t = 0, e = 0; t < r; t += n, e++) { + const s = o[e] + this._singleTransform4(t, s, i) + } + var f = this._inv ? -1 : 1, + h = this.table + for (i >>= 2; i >= 2; i >>= 2) { + var u = (n = (r / i) << 1) >>> 2 + for (t = 0; t < r; t += n) + for (var a = t + u, p = t, l = 0; p < a; p += 2, l += i) { + const t = p, + e = t + u, + r = e + u, + i = r + u, + n = s[t], + o = s[t + 1], + a = s[e], + c = s[e + 1], + d = s[r], + v = s[r + 1], + m = s[i], + b = s[i + 1], + _ = n, + B = o, + g = h[l], + y = f * h[l + 1], + w = a * g - c * y, + S = a * y + c * g, + z = h[2 * l], + x = f * h[2 * l + 1], + C = d * z - v * x, + I = d * x + v * z, + k = h[3 * l], + A = f * h[3 * l + 1], + T = m * k - b * A, + O = m * A + b * k, + q = _ + C, + P = B + I, + M = _ - C, + F = B - I, + R = w + T, + W = S + O, + H = f * (w - T), + E = f * (S - O), + N = q + R, + j = P + W, + L = q - R, + D = P - W, + U = M + E, + V = F - H, + G = M - E, + J = F + H + ;(s[t] = N), + (s[t + 1] = j), + (s[e] = U), + (s[e + 1] = V), + (s[r] = L), + (s[r + 1] = D), + (s[i] = G), + (s[i + 1] = J) + } + } + }), + (r.prototype._singleTransform2 = function (t, e, s) { + const r = this._out, + i = this._data, + n = i[e], + o = i[e + 1], + f = i[e + s], + h = i[e + s + 1], + u = n + f, + a = o + h, + p = n - f, + l = o - h + ;(r[t] = u), (r[t + 1] = a), (r[t + 2] = p), (r[t + 3] = l) + }), + (r.prototype._singleTransform4 = function (t, e, s) { + const r = this._out, + i = this._data, + n = this._inv ? -1 : 1, + o = 2 * s, + f = 3 * s, + h = i[e], + u = i[e + 1], + a = i[e + s], + p = i[e + s + 1], + l = i[e + o], + c = i[e + o + 1], + d = i[e + f], + v = i[e + f + 1], + m = h + l, + b = u + c, + _ = h - l, + B = u - c, + g = a + d, + y = p + v, + w = n * (a - d), + S = n * (p - v), + z = m + g, + x = b + y, + C = _ + S, + I = B - w, + k = m - g, + A = b - y, + T = _ - S, + O = B + w + ;(r[t] = z), + (r[t + 1] = x), + (r[t + 2] = C), + (r[t + 3] = I), + (r[t + 4] = k), + (r[t + 5] = A), + (r[t + 6] = T), + (r[t + 7] = O) + }), + (r.prototype._realTransform4 = function () { + var t, + e, + s = this._out, + r = this._csize, + i = 1 << this._width, + n = (r / i) << 1, + o = this._bitrev + if (4 === n) + for (t = 0, e = 0; t < r; t += n, e++) { + const s = o[e] + this._singleRealTransform2(t, s >>> 1, i >>> 1) + } + else + for (t = 0, e = 0; t < r; t += n, e++) { + const s = o[e] + this._singleRealTransform4(t, s >>> 1, i >>> 1) + } + var f = this._inv ? -1 : 1, + h = this.table + for (i >>= 2; i >= 2; i >>= 2) { + var u = (n = (r / i) << 1) >>> 1, + a = u >>> 1, + p = a >>> 1 + for (t = 0; t < r; t += n) + for (var l = 0, c = 0; l <= p; l += 2, c += i) { + var d = t + l, + v = d + a, + m = v + a, + b = m + a, + _ = s[d], + B = s[d + 1], + g = s[v], + y = s[v + 1], + w = s[m], + S = s[m + 1], + z = s[b], + x = s[b + 1], + C = _, + I = B, + k = h[c], + A = f * h[c + 1], + T = g * k - y * A, + O = g * A + y * k, + q = h[2 * c], + P = f * h[2 * c + 1], + M = w * q - S * P, + F = w * P + S * q, + R = h[3 * c], + W = f * h[3 * c + 1], + H = z * R - x * W, + E = z * W + x * R, + N = C + M, + j = I + F, + L = C - M, + D = I - F, + U = T + H, + V = O + E, + G = f * (T - H), + J = f * (O - E), + K = N + U, + Q = j + V, + X = L + J, + Y = D - G + if (((s[d] = K), (s[d + 1] = Q), (s[v] = X), (s[v + 1] = Y), 0 !== l)) { + if (l !== p) { + var Z = L + -f * J, + $ = -D + -f * G, + tt = N + -f * U, + et = -j - -f * V, + st = t + a - l, + rt = t + u - l + ;(s[st] = Z), (s[st + 1] = $), (s[rt] = tt), (s[rt + 1] = et) + } + } else { + var it = N - U, + nt = j - V + ;(s[m] = it), (s[m + 1] = nt) + } + } + } + }), + (r.prototype._singleRealTransform2 = function (t, e, s) { + const r = this._out, + i = this._data, + n = i[e], + o = i[e + s], + f = n + o, + h = n - o + ;(r[t] = f), (r[t + 1] = 0), (r[t + 2] = h), (r[t + 3] = 0) + }), + (r.prototype._singleRealTransform4 = function (t, e, s) { + const r = this._out, + i = this._data, + n = this._inv ? -1 : 1, + o = 2 * s, + f = 3 * s, + h = i[e], + u = i[e + s], + a = i[e + o], + p = i[e + f], + l = h + a, + c = h - a, + d = u + p, + v = n * (u - p), + m = l + d, + b = c, + _ = -v, + B = l - d, + g = c, + y = v + ;(r[t] = m), + (r[t + 1] = 0), + (r[t + 2] = b), + (r[t + 3] = _), + (r[t + 4] = B), + (r[t + 5] = 0), + (r[t + 6] = g), + (r[t + 7] = y) + }) + }, + {}, + ], + 2: [ + function (t, e, s) { + 'use strict' + const r = 128 + class i extends AudioWorkletProcessor { + constructor(t) { + super(t), + (this.nbInputs = t.numberOfInputs), + (this.nbOutputs = t.numberOfOutputs), + (this.blockSize = t.processorOptions.blockSize), + (this.hopSize = r), + (this.nbOverlaps = this.blockSize / this.hopSize), + (this.inputBuffers = new Array(this.nbInputs)), + (this.inputBuffersHead = new Array(this.nbInputs)), + (this.inputBuffersToSend = new Array(this.nbInputs)) + for (var e = 0; e < this.nbInputs; e++) this.allocateInputChannels(e, 1) + ;(this.outputBuffers = new Array(this.nbOutputs)), + (this.outputBuffersToRetrieve = new Array(this.nbOutputs)) + for (e = 0; e < this.nbOutputs; e++) this.allocateOutputChannels(e, 1) + } + reallocateChannelsIfNeeded(t, e) { + for (var s = 0; s < this.nbInputs; s++) { + let e = t[s].length + e != this.inputBuffers[s].length && this.allocateInputChannels(s, e) + } + for (s = 0; s < this.nbOutputs; s++) { + let t = e[s].length + t != this.outputBuffers[s].length && this.allocateOutputChannels(s, t) + } + } + allocateInputChannels(t, e) { + this.inputBuffers[t] = new Array(e) + for (var s = 0; s < e; s++) + (this.inputBuffers[t][s] = new Float32Array(this.blockSize + r)), this.inputBuffers[t][s].fill(0) + ;(this.inputBuffersHead[t] = new Array(e)), (this.inputBuffersToSend[t] = new Array(e)) + for (s = 0; s < e; s++) + (this.inputBuffersHead[t][s] = this.inputBuffers[t][s].subarray(0, this.blockSize)), + (this.inputBuffersToSend[t][s] = new Float32Array(this.blockSize)) + } + allocateOutputChannels(t, e) { + this.outputBuffers[t] = new Array(e) + for (var s = 0; s < e; s++) + (this.outputBuffers[t][s] = new Float32Array(this.blockSize)), this.outputBuffers[t][s].fill(0) + this.outputBuffersToRetrieve[t] = new Array(e) + for (s = 0; s < e; s++) + (this.outputBuffersToRetrieve[t][s] = new Float32Array(this.blockSize)), + this.outputBuffersToRetrieve[t][s].fill(0) + } + readInputs(t) { + if (t[0].length && 0 == t[0][0].length) + for (var e = 0; e < this.nbInputs; e++) + for (var s = 0; s < this.inputBuffers[e].length; s++) this.inputBuffers[e][s].fill(0, this.blockSize) + else + for (e = 0; e < this.nbInputs; e++) + for (s = 0; s < this.inputBuffers[e].length; s++) { + let r = t[e][s] + this.inputBuffers[e][s].set(r, this.blockSize) + } + } + writeOutputs(t) { + for (var e = 0; e < this.nbInputs; e++) + for (var s = 0; s < this.inputBuffers[e].length; s++) { + let i = this.outputBuffers[e][s].subarray(0, r) + t[e][s].set(i) + } + } + shiftInputBuffers() { + for (var t = 0; t < this.nbInputs; t++) + for (var e = 0; e < this.inputBuffers[t].length; e++) this.inputBuffers[t][e].copyWithin(0, r) + } + shiftOutputBuffers() { + for (var t = 0; t < this.nbOutputs; t++) + for (var e = 0; e < this.outputBuffers[t].length; e++) + this.outputBuffers[t][e].copyWithin(0, r), this.outputBuffers[t][e].subarray(this.blockSize - r).fill(0) + } + prepareInputBuffersToSend() { + for (var t = 0; t < this.nbInputs; t++) + for (var e = 0; e < this.inputBuffers[t].length; e++) + this.inputBuffersToSend[t][e].set(this.inputBuffersHead[t][e]) + } + handleOutputBuffersToRetrieve() { + for (var t = 0; t < this.nbOutputs; t++) + for (var e = 0; e < this.outputBuffers[t].length; e++) + for (var s = 0; s < this.blockSize; s++) + this.outputBuffers[t][e][s] += this.outputBuffersToRetrieve[t][e][s] / this.nbOverlaps + } + process(t, e, s) { + return ( + this.reallocateChannelsIfNeeded(t, e), + this.readInputs(t), + this.shiftInputBuffers(), + this.prepareInputBuffersToSend(), + this.processOLA(this.inputBuffersToSend, this.outputBuffersToRetrieve, s), + this.handleOutputBuffersToRetrieve(), + this.writeOutputs(e), + this.shiftOutputBuffers(), + !0 + ) + } + processOLA(t, e, s) { + console.assert(!1, 'Not overriden') + } + } + e.exports = i + }, + {}, + ], + 3: [ + function (t, e, s) { + 'use strict' + const r = t('./ola-processor.js'), + i = t('fft.js') + registerProcessor( + 'phase-vocoder-processor', + class extends r { + static get parameterDescriptors() { + return [{ name: 'pitchFactor', defaultValue: 1 }] + } + constructor(t) { + ;(t.processorOptions = { blockSize: 2048 }), + super(t), + (this.fftSize = this.blockSize), + (this.timeCursor = 0), + (this.hannWindow = (function (t) { + let e = new Float32Array(t) + for (var s = 0; s < t; s++) e[s] = 0.5 * (1 - Math.cos((2 * Math.PI * s) / t)) + return e + })(this.blockSize)), + (this.fft = new i(this.fftSize)), + (this.freqComplexBuffer = this.fft.createComplexArray()), + (this.freqComplexBufferShifted = this.fft.createComplexArray()), + (this.timeComplexBuffer = this.fft.createComplexArray()), + (this.magnitudes = new Float32Array(this.fftSize / 2 + 1)), + (this.peakIndexes = new Int32Array(this.magnitudes.length)), + (this.nbPeaks = 0) + } + processOLA(t, e, s) { + const r = s.pitchFactor[s.pitchFactor.length - 1] + for (var i = 0; i < this.nbInputs; i++) + for (var n = 0; n < t[i].length; n++) { + var o = t[i][n], + f = e[i][n] + this.applyHannWindow(o), + this.fft.realTransform(this.freqComplexBuffer, o), + this.computeMagnitudes(), + this.findPeaks(), + this.shiftPeaks(r), + this.fft.completeSpectrum(this.freqComplexBufferShifted), + this.fft.inverseTransform(this.timeComplexBuffer, this.freqComplexBufferShifted), + this.fft.fromComplexArray(this.timeComplexBuffer, f), + this.applyHannWindow(f) + } + this.timeCursor += this.hopSize + } + applyHannWindow(t) { + for (var e = 0; e < this.blockSize; e++) t[e] = t[e] * this.hannWindow[e] + } + computeMagnitudes() { + for (var t = 0, e = 0; t < this.magnitudes.length; ) { + let s = this.freqComplexBuffer[e], + r = this.freqComplexBuffer[e + 1] + ;(this.magnitudes[t] = s ** 2 + r ** 2), (t += 1), (e += 2) + } + } + findPeaks() { + this.nbPeaks = 0 + var t = 2 + let e = this.magnitudes.length - 2 + for (; t < e; ) { + let e = this.magnitudes[t] + this.magnitudes[t - 1] >= e || this.magnitudes[t - 2] >= e + ? t++ + : this.magnitudes[t + 1] >= e || this.magnitudes[t + 2] >= e + ? t++ + : ((this.peakIndexes[this.nbPeaks] = t), this.nbPeaks++, (t += 2)) + } + } + shiftPeaks(t) { + this.freqComplexBufferShifted.fill(0) + for (var e = 0; e < this.nbPeaks; e++) { + let n = this.peakIndexes[e], + o = Math.round(n * t) + if (o > this.magnitudes.length) break + var s = 0, + r = this.fftSize + if (e > 0) { + let t = this.peakIndexes[e - 1] + s = n - Math.floor((n - t) / 2) + } + if (e < this.nbPeaks - 1) { + let t = this.peakIndexes[e + 1] + r = n + Math.ceil((t - n) / 2) + } + let f = r - n + for (var i = s - n; i < f; i++) { + let t = n + i, + e = o + i + if (e >= this.magnitudes.length) break + let s = (2 * Math.PI * (e - t)) / this.fftSize, + r = Math.cos(s * this.timeCursor), + f = Math.sin(s * this.timeCursor), + h = 2 * t, + u = h + 1, + a = this.freqComplexBuffer[h], + p = this.freqComplexBuffer[u], + l = a * r - p * f, + c = a * f + p * r, + d = 2 * e, + v = d + 1 + ;(this.freqComplexBufferShifted[d] += l), (this.freqComplexBufferShifted[v] += c) + } + } + } + }, + ) + }, + { './ola-processor.js': 2, 'fft.js': 1 }, + ], + }, + {}, + [3], +) diff --git a/examples/record-sync.js b/examples/record-sync.js index f814fc362..d672fa9fa 100644 --- a/examples/record-sync.js +++ b/examples/record-sync.js @@ -21,7 +21,7 @@ const wavesurfer2 = WaveSurfer.create({ barRadius: 2, }) -wavesurfer2.on('ready', function() { +wavesurfer2.on('ready', function () { const createWaveSurfer = () => { // Destroy the previous wavesurfer instance if (wavesurfer) { diff --git a/src/plugins/spectrogram.ts b/src/plugins/spectrogram.ts index 46658fb35..c09ea79ec 100644 --- a/src/plugins/spectrogram.ts +++ b/src/plugins/spectrogram.ts @@ -284,11 +284,7 @@ export type SpectrogramPluginOptions = { * - igray: Inverted gray scale. * - roseus: From https://github.com/dofuuz/roseus/blob/main/roseus/cmap/roseus.py */ - colorMap?: - | number[][] - | 'gray' - | 'igray' - | 'roseus' + colorMap?: number[][] | 'gray' | 'igray' | 'roseus' /** Render a spectrogram for each channel independently when true. */ splitChannels?: boolean /** URL with pre-computed spectrogram JSON data, the data must be a Uint8Array[][] **/ @@ -557,13 +553,7 @@ class SpectrogramPlugin extends BasePlugin { - spectrCc.drawImage( - bitmap, - 0, - height * (c + 1 - rMax1 / rMax), - width, - height * rMax1 / rMax, - ) + spectrCc.drawImage(bitmap, 0, height * (c + 1 - rMax1 / rMax), width, (height * rMax1) / rMax) }) } @@ -593,30 +583,38 @@ class SpectrogramPlugin extends BasePlugin Array(this.fftSamples / 2 + 1).fill(0)) - const scale = (sampleRate / this.fftSamples) + const scale = sampleRate / this.fftSamples for (let i = 0; i < numFilters; i++) { - let hz = scaleToHz(filterMin + (i / numFilters) * (filterMax - filterMin)) - let j = Math.floor(hz / scale) - let hzLow = j * scale - let hzHigh = (j + 1) * scale - let r = (hz - hzLow) / (hzHigh - hzLow) - filterBank[i][j] = 1 - r - filterBank[i][j + 1] = r + let hz = scaleToHz(filterMin + (i / numFilters) * (filterMax - filterMin)) + let j = Math.floor(hz / scale) + let hzLow = j * scale + let hzHigh = (j + 1) * scale + let r = (hz - hzLow) / (hzHigh - hzLow) + filterBank[i][j] = 1 - r + filterBank[i][j + 1] = r } return filterBank } - private hzToMel(hz: number) { return 2595 * Math.log10(1 + hz / 700) } + private hzToMel(hz: number) { + return 2595 * Math.log10(1 + hz / 700) + } - private melToHz(mel: number) { return 700 * (Math.pow(10, mel / 2595) - 1) } + private melToHz(mel: number) { + return 700 * (Math.pow(10, mel / 2595) - 1) + } private createMelFilterBank(numMelFilters: number, sampleRate: number): number[][] { return this.createFilterBank(numMelFilters, sampleRate, this.hzToMel, this.melToHz) } - private hzToLog(hz: number) { return Math.log10(Math.max(1, hz)) } + private hzToLog(hz: number) { + return Math.log10(Math.max(1, hz)) + } - private logToHz(log: number) { return Math.pow(10, log) } + private logToHz(log: number) { + return Math.pow(10, log) + } private createLogFilterBank(numLogFilters: number, sampleRate: number): number[][] { return this.createFilterBank(numLogFilters, sampleRate, this.hzToLog, this.logToHz) @@ -708,7 +706,8 @@ class SpectrogramPlugin extends BasePlugin -this.gainDB) { array[j] = 255 } else { - array[j] = (valueDB + this.gainDB) / this.rangeDB * 255 + 256 + array[j] = ((valueDB + this.gainDB) / this.rangeDB) * 255 + 256 } } channelFreq.push(array) @@ -789,10 +788,7 @@ class SpectrogramPlugin extends BasePlugin= 1000 ? 'kHz' : 'Hz' } - private getLabelFrequency( - index: number, - labelIndex: number, - ) { + private getLabelFrequency(index: number, labelIndex: number) { const scaleMin = this.hzToScale(this.frequencyMin) const scaleMax = this.hzToScale(this.frequencyMax) return this.scaleToHz(scaleMin + (index / labelIndex) * (scaleMax - scaleMin)) diff --git a/src/renderer.ts b/src/renderer.ts index 1368f5fb9..e6c0c274d 100644 --- a/src/renderer.ts +++ b/src/renderer.ts @@ -169,7 +169,8 @@ class Renderer extends EventEmitter { const div = document.createElement('div') const shadow = div.attachShadow({ mode: 'open' }) - const cspNonce = this.options.cspNonce && typeof this.options.cspNonce === 'string' ? this.options.cspNonce.replace(/"/g, '') : ''; + const cspNonce = + this.options.cspNonce && typeof this.options.cspNonce === 'string' ? this.options.cspNonce.replace(/"/g, '') : '' shadow.innerHTML = ` diff --git a/src/wavesurfer.ts b/src/wavesurfer.ts index feb777e07..d7dac939e 100644 --- a/src/wavesurfer.ts +++ b/src/wavesurfer.ts @@ -360,10 +360,7 @@ class WaveSurfer extends Player { } if (options.peaks && options.duration) { // Create new decoded data buffer from peaks and duration - this.decodedData = Decoder.createBuffer( - options.peaks, - options.duration - ); + this.decodedData = Decoder.createBuffer(options.peaks, options.duration) } this.renderer.setOptions(this.options)