!(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], );