{"version":3,"sources":["jsdelivr-header.js","/npm/audiobuffer-arraybuffer-serializer@0.0.36/main.js"],"names":[],"mappings":"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","file":"/npm/audiobuffer-arraybuffer-serializer@0.0.36/main.js","sourceRoot":"","sourcesContent":["/**\n * Minified by jsDelivr using Terser v5.19.2.\n * Original file: /npm/audiobuffer-arraybuffer-serializer@0.0.36/main.js\n *\n * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files\n */\n","// audiobuffer-arraybuffer-serializer Version 0.0.36. Copyright 2018 Taito Suzuki <suzuito3@gmail.com>.\n'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nfunction generateAudioBuffer(conf) {\n  if (typeof AudioBuffer === 'undefined')\n    return new require('audio-buffer')(conf);\n  return new AudioBuffer(conf);\n}\n\nfunction isInstanceOfAudioBuffer(v) {\n  return (v.constructor.name === 'AudioBuffer');\n}\n\nclass InvalidBufferLengthError extends Error {\n  constructor(expected, real) {\n    super(`Expected buffer length is '${expected}' but real is '${real}'`);\n  }\n}\nclass InvalidAudioBufferLengthError extends Error {\n  constructor(expected, real) {\n    super(`Expected audio buffer length is '${expected}' but real is '${real}'`);\n  }\n}\nclass InvalidSampleRateError extends Error {\n  constructor(expected, real) {\n    super(`Expected audio buffer sampleRate is '${expected}' but real is '${real}'`);\n  }\n}\nclass InvalidNumberOfChannelsError extends Error {\n  constructor(expected, real) {\n    super(`Expected audio buffer numberOfChannels is '${expected}' but real is '${real}'`);\n  }\n}\nclass InvalidDurationError extends Error {}\n\nclass Base {\n  constructor(conf) {\n    if (conf.littleEndian)\n      this.littleEndian = conf.littleEndian;\n    else\n      this.littleEndian = true;\n  }\n  generateDestinationBuffer(src) {\n    throw new Error(`This method must be implemented: generateDestinationBuffer`);\n  }\n  validate(src, dst) {\n    throw new Error(`This method must be implemented: generateDestinationBuffer`);\n  }\n  each(src, dst) {\n    throw new Error(`This method must be implemented: generateDestinationBuffer`);\n  }\n  checkArgumentExecute(src, dst) {\n    throw new Error(`This method must be implemented: generateDestinationBuffer`);\n  }\n  execute(src, dst) {\n    this.checkSrcExecute(src);\n    if (dst === undefined) {\n      dst = this.generateDestinationBuffer(src);\n    }\n    this.checkDstExecute(dst);    \n    this.validate(src, dst);\n    return this.each(src, dst);\n  }\n}\n\n/** Configuration for Encoder/Decoder\n * @property {boolean} littleEndian - Specify whether use littleEndian or not.\n */\nclass Configuration {\n  constructor(littleEndian) {\n    this.littleEndian = littleEndian;\n  }\n}\n\n/** Serialize {@link https://developer.mozilla.org/en-US/docs/Web/API/AudioBuffer AudioBuffer} to {@link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/ArrayBuffer ArrayBuffer}.\n */\nclass Encoder extends Base {\n  /**\n   * @param {Configuration} conf Configuration object.\n   */\n  constructor(conf) {\n    if (!conf) conf = {};\n    super(conf);\n  }\n  generateDestinationBuffer(src) {\n    return generateDestinationBufferOnEncoder(src);\n  }\n  checkSrcExecute(src) {\n    if (isInstanceOfAudioBuffer(src) === false) { throw new TypeError(`'src' must be instance of AudioBuffer`); }\n  }\n  checkDstExecute(dst) {\n    if (dst instanceof ArrayBuffer === false) { throw new TypeError(`'dst' must be instance of ArrayBuffer`); }\n  }\n  each(src, dst) {\n    return encode(src, dst, this.littleEndian);\n  }\n  validate(src, dst) {\n    validateOnEncoder(src, dst);\n  }\n  /**\n   * Serialize AudioBuffer to ArrayBuffer.\n   * \n   * @param {AudioBuffer} src \n   * @param {ArrayBuffer} [dst] If not specified, generate ArrayBuffer object in this method.\n   * @return {ArrayBuffer}\n   * @throws {InvalidBufferLengthError} If dst.byteLength does not match buffer length to store src.\n   */\n  execute(src, dst) {\n    return super.execute(src, dst);\n  }\n}\n\nfunction generateDestinationBufferOnEncoder(src) {\n  return new ArrayBuffer(16 + (src.length * src.numberOfChannels * 4));\n}\nfunction validateOnEncoder(src, dst) {\n  \n  const lengthArrayBuffer =\n    16 /** 4 * 4 **/ +\n    (4 * src.length * src.numberOfChannels);\n  // console.log(lengthArrayBuffer);\n  if (lengthArrayBuffer !== dst.byteLength) { throw new InvalidBufferLengthError(lengthArrayBuffer, dst.byteLength); }\n}\nfunction encode(src, dst, littleEndian) {\n  let dv = new DataView(dst);\n  dv.setFloat32( 0,       src.sampleRate, littleEndian);\n  dv.setFloat32( 4,         src.duration, littleEndian);\n  dv.setUint32 ( 8,           src.length, littleEndian);\n  dv.setUint32 (12, src.numberOfChannels, littleEndian);\n  for (let c = 0; c < src.numberOfChannels; c++) {\n    const f64 = src.getChannelData(c);\n    for (let i = 0; i < f64.length; i++) {\n      let j = 16 + (c * src.length * 4) + (i * 4);\n      dv.setFloat32(j, f64[i], littleEndian);\n    }\n  }\n  return dst;\n}\n\n/** Deserialize {@link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/ArrayBuffer ArrayBuffer} to {@link https://developer.mozilla.org/en-US/docs/Web/API/AudioBuffer AudioBuffer}.\n */\nclass Decoder extends Base {\n  /**\n   * @param {Configuration} conf Configuration object.\n   */\n  constructor(conf) {\n    if (!conf) conf = {};\n    super(conf);\n  }\n  generateDestinationBuffer(src) {\n    return generateDestinationBufferOnDecoder(src, this.littleEndian);\n  }\n  checkSrcExecute(src) {\n    if (src instanceof ArrayBuffer === false) { throw new TypeError(`'src' must be instance of ArrayBuffer`); }\n  }\n  checkDstExecute(dst) {\n    if (isInstanceOfAudioBuffer(dst) === false) { throw new TypeError(`'dst' must be instance of AudioBuffer`); }\n  }\n  each(src, dst) {\n    return decode(src, dst, this.littleEndian);\n  }\n  validate(src, dst) {\n    validateOnDecoder(src, dst, this.littleEndian);\n  }\n  /**\n   * Deserialize ArrayBuffer to AudioBuffer.\n   * \n   * @param {ArrayBuffer} src \n   * @param {AudioBuffer} [dst] If not specified, generate AudioBuffer object in this method.\n   * @return {AudioBuffer}\n   * @throws {InvalidAudioBufferLengthError} If the length extracted from 'src' argument does not match dst.length.\n   * @throws {InvalidSampleRateError} If the sampleRate extracted from 'src' argument does not match dst.sampleRate.\n   * @throws {InvalidNumberOfChannelsError} If the numberOfChannels extracted from 'src' argument does not match dst.numberOfChannels.\n   */\n  execute(src, dst) {\n    return super.execute(src, dst);\n  }\n}\n\nfunction generateDestinationBufferOnDecoder(src, littleEndian) {\n  let dv = new DataView(src);\n  return generateAudioBuffer({\n    sampleRate: dv.getFloat32(0, littleEndian),\n    length: dv.getUint32(8, littleEndian),\n    numberOfChannels: dv.getUint32(12, littleEndian),\n  })\n}\nfunction validateOnDecoder(src, dst, littleEndian) {\n  const dv = new DataView(src);\n  const sampleRate = dv.getFloat32(0, littleEndian);\n  const duration = dv.getFloat32(4, littleEndian);\n  const length = dv.getUint32(8, littleEndian);\n  const numberOfChannels = dv.getUint32(12, littleEndian);\n  if (length !== dst.length) { throw new InvalidAudioBufferLengthError(length, dst.length); }\n  if (sampleRate !== dst.sampleRate) { throw new InvalidSampleRateError(sampleRate, dst.sampleRate); }\n  if (numberOfChannels !== dst.numberOfChannels) { throw new InvalidNumberOfChannelsError(numberOfChannels, dst.numberOfChannels); }\n  // if (duration !== dst.duration) { throw new InvalidDurationError(); }\n}\nfunction decode(src, dst, littleEndian) {\n  const dv = new DataView(src);\n  for (let c = 0; c < dst.numberOfChannels; c++) {\n    let f32 = new Float32Array(dst.length);\n    for (let i = 0; i < f32.length; i++) {\n      let j = 16 + (c * dst.length * 4) + (i * 4);\n      f32[i] = dv.getFloat32(j, littleEndian);\n    }\n    dst.copyToChannel(f32, c);\n  }\n  return dst;\n}\n\nclass ObjectKeyNotFoundError extends Error {\n  constructor(name, key) {\n    super(`'${name}' must have '${key}' property`);\n  }\n}\n\n/** Create an instance of ArrayBuffer from AudioBuffer object.\n * @function createArrayBuffer\n * @param {AudioBuffer} audioBuffer\n * @return {ArrayBuffer}\n */\n/** Create an instance of ArrayBuffer from specified configuration.\n * @function createArrayBuffer\n * @param {Object} conf Configuration object for initialization of ArrayBuffer.\n * @param {String} conf.length AudioBuffer.length property. {@link https://developer.mozilla.org/en-US/docs/Web/API/AudioBuffer see}\n * @param {String} conf.numberOfChannels AudioBuffer.numberOfChannels property. {@link https://developer.mozilla.org/en-US/docs/Web/API/AudioBuffer see}\n * @param {String} conf.sampleRate AudioBuffer.sampleRate property. {@link https://developer.mozilla.org/en-US/docs/Web/API/AudioBuffer see}\n * @return {ArrayBuffer}\n */\nfunction createArrayBuffer() {\n  if (typeof arguments[0] === 'object') {\n    let o = arguments[0];\n    if ('length' in o === false) throw new ObjectKeyNotFoundError('object', 'length');\n    if ('numberOfChannels' in o === false) throw new ObjectKeyNotFoundError('object', 'numberOfChannels');\n    if ('sampleRate' in o === false) throw new ObjectKeyNotFoundError('object', 'sampleRate');\n    return generateDestinationBufferOnEncoder(o);\n  }\n  throw new TypeError(`'arguments[0]' must be object`);\n}\n\nexports.InvalidBufferLengthError = InvalidBufferLengthError;\nexports.InvalidAudioBufferLengthError = InvalidAudioBufferLengthError;\nexports.InvalidSampleRateError = InvalidSampleRateError;\nexports.InvalidNumberOfChannelsError = InvalidNumberOfChannelsError;\nexports.InvalidDurationError = InvalidDurationError;\nexports.Configuration = Configuration;\nexports.Encoder = Encoder;\nexports.Decoder = Decoder;\nexports.ObjectKeyNotFoundError = ObjectKeyNotFoundError;\nexports.createArrayBuffer = createArrayBuffer;\n"]}