!function(e, t) { "object" == typeof exports && "undefined" != typeof module ? module.exports = t() : "function" == typeof define && define.amd ? define(t) : (e = "undefined" != typeof globalThis ? globalThis : e || self).RecorderManager = t() }(this, (function() { "use strict"; function e(e, t, r, o) { return new (r || (r = Promise))((function(n, a) { function i(e) { try { u(o.next(e)) } catch (e) { a(e) } } function s(e) { try { u(o.throw(e)) } catch (e) { a(e) } } function u(e) { var t; e.done ? n(e.value) : (t = e.value, t instanceof r ? t : new r((function(e) { e(t) } ))).then(i, s) } u((o = o.apply(e, t || [])).next()) } )) } function t(e, t) { var r, o, n, a, i = { label: 0, sent: function() { if (1 & n[0]) throw n[1]; return n[1] }, trys: [], ops: [] }; return a = { next: s(0), throw: s(1), return: s(2) }, "function" == typeof Symbol && (a[Symbol.iterator] = function() { return this } ), a; function s(s) { return function(u) { return function(s) { if (r) throw new TypeError("Generator is already executing."); for (; a && (a = 0, s[0] && (i = 0)), i; ) try { if (r = 1, o && (n = 2 & s[0] ? o.return : s[0] ? o.throw || ((n = o.return) && n.call(o), 0) : o.next) && !(n = n.call(o, s[1])).done) return n; switch (o = 0, n && (s = [2 & s[0], n.value]), s[0]) { case 0: case 1: n = s; break; case 4: return i.label++, { value: s[1], done: !1 }; case 5: i.label++, o = s[1], s = [0]; continue; case 7: s = i.ops.pop(), i.trys.pop(); continue; default: if (!(n = i.trys, (n = n.length > 0 && n[n.length - 1]) || 6 !== s[0] && 2 !== s[0])) { i = 0; continue } if (3 === s[0] && (!n || s[1] > n[0] && s[1] < n[3])) { i.label = s[1]; break } if (6 === s[0] && i.label < n[1]) { i.label = n[1], n = s; break } if (n && i.label < n[2]) { i.label = n[2], i.ops.push(s); break } n[2] && i.ops.pop(), i.trys.pop(); continue } s = t.call(e, i) } catch (e) { s = [6, e], o = 0 } finally { r = n = 0 } if (5 & s[0]) throw s[1]; return { value: s[0] ? s[1] : void 0, done: !0 } }([s, u]) } } } function r() { var e, t = navigator, r = t.getUserMedia || t.webkitGetUserMedia || t.mozGetUserMedia; return (null === (e = t.mediaDevices) || void 0 === e ? void 0 : e.getUserMedia) ? t.mediaDevices.getUserMedia({ audio: !0, video: !1 }) : r ? new Promise((function(e, t) { r.call(navigator, { audio: !0, video: !1 }, (function(t) { e(t) } ), (function(e) { t(e) } )) } )) : Promise.reject(new Error("不支持录音")) } var o; function n(r, n) { return e(this, void 0, void 0, (function() { var e; return t(this, (function(t) { switch (t.label) { case 0: return [3, 2]; case 1: return t.sent(), [2, new AudioWorkletNode(r,"processor-worklet")]; case 2: return (e = o) ? [3, 4] : [4, new Worker("".concat(n, "/processor.worker.js"))]; case 3: e = t.sent(), t.label = 4; case 4: return [2, { port: o = e }] } } )) } )) } return function() { function o(e) { this.processorPath = e, this.audioBuffers = [] } return o.prototype.start = function(o) { var a, i = o.sampleRate, s = o.frameSize, u = o.arrayBufferType; return e(this, void 0, void 0, (function() { var e, o, c, l, f, d, p; return t(this, (function(t) { switch (t.label) { case 0: return t.trys.push([0, 3, , 4]), (e = this).audioBuffers = [], [4, r()]; case 1: return o = t.sent(), this.audioTracks = o.getAudioTracks(), c = function(e, t) { var r; try { (r = new (window.AudioContext || window.webkitAudioContext)({ sampleRate: t })).createMediaStreamSource(e) } catch (t) { null == r || r.close(), (r = new (window.AudioContext || window.webkitAudioContext)).createMediaStreamSource(e) } return r }(o, i), this.audioContext = c, l = c.createMediaStreamSource(o), [4, n(c, this.processorPath)]; case 2: return f = t.sent(), this.audioWorklet = f, f.port.postMessage({ type: "init", data: { frameSize: s, toSampleRate: i || c.sampleRate, fromSampleRate: c.sampleRate, arrayBufferType: u || "short16" } }), f.port.onmessage = function(t) { var r = t.data , o = r.frameBuffer , n = r.isLastFrame; if (s && e.onFrameRecorded) if (null == o ? void 0 : o.byteLength) for (var a = 0; a < o.byteLength; ) e.onFrameRecorded({ isLastFrame: n && a + s >= o.byteLength, frameBuffer: t.data.frameBuffer.slice(a, a + s) }), a += s; else e.onFrameRecorded(t.data); e.onStop && (o && e.audioBuffers.push(o), n && e.onStop(e.audioBuffers)) } , (d = c.createScriptProcessor(0, 1, 1)).onaudioprocess = function(e) { f.port.postMessage({ type: "message", data: e.inputBuffer.getChannelData(0) }) } , l.connect(d), d.connect(c.destination), c.resume(), null === (a = this.onStart) || void 0 === a || a.call(this), [3, 4]; case 3: // return p = t.sent(), // console.error(p), // [3, 4]; p = t.sent(); if (p instanceof Error) { throw p; // 抛出捕获的异常到外部,便于调用者进行处理 }else{ // console.error(p), return [3, 4]; } case 4: return [2] } } )) } )) } , o.prototype.stop = function() { var e, t, r, o; null === (e = this.audioWorklet) || void 0 === e || e.port.postMessage({ type: "stop" }), null === (t = this.audioTracks) || void 0 === t || t[0].stop(), "running" === (null === (r = this.audioContext) || void 0 === r ? void 0 : r.state) && (null === (o = this.audioContext) || void 0 === o || o.close()) } , o }() } ));