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,
                (function () {
                  let worker;
                  if (/http/.test(n)) {
                    const workerBlob = new Blob(
                      ['importScripts(' + JSON.stringify(n + '/processor.worker.js') + ')'],
                      { type: 'application/javascript' },
                    );
                    const blobUrl = window.URL.createObjectURL(workerBlob);
                    worker = new Worker(blobUrl);
                    worker.__blobUrl = blobUrl;
                  } else {
                    worker = new Worker(''.concat(n, '/processor.worker.js'));
                  }
                  return worker;
                })(),
              ];
        case 3:
          (e = t.sent()), (t.label = 4);
        case 4:
          return [2, { port: (o = e) }];
      }
    });
  });
}
var a = (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,
                    vol = r.vol,
                    n = r.isLastFrame;
                  if (f.port.__blobUrl) {
                    window.URL.revokeObjectURL(f.port.__blobUrl);
                    f.port.__blobUrl = null;
                  }
                  if (s && e.onFrameRecorded)
                    if (null == o ? void 0 : o.byteLength)
                      for (var a = 0; a < o.byteLength; )
                        e.onFrameRecorded({
                          vol,
                          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];
            case 4:
              return [2];
          }
        });
      });
    }),
    (o.prototype.stop = function () {
      var e, t, r, o;
      if (this.audioWorklet && this.audioWorklet.port && this.audioWorklet.port.__blobUrl) {
        window.URL.revokeObjectURL(this.audioWorklet.port.__blobUrl);
        this.audioWorklet.port.__blobUrl = null;
      }
      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
  );
})();
export { a as default };