Files
2025-12-01 03:42:34 +08:00

300 lines
9.5 KiB
JavaScript

! function() {
"use strict";
function t(t, e) {
for (var r = 0; r < e.length; r++) {
var n = e[r];
n.enumerable = n.enumerable || !1, n.configurable = !0, "value" in n && (n.writable = !0), Object
.defineProperty(t, (i = n.key, o = void 0, "symbol" == typeof(o = function(t, e) {
if ("object" != typeof t || null === t) return t;
var r = t[Symbol.toPrimitive];
if (void 0 !== r) {
var n = r.call(t, e || "default");
if ("object" != typeof n) return n;
throw new TypeError("@@toPrimitive must return a primitive value.")
}
return ("string" === e ? String : Number)(t)
}(i, "string")) ? o : String(o)), n)
}
var i, o
}
function e(t) {
return e = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function(t) {
return t.__proto__ || Object.getPrototypeOf(t)
}, e(t)
}
function r(t, e) {
return r = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function(t, e) {
return t.__proto__ = e, t
}, r(t, e)
}
function n() {
if ("undefined" == typeof Reflect || !Reflect.construct) return !1;
if (Reflect.construct.sham) return !1;
if ("function" == typeof Proxy) return !0;
try {
return Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], (function() {}))), !0
} catch (t) {
return !1
}
}
function i(t, e, o) {
return i = n() ? Reflect.construct.bind() : function(t, e, n) {
var i = [null];
i.push.apply(i, e);
var o = new(Function.bind.apply(t, i));
return n && r(o, n.prototype), o
}, i.apply(null, arguments)
}
function o(t) {
var n = "function" == typeof Map ? new Map : void 0;
return o = function(t) {
if (null === t || (o = t, -1 === Function.toString.call(o).indexOf("[native code]"))) return t;
var o;
if ("function" != typeof t) throw new TypeError("Super expression must either be null or a function");
if (void 0 !== n) {
if (n.has(t)) return n.get(t);
n.set(t, a)
}
function a() {
return i(t, arguments, e(this).constructor)
}
return a.prototype = Object.create(t.prototype, {
constructor: {
value: a,
enumerable: !1,
writable: !0,
configurable: !0
}
}), r(a, t)
}, o(t)
}
function a(t) {
if (void 0 === t) throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
return t
}
function s(t) {
var r = n();
return function() {
var n, i = e(t);
if (r) {
var o = e(this).constructor;
n = Reflect.construct(i, arguments, o)
} else n = i.apply(this, arguments);
return function(t, e) {
if (e && ("object" == typeof e || "function" == typeof e)) return e;
if (void 0 !== e) throw new TypeError(
"Derived constructors may only return object or undefined");
return a(t)
}(this, n)
}
}
function f(t) {
return function(t) {
if (Array.isArray(t)) return u(t)
}(t) || function(t) {
if ("undefined" != typeof Symbol && null != t[Symbol.iterator] || null != t["@@iterator"]) return Array
.from(t)
}(t) || function(t, e) {
if (!t) return;
if ("string" == typeof t) return u(t, e);
var r = Object.prototype.toString.call(t).slice(8, -1);
"Object" === r && t.constructor && (r = t.constructor.name);
if ("Map" === r || "Set" === r) return Array.from(t);
if ("Arguments" === r || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)) return u(t, e)
}(t) || function() {
throw new TypeError(
"Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."
)
}()
}
function u(t, e) {
(null == e || e > t.length) && (e = t.length);
for (var r = 0, n = new Array(e); r < e; r++) n[r] = t[r];
return n
}
function l(t, e, r, n) {
this.fromSampleRate = t, this.toSampleRate = e, this.channels = 0 | r, this.noReturn = !!n, this.initialize()
}
l.prototype.initialize = function() {
if (!(this.fromSampleRate > 0 && this.toSampleRate > 0 && this.channels > 0)) throw new Error(
"Invalid settings specified for the resampler.");
this.fromSampleRate == this.toSampleRate ? (this.resampler = this.bypassResampler, this.ratioWeight = 1) : (
this.fromSampleRate < this.toSampleRate ? (this.lastWeight = 1, this.resampler = this
.compileLinearInterpolation) : (this.tailExists = !1, this.lastWeight = 0, this.resampler = this
.compileMultiTap), this.ratioWeight = this.fromSampleRate / this.toSampleRate)
}, l.prototype.compileLinearInterpolation = function(t) {
var e = t.length;
this.initializeBuffers(e);
var r, n, i = this.outputBufferSize,
o = this.ratioWeight,
a = this.lastWeight,
s = 0,
f = 0,
u = 0,
l = this.outputBuffer;
if (e % this.channels == 0) {
if (e > 0) {
for (; a < 1; a += o)
for (s = 1 - (f = a % 1), r = 0; r < this.channels; ++r) l[u++] = this.lastOutput[r] * s + t[
r] * f;
for (a--, e -= this.channels, n = Math.floor(a) * this.channels; u < i && n < e;) {
for (s = 1 - (f = a % 1), r = 0; r < this.channels; ++r) l[u++] = t[n + r] * s + t[n + this
.channels + r] * f;
a += o, n = Math.floor(a) * this.channels
}
for (r = 0; r < this.channels; ++r) this.lastOutput[r] = t[n++];
return this.lastWeight = a % 1, this.bufferSlice(u)
}
return this.noReturn ? 0 : []
}
throw new Error("Buffer was of incorrect sample length.")
}, l.prototype.compileMultiTap = function(t) {
var e = [],
r = t.length;
this.initializeBuffers(r);
var n = this.outputBufferSize;
if (r % this.channels == 0) {
if (r > 0) {
for (var i = this.ratioWeight, o = 0, a = 0; a < this.channels; ++a) e[a] = 0;
var s = 0,
f = 0,
u = !this.tailExists;
this.tailExists = !1;
var l = this.outputBuffer,
h = 0,
c = 0;
do {
if (u)
for (o = i, a = 0; a < this.channels; ++a) e[a] = 0;
else {
for (o = this.lastWeight, a = 0; a < this.channels; ++a) e[a] += this.lastOutput[a];
u = !0
}
for (; o > 0 && s < r;) {
if (!(o >= (f = 1 + s - c))) {
for (a = 0; a < this.channels; ++a) e[a] += t[s + a] * o;
c += o, o = 0;
break
}
for (a = 0; a < this.channels; ++a) e[a] += t[s++] * f;
c = s, o -= f
}
if (0 != o) {
for (this.lastWeight = o, a = 0; a < this.channels; ++a) this.lastOutput[a] = e[a];
this.tailExists = !0;
break
}
for (a = 0; a < this.channels; ++a) l[h++] = e[a] / i
} while (s < r && h < n);
return this.bufferSlice(h)
}
return this.noReturn ? 0 : []
}
throw new Error("Buffer was of incorrect sample length.")
}, l.prototype.bypassResampler = function(t) {
return this.noReturn ? (this.outputBuffer = t, t.length) : t
}, l.prototype.bufferSlice = function(t) {
if (this.noReturn) return t;
try {
return this.outputBuffer.subarray(0, t)
} catch (e) {
try {
return this.outputBuffer.length = t, this.outputBuffer
} catch (e) {
return this.outputBuffer.slice(0, t)
}
}
}, l.prototype.initializeBuffers = function(t) {
this.outputBufferSize = Math.ceil(t * this.toSampleRate / this.fromSampleRate);
try {
this.outputBuffer = new Float32Array(this.outputBufferSize), this.lastOutput = new Float32Array(this
.channels)
} catch (t) {
this.outputBuffer = [], this.lastOutput = []
}
};
var h = function(e) {
! function(t, e) {
if ("function" != typeof e && null !== e) throw new TypeError(
"Super expression must either be null or a function");
t.prototype = Object.create(e && e.prototype, {
constructor: {
value: t,
writable: !0,
configurable: !0
}
}), Object.defineProperty(t, "prototype", {
writable: !1
}), e && r(t, e)
}(h, e);
var n, i, o, u = s(h);
function h() {
var t;
! function(t, e) {
if (!(t instanceof e)) throw new TypeError("Cannot call a class as a function")
}(this, h);
var e = a(t = u.call(this));
return t.port.onmessage = function(t) {
var r = t.data,
n = r.type,
i = r.data;
if (console.log("type", n), "init" === n) {
var o = i.frameSize,
a = i.toSampleRate,
s = i.arrayBufferType,
f = i.fromSampleRate;
return e.frameSize = o * Math.floor(f / a), e.resampler = new l(f, a, 1), e
.frameBuffer = [], void(e.arrayBufferType = s),e.gain = i.gain || 1.0;
}
"stop" === n && (e.port.postMessage({
frameBuffer: e.transData(e.frameBuffer),
isLastFrame: !0
}), e.frameBuffer = [])
}, t
}
return n = h, (i = [{
key: "process",
value: function(t) {
var e, r = t[0][0];
return this.frameSize ? ((e = this.frameBuffer).push.apply(e, f(r)), this
.frameBuffer.length >= this.frameSize && (this.port.postMessage({
frameBuffer: this.transData(this.frameBuffer),
isLastFrame: !1
}), this.frameBuffer = []), !0) : (r && this.port.postMessage({
frameBuffer: this.transData(r),
isLastFrame: !1
}), !0)
}
}, {
key: "transData",
value: function(t) {
const gain = this.gain; // 增益系数,可根据实际需求修改
t = t.map(sample => sample * gain); // 对每个样本应用增益
return "short16" === this.arrayBufferType && (t = function(t) {
for (var e = new ArrayBuffer(2 * t.length), r = new DataView(e), n = 0,
i = 0; i < t.length; i += 1, n += 2) {
var o = Math.max(-1, Math.min(1, t[i]));
r.setInt16(n, o < 0 ? 32768 * o : 32767 * o, !0)
}
return r.buffer
}(t = this.resampler.resampler(t))), t
}
}]) && t(n.prototype, i), o && t(n, o), Object.defineProperty(n, "prototype", {
writable: !1
}), h
}(o(AudioWorkletProcessor));
registerProcessor("processor-worklet", h)
}();