carta1 1.2.0 → 1.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/codec/analysis/bands.js +41 -22
- package/codec/analysis/blocks.js +1 -1
- package/codec/analysis/spectrum.js +8 -8
- package/codec/core/constants.js +10 -1
- package/codec/core/tables.js +99 -1
- package/codec/dequantization.js +2 -2
- package/codec/index.js +4 -4
- package/codec/quantization/stage.js +6 -2
- package/codec/signal/fft.js +37 -38
- package/codec/signal/{spectrum.js → mdct.js} +37 -80
- package/codec/signal/order.js +16 -0
- package/codec/signal/qmf.js +539 -0
- package/codec/state.js +34 -14
- package/codec/synthesis/bands.js +36 -9
- package/codec/synthesis/pcm.js +35 -21
- package/dist/carta1-worker.min.js +1 -1
- package/dist/carta1-worker.min.js.map +1 -1
- package/dist/carta1.min.js +1 -1
- package/dist/carta1.min.js.map +1 -1
- package/package.json +1 -1
- package/codec/signal/bands.js +0 -108
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"carta1-worker.min.js","mappings":"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","sources":["webpack://carta1/./codec/core/constants.js","webpack://carta1/./codec/core/tables.js","webpack://carta1/./codec/boundary/container.js","webpack://carta1/./codec/core/options.js","webpack://carta1/./codec/syntax/bitstream.js","webpack://carta1/./codec/syntax/frame.js","webpack://carta1/./codec/boundary/pcm.js","webpack://carta1/./codec/quantization/spectrum.js","webpack://carta1/./codec/dequantization.js","webpack://carta1/./codec/state.js","webpack://carta1/./codec/utils.js","webpack://carta1/./codec/signal/fft.js","webpack://carta1/./codec/signal/spectrum.js","webpack://carta1/./codec/synthesis/bands.js","webpack://carta1/./codec/core/geometry.js","webpack://carta1/./codec/signal/bands.js","webpack://carta1/./codec/synthesis/pcm.js","webpack://carta1/./codec/synthesis/stage.js","webpack://carta1/./codec/pipeline/decoder.js","webpack://carta1/./codec/allocation/source.js","webpack://carta1/./codec/allocation/solve.js","webpack://carta1/./codec/allocation/stage.js","webpack://carta1/./codec/analysis/bands.js","webpack://carta1/./codec/analysis/blocks.js","webpack://carta1/./codec/analysis/spectrum.js","webpack://carta1/./codec/analysis/stage.js","webpack://carta1/./codec/quantization/stage.js","webpack://carta1/./codec/pipeline/encoder.js","webpack://carta1/./codec/boundary/stream.js","webpack://carta1/./codec/boundary/processor.js","webpack://carta1/./codec/boundary/worker.js"],"sourcesContent":["/**\n * Carta1 scalar format constants.\n */\n\nexport const SAMPLE_RATE = 44100\nexport const SAMPLES_PER_FRAME = 512\nexport const FRAME_RATE = SAMPLE_RATE / SAMPLES_PER_FRAME\n\nexport const AEA_HEADER_SIZE = 2048\nexport const AEA_TITLE_OFFSET = 4\nexport const AEA_TITLE_SIZE = 256\nexport const AEA_FRAME_COUNT_OFFSET = 260\nexport const AEA_CHANNEL_COUNT_OFFSET = 264\nexport const AEA_PRIMING_SAMPLE_COUNT_OFFSET = 268\nexport const AEA_SOURCE_SAMPLE_COUNT_OFFSET = 272\n\nexport const STREAM_PRIMING_SAMPLES = 266\nexport const STREAM_FLUSH_TAIL_FRAMES = 1\n\nexport const SOUND_UNIT_SIZE = 212\nexport const FRAME_BITS = SOUND_UNIT_SIZE * 8\nexport const FRAME_OVERHEAD_BITS = 40\nexport const BITRATE_PER_CHANNEL = SOUND_UNIT_SIZE * FRAME_RATE * 8\n\nexport const NUM_BFUS = 52\nexport const MAX_BFU_SIZE = 20\nexport const BITS_PER_BFU_METADATA = 10\nexport const BFU_AMOUNTS_COUNT = 8\n\nexport const MDCT_SIZE_SHORT = 64\nexport const MDCT_SIZE_MID = 256\nexport const MDCT_SIZE_LONG = 512\nexport const MDCT_SHORT_BLOCK_SIZE = 32\nexport const MDCT_OVERLAP_SIZE = 32\nexport const MDCT_TAIL_WINDOW_SIZE = 16\n\nexport const QMF_TAPS = 48\nexport const QMF_DELAY = 46\nexport const QMF_HIGH_BAND_DELAY = 39\n\nexport const FFT_SIZE_LOW = 128\nexport const FFT_SIZE_MID = 128\nexport const FFT_SIZE_HIGH = 256\n\nexport const WAV_HEADER_SIZE = 44\nexport const WAV_BYTES_PER_SAMPLE = 2\nexport const WAV_BITS_PER_SAMPLE = 16\nexport const WAV_PCM_MAX_POSITIVE = 0x7fff\nexport const WAV_PCM_MAX_NEGATIVE = 0x8000\nexport const WAV_DATA_OFFSET = 36\n\nexport const FRAME_HEADER_BITS = 16\nexport const FRAME_WORD_LENGTH_BITS = 4\nexport const FRAME_SCALE_FACTOR_BITS = 6\n\nexport const QUANTIZATION_SIGN_BIT_SHIFT = 1\nexport const MAX_WORD_LENGTH_INDEX = 15\n","/**\n * Stable ATRAC1 geometry, signal, allocation, and quantization tables.\n */\n\nimport { MAX_WORD_LENGTH_INDEX, QMF_TAPS } from './constants.js'\n\nexport const AEA_MAGIC = new Uint8Array([0x00, 0x08, 0x00, 0x00])\n\nexport const SPECS_PER_BFU = new Int32Array([\n 8, 8, 8, 8, 4, 4, 4, 4, 8, 8, 8, 8, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 7, 7,\n 7, 7, 9, 9, 9, 9, 10, 10, 10, 10, 12, 12, 12, 12, 12, 12, 12, 12, 20, 20, 20,\n 20, 20, 20, 20, 20,\n])\n\nexport const BFU_AMOUNTS = new Int32Array([20, 28, 32, 36, 40, 44, 48, 52])\nexport const BFU_BAND_BOUNDARIES = new Int32Array([20, 36, 52])\n\nexport const BFU_START_LONG = new Int32Array([\n 0, 8, 16, 24, 32, 36, 40, 44, 48, 56, 64, 72, 80, 86, 92, 98, 104, 110, 116,\n 122, 128, 134, 140, 146, 152, 159, 166, 173, 180, 189, 198, 207, 216, 226,\n 236, 246, 256, 268, 280, 292, 304, 316, 328, 340, 352, 372, 392, 412, 432,\n 452, 472, 492,\n])\n\nexport const BFU_START_SHORT = new Int32Array([\n 0, 32, 64, 96, 8, 40, 72, 104, 12, 44, 76, 108, 20, 52, 84, 116, 26, 58, 90,\n 122, 128, 160, 192, 224, 134, 166, 198, 230, 141, 173, 205, 237, 150, 182,\n 214, 246, 256, 288, 320, 352, 384, 416, 448, 480, 268, 300, 332, 364, 396,\n 428, 460, 492,\n])\n\nexport const WINDOW_SHORT = (() => {\n const table = new Float64Array(32)\n for (let i = 0; i < 32; i++) {\n table[i] = Math.sin(((i + 0.5) * Math.PI) / 64)\n }\n return table\n})()\n\nexport const QMF_COEFFS = new Float32Array([\n -0.00001461907, -0.00009205479, -0.000056157569, 0.00030117269, 0.0002422519,\n -0.00085293897, -0.0005205574, 0.0020340169, 0.00078333891, -0.0042153862,\n -0.00075614988, 0.0078402944, -0.000061169922, -0.01344162, 0.0024626821,\n 0.021736089, -0.007801671, -0.034090221, 0.01880949, 0.054326009,\n -0.043596379, -0.099384367, 0.13207909, 0.46424159,\n])\n\nexport const QMF_WINDOW = (() => {\n const window = new Float32Array(QMF_TAPS)\n for (let i = 0; i < 24; i++) {\n window[i] = QMF_COEFFS[i] * 2.0\n window[47 - i] = QMF_COEFFS[i] * 2.0\n }\n return window\n})()\n\nexport const QMF_EVEN = (() => {\n const even = new Float32Array(24)\n for (let i = 0; i < 24; i++) {\n even[i] = QMF_WINDOW[i * 2]\n }\n return even\n})()\n\nexport const QMF_ODD = (() => {\n const odd = new Float32Array(24)\n for (let i = 0; i < 24; i++) {\n odd[i] = QMF_WINDOW[i * 2 + 1]\n }\n return odd\n})()\n\nexport const MDCT_BAND_CONFIGS = [\n { size: 128, windowStart: 48 },\n { size: 128, windowStart: 48 },\n { size: 256, windowStart: 112 },\n]\n\nexport const WORD_LENGTH_BITS = new Int32Array([\n 0, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,\n])\n\nexport const SCALE_FACTORS = (() => {\n const table = new Float64Array(64)\n for (let i = 0; i < 64; i++) {\n table[i] = Math.pow(2.0, i / 3.0 - 21)\n }\n return table\n})()\n\nexport const INV_POWER_OF_TWO = (() => {\n const maxBits = WORD_LENGTH_BITS[MAX_WORD_LENGTH_INDEX]\n const table = new Float64Array(maxBits + 1)\n for (let bits = 0; bits <= maxBits; bits++) {\n table[bits] = Math.pow(2, -bits)\n }\n return table\n})()\n\nexport const WORD_LENGTH_DELTA_BITS = (() => {\n const table = new Int32Array(MAX_WORD_LENGTH_INDEX)\n for (let i = 0; i < MAX_WORD_LENGTH_INDEX; i++) {\n table[i] = (WORD_LENGTH_BITS[i + 1] - WORD_LENGTH_BITS[i]) | 0\n }\n return table\n})()\n\nexport const DISTORTION_DELTA_FACTORS = (() => {\n const table = new Float64Array(MAX_WORD_LENGTH_INDEX)\n table[0] = 2.0 - INV_POWER_OF_TWO[WORD_LENGTH_BITS[1]]\n for (let i = 1; i < MAX_WORD_LENGTH_INDEX; i++) {\n const bits1 = WORD_LENGTH_BITS[i] | 0\n const bits2 = WORD_LENGTH_BITS[i + 1] | 0\n table[i] = INV_POWER_OF_TWO[bits1] - INV_POWER_OF_TWO[bits2]\n }\n return table\n})()\n","/**\n * Carta1 AEA container boundary.\n */\n\nimport {\n AEA_CHANNEL_COUNT_OFFSET,\n AEA_FRAME_COUNT_OFFSET,\n AEA_HEADER_SIZE,\n AEA_PRIMING_SAMPLE_COUNT_OFFSET,\n AEA_SOURCE_SAMPLE_COUNT_OFFSET,\n AEA_TITLE_OFFSET,\n AEA_TITLE_SIZE,\n STREAM_PRIMING_SAMPLES,\n} from '../core/constants.js'\nimport { AEA_MAGIC } from '../core/tables.js'\n\n/**\n * AEA file-format handler.\n */\nexport class AeaFile {\n /**\n * Create an AEA header.\n *\n * @param {string} [title='']\n * @param {number} [frameCount=0]\n * @param {number} [channelCount=1]\n * @param {number} [sampleCount=0]\n * @param {number} [primingSampleCount=STREAM_PRIMING_SAMPLES]\n * @returns {Uint8Array}\n */\n static createHeader(\n title = '',\n frameCount = 0,\n channelCount = 1,\n sampleCount = 0,\n primingSampleCount = STREAM_PRIMING_SAMPLES\n ) {\n const header = new Uint8Array(AEA_HEADER_SIZE)\n const view = new DataView(header.buffer)\n header.set(AEA_MAGIC, 0)\n\n const titleBytes = new TextEncoder().encode(title)\n header.set(\n titleBytes.subarray(0, Math.min(titleBytes.length, AEA_TITLE_SIZE - 1)),\n AEA_TITLE_OFFSET\n )\n view.setUint32(AEA_FRAME_COUNT_OFFSET, frameCount, true)\n header[AEA_CHANNEL_COUNT_OFFSET] = channelCount\n view.setUint32(\n AEA_PRIMING_SAMPLE_COUNT_OFFSET,\n primingSampleCount >>> 0,\n true\n )\n view.setUint32(AEA_SOURCE_SAMPLE_COUNT_OFFSET, sampleCount >>> 0, true)\n return header\n }\n\n /**\n * Parse an AEA header.\n *\n * @param {Uint8Array} header\n * @returns {object} Container metadata.\n * @throws {Error} If the header is invalid\n */\n static parseHeader(header) {\n if (header.length !== AEA_HEADER_SIZE) {\n throw new Error(`Header must be ${AEA_HEADER_SIZE} bytes`)\n }\n\n for (let i = 0; i < AEA_MAGIC.length; i++) {\n if (header[i] !== AEA_MAGIC[i]) {\n throw new Error('Invalid AEA file')\n }\n }\n\n const view = new DataView(\n header.buffer,\n header.byteOffset,\n header.byteLength\n )\n const titleEnd = header.indexOf(0, AEA_TITLE_OFFSET)\n const titleLength =\n titleEnd === -1 ? AEA_TITLE_SIZE : titleEnd - AEA_TITLE_OFFSET\n const title = new TextDecoder().decode(\n header.subarray(AEA_TITLE_OFFSET, AEA_TITLE_OFFSET + titleLength)\n )\n\n return {\n title,\n frameCount: view.getUint32(AEA_FRAME_COUNT_OFFSET, true),\n channelCount: header[AEA_CHANNEL_COUNT_OFFSET],\n primingSampleCount: view.getUint32(AEA_PRIMING_SAMPLE_COUNT_OFFSET, true),\n sampleCount: view.getUint32(AEA_SOURCE_SAMPLE_COUNT_OFFSET, true),\n }\n }\n}\n","/**\n * Carta1 Audio Codec - Encoder Options\n *\n * This module provides configuration management for the ATRAC1 encoder,\n * including parameter validation and metadata for UI controls.\n */\n\n/**\n * Configuration options for the ATRAC1 encoder\n */\nclass EncoderOptions {\n /**\n * Create a new EncoderOptions instance\n * @param {Object} options - Initial option values\n */\n constructor(options = {}) {\n this.values = {\n transientThresholdLow: 1.0,\n transientThresholdMid: 1.5,\n transientThresholdHigh: 2.0,\n allocationBias: 1.0,\n fixedBlockModes: null,\n }\n\n this.metadata = {\n transientThresholdLow: {\n default: this.values.transientThresholdLow,\n name: 'Low Band Transient Threshold',\n description:\n 'Controls the transient detection threshold for the low frequency band (0-5.5kHz). Lower values make detection more sensitive, triggering short blocks more easily. Higher values require stronger transients.',\n range: [0.01, 2],\n step: 0.01,\n },\n transientThresholdMid: {\n default: this.values.transientThresholdMid,\n name: 'Mid Band Transient Threshold',\n description:\n 'Controls the transient detection threshold for the mid frequency band (5.5-11kHz). Lower values make detection more sensitive, triggering short blocks more easily. Higher values require stronger transients.',\n range: [0.01, 3],\n step: 0.01,\n },\n transientThresholdHigh: {\n default: this.values.transientThresholdHigh,\n name: 'High Band Transient Threshold',\n description:\n 'Controls the transient detection threshold for the high frequency band (11-22kHz). Lower values make detection more sensitive, triggering short blocks more easily. Higher values require stronger transients.',\n range: [0.01, 4],\n step: 0.01,\n },\n allocationBias: {\n default: this.values.allocationBias,\n name: 'Bit allocation bias',\n description:\n 'Controls how bits are distributed across the frequency spectrum during allocation. Higher values focus more bits on loud spectral components, while lower values spread bits more evenly across frequencies.',\n range: [0.0, 5.0],\n step: 0.01,\n },\n fixedBlockModes: {\n default: this.values.fixedBlockModes,\n name: 'Fixed block modes',\n description:\n 'Override transient detection and use fixed block modes. Format: [low, mid, high] where low/mid can be 0 or 2, high can be 0 or 3. When set, transient detection is skipped.',\n type: 'array',\n },\n }\n\n // Apply user-provided options\n if (options) {\n this.setOptions(options)\n }\n }\n\n /**\n * Set multiple options at once\n * @param {Object} options - Object containing option key-value pairs\n */\n setOptions(options) {\n for (const [key, value] of Object.entries(options)) {\n if (key in this.values) {\n this.setValue(key, value)\n }\n }\n }\n\n /**\n * Set a single option value with validation\n * @param {string} key - Option key\n * @param {*} value - Option value\n * @throws {Error} If key is unknown or value is out of range\n */\n setValue(key, value) {\n if (!(key in this.metadata)) {\n throw new Error(`Unknown option: ${key}`)\n }\n\n const meta = this.metadata[key]\n\n // Skip range validation for array types\n if (meta.type !== 'array') {\n const [min, max] = meta.range\n if (value < min || value > max) {\n throw new Error(\n `Value for ${key} must be between ${min} and ${max}, got ${value}`\n )\n }\n }\n\n this.values[key] = value\n }\n\n /**\n * Get the value of an option\n * @param {string} key - Option key\n * @returns {*} Option value\n * @throws {Error} If key is unknown\n */\n getValue(key) {\n if (!(key in this.values)) {\n throw new Error(`Unknown option: ${key}`)\n }\n return this.values[key]\n }\n\n get transientThresholdLow() {\n return this.values.transientThresholdLow\n }\n\n get transientThresholdMid() {\n return this.values.transientThresholdMid\n }\n\n get transientThresholdHigh() {\n return this.values.transientThresholdHigh\n }\n\n get allocationBias() {\n return this.values.allocationBias\n }\n\n get fixedBlockModes() {\n return this.values.fixedBlockModes\n }\n\n getMetadata(key) {\n return this.metadata[key]\n }\n\n getAllMetadata() {\n return { ...this.metadata }\n }\n\n reset() {\n for (const [key, meta] of Object.entries(this.metadata)) {\n this.values[key] = meta.default\n }\n }\n\n toObject() {\n return {\n values: { ...this.values },\n metadata: { ...this.metadata },\n }\n }\n}\n\nexport { EncoderOptions }\n","/**\n * Carta1 bitstream syntax operators.\n *\n * This module provides low-level bitstream packing and unpacking operations\n * for reading and writing ATRAC1 frame data with bit-level precision.\n */\n\n/**\n * Reject field widths outside the shared bitstream primitive's safe range.\n *\n * @param {number} bitCount\n * @returns {void}\n */\nfunction assertBitCount(bitCount) {\n if (!Number.isInteger(bitCount) || bitCount < 0 || bitCount > 32) {\n throw new RangeError(\n `Bit count must be an integer in 0..32, got ${bitCount}`\n )\n }\n}\n\n/**\n * Pack bits into a buffer at a specific bit position\n * @param {Uint8Array} buffer - Destination buffer\n * @param {number} bitPosition - Bit position to start writing at\n * @param {number} value - Value to pack\n * @param {number} bitCount - Number of bits to pack\n * @returns {void}\n */\nexport function packBits(buffer, bitPosition, value, bitCount) {\n assertBitCount(bitCount)\n if (bitCount === 0) return\n\n let byteIndex = Math.floor(bitPosition / 8)\n let bitOffset = bitPosition % 8\n\n const unsignedValue = Number(value) >>> 0\n\n let bitsWritten = 0\n while (bitsWritten < bitCount && byteIndex < buffer.length) {\n const bitsAvailable = 8 - bitOffset\n const bitsToWrite = Math.min(bitCount - bitsWritten, bitsAvailable)\n\n const shift = bitCount - bitsWritten - bitsToWrite\n const valueBits = (unsignedValue >>> shift) & (2 ** bitsToWrite - 1)\n\n const mask = (2 ** bitsToWrite - 1) << (bitsAvailable - bitsToWrite)\n buffer[byteIndex] =\n (buffer[byteIndex] & ~mask) | (valueBits << (bitsAvailable - bitsToWrite))\n\n bitsWritten += bitsToWrite\n byteIndex++\n bitOffset = 0\n }\n}\n\n/**\n * Unpack bits from a buffer at a specific bit position\n * @param {Uint8Array} buffer - Source buffer\n * @param {number} bitPosition - Bit position to start reading from\n * @param {number} bitCount - Number of bits to unpack\n * @returns {number} Unpacked unsigned value\n */\nexport function unpackBits(buffer, bitPosition, bitCount) {\n assertBitCount(bitCount)\n if (bitCount === 0) return 0\n\n let byteIndex = Math.floor(bitPosition / 8)\n let bitOffset = bitPosition % 8\n let value = 0\n\n for (let bitsRead = 0; bitsRead < bitCount && byteIndex < buffer.length;) {\n const bitsAvailable = 8 - bitOffset\n const bitsToRead = Math.min(bitCount - bitsRead, bitsAvailable)\n\n const mask = 2 ** bitsToRead - 1\n const bits = (buffer[byteIndex] >> (bitsAvailable - bitsToRead)) & mask\n\n value = (value * 2 ** bitsToRead + bits) >>> 0\n bitsRead += bitsToRead\n byteIndex++\n bitOffset = 0\n }\n\n return value\n}\n\n/**\n * Unpack signed bits from a buffer at a specific bit position\n * @param {Uint8Array} buffer - Source buffer\n * @param {number} bitPosition - Bit position to start reading from\n * @param {number} bitCount - Number of bits to unpack\n * @returns {number} Unpacked signed value (two's complement)\n */\nexport function unpackSignedBits(buffer, bitPosition, bitCount) {\n assertBitCount(bitCount)\n if (bitCount === 0) return 0\n const value = unpackBits(buffer, bitPosition, bitCount)\n const signBit = 2 ** (bitCount - 1)\n return value >= signBit ? value - 2 ** bitCount : value\n}\n","/**\n * Carta1 structured-frame syntax.\n *\n * Handles serialization and deserialization of ATRAC1 audio frames.\n * Provides functions for packing encoded frame data into binary format and unpacking\n * it back into structured data for processing.\n *\n * The module manages:\n * - Frame data serialization/deserialization with proper bit packing\n * - AEA file header creation and parsing\n * - Binary format compliance for ATRAC1 specification\n */\n\nimport {\n SOUND_UNIT_SIZE,\n FRAME_HEADER_BITS,\n FRAME_WORD_LENGTH_BITS,\n FRAME_SCALE_FACTOR_BITS,\n} from '../core/constants.js'\nimport { BFU_AMOUNTS, SPECS_PER_BFU, WORD_LENGTH_BITS } from '../core/tables.js'\nimport { packBits, unpackBits, unpackSignedBits } from './bitstream.js'\n\n/**\n * Serializes encoded frame data into binary format\n * @param {object} frameData - The encoded frame data to serialize\n * @returns {Uint8Array} Serialized frame data buffer\n */\nexport function serializeFrame(frameData) {\n const buffer = new Uint8Array(SOUND_UNIT_SIZE)\n const view = new DataView(buffer.buffer)\n\n // Pack header (16 bits)\n const bfuIndex = BFU_AMOUNTS.indexOf(frameData.nBfu)\n const header =\n ((2 - frameData.blockModes[0]) << 14) |\n ((2 - frameData.blockModes[1]) << 12) |\n ((3 - frameData.blockModes[2]) << 10) |\n (bfuIndex << 5)\n\n view.setUint16(0, header, false)\n let bitPosition = FRAME_HEADER_BITS\n\n // Pack word lengths (4 bits each)\n for (let i = 0; i < frameData.nBfu; i++) {\n packBits(\n buffer,\n bitPosition,\n frameData.wordLengthIndices[i],\n FRAME_WORD_LENGTH_BITS\n )\n bitPosition += FRAME_WORD_LENGTH_BITS\n }\n\n // Pack scale factors (6 bits each)\n for (let i = 0; i < frameData.nBfu; i++) {\n packBits(\n buffer,\n bitPosition,\n frameData.scaleFactorIndices[i],\n FRAME_SCALE_FACTOR_BITS\n )\n bitPosition += FRAME_SCALE_FACTOR_BITS\n }\n\n // Pack quantized coefficients\n for (let i = 0; i < frameData.nBfu; i++) {\n const bitsPerSample = WORD_LENGTH_BITS[frameData.wordLengthIndices[i]]\n if (bitsPerSample > 0) {\n const coefficients = frameData.quantizedCoefficients[i]\n for (const coefficient of coefficients) {\n const value =\n coefficient < 0 ? coefficient + (1 << bitsPerSample) : coefficient\n packBits(buffer, bitPosition, value, bitsPerSample)\n bitPosition += bitsPerSample\n }\n }\n }\n\n // Zero padding at end\n buffer[SOUND_UNIT_SIZE - 3] = 0\n buffer[SOUND_UNIT_SIZE - 2] = 0\n buffer[SOUND_UNIT_SIZE - 1] = 0\n\n return buffer\n}\n\n/**\n * Deserializes binary frame data back into structured format\n * @param {Uint8Array} buffer - Binary frame data buffer\n * @returns {object} Deserialized frame data\n * @throws {Error} If buffer size is invalid\n */\nexport function deserializeFrame(buffer) {\n if (buffer.length !== SOUND_UNIT_SIZE) {\n throw new Error(`Frame must be ${SOUND_UNIT_SIZE} bytes`)\n }\n\n const view = new DataView(buffer.buffer, buffer.byteOffset, buffer.byteLength)\n\n // Unpack header\n const header = view.getUint16(0, false)\n const blockModes = [\n 2 - ((header >> 14) & 3),\n 2 - ((header >> 12) & 3),\n 3 - ((header >> 10) & 3),\n ]\n const bfuIndex = (header >> 5) & 7\n const nBfu = BFU_AMOUNTS[bfuIndex]\n\n let bitPosition = FRAME_HEADER_BITS\n\n // Unpack word lengths\n const wordLengthIndices = new Int32Array(nBfu)\n for (let i = 0; i < nBfu; i++) {\n wordLengthIndices[i] = unpackBits(\n buffer,\n bitPosition,\n FRAME_WORD_LENGTH_BITS\n )\n bitPosition += FRAME_WORD_LENGTH_BITS\n }\n\n // Unpack scale factors\n const scaleFactorIndices = new Int32Array(nBfu)\n for (let i = 0; i < nBfu; i++) {\n scaleFactorIndices[i] = unpackBits(\n buffer,\n bitPosition,\n FRAME_SCALE_FACTOR_BITS\n )\n bitPosition += FRAME_SCALE_FACTOR_BITS\n }\n\n // Unpack coefficients\n const quantizedCoefficients = []\n for (let i = 0; i < nBfu; i++) {\n const bitsPerSample = WORD_LENGTH_BITS[wordLengthIndices[i]]\n const bfuSize = SPECS_PER_BFU[i]\n const coefficients = new Int32Array(bfuSize)\n\n if (bitsPerSample > 0) {\n for (let j = 0; j < bfuSize; j++) {\n coefficients[j] = unpackSignedBits(buffer, bitPosition, bitsPerSample)\n bitPosition += bitsPerSample\n }\n }\n\n quantizedCoefficients.push(coefficients)\n }\n\n return {\n nBfu,\n scaleFactorIndices,\n wordLengthIndices,\n quantizedCoefficients,\n blockModes,\n }\n}\n","/**\n * Carta1 PCM boundary conversions.\n */\n\nimport {\n SAMPLE_RATE,\n SAMPLES_PER_FRAME,\n WAV_BITS_PER_SAMPLE,\n WAV_BYTES_PER_SAMPLE,\n WAV_DATA_OFFSET,\n WAV_HEADER_SIZE,\n WAV_PCM_MAX_NEGATIVE,\n WAV_PCM_MAX_POSITIVE,\n} from '../core/constants.js'\n\n/**\n * Write a four-character code.\n *\n * @param {DataView} output\n * @param {number} offset\n * @param {string} value\n */\nfunction writeFourCc(output, offset, value) {\n for (let i = 0; i < value.length; i++) {\n output.setUint8(offset + i, value.charCodeAt(i))\n }\n}\n\n/**\n * Join complete PCM frames into one channel.\n *\n * @param {Float32Array[]} frames\n * @returns {Float32Array}\n */\nexport function joinChannelFrames(frames) {\n const sampleCount = frames.reduce((total, frame) => total + frame.length, 0)\n const channel = new Float32Array(sampleCount)\n let offset = 0\n\n for (const frame of frames) {\n channel.set(frame, offset)\n offset += frame.length\n }\n return channel\n}\n\n/**\n * Split planar PCM buffers into complete zero-padded codec frames.\n *\n * @param {Float32Array[]} buffers\n * @param {number} [frameSize=SAMPLES_PER_FRAME]\n * @returns {Generator<Float32Array>|Generator<[Float32Array, Float32Array]>}\n * @throws {Error} If the channel count is unsupported\n */\nexport function* frameBufferToFrames(buffers, frameSize = SAMPLES_PER_FRAME) {\n if (\n !Array.isArray(buffers) ||\n (buffers.length !== 1 && buffers.length !== 2) ||\n !buffers.every(\n (buffer) =>\n buffer instanceof Float32Array && buffer.length === buffers[0].length\n ) ||\n !Number.isInteger(frameSize) ||\n frameSize < 1\n ) {\n throw new RangeError(\n 'ATRAC1 framing requires one or two equally sized Float32 channels and a positive integer frame size'\n )\n }\n if (buffers.length === 1) {\n const [left] = buffers\n for (let offset = 0; offset < left.length; offset += frameSize) {\n const frame = new Float32Array(frameSize)\n frame.set(left.subarray(offset, offset + frameSize))\n yield frame\n }\n return\n }\n\n if (buffers.length === 2) {\n const [left, right] = buffers\n const sampleCount = left.length\n for (let offset = 0; offset < sampleCount; offset += frameSize) {\n const leftFrame = new Float32Array(frameSize)\n const rightFrame = new Float32Array(frameSize)\n leftFrame.set(left.subarray(offset, offset + frameSize))\n rightFrame.set(right.subarray(offset, offset + frameSize))\n yield [leftFrame, rightFrame]\n }\n return\n }\n}\n\n/**\n * Convert one normalized sample to signed PCM16.\n *\n * @param {number} sample\n * @returns {number}\n */\nexport function floatToPcm16(sample) {\n const clipped = Math.max(-1, Math.min(1, sample))\n return clipped < 0\n ? clipped * WAV_PCM_MAX_NEGATIVE\n : clipped * WAV_PCM_MAX_POSITIVE\n}\n\n/**\n * Create a PCM WAVE header.\n *\n * @param {Object} options\n * @param {number} options.sampleCount\n * @param {number} options.sampleRate\n * @param {number} options.channels\n * @returns {Uint8Array}\n */\nexport function createPcmWaveHeader({ sampleCount, sampleRate, channels }) {\n const byteRate = sampleRate * channels * WAV_BYTES_PER_SAMPLE\n const blockAlign = channels * WAV_BYTES_PER_SAMPLE\n const dataSize = sampleCount * blockAlign\n const output = new Uint8Array(WAV_HEADER_SIZE)\n const view = new DataView(output.buffer)\n\n writeFourCc(view, 0, 'RIFF')\n view.setUint32(4, WAV_DATA_OFFSET + dataSize, true)\n writeFourCc(view, 8, 'WAVE')\n writeFourCc(view, 12, 'fmt ')\n view.setUint32(16, 16, true)\n view.setUint16(20, 1, true)\n view.setUint16(22, channels, true)\n view.setUint32(24, sampleRate, true)\n view.setUint32(28, byteRate, true)\n view.setUint16(32, blockAlign, true)\n view.setUint16(34, WAV_BITS_PER_SAMPLE, true)\n writeFourCc(view, 36, 'data')\n view.setUint32(40, dataSize, true)\n return output\n}\n\n/**\n * Interleave planar normalized channels as PCM16.\n *\n * @param {Float32Array[]} channels\n * @returns {Uint8Array}\n */\nexport function interleavePcm16(channels) {\n if (\n !Array.isArray(channels) ||\n channels.length < 1 ||\n !channels.every(\n (channel) =>\n channel instanceof Float32Array && channel.length === channels[0].length\n )\n ) {\n throw new RangeError('PCM must contain equally sized Float32 channels')\n }\n const sampleCount = channels[0].length\n const output = new Uint8Array(\n sampleCount * channels.length * WAV_BYTES_PER_SAMPLE\n )\n const view = new DataView(output.buffer)\n let offset = 0\n\n for (let sample = 0; sample < sampleCount; sample++) {\n for (const channel of channels) {\n view.setInt16(offset, floatToPcm16(channel[sample]), true)\n offset += WAV_BYTES_PER_SAMPLE\n }\n }\n return output\n}\n\n/**\n * Create a complete PCM WAVE byte image from planar channels.\n *\n * @param {Float32Array[]} channels\n * @param {Object} [options]\n * @param {number} [options.sampleRate=SAMPLE_RATE]\n * @returns {Uint8Array}\n */\nexport function createPcmWave(channels, options = {}) {\n const { sampleRate = SAMPLE_RATE } = options\n const pcm = interleavePcm16(channels)\n const sampleCount = channels[0].length\n const header = createPcmWaveHeader({\n sampleCount,\n sampleRate,\n channels: channels.length,\n })\n const output = new Uint8Array(header.length + pcm.length)\n output.set(header)\n output.set(pcm, header.length)\n return output\n}\n","/**\n * Carta1 Audio Codec - Spectrum Quantization\n *\n * This module handles the quantization and dequantization of MDCT frequency coefficients\n * for the Carta1 audio codec. It provides functions to convert floating-point frequency\n * domain data into integer representations suitable for bitstream encoding.\n *\n * The quantization process uses configurable scale factors to maintain audio quality\n * while achieving the target compression ratio. The module supports both uniform\n * and non-uniform quantization schemes based on perceptual importance.\n */\n\nimport { QUANTIZATION_SIGN_BIT_SHIFT } from '../core/constants.js'\nimport { SCALE_FACTORS } from '../core/tables.js'\n\n/**\n * Quantize coefficients.\n * @param {Float32Array} coefficients\n * @param {number} scaleFactorIndex\n * @param {number} bitsPerSample\n * @returns {Int32Array} out\n */\nexport function quantize(coefficients, scaleFactorIndex, bitsPerSample) {\n const length = coefficients.length\n const out = new Int32Array(length)\n if (bitsPerSample === 0 || scaleFactorIndex === 0) {\n out.fill(0, 0, length)\n return out\n }\n\n const scaleFactor = SCALE_FACTORS[scaleFactorIndex]\n const quantRange = (1 << (bitsPerSample - QUANTIZATION_SIGN_BIT_SHIFT)) - 1\n const normFactor = quantRange / scaleFactor\n\n const hi = quantRange\n const lo = -quantRange\n\n for (let i = 0; i < length; i++) {\n const x = coefficients[i] * normFactor\n const y = (x + (x >= 0 ? 0.5 : -0.5)) | 0\n out[i] = y > hi ? hi : y < lo ? lo : y\n }\n\n return out\n}\n\n/**\n * Dequantize coefficients.\n * @param {Int32Array} quantized\n * @param {number} scaleFactorIndex\n * @param {number} bitsPerSample\n * @returns {Float32Array}\n */\nexport function dequantize(quantized, scaleFactorIndex, bitsPerSample) {\n if (bitsPerSample === 0 || scaleFactorIndex === 0) {\n return new Float32Array(quantized.length)\n }\n\n const scaleFactor = SCALE_FACTORS[scaleFactorIndex]\n const quantRange = (1 << (bitsPerSample - QUANTIZATION_SIGN_BIT_SHIFT)) - 1\n\n const deq = new Float32Array(quantized.length)\n for (let i = 0; i < quantized.length; i++) {\n deq[i] = (quantized[i] * scaleFactor) / quantRange\n }\n return deq\n}\n","/**\n * Carta1 dequantization stage.\n */\n\nimport {\n BFU_BAND_BOUNDARIES,\n BFU_START_LONG,\n BFU_START_SHORT,\n WORD_LENGTH_BITS,\n} from './core/tables.js'\nimport { dequantize as dequantizeCoefficient } from './quantization/spectrum.js'\n\n/**\n * Reconstruct the continuous ATRAC1 spectrum.\n *\n * @returns {Function}\n */\nexport function dequantize() {\n /**\n * @param {object} frameData\n * @returns {object}\n */\n return (frameData) => {\n const coefficients = new Float32Array(512)\n const {\n nBfu,\n scaleFactorIndices,\n wordLengthIndices,\n quantizedCoefficients,\n blockModes,\n } = frameData\n\n for (let bfu = 0; bfu < nBfu; bfu++) {\n const bitsPerSample = WORD_LENGTH_BITS[wordLengthIndices[bfu]]\n let band = 0\n if (bfu >= BFU_BAND_BOUNDARIES[0]) band = 1\n if (bfu >= BFU_BAND_BOUNDARIES[1]) band = 2\n\n const position =\n blockModes[band] === 0 ? BFU_START_LONG[bfu] : BFU_START_SHORT[bfu]\n\n if (bitsPerSample > 0) {\n const dequantized = dequantizeCoefficient(\n quantizedCoefficients[bfu],\n scaleFactorIndices[bfu],\n bitsPerSample\n )\n coefficients.set(dequantized, position)\n }\n }\n\n return { coefficients, blockModes }\n }\n}\n","/**\n * Carta1 stream state and reusable scratch.\n */\n\nimport { QMF_DELAY, QMF_HIGH_BAND_DELAY } from './core/constants.js'\n\n/**\n * Values with meaning across chronological frames.\n */\nclass History {\n constructor() {\n this.qmfDelays = {\n lowBand: new Float32Array(QMF_DELAY),\n midBand: new Float32Array(QMF_DELAY),\n highBand: new Float32Array(QMF_HIGH_BAND_DELAY),\n }\n\n this.transientDetection = [\n new Float32Array(64),\n new Float32Array(64),\n new Float32Array(128),\n ]\n\n this.mdctOverlap = [\n new Float32Array(32),\n new Float32Array(32),\n new Float32Array(32),\n ]\n\n this.imdctOverlap = [\n new Float32Array(256),\n new Float32Array(256),\n new Float32Array(512),\n ]\n }\n}\n\n/**\n * Reusable storage with no meaning between operations.\n */\nclass Scratch {\n constructor() {\n this.transformBuffers = {\n 64: new Float32Array(64),\n 128: new Float32Array(128),\n 256: new Float32Array(256),\n 512: new Float32Array(512),\n }\n\n this.qmfWorkBuffers = {\n delay: {\n 128: new Float32Array(QMF_DELAY + 128),\n 256: new Float32Array(QMF_DELAY + 256),\n 512: new Float32Array(QMF_DELAY + 512),\n },\n highBandDelay: {\n 128: new Float32Array(QMF_HIGH_BAND_DELAY + 128),\n 256: new Float32Array(QMF_HIGH_BAND_DELAY + 256),\n },\n }\n\n this.mdctBuffers = {\n 16: {\n real: new Float32Array(16),\n imag: new Float32Array(16),\n },\n 64: {\n real: new Float32Array(64),\n imag: new Float32Array(64),\n },\n 128: {\n real: new Float32Array(128),\n imag: new Float32Array(128),\n },\n }\n\n this.reversalBuffers = {\n 32: new Float32Array(32),\n 128: new Float32Array(128),\n 256: new Float32Array(256),\n }\n }\n}\n\n/**\n * Own one chronological stream's history and reusable storage.\n */\nexport class BufferPool {\n constructor() {\n Object.assign(this, new History(), new Scratch())\n }\n}\n","/**\n * Carta1 Audio Codec - Utilities\n *\n * This module provides common utility functions for the ATRAC1 codec.\n */\n\n/**\n * Throws an error with the given message\n * @param {string} msg - Error message\n * @throws {Error} Always throws an error with the provided message\n */\nexport function throwError(msg) {\n throw new Error(msg)\n}\n\n/**\n * Compose stateful stage factories once and return the reusable frame path.\n *\n * @param {*} context Shared stage ownership and persistent state.\n * @param {...Function} stages Ordered stage factories.\n * @returns {Function} Reusable composed frame operation.\n */\nexport function pipe(context, ...stages) {\n const operations = stages.map((stage) => stage(context))\n return (input) =>\n operations.reduce((value, operation) => operation(value), input)\n}\n","/**\n * Carta1 Fast Fourier Transform operator.\n *\n * This module implements a radix-2 Cooley-Tukey FFT algorithm for frequency domain\n * analysis used in psychoacoustic modeling and transient detection.\n */\n\nexport class FFT {\n /**\n * Perform in-place FFT on complex data\n * @param {Float32Array} real - Real part of input/output data\n * @param {Float32Array} imag - Imaginary part of input/output data\n */\n static fft(real, imag) {\n const size = real.length\n if (size === 1) return\n\n const bits = Math.log2(size)\n\n // Bit reversal\n for (let i = 0; i < size; i++) {\n let reversed = 0\n let temp = i\n for (let b = 0; b < bits; b++) {\n reversed = (reversed << 1) | (temp & 1)\n temp >>= 1\n }\n if (reversed > i) {\n ;[real[i], real[reversed]] = [real[reversed], real[i]]\n ;[imag[i], imag[reversed]] = [imag[reversed], imag[i]]\n }\n }\n\n // Cooley-Tukey decimation-in-time\n for (let stride = 2; stride <= size; stride <<= 1) {\n const halfStride = stride >> 1\n const angle = (-2 * Math.PI) / stride\n const wReal = Math.cos(angle)\n const wImag = Math.sin(angle)\n\n for (let start = 0; start < size; start += stride) {\n let twiddleReal = 1\n let twiddleImag = 0\n\n for (let k = 0; k < halfStride; k++) {\n const evenIndex = start + k\n const oddIndex = evenIndex + halfStride\n\n const evenReal = real[evenIndex]\n const evenImag = imag[evenIndex]\n const oddReal = real[oddIndex]\n const oddImag = imag[oddIndex]\n\n const tReal = oddReal * twiddleReal - oddImag * twiddleImag\n const tImag = oddReal * twiddleImag + oddImag * twiddleReal\n\n real[evenIndex] = evenReal + tReal\n imag[evenIndex] = evenImag + tImag\n real[oddIndex] = evenReal - tReal\n imag[oddIndex] = evenImag - tImag\n\n const nextReal = twiddleReal * wReal - twiddleImag * wImag\n twiddleImag = twiddleReal * wImag + twiddleImag * wReal\n twiddleReal = nextReal\n }\n }\n }\n }\n}\n","/**\n * Carta1 spectrum signal operators.\n *\n * This module implements forward and inverse MDCT transforms for the ATRAC1 codec.\n * The MDCT provides time-frequency analysis with perfect reconstruction and\n * 50% overlap between adjacent blocks to avoid blocking artifacts.\n */\n\nimport { FFT } from './fft.js'\nimport {\n MDCT_SIZE_SHORT,\n MDCT_SIZE_MID,\n MDCT_SIZE_LONG,\n} from '../core/constants.js'\nimport { throwError } from '../utils.js'\n\n/**\n * Base class for MDCT and IMDCT transforms\n */\nclass MDCTBase {\n constructor(size, scale) {\n this.size = size\n this.halfSize = size >> 1\n this.quarterSize = size >> 2\n this.fftSize = this.halfSize >> 1\n\n const alpha = (2.0 * Math.PI) / (8.0 * size)\n const omega = (2.0 * Math.PI) / size\n const scaleRoot = Math.sqrt(scale / size)\n\n this.sinCosTable = new Float64Array(this.halfSize)\n for (let i = 0; i < this.quarterSize; i++) {\n const angle = omega * i + alpha\n this.sinCosTable[i * 2] = scaleRoot * Math.cos(angle)\n this.sinCosTable[i * 2 + 1] = scaleRoot * Math.sin(angle)\n }\n }\n}\n\n/**\n * Forward MDCT transform\n */\nexport class MDCT extends MDCTBase {\n constructor(size, scale) {\n super(size, scale)\n }\n\n /**\n * Perform forward MDCT transform\n * @param {Float32Array} input - Time-domain input samples\n * @param {Object} mdctBuffers - Optional work buffers for FFT\n * @returns {Float32Array} Frequency-domain MDCT coefficients\n */\n transform(input, mdctBuffers = null) {\n const buffers =\n mdctBuffers?.[this.fftSize] ??\n throwError(`MDCT.transform: mdctBuffers[${this.fftSize}] is required`)\n const real =\n buffers?.real ??\n throwError(\n `MDCT.transform: mdctBuffers[${this.fftSize}].real is required`\n )\n const imag =\n buffers?.imag ??\n throwError(\n `MDCT.transform: mdctBuffers[${this.fftSize}].imag is required`\n )\n\n const n4 = this.quarterSize\n const n34 = 3 * n4\n\n real.fill(0)\n imag.fill(0)\n\n // Pre-FFT butterfly\n for (let i = 0; i < n4; i += 2) {\n const i1 = n34 - 1 - i\n const i2 = n34 + i\n const i3 = n4 + i\n const i4 = n4 - 1 - i\n\n const r = input[i1] + input[i2]\n const im = input[i3] - input[i4]\n const c = this.sinCosTable[i]\n const s = this.sinCosTable[i + 1]\n\n real[i >> 1] = r * c + im * s\n imag[i >> 1] = im * c - r * s\n }\n\n for (let i = n4; i < this.halfSize; i += 2) {\n const idx = i >> 1\n const i1 = n34 - 1 - i\n const i2 = i - n4\n const i3 = n4 + i\n const i4 = 5 * n4 - 1 - i\n\n const r = input[i1] - input[i2]\n const im = input[i3] + input[i4]\n const c = this.sinCosTable[i]\n const s = this.sinCosTable[i + 1]\n\n real[idx] = r * c + im * s\n imag[idx] = im * c - r * s\n }\n\n FFT.fft(real, imag)\n\n // Post-FFT processing\n const output = new Float32Array(this.halfSize)\n for (let i = 0; i < this.fftSize; i++) {\n const c = this.sinCosTable[i * 2]\n const s = this.sinCosTable[i * 2 + 1]\n const re = real[i]\n const im = imag[i]\n\n output[i * 2] = -re * c - im * s\n output[this.halfSize - 1 - i * 2] = -re * s + im * c\n }\n\n return output\n }\n}\n\n/**\n * Inverse MDCT transform\n */\nexport class IMDCT extends MDCTBase {\n constructor(size, scale = null) {\n super(size, scale || size)\n }\n\n /**\n * Perform inverse MDCT transform\n * @param {Float32Array} input - Frequency-domain MDCT coefficients\n * @param {Object} mdctBuffers - Optional work buffers for FFT\n * @returns {Float32Array} Time-domain output samples\n */\n transform(input, mdctBuffers = null) {\n const buffers =\n mdctBuffers?.[this.fftSize] ??\n throwError(`IMDCT.transform: mdctBuffers[${this.fftSize}] is required`)\n const real =\n buffers?.real ??\n throwError(\n `IMDCT.transform: mdctBuffers[${this.fftSize}].real is required`\n )\n const imag =\n buffers?.imag ??\n throwError(\n `IMDCT.transform: mdctBuffers[${this.fftSize}].imag is required`\n )\n\n const n4 = this.quarterSize\n const n34 = 3 * n4\n\n real.fill(0)\n imag.fill(0)\n\n // Pre-FFT processing\n for (let i = 0; i < this.fftSize; i++) {\n const i2 = i * 2\n const r = -input[i2]\n const im = -input[this.halfSize - 1 - i2]\n const c = this.sinCosTable[i2]\n const s = this.sinCosTable[i2 + 1]\n\n real[i] = im * s + r * c\n imag[i] = im * c - r * s\n }\n\n FFT.fft(real, imag)\n\n // Post-FFT butterfly\n const output = new Float32Array(this.size)\n\n for (let i = 0; i < this.fftSize / 2; i++) {\n const i2 = i * 2\n const c = this.sinCosTable[i2]\n const s = this.sinCosTable[i2 + 1]\n const re = real[i]\n const im = imag[i]\n\n const r1 = re * c + im * s\n const i1 = re * s - im * c\n\n output[n34 - 1 - i2] = r1\n output[n34 + i2] = r1\n output[n4 + i2] = i1\n output[n4 - 1 - i2] = -i1\n }\n\n for (let i = this.fftSize / 2; i < this.fftSize; i++) {\n const idx = (i - this.fftSize / 2) * 2 + n4\n const i2 = i * 2\n const c = this.sinCosTable[i2]\n const s = this.sinCosTable[i2 + 1]\n const re = real[i]\n const im = imag[i]\n\n const r1 = re * c + im * s\n const i1 = re * s - im * c\n\n output[n34 - 1 - idx] = r1\n output[idx - n4] = -r1\n output[n4 + idx] = i1\n output[5 * n4 - 1 - idx] = i1\n }\n\n return output\n }\n}\n\n// Pre-instantiated transforms\nexport const mdct64 = new MDCT(MDCT_SIZE_SHORT, 0.5)\nexport const mdct256 = new MDCT(MDCT_SIZE_MID, 0.5)\nexport const mdct512 = new MDCT(MDCT_SIZE_LONG, 1.0)\n\nexport const imdct64 = new IMDCT(MDCT_SIZE_SHORT, MDCT_SIZE_SHORT * 8)\nexport const imdct256 = new IMDCT(MDCT_SIZE_MID, MDCT_SIZE_MID * 8)\nexport const imdct512 = new IMDCT(MDCT_SIZE_LONG, MDCT_SIZE_LONG * 4)\n\n/**\n * Perform overlap-add operation for MDCT reconstruction\n * @param {Float32Array} prev - Previous block samples\n * @param {Float32Array} curr - Current block samples\n * @param {Float32Array} window - Window function coefficients\n * @returns {Float32Array} Overlap-added output samples\n */\nexport function overlapAdd(prev, curr, window) {\n const size = prev.length\n const output = new Float32Array(size * 2)\n\n for (let i = 0; i < size; i++) {\n const w1 = window[i]\n const w2 = window[2 * size - 1 - i]\n const p = prev[i]\n const c = curr[size - 1 - i]\n\n output[i] = p * w2 - c * w1\n output[2 * size - 1 - i] = p * w1 + c * w2\n }\n\n return output\n}\n\n/**\n * Reverse spectral order for ATRAC1 mid and high bands.\n *\n * @param {Float32Array} spectrum\n * @param {Object} reversalBuffers\n * @returns {Float32Array}\n */\nexport function reverseSpectrum(spectrum, reversalBuffers) {\n const reversed = reversalBuffers[spectrum.length]\n for (let i = 0; i < spectrum.length; i++) {\n reversed[i] = spectrum[spectrum.length - 1 - i]\n }\n return reversed\n}\n","/**\n * Carta1 spectral synthesis application.\n */\n\nimport {\n MDCT_SHORT_BLOCK_SIZE,\n MDCT_SIZE_LONG,\n MDCT_TAIL_WINDOW_SIZE,\n} from '../core/constants.js'\nimport { extractBandCoefficients } from '../core/geometry.js'\nimport { MDCT_BAND_CONFIGS, WINDOW_SHORT } from '../core/tables.js'\nimport {\n imdct64,\n imdct256,\n imdct512,\n overlapAdd,\n reverseSpectrum,\n} from '../signal/spectrum.js'\nimport { throwError } from '../utils.js'\n\n/**\n * Synthesize time-domain bands from the ATRAC1 spectrum.\n *\n * @param {object} context\n * @returns {Function}\n * @throws {Error} If the buffer pool is missing\n */\nexport function synthesizeSpectrum(context) {\n const bufferPool =\n context?.bufferPool ??\n throwError('synthesizeSpectrum: bufferPool is required')\n const overlapBuffers = bufferPool.imdctOverlap\n const transformFunctions = [imdct256, imdct256, imdct512]\n\n /**\n * @param {Float32Array} coefficients\n * @param {number} bandIndex\n * @param {number} blockMode\n * @param {Float32Array} overlapBuffer\n * @param {Object} config\n * @returns {Float32Array}\n */\n function transformBand(\n coefficients,\n bandIndex,\n blockMode,\n overlapBuffer,\n config\n ) {\n if (blockMode === 0) {\n return inverseLongBlock(\n coefficients,\n bandIndex,\n overlapBuffer,\n config,\n transformFunctions[bandIndex]\n )\n }\n\n return inverseShortBlocks(coefficients, bandIndex, overlapBuffer, config)\n }\n\n /**\n * @param {Float32Array} coefficients\n * @param {number} bandIndex\n * @param {Float32Array} overlapBuffer\n * @param {Object} config\n * @param {Object} transformFunction\n * @returns {Float32Array}\n */\n function inverseLongBlock(\n coefficients,\n bandIndex,\n overlapBuffer,\n config,\n transformFunction\n ) {\n let blockSpectrum = coefficients\n if (bandIndex > 0) {\n blockSpectrum = reverseSpectrum(coefficients, bufferPool.reversalBuffers)\n }\n\n const inverse = transformFunction.transform(\n blockSpectrum,\n bufferPool.mdctBuffers\n )\n const inverseStart = inverse.length / 4\n const inverseBuffer = bufferPool.transformBuffers[MDCT_SIZE_LONG]\n inverseBuffer.fill(0)\n\n for (let i = 0; i < config.size; i++) {\n inverseBuffer[i] = inverse[inverseStart + i]\n }\n\n const previous = overlapBuffer.slice(\n config.size * 2 - MDCT_TAIL_WINDOW_SIZE,\n config.size * 2\n )\n const overlap = overlapAdd(\n previous.slice(0, MDCT_TAIL_WINDOW_SIZE),\n inverseBuffer.slice(0, MDCT_TAIL_WINDOW_SIZE),\n WINDOW_SHORT\n )\n overlapBuffer.set(overlap, 0)\n\n for (let i = 0; i < MDCT_TAIL_WINDOW_SIZE; i++) {\n previous[i] = inverseBuffer[MDCT_TAIL_WINDOW_SIZE + i]\n }\n\n const copyLength = bandIndex === 2 ? 240 : 112\n for (let i = 0; i < copyLength; i++) {\n overlapBuffer[32 + i] = inverseBuffer[MDCT_TAIL_WINDOW_SIZE + i]\n }\n\n for (let i = 0; i < MDCT_TAIL_WINDOW_SIZE; i++) {\n overlapBuffer[config.size * 2 - MDCT_TAIL_WINDOW_SIZE + i] =\n inverseBuffer[config.size - MDCT_TAIL_WINDOW_SIZE + i]\n }\n\n return overlapBuffer.slice(0, config.size)\n }\n\n /**\n * @param {Float32Array} coefficients\n * @param {number} bandIndex\n * @param {Float32Array} overlapBuffer\n * @param {Object} config\n * @returns {Float32Array}\n */\n function inverseShortBlocks(coefficients, bandIndex, overlapBuffer, config) {\n const numBlocks = 1 << (config.size === 256 ? 3 : 2)\n const inverseBuffer = bufferPool.transformBuffers[MDCT_SIZE_LONG]\n inverseBuffer.fill(0)\n\n const previous = overlapBuffer.slice(\n config.size * 2 - MDCT_TAIL_WINDOW_SIZE,\n config.size * 2\n )\n let start = 0\n let position = 0\n\n for (let block = 0; block < numBlocks; block++) {\n let blockSpectrum = coefficients.slice(\n position,\n position + MDCT_SHORT_BLOCK_SIZE\n )\n if (bandIndex > 0) {\n blockSpectrum = reverseSpectrum(\n blockSpectrum,\n bufferPool.reversalBuffers\n )\n }\n\n const inverse = imdct64.transform(blockSpectrum, bufferPool.mdctBuffers)\n const inverseStart = inverse.length / 4\n for (let i = 0; i < MDCT_SHORT_BLOCK_SIZE; i++) {\n inverseBuffer[start + i] = inverse[inverseStart + i]\n }\n\n const overlap = overlapAdd(\n previous.slice(0, MDCT_TAIL_WINDOW_SIZE),\n inverseBuffer.slice(start, start + MDCT_TAIL_WINDOW_SIZE),\n WINDOW_SHORT\n )\n overlapBuffer.set(overlap, start)\n\n for (let i = 0; i < MDCT_TAIL_WINDOW_SIZE; i++) {\n previous[i] = inverseBuffer[start + MDCT_TAIL_WINDOW_SIZE + i]\n }\n\n start += MDCT_SHORT_BLOCK_SIZE\n position += MDCT_SHORT_BLOCK_SIZE\n }\n\n for (let i = 0; i < MDCT_TAIL_WINDOW_SIZE; i++) {\n overlapBuffer[config.size * 2 - MDCT_TAIL_WINDOW_SIZE + i] =\n inverseBuffer[config.size - MDCT_TAIL_WINDOW_SIZE + i]\n }\n\n return overlapBuffer.slice(0, config.size)\n }\n\n /**\n * @param {object} input\n * @returns {Array<Float32Array>}\n */\n return (input) => {\n const { coefficients, blockModes } = input\n\n return MDCT_BAND_CONFIGS.map((config, bandIndex) => {\n const bandCoefficients = extractBandCoefficients(coefficients, bandIndex)\n return transformBand(\n bandCoefficients,\n bandIndex,\n blockModes[bandIndex],\n overlapBuffers[bandIndex],\n config\n )\n })\n }\n}\n","/**\n * Stable ATRAC1 spectral geometry.\n */\n\n/**\n * Calculate a band's offset in the 512-coefficient spectrum.\n *\n * @param {number} bandIndex\n * @returns {number}\n */\nexport function calculateBandOffset(bandIndex) {\n return bandIndex === 0 ? 0 : bandIndex === 1 ? 128 : 256\n}\n\n/**\n * Extract one band from the full coefficient spectrum.\n *\n * @param {Float32Array} coefficients\n * @param {number} bandIndex\n * @returns {Float32Array}\n */\nexport function extractBandCoefficients(coefficients, bandIndex) {\n const offsets = [0, 128, 256, 512]\n return coefficients.subarray(offsets[bandIndex], offsets[bandIndex + 1])\n}\n","/**\n * Carta1 Audio Codec - Quadrature Mirror Filter\n *\n * This module implements QMF analysis and synthesis for subband decomposition\n * in the ATRAC1 codec. The QMF splits the audio signal into multiple frequency\n * bands for independent processing and coding.\n */\n\nimport { QMF_DELAY } from '../core/constants.js'\nimport { QMF_EVEN, QMF_ODD } from '../core/tables.js'\nimport { throwError } from '../utils.js'\n\n/**\n * Perform QMF analysis filtering to split input into low and high frequency bands\n * @param {Float32Array} input - Input audio samples\n * @param {Float32Array} delayLine - QMF delay line state\n * @param {Object} qmfWorkBuffers - Optional work buffers for processing\n * @returns {Object} Object containing lowBand, highBand, and newDelay\n */\nexport function analyzeQmfPair(input, delayLine, qmfWorkBuffers = null) {\n const inputLength = input.length\n const outputLength = inputLength >> 1\n\n const workBuffer =\n qmfWorkBuffers?.delay?.[inputLength] ??\n throwError(\n `analyzeQmfPair: qmfWorkBuffers.delay[${inputLength}] is required`\n )\n workBuffer.set(delayLine)\n workBuffer.set(input, delayLine.length)\n\n const lowBand = new Float32Array(outputLength)\n const highBand = new Float32Array(outputLength)\n\n for (let i = 0; i < outputLength; i++) {\n let evenSum = 0\n let oddSum = 0\n const offset = i * 2\n\n // Unrolled convolution\n for (let j = 0; j < 24; j++) {\n evenSum += workBuffer[offset + 47 - j * 2] * QMF_EVEN[j]\n oddSum += workBuffer[offset + 46 - j * 2] * QMF_ODD[j]\n }\n\n lowBand[i] = evenSum + oddSum\n highBand[i] = evenSum - oddSum\n }\n\n // Update delay line\n const newDelay = workBuffer.slice(-QMF_DELAY)\n return { lowBand, highBand, newDelay }\n}\n\n/**\n * Perform QMF synthesis filtering to reconstruct audio from low and high frequency bands\n * @param {Float32Array} lowBand - Low frequency band samples\n * @param {Float32Array} highBand - High frequency band samples\n * @param {Float32Array} delayLine - QMF delay line state\n * @param {Object} qmfWorkBuffers - Optional work buffers for processing\n * @returns {Object} Object containing output and newDelay\n */\nexport function synthesizeQmfPair(\n lowBand,\n highBand,\n delayLine,\n qmfWorkBuffers = null\n) {\n const subbandLength = lowBand.length\n const outputLength = subbandLength * 2\n\n const workBuffer =\n qmfWorkBuffers?.delay?.[outputLength] ??\n throwError(\n `synthesizeQmfPair: qmfWorkBuffers.delay[${outputLength}] is required`\n )\n workBuffer.set(delayLine)\n\n // Upsample and merge\n for (let i = 0; i < subbandLength; i++) {\n const low = lowBand[i]\n const high = highBand[i]\n const offset = QMF_DELAY + i * 2\n workBuffer[offset] = 0.5 * (low + high)\n workBuffer[offset + 1] = 0.5 * (low - high)\n }\n\n const output = new Float32Array(outputLength)\n\n // Convolution\n for (let i = 0; i < subbandLength; i++) {\n const offset = i * 2\n let sample0 = 0\n let sample1 = 0\n\n for (let j = 0; j < 24; j++) {\n const idx = offset + j * 2\n sample0 += workBuffer[idx] * QMF_EVEN[j]\n sample1 += workBuffer[idx + 1] * QMF_ODD[j]\n }\n\n output[i * 2] = sample1\n output[i * 2 + 1] = sample0\n }\n\n const newDelay = workBuffer.slice(-QMF_DELAY)\n return { output, newDelay }\n}\n","/**\n * Carta1 PCM synthesis application.\n */\n\nimport { synthesizeQmfPair } from '../signal/bands.js'\nimport { throwError } from '../utils.js'\n\n/**\n * Synthesize full-spectrum PCM from frequency bands.\n *\n * @param {object} context\n * @returns {Function}\n * @throws {Error} If the buffer pool is missing\n */\nexport function synthesizePcm(context) {\n const bufferPool =\n context?.bufferPool ?? throwError('synthesizePcm: bufferPool is required')\n const delays = bufferPool.qmfDelays\n\n /**\n * @param {Array<Float32Array>} bands\n * @returns {Float32Array}\n */\n return (bands) => {\n const delayedHigh = bufferPool.qmfWorkBuffers.highBandDelay[bands[2].length]\n delayedHigh.set(delays.highBand)\n delayedHigh.set(bands[2], delays.highBand.length)\n\n const highBand = delayedHigh.slice(0, bands[0].length * 2)\n delays.highBand = delayedHigh.slice(bands[0].length * 2)\n\n const stage2 = synthesizeQmfPair(\n bands[0],\n bands[1],\n delays.midBand,\n bufferPool.qmfWorkBuffers\n )\n delays.midBand = stage2.newDelay\n\n const stage1 = synthesizeQmfPair(\n stage2.output,\n highBand,\n delays.lowBand,\n bufferPool.qmfWorkBuffers\n )\n delays.lowBand = stage1.newDelay\n\n return stage1.output\n }\n}\n","/**\n * Carta1 synthesis stage.\n */\n\nimport { pipe } from '../utils.js'\nimport { synthesizeSpectrum } from './bands.js'\nimport { synthesizePcm } from './pcm.js'\n\n/**\n * Synthesize PCM from the dequantized ATRAC1 spectrum.\n *\n * @param {object} context\n * @returns {Function}\n */\nexport function synthesize(context) {\n return pipe(context, synthesizeSpectrum, synthesizePcm)\n}\n","/**\n * Carta1 Audio Codec - Decoding Pipeline\n *\n * The frame pipeline reads as dequantization, then synthesis. Byte unpacking\n * remains the responsibility of deserializeFrame().\n */\n\nimport { dequantize } from '../dequantization.js'\nimport { BufferPool } from '../state.js'\nimport { synthesize } from '../synthesis/stage.js'\nimport { pipe } from '../utils.js'\n\n/**\n * Create an ATRAC1 decoder.\n *\n * @param {BufferPool} [bufferPool=new BufferPool()]\n * @returns {Function}\n */\nexport function decode(bufferPool = new BufferPool()) {\n const context = { bufferPool }\n return pipe(context, dequantize, synthesize)\n}\n","/**\n * Carta1 allocation-source preparation.\n */\n\nimport {\n BFU_BAND_BOUNDARIES,\n BFU_START_LONG,\n BFU_START_SHORT,\n SPECS_PER_BFU,\n} from '../core/tables.js'\n\n/**\n * Group spectral coefficients into block floating units.\n *\n * @param {Float32Array} coefficients\n * @param {Array<number>} blockModes\n * @returns {object} Grouped bit-frequency units.\n */\nexport function groupIntoBFUs(coefficients, blockModes) {\n const bfuData = []\n const bfuSizes = []\n let coeffIndex = 0\n let bfuIndex = 0\n\n for (let band = 0; band < 3; band++) {\n const bandStart = coeffIndex\n const bandSize = band === 2 ? 256 : 128\n const bandEnd = band < 2 ? BFU_BAND_BOUNDARIES[band] : SPECS_PER_BFU.length\n const startPositions =\n blockModes[band] === 0 ? BFU_START_LONG : BFU_START_SHORT\n\n while (bfuIndex < bandEnd) {\n const size = SPECS_PER_BFU[bfuIndex]\n const startPos = startPositions[bfuIndex] - bandStart\n const endPos = startPos + size\n const bfu = new Float32Array(size)\n\n if (startPos >= 0 && endPos <= bandSize) {\n bfu.set(coefficients.subarray(bandStart + startPos, bandStart + endPos))\n } else if (startPos < bandSize && endPos > 0) {\n const srcStart = Math.max(0, startPos)\n const srcEnd = Math.min(bandSize, endPos)\n bfu.set(\n coefficients.subarray(bandStart + srcStart, bandStart + srcEnd),\n Math.max(0, -startPos)\n )\n }\n\n bfuData.push(bfu)\n bfuSizes.push(size)\n bfuIndex++\n }\n\n coeffIndex += bandSize\n }\n\n return { bfuData, bfuSizes, bfuCount: bfuIndex }\n}\n\n/**\n * Prepare the spectrum as an allocation source.\n *\n * @param {Float32Array} coefficients\n * @param {Array<number>} blockModes\n * @returns {object} Allocation source.\n */\nexport function prepare(coefficients, blockModes) {\n return groupIntoBFUs(coefficients, blockModes)\n}\n","/**\n * Carta1 Audio Codec - Bit Allocation Module\n *\n * This module implements the bit allocation system for the Carta1 audio codec,\n * responsible for distributing available bits across frequency bands to minimize\n * perceptual distortion while maintaining the target bitrate.\n *\n * The module uses Rate-Distortion Optimization (RDO) by searching over a\n * predefined set of valid Band Frequency Unit (BFU) counts. For each count,\n * it performs a greedy bit distribution to find the best allocation. This\n * approach optimally trades off the cost of encoding more frequency bands\n * (metadata overhead) against the benefit of reducing truncation distortion.\n *\n * Key components:\n * - RDO search over valid BFU counts to select the optimal number of bands.\n * - Greedy bit allocation for a fixed BFU count using a max-heap.\n * - Exponential distortion modeling based on scale factors.\n * - Support for variable word lengths per BFU.\n *\n * The algorithm ensures that the codec dynamically adapts the encoded bandwidth\n * to best match the signal characteristics for the given bitrate.\n */\n\nimport {\n NUM_BFUS,\n FRAME_BITS,\n FRAME_OVERHEAD_BITS,\n BITS_PER_BFU_METADATA,\n MAX_WORD_LENGTH_INDEX,\n} from '../core/constants.js'\nimport {\n WORD_LENGTH_BITS,\n INV_POWER_OF_TWO,\n SCALE_FACTORS,\n BFU_AMOUNTS,\n WORD_LENGTH_DELTA_BITS,\n DISTORTION_DELTA_FACTORS,\n} from '../core/tables.js'\n\nconst biasedScaleFactorCache = new Map()\n\n/**\n * Builds and returns a cached table of biased scale factors.\n *\n * @param {number} bias\n * @returns {Float64Array}\n */\nfunction buildBiasedScaleFactorTable(bias) {\n if (biasedScaleFactorCache.has(bias)) {\n return biasedScaleFactorCache.get(bias)\n }\n\n const out = new Float64Array(64)\n if (bias === 1) {\n out.set(SCALE_FACTORS)\n } else {\n for (let i = 0; i < 64; i++) {\n out[i] = Math.pow(SCALE_FACTORS[i], bias)\n }\n }\n biasedScaleFactorCache.set(bias, out)\n return out\n}\n\n/**\n * Evaluate one legal active-BFU count.\n *\n * @param {number} activeBfuCount\n * @param {number} maxBfuCount\n * @param {Int32Array} bfuSizes\n * @param {number} remainingBits\n * @param {Float64Array} biasedScaleFactors\n * @param {Int32Array} allScaleFactorIndices\n * @param {Float32Array} zeroBitDistortions\n * @returns {object} Allocation result.\n */\nfunction search(\n activeBfuCount,\n maxBfuCount,\n bfuSizes,\n remainingBits,\n biasedScaleFactors,\n allScaleFactorIndices,\n zeroBitDistortions\n) {\n const allocation = distributeBits(\n activeBfuCount,\n bfuSizes,\n remainingBits,\n biasedScaleFactors,\n allScaleFactorIndices\n )\n const distortion = measureDistortion(\n activeBfuCount,\n maxBfuCount,\n bfuSizes,\n allocation.wordLengths,\n allocation.scaleFactorIndices,\n biasedScaleFactors,\n zeroBitDistortions\n )\n return { distortion, ...allocation }\n}\n\n/**\n * Calculates the total distortion for a given allocation.\n * This includes quantization distortion for coded bands and truncation\n * distortion for uncoded bands.\n * @param {number} activeBfuCount\n * @param {number} maxBfuCount\n * @param {Int32Array} bfuSizes\n * @param {Int32Array} wordLengths\n * @param {Int32Array} scaleFactorIndices\n * @param {number} biasedScaleFactors\n * @param {Float32Array} zeroBitDistortions\n * @returns {number}\n */\nfunction measureDistortion(\n activeBfuCount,\n maxBfuCount,\n bfuSizes,\n wordLengths,\n scaleFactorIndices,\n biasedScaleFactors,\n zeroBitDistortions\n) {\n let totalDistortion = 0.0\n\n for (let i = 0; i < activeBfuCount; i++) {\n const wl = wordLengths[i] | 0\n const bits = WORD_LENGTH_BITS[wl] | 0\n if (bits === 0) {\n totalDistortion += zeroBitDistortions[i]\n continue\n }\n\n const sfi = scaleFactorIndices[i]\n if (sfi === 0) continue\n\n const effectiveScaleFactor = biasedScaleFactors[sfi]\n const distortionFactor = INV_POWER_OF_TWO[bits]\n\n totalDistortion += effectiveScaleFactor * distortionFactor * bfuSizes[i]\n }\n\n for (let i = activeBfuCount; i < maxBfuCount; i++) {\n totalDistortion += zeroBitDistortions[i]\n }\n\n return totalDistortion\n}\n\n/**\n * Distributes available bits across Band Frequency Units (BFUs) using Rate-Distortion Optimization.\n * (Modified to accept pre-calculated scale factors)\n *\n * @param {number} activeBfuCount\n * @param {Int32Array} bfuSizes\n * @param {number} remainingBits\n * @param {Float64Array} biasedScaleFactors\n * @param {Int32Array} allScaleFactorIndices\n * @returns {object} Retained allocation decisions.\n */\nfunction distributeBits(\n activeBfuCount,\n bfuSizes,\n remainingBits,\n biasedScaleFactors,\n allScaleFactorIndices\n) {\n const wordLengths = new Int32Array(activeBfuCount)\n\n const heapIndices = new Int32Array(activeBfuCount)\n const heapPriorities = new Float32Array(activeBfuCount)\n let heapSize = 0\n\n for (let bfuIndex = 0; bfuIndex < activeBfuCount; bfuIndex++) {\n const sz = bfuSizes[bfuIndex] | 0\n if (sz === 0) continue\n\n const sfi = allScaleFactorIndices[bfuIndex]\n if (sfi === 0) continue\n\n const deltaBits = WORD_LENGTH_DELTA_BITS[0]\n if (deltaBits <= 0) continue\n\n const distortionDelta =\n biasedScaleFactors[sfi] * DISTORTION_DELTA_FACTORS[0]\n\n heapIndices[heapSize] = bfuIndex\n heapPriorities[heapSize] = distortionDelta / deltaBits\n heapSize++\n }\n\n if (heapSize === 0) {\n return { wordLengths, scaleFactorIndices: allScaleFactorIndices }\n }\n\n // Heapify\n for (let i = (heapSize >> 1) - 1; i >= 0; i--) {\n siftDown(heapIndices, heapPriorities, i, heapSize)\n }\n\n // Greedy spending loop\n while (remainingBits > 0 && heapSize > 0) {\n const bfu = heapIndices[0]\n const cur = wordLengths[bfu] | 0\n const sz = bfuSizes[bfu] | 0\n const deltaBits = WORD_LENGTH_DELTA_BITS[cur]\n const cost = deltaBits * sz\n\n if (cost > remainingBits || cost <= 0) {\n const last = heapSize - 1\n heapIndices[0] = heapIndices[last]\n heapPriorities[0] = heapPriorities[last]\n heapSize--\n if (heapSize > 0) siftDown(heapIndices, heapPriorities, 0, heapSize)\n continue\n }\n\n remainingBits -= cost\n const nxt = cur + 1\n wordLengths[bfu] = nxt\n\n const deltaBitsNext = WORD_LENGTH_DELTA_BITS[nxt]\n if (nxt < MAX_WORD_LENGTH_INDEX && deltaBitsNext > 0) {\n const sfi = allScaleFactorIndices[bfu]\n const distortionDelta =\n biasedScaleFactors[sfi] * DISTORTION_DELTA_FACTORS[nxt]\n heapPriorities[0] = distortionDelta / deltaBitsNext\n siftDown(heapIndices, heapPriorities, 0, heapSize)\n } else {\n const last = heapSize - 1\n heapIndices[0] = heapIndices[last]\n heapPriorities[0] = heapPriorities[last]\n heapSize--\n if (heapSize > 0) siftDown(heapIndices, heapPriorities, 0, heapSize)\n }\n }\n\n return { wordLengths, scaleFactorIndices: allScaleFactorIndices }\n}\n\n/**\n * Restores max-heap property by sifting an element down from a given position.\n *\n * This function maintains the heap invariant where parent nodes have higher\n * priority values than their children. It compares the element at startIndex\n * with its children and swaps with the larger child until the heap property\n * is satisfied, or it reaches a leaf position.\n *\n * @param {Int32Array} heapIndices\n * @param {Float32Array} heapPriorities\n * @param {number} startIndex\n * @param {number} heapSize\n */\nfunction siftDown(heapIndices, heapPriorities, startIndex, heapSize) {\n let i = startIndex\n const idxVal = heapIndices[i]\n const prVal = heapPriorities[i]\n\n while (true) {\n const l = (i << 1) + 1\n const r = l + 1\n let maxI = i\n let maxP = prVal\n\n if (l < heapSize && heapPriorities[l] > maxP) {\n maxI = l\n maxP = heapPriorities[l]\n }\n if (r < heapSize && heapPriorities[r] > maxP) {\n maxI = r\n }\n if (maxI === i) break\n\n heapIndices[i] = heapIndices[maxI]\n heapPriorities[i] = heapPriorities[maxI]\n i = maxI\n }\n\n heapIndices[i] = idxVal\n heapPriorities[i] = prVal\n}\n\n/**\n * Allocate bits by finding the optimal BFU count and distribution using RDO.\n * This function searches through the valid BFU counts to find the one that\n * minimizes the total perceptual distortion.\n *\n * @param {Array<Float32Array>} bfuData\n * @param {Int32Array} bfuSizes\n * @param {number} maxBfuCount\n * @param {number} allocationBias\n * @returns {{bfuCount:number, allocation:Int32Array, scaleFactorIndices:Int32Array}}\n */\nexport function solve(bfuData, bfuSizes, maxBfuCount, allocationBias) {\n const allScaleFactorIndices = new Int32Array(maxBfuCount)\n const zeroBitDistortions = new Float32Array(maxBfuCount)\n const biasedScaleFactors = buildBiasedScaleFactorTable(allocationBias)\n\n for (let i = 0; i < maxBfuCount; i++) {\n const sz = bfuSizes[i] | 0\n if (sz === 0) continue\n\n const sfi = findScaleFactor(bfuData[i], sz)\n allScaleFactorIndices[i] = sfi\n if (sfi > 0) {\n const effectiveScaleFactor = biasedScaleFactors[sfi]\n zeroBitDistortions[i] = effectiveScaleFactor * 2.0 * sz\n }\n }\n\n let bestResult = null\n let minTotalDistortion = Infinity\n\n for (const candidateBfuCount of BFU_AMOUNTS) {\n if (candidateBfuCount > maxBfuCount) continue\n\n const availableBits =\n FRAME_BITS -\n FRAME_OVERHEAD_BITS -\n candidateBfuCount * BITS_PER_BFU_METADATA\n\n if (availableBits < 0) continue\n\n const result = search(\n candidateBfuCount,\n maxBfuCount,\n bfuSizes,\n availableBits,\n biasedScaleFactors,\n allScaleFactorIndices,\n zeroBitDistortions\n )\n\n if (result.distortion < minTotalDistortion) {\n minTotalDistortion = result.distortion\n bestResult = {\n bfuCount: candidateBfuCount,\n allocation: result.wordLengths,\n scaleFactorIndices: result.scaleFactorIndices,\n }\n }\n }\n\n if (!bestResult) {\n const fallbackBfuCount = BFU_AMOUNTS[0]\n return {\n bfuCount: fallbackBfuCount,\n allocation: new Int32Array(fallbackBfuCount),\n scaleFactorIndices: new Int32Array(NUM_BFUS),\n }\n }\n\n return bestResult\n}\n\n/**\n * Find the optimal scale factor index for a set of coefficients.\n * Same semantics as the original.\n * @param {Float32Array} coefficients\n * @param {number} length\n * @returns {number}\n */\nexport function findScaleFactor(coefficients, length) {\n let maxAmplitude = 0.0\n for (let i = 0; i < length; i++) {\n const a = Math.abs(coefficients[i])\n if (a > maxAmplitude) maxAmplitude = a\n }\n if (maxAmplitude === 0) return 0\n const index = Math.ceil(3 * (Math.log2(maxAmplitude) + 21))\n return Math.max(0, Math.min(63, index))\n}\n","/**\n * Carta1 allocation stage.\n */\n\nimport { throwError } from '../utils.js'\nimport { prepare } from './source.js'\nimport { solve } from './solve.js'\n\n/**\n * Allocate the frame budget across block floating units.\n *\n * @param {object} context\n * @returns {Function}\n */\nexport function allocate(context) {\n const options =\n context?.options ?? throwError('allocate: options is required')\n\n /**\n * @param {object} input\n * @returns {object}\n */\n return (input) => {\n const { coefficients, blockModes } = input\n const { bfuData, bfuSizes, bfuCount } = prepare(coefficients, blockModes)\n const result = solve(bfuData, bfuSizes, bfuCount, options.allocationBias)\n const nBfu = result.bfuCount\n\n return {\n bfuData,\n bfuSizes,\n nBfu,\n scaleFactorIndices: result.scaleFactorIndices.slice(0, nBfu),\n wordLengthIndices: result.allocation.slice(0, nBfu),\n blockModes,\n }\n }\n}\n","/**\n * Carta1 QMF analysis application.\n */\n\nimport { analyzeQmfPair } from '../signal/bands.js'\nimport { throwError } from '../utils.js'\n\n/**\n * Split PCM into the three ATRAC1 frequency bands.\n *\n * @param {object} context\n * @returns {Function}\n * @throws {Error} If the buffer pool is missing\n */\nexport function analyzeBands(context) {\n const bufferPool =\n context?.bufferPool ?? throwError('analyzeBands: bufferPool is required')\n const delays = bufferPool.qmfDelays\n\n /**\n * @param {Float32Array} pcmSamples\n * @returns {object}\n */\n return (pcmSamples) => {\n const stage1 = analyzeQmfPair(\n pcmSamples,\n delays.lowBand,\n bufferPool.qmfWorkBuffers\n )\n delays.lowBand = stage1.newDelay\n\n const stage2 = analyzeQmfPair(\n stage1.lowBand,\n delays.midBand,\n bufferPool.qmfWorkBuffers\n )\n delays.midBand = stage2.newDelay\n\n const delayedHigh =\n bufferPool.qmfWorkBuffers.highBandDelay[stage1.highBand.length]\n delayedHigh.set(delays.highBand)\n delayedHigh.set(stage1.highBand, delays.highBand.length)\n\n const highBand = delayedHigh.slice(0, stage1.highBand.length)\n delays.highBand = delayedHigh.slice(stage1.highBand.length)\n\n return { bands: [stage2.lowBand, stage2.highBand, highBand] }\n }\n}\n","/**\n * Carta1 Audio Codec - Transient Detection Module\n *\n * Detects transients using spectral flux analysis to prevent pre-echo artifacts.\n * Combines multiple spectral features to identify sudden changes in signal\n * characteristics that require special handling during encoding.\n */\n\nimport { FFT_SIZE_HIGH, FFT_SIZE_LOW, FFT_SIZE_MID } from '../core/constants.js'\nimport { FFT } from '../signal/fft.js'\nimport { throwError } from '../utils.js'\n\n/**\n * Calculate all spectral features for transient detection\n * @param {Float32Array} currentCoeffs - Current frame coefficients\n * @param {Float32Array} prevCoeffs - Previous frame coefficients\n * @returns {Object} Computed spectral features\n */\nfunction calculateSpectralFeatures(currentCoeffs, prevCoeffs) {\n // Calculate spectral flux (positive differences only)\n const spectralFlux = calculateSpectralFlux(currentCoeffs, prevCoeffs)\n\n // Calculate spectral flatness for both frames\n const currentFlatness = calculateSpectralFlatness(currentCoeffs)\n const prevFlatness = calculateSpectralFlatness(prevCoeffs)\n const flatnessChange = Math.abs(currentFlatness - prevFlatness)\n\n // Calculate high-frequency content ratio\n const currentHfRatio = calculateHighFrequencyRatio(currentCoeffs)\n const prevHfRatio = calculateHighFrequencyRatio(prevCoeffs)\n const hfChange = Math.abs(currentHfRatio - prevHfRatio)\n\n // Calculate energy change in dB\n const energyChange = calculateEnergyChange(currentCoeffs, prevCoeffs)\n\n return {\n spectralFlux,\n flatnessChange,\n hfChange,\n energyChange,\n }\n}\n\n/**\n * Calculate normalized spectral flux (positive spectral differences)\n * High values indicate sudden onset of new spectral components\n */\nfunction calculateSpectralFlux(currentCoeffs, prevCoeffs) {\n let flux = 0\n let currentEnergy = 0\n\n for (let i = 0; i < currentCoeffs.length; i++) {\n const currentMag = Math.abs(currentCoeffs[i])\n const prevMag = Math.abs(prevCoeffs[i])\n\n // Only count positive differences (new energy)\n const diff = currentMag - prevMag\n if (diff > 0) {\n flux += diff\n }\n\n currentEnergy += currentMag * currentMag\n }\n\n // Normalize by current frame energy to make threshold independent of level\n const normalization = Math.sqrt(currentEnergy) || 1e-6\n return flux / normalization\n}\n\n/**\n * Calculate spectral flatness (geometric mean / arithmetic mean)\n * Measures how noise-like vs tonal the spectrum is\n * @param {Float32Array} coeffs - Spectral coefficients\n * @returns {number} Flatness measure (0 = tonal, 1 = noise-like)\n */\nfunction calculateSpectralFlatness(coeffs) {\n const EPSILON = 1e-10\n let sumLog = 0\n let sumLinear = 0\n let validBins = 0\n\n for (let i = 0; i < coeffs.length; i++) {\n const magnitude = Math.abs(coeffs[i])\n if (magnitude > EPSILON) {\n sumLog += Math.log(magnitude)\n sumLinear += magnitude\n validBins++\n }\n }\n\n if (validBins === 0) return 0\n\n const geometricMean = Math.exp(sumLog / validBins)\n const arithmeticMean = sumLinear / validBins\n\n return arithmeticMean > EPSILON ? geometricMean / arithmeticMean : 0\n}\n\n/**\n * Calculate ratio of high-frequency to total energy\n * High values indicate bright/harsh sounds that are perceptually important\n * @param {Float32Array} coeffs - Spectral coefficients\n * @returns {number} High-frequency energy ratio (0-1)\n */\nfunction calculateHighFrequencyRatio(coeffs) {\n const midPoint = Math.floor(coeffs.length / 2)\n let lowEnergy = 0\n let highEnergy = 0\n\n for (let i = 0; i < midPoint; i++) {\n lowEnergy += coeffs[i] * coeffs[i]\n }\n\n for (let i = midPoint; i < coeffs.length; i++) {\n highEnergy += coeffs[i] * coeffs[i]\n }\n\n const totalEnergy = lowEnergy + highEnergy\n return totalEnergy > 0 ? highEnergy / totalEnergy : 0\n}\n\n/**\n * Calculate energy change between frames in dB\n * @param {Float32Array} currentCoeffs - Current frame coefficients\n * @param {Float32Array} prevCoeffs - Previous frame coefficients\n * @returns {number} Energy change in dB (positive values only)\n */\nfunction calculateEnergyChange(currentCoeffs, prevCoeffs) {\n let currentEnergy = 0\n let prevEnergy = 0\n\n for (let i = 0; i < currentCoeffs.length; i++) {\n currentEnergy += currentCoeffs[i] * currentCoeffs[i]\n prevEnergy += prevCoeffs[i] * prevCoeffs[i]\n }\n\n // Avoid log of zero and ensure minimum energy\n currentEnergy = Math.max(currentEnergy, 1e-10)\n prevEnergy = Math.max(prevEnergy, 1e-10)\n\n const changeDb = 10 * Math.log10(currentEnergy / prevEnergy)\n\n // Only interested in energy increases (potential transients)\n return Math.max(0, changeDb)\n}\n\n/**\n * Calculate unified transient score from spectral features\n * Uses perceptually-motivated combination instead of magic numbers\n * @param {Object} features - Spectral features\n * @returns {number} Transient score\n */\nfunction calculateTransientScore(features) {\n const { spectralFlux, flatnessChange, hfChange, energyChange } = features\n\n // Spectral flux is the primary indicator - it directly measures\n // sudden onset of new frequency components\n const fluxContribution = spectralFlux\n\n // Flatness change indicates transition between tonal and noise-like\n // signals (e.g., pitched to unpitched percussion)\n // Scale by sqrt to reduce dominance\n const flatnessContribution = Math.sqrt(flatnessChange)\n\n // High-frequency changes are perceptually important but shouldn't\n // dominate the decision. Use log scaling for perceptual relevance\n const hfContribution = Math.log1p(hfChange * 10) / Math.log1p(10)\n\n // Energy changes in dB are already perceptually scaled\n // Normalize to 0-1 range assuming 30dB is a strong transient\n const energyContribution = Math.min(energyChange / 30, 1)\n\n // Combine features with equal perceptual importance\n // Each contribution is normalized to roughly 0-1 range\n return (\n (fluxContribution +\n flatnessContribution +\n hfContribution +\n energyContribution) /\n 4\n )\n}\n\n/**\n * Perform FFT on time-domain samples and return magnitude spectrum\n * @param {Float32Array} samples - Time-domain samples\n * @param {number} fftSize - FFT size (must be power of 2)\n * @returns {Float32Array} Magnitude spectrum (positive frequencies only)\n */\nexport function performFFT(samples, fftSize) {\n const real = new Float32Array(fftSize)\n const imag = new Float32Array(fftSize)\n\n // Copy samples with zero-padding if necessary\n const copyLen = Math.min(samples.length, fftSize)\n real.set(samples.subarray(0, copyLen))\n\n // Perform FFT\n FFT.fft(real, imag)\n\n // Calculate magnitude spectrum for positive frequencies\n const magnitude = new Float32Array(fftSize / 2)\n for (let i = 0; i < fftSize / 2; i++) {\n magnitude[i] = Math.sqrt(real[i] * real[i] + imag[i] * imag[i])\n }\n\n return magnitude\n}\n\n/**\n * Detect transients by analyzing spectral changes between frames\n * @param {Float32Array} currentCoeffs - Current frame coefficients\n * @param {Float32Array} prevCoeffs - Previous frame coefficients\n * @param {number} threshold - Detection threshold\n * @returns {boolean} True if transient detected\n */\nexport function detectTransient(currentCoeffs, prevCoeffs, threshold) {\n // Can't detect transients without previous frame\n if (!prevCoeffs) return false\n\n // Calculate all spectral features\n const features = calculateSpectralFeatures(currentCoeffs, prevCoeffs)\n\n // Combine features using perceptually-motivated weighting\n const transientScore = calculateTransientScore(features)\n\n return transientScore > threshold\n}\n\n/**\n * Select transform block sizes from transient analysis.\n *\n * @param {object} context\n * @returns {Function}\n * @throws {Error} If the required context is missing\n */\nexport function selectBlocks(context) {\n const bufferPool =\n context?.bufferPool ?? throwError('selectBlocks: bufferPool is required')\n const options =\n context?.options ?? throwError('selectBlocks: options is required')\n const fftSizes = [FFT_SIZE_LOW, FFT_SIZE_MID, FFT_SIZE_HIGH]\n\n /**\n * @param {object} input\n * @returns {object}\n */\n return (input) => {\n const { bands } = input\n let blockModes\n\n if (options.fixedBlockModes) {\n blockModes = options.fixedBlockModes\n } else {\n blockModes = bands.map((bandSamples, bandIndex) => {\n const coeffs = performFFT(bandSamples, fftSizes[bandIndex])\n const transient = detectTransient(\n coeffs,\n bufferPool.transientDetection[bandIndex],\n options.transientThresholdLow\n )\n bufferPool.transientDetection[bandIndex] = coeffs\n return transient * Math.max(bandIndex + 1, 2)\n })\n }\n\n return { bands, blockModes }\n }\n}\n","/**\n * Carta1 spectral analysis application.\n */\n\nimport {\n MDCT_OVERLAP_SIZE,\n MDCT_SHORT_BLOCK_SIZE,\n MDCT_SIZE_LONG,\n MDCT_SIZE_MID,\n MDCT_SIZE_SHORT,\n} from '../core/constants.js'\nimport { calculateBandOffset } from '../core/geometry.js'\nimport { MDCT_BAND_CONFIGS, WINDOW_SHORT } from '../core/tables.js'\nimport {\n mdct64,\n mdct256,\n mdct512,\n reverseSpectrum,\n} from '../signal/spectrum.js'\nimport { throwError } from '../utils.js'\n\n/**\n * Build the ATRAC1 spectrum from analyzed bands.\n *\n * @param {object} context\n * @returns {Function}\n * @throws {Error} If the buffer pool is missing\n */\nexport function transformSpectrum(context) {\n const bufferPool =\n context?.bufferPool ??\n throwError('transformSpectrum: bufferPool is required')\n const overlapBuffers = bufferPool.mdctOverlap\n const transformFunctions = [mdct256, mdct256, mdct512]\n\n /**\n * @param {Float32Array} samples\n * @param {number} bandIndex\n * @param {number} blockMode\n * @param {Float32Array} overlapBuffer\n * @returns {Float32Array}\n */\n function transformBand(samples, bandIndex, blockMode, overlapBuffer) {\n const config = MDCT_BAND_CONFIGS[bandIndex]\n\n if (blockMode === 0) {\n return transformLongBlock(\n samples,\n bandIndex,\n config,\n transformFunctions[bandIndex],\n overlapBuffer\n )\n }\n\n return transformShortBlocks(samples, bandIndex, config, overlapBuffer)\n }\n\n /**\n * @param {Float32Array} samples\n * @param {number} bandIndex\n * @param {Object} config\n * @param {Object} transformFunction\n * @param {Float32Array} overlapBuffer\n * @returns {Float32Array}\n */\n function transformLongBlock(\n samples,\n bandIndex,\n config,\n transformFunction,\n overlapBuffer\n ) {\n const mdctSize = bandIndex === 2 ? MDCT_SIZE_LONG : MDCT_SIZE_MID\n const mdctInput = bufferPool.transformBuffers[mdctSize]\n mdctInput.fill(0)\n mdctInput.set(overlapBuffer, config.windowStart)\n\n applyTailWindowing(samples, overlapBuffer, config.size)\n mdctInput.set(samples, config.windowStart + MDCT_OVERLAP_SIZE)\n\n let spectrum = transformFunction.transform(\n mdctInput,\n bufferPool.mdctBuffers\n )\n if (bandIndex > 0) {\n spectrum = reverseSpectrum(spectrum, bufferPool.reversalBuffers)\n }\n return spectrum\n }\n\n /**\n * @param {Float32Array} samples\n * @param {number} bandIndex\n * @param {Object} config\n * @param {Float32Array} overlapBuffer\n * @returns {Float32Array}\n */\n function transformShortBlocks(samples, bandIndex, config, overlapBuffer) {\n const numBlocks = 1 << (config.size === 256 ? 3 : 2)\n const output = new Float32Array(config.size)\n\n for (let block = 0; block < numBlocks; block++) {\n const blockStart = block * MDCT_SHORT_BLOCK_SIZE\n const blockSamples = samples.subarray(\n blockStart,\n blockStart + MDCT_SHORT_BLOCK_SIZE\n )\n const mdctInput = bufferPool.transformBuffers[MDCT_SIZE_SHORT]\n mdctInput.fill(0)\n mdctInput.set(overlapBuffer, 0)\n\n applyTailWindowing(blockSamples, overlapBuffer, MDCT_SHORT_BLOCK_SIZE)\n mdctInput.set(blockSamples, MDCT_OVERLAP_SIZE)\n\n let spectrum = mdct64.transform(mdctInput, bufferPool.mdctBuffers)\n if (bandIndex > 0) {\n spectrum = reverseSpectrum(spectrum, bufferPool.reversalBuffers)\n }\n output.set(spectrum, blockStart)\n }\n\n return output\n }\n\n /**\n * @param {Float32Array} samples\n * @param {Float32Array} overlapBuffer\n * @param {number} blockSize\n */\n function applyTailWindowing(samples, overlapBuffer, blockSize) {\n const tailStart = blockSize - MDCT_OVERLAP_SIZE\n for (let i = 0; i < MDCT_OVERLAP_SIZE; i++) {\n const tailValue = samples[tailStart + i]\n overlapBuffer[i] = WINDOW_SHORT[i] * tailValue\n samples[tailStart + i] = tailValue * WINDOW_SHORT[31 - i]\n }\n }\n\n /**\n * @param {object} input\n * @returns {object}\n */\n return (input) => {\n const { bands, blockModes, originalFrame } = input\n const coefficients = new Float32Array(512)\n\n bands.forEach((bandSamples, bandIndex) => {\n const transformed = transformBand(\n bandSamples,\n bandIndex,\n blockModes[bandIndex],\n overlapBuffers[bandIndex]\n )\n coefficients.set(transformed, calculateBandOffset(bandIndex))\n })\n\n return { bands, coefficients, blockModes, originalFrame }\n }\n}\n","/**\n * Carta1 analysis stage.\n */\n\nimport { pipe } from '../utils.js'\nimport { analyzeBands } from './bands.js'\nimport { selectBlocks } from './blocks.js'\nimport { transformSpectrum } from './spectrum.js'\n\n/**\n * Analyze a PCM frame in the ATRAC1 signal domain.\n *\n * @param {object} context\n * @returns {Function}\n */\nexport function analyze(context) {\n const analyzeFrame = pipe(\n context,\n analyzeBands,\n selectBlocks,\n transformSpectrum\n )\n\n /**\n * @param {Float32Array} pcmSamples\n * @returns {object}\n */\n return (pcmSamples) => {\n const { coefficients, blockModes } = analyzeFrame(pcmSamples)\n return { coefficients, blockModes }\n }\n}\n","/**\n * Carta1 quantization stage.\n */\n\nimport { WORD_LENGTH_BITS } from '../core/tables.js'\nimport { quantize as quantizeCoefficient } from './spectrum.js'\n\n/**\n * Materialize retained allocation as quantized ATRAC1 symbols.\n *\n * @returns {QuantizeFrame}\n */\nexport function quantize() {\n /**\n * @param {object} input\n * @returns {object}\n */\n return (input) => {\n const {\n bfuData,\n bfuSizes,\n nBfu,\n scaleFactorIndices,\n wordLengthIndices,\n blockModes,\n } = input\n const quantizedCoefficients = []\n\n for (let bfu = 0; bfu < nBfu; bfu++) {\n const data = bfuData[bfu].subarray(0, bfuSizes[bfu])\n const bitsPerSample = WORD_LENGTH_BITS[wordLengthIndices[bfu]]\n quantizedCoefficients.push(\n quantizeCoefficient(data, scaleFactorIndices[bfu], bitsPerSample)\n )\n }\n\n return {\n nBfu,\n scaleFactorIndices,\n wordLengthIndices,\n quantizedCoefficients,\n blockModes,\n }\n }\n}\n","/**\n * Carta1 Audio Codec - Encoding Pipeline\n *\n * The frame pipeline reads as analysis, allocation, then quantization. Byte\n * packing remains the responsibility of serializeFrame().\n */\n\nimport { allocate } from '../allocation/stage.js'\nimport { analyze } from '../analysis/stage.js'\nimport { EncoderOptions } from '../core/options.js'\nimport { quantize } from '../quantization/stage.js'\nimport { BufferPool } from '../state.js'\nimport { pipe } from '../utils.js'\n\n/**\n * Create an ATRAC1 encoder.\n *\n * @param {EncoderOptions} [options=new EncoderOptions()]\n * @param {BufferPool} [bufferPool=new BufferPool()]\n * @returns {Function}\n */\nexport function encode(\n options = new EncoderOptions(),\n bufferPool = new BufferPool()\n) {\n const context = { options, bufferPool }\n return pipe(context, analyze, allocate, quantize)\n}\n","/**\n * Carta1 chronological stream adapters.\n */\n\nimport {\n AEA_HEADER_SIZE,\n SAMPLES_PER_FRAME,\n SOUND_UNIT_SIZE,\n STREAM_FLUSH_TAIL_FRAMES,\n STREAM_PRIMING_SAMPLES,\n} from '../core/constants.js'\nimport { EncoderOptions } from '../core/options.js'\nimport { decode } from '../pipeline/decoder.js'\nimport { encode } from '../pipeline/encoder.js'\nimport { deserializeFrame, serializeFrame } from '../syntax/frame.js'\nimport { AeaFile } from './container.js'\nimport { frameBufferToFrames, joinChannelFrames } from './pcm.js'\n\n/**\n * Validate a supported channel mode.\n *\n * @param {number} channelCount\n * @throws {Error} If the channel count is unsupported\n */\nfunction validateChannels(channelCount) {\n if (channelCount !== 1 && channelCount !== 2) {\n throw new Error(`Unsupported channel count: ${channelCount}`)\n }\n}\n\n/**\n * Validate one PCM frame in the selected channel mode.\n *\n * @param {object} frame\n * @param {number} channelCount\n * @throws {TypeError} If the frame does not match the selected mode\n * @throws {RangeError} If a selected channel is not one complete frame\n */\nfunction validateChunk(frame, channelCount) {\n const channels = channelCount === 1 ? [frame] : frame\n if (\n !Array.isArray(channels) ||\n channels.length !== channelCount ||\n channels.some((channel) => !(channel instanceof Float32Array))\n ) {\n throw new TypeError(\n `ATRAC1 streaming requires ${channelCount} Float32 channel${\n channelCount === 1 ? '' : 's'\n } per frame`\n )\n }\n\n if (channels.some((channel) => channel.length !== SAMPLES_PER_FRAME)) {\n throw new RangeError(\n `ATRAC1 streaming requires exactly ${SAMPLES_PER_FRAME} samples per channel`\n )\n }\n}\n\n/**\n * Create an empty structured frame for an unmatched stereo channel.\n *\n * @returns {object}\n */\nfunction createDummyFrame() {\n return {\n nBfu: 0,\n blockModes: [0, 0, 0],\n scaleFactorIndices: new Int32Array(0),\n wordLengthIndices: new Int32Array(0),\n quantizedCoefficients: [],\n }\n}\n\n/**\n * Collect an async iterable.\n *\n * @param {AsyncIterable} frames\n * @returns {Promise<Array>}\n */\nasync function collect(frames) {\n const output = []\n for await (const frame of frames) {\n output.push(frame)\n }\n return output\n}\n\n/**\n * Encode chronological PCM frames.\n */\nexport class AeaStreamingEncoder {\n /**\n * @param {object} [options]\n */\n constructor(options = {}) {\n const { channelCount = 1, onProgress, encoderOptions } = options\n validateChannels(channelCount)\n\n const codecOptions = encoderOptions || new EncoderOptions()\n this.channelCount = channelCount\n this.onProgress = onProgress\n this.frameIndex = 0\n this.sampleCount = 0\n this.finalized = false\n this.leftEncoder = encode(codecOptions)\n this.rightEncoder = channelCount === 2 ? encode(codecOptions) : null\n }\n\n /**\n * @param {AsyncIterable<object>} frames\n * @returns {AsyncGenerator<object>}\n */\n async *frames(frames) {\n if (this.finalized) {\n throw new Error('ATRAC1 encoder has already been finalized')\n }\n for await (const frame of frames) {\n validateChunk(frame, this.channelCount)\n if (this.channelCount === 1) {\n yield this.leftEncoder(frame)\n } else {\n const [left, right] = frame\n yield this.leftEncoder(left)\n yield this.rightEncoder(right)\n }\n\n this.sampleCount += SAMPLES_PER_FRAME\n\n if (this.onProgress) {\n this.onProgress(this.frameIndex++)\n }\n }\n }\n\n /**\n * Flush the synthesis tail after a nonempty stream.\n *\n * @returns {Generator<object>}\n */\n *finish() {\n if (this.finalized) return\n this.finalized = true\n if (this.sampleCount === 0) return\n const silence = new Float32Array(SAMPLES_PER_FRAME)\n for (let frame = 0; frame < STREAM_FLUSH_TAIL_FRAMES; frame++) {\n yield this.leftEncoder(silence)\n if (this.channelCount === 2) yield this.rightEncoder(silence)\n }\n }\n}\n\n/**\n * Decode chronological structured frames.\n */\nexport class AeaStreamingDecoder {\n /**\n * @param {object} [options]\n */\n constructor(options = {}) {\n const {\n channelCount = 1,\n onProgress,\n primingSampleCount = 0,\n sampleCount = Number.POSITIVE_INFINITY,\n } = options\n validateChannels(channelCount)\n\n this.channelCount = channelCount\n this.onProgress = onProgress\n this.frameIndex = 0\n this.primingSampleCount = primingSampleCount\n this.sampleCount = sampleCount\n this.timelinePosition = 0\n this.emittedSamples = 0\n this.leftFrame = null\n this.leftDecoder = decode()\n this.rightDecoder = channelCount === 2 ? decode() : null\n }\n\n /**\n * @param {AsyncIterable<object>} frames\n * @returns {AsyncGenerator<object>}\n */\n async *frames(frames) {\n for await (const frame of frames) {\n if (this.channelCount === 1) {\n yield this.trim(this.leftDecoder(frame))\n this.reportProgress()\n } else if (this.leftFrame === null) {\n this.leftFrame = frame\n } else {\n yield this.trim([\n this.leftDecoder(this.leftFrame),\n this.rightDecoder(frame),\n ])\n this.leftFrame = null\n this.reportProgress()\n }\n }\n }\n\n /**\n * Complete an unmatched stereo pair.\n *\n * @returns {Generator<[Float32Array, Float32Array]>}\n */\n *finish() {\n if (this.channelCount === 2 && this.leftFrame !== null) {\n yield this.trim([\n this.leftDecoder(this.leftFrame),\n this.rightDecoder(createDummyFrame()),\n ])\n this.leftFrame = null\n this.reportProgress()\n }\n if (\n Number.isFinite(this.sampleCount) &&\n this.emittedSamples !== this.sampleCount\n ) {\n throw new RangeError(\n `Truncated ATRAC1 timeline: decoded ${this.emittedSamples} of ${this.sampleCount} samples`\n )\n }\n }\n\n /**\n * Apply stream priming and visible-length trimming once per PCM frame.\n *\n * @param {object} frame\n * @returns {object}\n * @private\n */\n trim(frame) {\n const start = Math.max(0, this.primingSampleCount - this.timelinePosition)\n const remaining = this.sampleCount - this.emittedSamples\n const count = Math.max(0, Math.min(SAMPLES_PER_FRAME - start, remaining))\n this.timelinePosition += SAMPLES_PER_FRAME\n this.emittedSamples += count\n if (this.channelCount === 1) return frame.slice(start, start + count)\n return frame.map((channel) => channel.slice(start, start + count))\n }\n\n /**\n * Publish one frame's progress.\n *\n * @private\n */\n reportProgress() {\n if (this.onProgress) {\n this.onProgress(this.frameIndex++)\n }\n }\n}\n\n/**\n * Create a chronological encoder.\n *\n * @param {object} [options]\n * @returns {AeaStreamingEncoder}\n */\nexport function createAeaStreamingEncoder(options) {\n return new AeaStreamingEncoder(options)\n}\n\n/**\n * Create a chronological decoder.\n *\n * @param {object} [options]\n * @returns {AeaStreamingDecoder}\n */\nexport function createAeaStreamingDecoder(options) {\n return new AeaStreamingDecoder(options)\n}\n\n/**\n * Encode complete planar PCM buffers into an AEA byte image.\n *\n * @param {Float32Array[]} channels\n * @param {object} [options]\n * @returns {Promise<Uint8Array>}\n */\nexport async function encodeAeaPcm(channels, options = {}) {\n if (\n !Array.isArray(channels) ||\n (channels.length !== 1 && channels.length !== 2) ||\n channels.some((channel) => !(channel instanceof Float32Array))\n ) {\n throw new TypeError('ATRAC1 encoding requires one or two Float32 channels')\n }\n\n const { title = 'encoded by carta1', ...encoderValues } = options\n const encoder = createAeaStreamingEncoder({\n channelCount: channels.length,\n encoderOptions: new EncoderOptions(encoderValues),\n })\n const frames = encoder.frames(frameBufferToFrames(channels))\n const encoded = await collect(frames)\n encoded.push(...encoder.finish())\n\n const header = AeaFile.createHeader(\n title,\n encoded.length,\n channels.length,\n channels[0].length,\n STREAM_PRIMING_SAMPLES\n )\n const output = new Uint8Array(\n header.length + encoded.length * SOUND_UNIT_SIZE\n )\n output.set(header)\n encoded.forEach((frame, index) => {\n output.set(serializeFrame(frame), header.length + index * SOUND_UNIT_SIZE)\n })\n return output\n}\n\n/**\n * Decode a complete AEA byte image into planar normalized PCM buffers.\n *\n * @param {Uint8Array|ArrayBuffer|Blob} input\n * @returns {Promise<Float32Array[]>}\n */\nexport async function decodeAeaPcm(input) {\n let bytes\n if (input instanceof Blob) {\n bytes = new Uint8Array(await input.arrayBuffer())\n } else if (input instanceof Uint8Array) {\n bytes = input\n } else if (input instanceof ArrayBuffer) {\n bytes = new Uint8Array(input)\n } else {\n throw new TypeError('ATRAC1 decoding requires AEA bytes or a Blob')\n }\n\n const info = AeaFile.parseHeader(bytes.subarray(0, AEA_HEADER_SIZE))\n const decoder = createAeaStreamingDecoder({\n channelCount: info.channelCount,\n primingSampleCount: info.primingSampleCount,\n sampleCount: info.sampleCount,\n })\n const frames = (async function* () {\n for (\n let offset = AEA_HEADER_SIZE;\n offset + SOUND_UNIT_SIZE <= bytes.length;\n offset += SOUND_UNIT_SIZE\n ) {\n yield deserializeFrame(bytes.subarray(offset, offset + SOUND_UNIT_SIZE))\n }\n })()\n const decoded = await collect(decoder.frames(frames))\n decoded.push(...decoder.finish())\n\n if (info.channelCount === 1) {\n return [joinChannelFrames(decoded)]\n }\n return [\n joinChannelFrames(decoded.map(([left]) => left)),\n joinChannelFrames(decoded.map(([, right]) => right)),\n ]\n}\n","/**\n * Carta1 public processing facade.\n */\n\nimport {\n AEA_HEADER_SIZE,\n SAMPLE_RATE,\n SAMPLES_PER_FRAME,\n SOUND_UNIT_SIZE,\n STREAM_FLUSH_TAIL_FRAMES,\n STREAM_PRIMING_SAMPLES,\n} from '../core/constants.js'\nimport { deserializeFrame, serializeFrame } from '../syntax/frame.js'\nimport { AeaFile } from './container.js'\nimport { createPcmWave, frameBufferToFrames, joinChannelFrames } from './pcm.js'\nimport {\n createAeaStreamingDecoder,\n createAeaStreamingEncoder,\n decodeAeaPcm,\n encodeAeaPcm,\n} from './stream.js'\n\n/**\n * High-level audio processing facade.\n */\nexport class AudioProcessor {\n /**\n * @param {Float32Array[]} channels\n * @param {object} [options]\n * @returns {Promise<Uint8Array>}\n */\n static encodeAeaPcm(channels, options = {}) {\n return encodeAeaPcm(channels, options)\n }\n\n /**\n * @param {Uint8Array|ArrayBuffer|Blob} input\n * @returns {Promise<Float32Array[]>}\n */\n static decodeAeaPcm(input) {\n return decodeAeaPcm(input)\n }\n\n /**\n * @param {AsyncIterable<object>} audioFrames\n * @param {object} [options]\n * @returns {AsyncGenerator<object>}\n */\n static async *encodeStream(audioFrames, options = {}) {\n const encoder = createAeaStreamingEncoder(options)\n yield* encoder.frames(audioFrames)\n yield* encoder.finish()\n }\n\n /**\n * @param {AsyncIterable<object>} encodedFrames\n * @param {object} [options]\n * @returns {AsyncGenerator<object>}\n */\n static async *decodeStream(encodedFrames, options = {}) {\n const decoder = createAeaStreamingDecoder(options)\n yield* decoder.frames(encodedFrames)\n yield* decoder.finish()\n }\n\n /**\n * @param {Float32Array[]} buffers\n * @param {number} [frameSize]\n * @returns {Generator<Float32Array>|Generator<[Float32Array, Float32Array]>}\n */\n static *frameBufferToFrames(buffers, frameSize) {\n yield* frameBufferToFrames(buffers, frameSize)\n }\n\n /**\n * @param {AsyncIterable|Iterable} frameStream\n * @returns {Promise<Array>}\n */\n static async collectFrames(frameStream) {\n const frames = []\n for await (const frame of frameStream) {\n frames.push(frame)\n }\n return frames\n }\n\n /**\n * @param {AsyncIterable<object>} encodedFrames\n * @param {object} [options]\n * @returns {Promise<Blob>}\n */\n static async createAeaBlob(encodedFrames, options = {}) {\n const { title = 'encoded by atrac1.js', channelCount = 1 } = options\n const frames = []\n for await (const frame of encodedFrames) {\n frames.push(serializeFrame(frame))\n }\n\n const timelineFrames = frames.length / channelCount\n const sampleCount =\n options.sampleCount ??\n Math.max(0, timelineFrames - STREAM_FLUSH_TAIL_FRAMES) * SAMPLES_PER_FRAME\n const header = AeaFile.createHeader(\n title,\n frames.length,\n channelCount,\n sampleCount,\n STREAM_PRIMING_SAMPLES\n )\n return new Blob([header, ...frames], { type: 'application/octet-stream' })\n }\n\n /**\n * @param {Blob} blob\n * @returns {Promise<object>} Parsed AEA data.\n */\n static async parseAeaBlob(blob) {\n const buffer = await blob.arrayBuffer()\n const header = new Uint8Array(buffer.slice(0, AEA_HEADER_SIZE))\n const info = AeaFile.parseHeader(header)\n const frameData = []\n\n for (let offset = AEA_HEADER_SIZE; offset < buffer.byteLength;) {\n const frame = new Uint8Array(\n buffer.slice(offset, offset + SOUND_UNIT_SIZE)\n )\n if (frame.length === SOUND_UNIT_SIZE) {\n frameData.push(frame)\n }\n offset += SOUND_UNIT_SIZE\n }\n return { info, frameData }\n }\n\n /**\n * @param {Uint8Array[]} frameData\n * @returns {Generator<object>}\n */\n static *deserializedFrameStream(frameData) {\n for (const frame of frameData) {\n yield deserializeFrame(frame)\n }\n }\n\n /**\n * @param {Float32Array[]|[Float32Array, Float32Array][]} pcmFrames\n * @param {number} [channelCount=1]\n * @param {number} [sampleRate=SAMPLE_RATE]\n * @returns {Blob}\n */\n static createPcmWaveBlob(\n pcmFrames,\n channelCount = 1,\n sampleRate = SAMPLE_RATE\n ) {\n let channels\n if (channelCount === 1) {\n channels = [joinChannelFrames(pcmFrames)]\n } else if (channelCount === 2) {\n channels = [\n joinChannelFrames(pcmFrames.map(([left]) => left)),\n joinChannelFrames(pcmFrames.map(([, right]) => right)),\n ]\n } else {\n throw new Error(`Unsupported channel count: ${channelCount}`)\n }\n return new Blob([createPcmWave(channels, { sampleRate })], {\n type: 'audio/wav',\n })\n }\n\n /**\n * Preserve the supported WAVE facade name.\n *\n * @param {Float32Array[]|[Float32Array, Float32Array][]} pcmFrames\n * @param {number} [channelCount=1]\n * @param {number} [sampleRate=SAMPLE_RATE]\n * @returns {Blob}\n */\n static createWavBlob(pcmFrames, channelCount = 1, sampleRate = SAMPLE_RATE) {\n return AudioProcessor.createPcmWaveBlob(pcmFrames, channelCount, sampleRate)\n }\n\n /**\n * Assemble PCM frames using the supported interleaved result shape.\n *\n * @param {Float32Array[]|[Float32Array, Float32Array][]} pcmFrames\n * @param {number} channelCount\n * @returns {Float32Array}\n */\n static assemblePcmFrames(pcmFrames, channelCount) {\n if (channelCount === 1) {\n return joinChannelFrames(pcmFrames)\n }\n if (channelCount !== 2) {\n throw new Error(`Unsupported channel count: ${channelCount}`)\n }\n\n const left = joinChannelFrames(pcmFrames.map(([channel]) => channel))\n const right = joinChannelFrames(pcmFrames.map(([, channel]) => channel))\n const pcm = new Float32Array(Math.max(left.length, right.length) * 2)\n for (let i = 0; i < pcm.length / 2; i++) {\n pcm[i * 2] = left[i] ?? 0\n pcm[i * 2 + 1] = right[i] ?? 0\n }\n return pcm\n }\n}\n","/**\n * Carta1 Web Worker - Self-contained audio codec worker\n *\n * Provides asynchronous encoding and decoding of ATRAC1 audio format\n * in a separate thread to prevent blocking the main UI thread.\n *\n * Usage:\n * Include this file as a web worker:\n * new Worker('carta1-worker.min.js')\n */\n\nimport { AeaFile } from './container.js'\nimport { EncoderOptions } from '../core/options.js'\nimport { AudioProcessor } from './processor.js'\nimport { SAMPLE_RATE } from '../core/constants.js'\n\n/**\n * Encode PCM audio data to ATRAC1 format\n *\n * @param {Array<Float32Array>} pcmData - PCM audio data [mono] or [left, right]\n * @param {Object} options - Encoder options\n * @returns {Promise<Object>} Encoded AEA blob\n */\nasync function encodeAtrac(pcmData, options, title) {\n title = title ?? 'encoded by carta1'\n try {\n const audioFrames = AudioProcessor.frameBufferToFrames(pcmData)\n const channelCount = pcmData.length\n\n // Create encoder options from provided settings\n const encoderOptions = new EncoderOptions(options)\n\n const encodedFrames = AudioProcessor.encodeStream(audioFrames, {\n channelCount,\n encoderOptions,\n })\n\n const frameArray = await AudioProcessor.collectFrames(encodedFrames)\n\n const aeaBlob = await AudioProcessor.createAeaBlob(frameArray, {\n title,\n channelCount,\n sampleCount: pcmData[0].length,\n })\n\n // Return the blob\n return { aeaBlob }\n } catch (error) {\n console.error('Worker encode error:', error)\n throw error\n }\n}\n\n/**\n * Get default encoder options metadata\n *\n * @returns {Object} Default encoder options as plain object\n */\nfunction getEncoderOptionsMetadata() {\n const defaultOptions = new EncoderOptions()\n return defaultOptions.toObject()\n}\n\n/**\n * Decode ATRAC1 data to PCM WAV format\n *\n * @param {Object} aea - AEA data object\n * @param {Uint8Array} aea.header - AEA file header\n * @param {Array} aea.aeaData - Serialized frame data\n * @param {Object} [aea.info] - Optional metadata\n * @returns {Promise<Object>} WAV blob and decoding info\n */\nasync function decodeAtrac(aea) {\n const { header, aeaData, info } = aea\n\n // Use provided info, or fall back to header parsing, or defaults\n let decodingInfo\n if (info) {\n decodingInfo = { sampleRate: SAMPLE_RATE, ...info }\n } else if (header) {\n const headerInfo = AeaFile.parseHeader(header)\n decodingInfo = { sampleRate: SAMPLE_RATE, ...headerInfo }\n } else {\n decodingInfo = { channelCount: 2, sampleRate: SAMPLE_RATE }\n }\n\n const encodedFrameStream = AudioProcessor.deserializedFrameStream(aeaData)\n const decodedFrames = AudioProcessor.decodeStream(encodedFrameStream, {\n channelCount: decodingInfo.channelCount,\n primingSampleCount: decodingInfo.primingSampleCount,\n sampleCount: decodingInfo.sampleCount,\n })\n\n const pcmFrames = await AudioProcessor.collectFrames(decodedFrames)\n\n // Create WAV blob directly\n const wavBlob = AudioProcessor.createPcmWaveBlob(\n pcmFrames,\n decodingInfo.channelCount,\n decodingInfo.sampleRate\n )\n\n return { wavBlob, info: decodingInfo }\n}\n\n/**\n * Handle messages from the main thread\n *\n * Supported message types:\n * - 'encode': Encode PCM to ATRAC1\n * - 'decode': Decode ATRAC1 to PCM\n * - 'parseAea': Parse AEA blob metadata\n * - 'getEncoderOptions': Get default encoder options\n */\nself.onmessage = async (e) => {\n const { jobId, type, pcmData, aea, options, title, blob } = e.data\n\n try {\n let result\n\n switch (type) {\n case 'encode':\n result = await encodeAtrac(pcmData, options, title)\n break\n case 'decode':\n result = await decodeAtrac(aea)\n break\n case 'parseAea':\n result = await AudioProcessor.parseAeaBlob(blob)\n break\n case 'getEncoderOptions':\n result = getEncoderOptionsMetadata()\n break\n default:\n throw new Error(`Unknown worker message type: ${type}`)\n }\n\n self.postMessage({ jobId, result })\n } catch (error) {\n console.error('Worker error:', error)\n self.postMessage({ jobId, error: error.message })\n }\n}\n"],"names":["SAMPLE_RATE","SAMPLES_PER_FRAME","AEA_HEADER_SIZE","SOUND_UNIT_SIZE","MDCT_SIZE_MID","MDCT_SIZE_LONG","MDCT_SHORT_BLOCK_SIZE","MDCT_OVERLAP_SIZE","MDCT_TAIL_WINDOW_SIZE","QMF_DELAY","MAX_WORD_LENGTH_INDEX","AEA_MAGIC","Uint8Array","SPECS_PER_BFU","Int32Array","BFU_AMOUNTS","BFU_BAND_BOUNDARIES","BFU_START_LONG","BFU_START_SHORT","WINDOW_SHORT","table","Float64Array","i","Math","sin","PI","QMF_COEFFS","Float32Array","QMF_WINDOW","window","QMF_EVEN","even","QMF_ODD","odd","MDCT_BAND_CONFIGS","size","windowStart","WORD_LENGTH_BITS","SCALE_FACTORS","pow","INV_POWER_OF_TWO","maxBits","bits","WORD_LENGTH_DELTA_BITS","DISTORTION_DELTA_FACTORS","bits1","bits2","AeaFile","_classCallCheck","this","key","value","title","arguments","length","undefined","frameCount","channelCount","sampleCount","primingSampleCount","header","view","DataView","buffer","set","titleBytes","TextEncoder","encode","subarray","min","AEA_TITLE_SIZE","setUint32","Error","concat","byteOffset","byteLength","titleEnd","indexOf","titleLength","TextDecoder","decode","getUint32","EncoderOptions","options","values","transientThresholdLow","transientThresholdMid","transientThresholdHigh","allocationBias","fixedBlockModes","metadata","default","name","description","range","step","type","setOptions","_i","_Object$entries","Object","entries","_Object$entries$_i","_slicedToArray","setValue","meta","_meta$range","max","get","_objectSpread","_i2","_Object$entries2","_Object$entries2$_i","assertBitCount","bitCount","Number","isInteger","RangeError","packBits","bitPosition","byteIndex","floor","bitOffset","unsignedValue","bitsWritten","bitsAvailable","bitsToWrite","valueBits","mask","unpackBits","bitsRead","bitsToRead","unpackSignedBits","serializeFrame","frameData","bfuIndex","nBfu","blockModes","setUint16","wordLengthIndices","scaleFactorIndices","bitsPerSample","_step","_iterator","_createForOfIteratorHelper","quantizedCoefficients","s","n","done","coefficient","err","e","f","deserializeFrame","getUint16","bfuSize","coefficients","j","push","t","r","Symbol","iterator","o","toStringTag","c","prototype","Generator","u","create","_regeneratorDefine2","p","y","G","v","a","d","bind","l","TypeError","call","GeneratorFunction","GeneratorFunctionPrototype","getPrototypeOf","setPrototypeOf","__proto__","displayName","_regenerator","w","m","defineProperty","_invoke","enumerable","configurable","writable","Array","isArray","_arrayWithHoles","next","_iterableToArrayLimit","_unsupportedIterableToArray","_nonIterableRest","_n","F","_arrayLikeToArray","toString","slice","constructor","from","test","writeFourCc","output","offset","setUint8","charCodeAt","joinChannelFrames","frames","reduce","total","frame","channel","frameBufferToFrames","buffers","frameSize","_callee","_buffers","left","_buffers2","_left","right","_offset","leftFrame","rightFrame","_context","every","floatToPcm16","sample","clipped","createPcmWave","channels","_options$sampleRate","sampleRate","pcm","_step2","_iterator2","setInt16","interleavePcm16","_ref","byteRate","blockAlign","dataSize","createPcmWaveHeader","quantize","scaleFactorIndex","out","fill","quantRange","normFactor","hi","lo","x","dequantize","quantized","scaleFactor","deq","bfu","band","position","dequantized","dequantizeCoefficient","History","_createClass","qmfDelays","lowBand","midBand","highBand","transientDetection","mdctOverlap","imdctOverlap","Scratch","transformBuffers","qmfWorkBuffers","delay","highBandDelay","QMF_HIGH_BAND_DELAY","mdctBuffers","real","imag","reversalBuffers","BufferPool","assign","throwError","msg","pipe","context","_len","stages","_key","operations","map","stage","input","operation","FFT","log2","reversed","temp","b","_ref2","stride","halfStride","angle","wReal","cos","wImag","start","twiddleReal","twiddleImag","k","evenIndex","oddIndex","evenReal","evenImag","oddReal","oddImag","tReal","tImag","nextReal","MDCTBase","scale","halfSize","quarterSize","fftSize","alpha","omega","scaleRoot","sqrt","sinCosTable","MDCT","_MDCTBase","_callSuper","_inherits","_mdctBuffers$this$fft","_buffers$real","_buffers$imag","n4","n34","i2","i3","i4","im","idx","fft","re","IMDCT","_MDCTBase2","_mdctBuffers$this$fft2","_buffers$real2","_buffers$imag2","r1","i1","mdct64","mdct256","mdct512","imdct64","MDCT_SIZE_SHORT","imdct256","imdct512","overlapAdd","prev","curr","w1","w2","reverseSpectrum","spectrum","synthesizeSpectrum","_context$bufferPool","bufferPool","overlapBuffers","transformFunctions","transformBand","bandIndex","blockMode","overlapBuffer","config","transformFunction","blockSpectrum","inverse","transform","inverseStart","inverseBuffer","previous","overlap","copyLength","inverseLongBlock","numBlocks","block","inverseShortBlocks","bandCoefficients","offsets","extractBandCoefficients","analyzeQmfPair","delayLine","_qmfWorkBuffers$delay","_qmfWorkBuffers$delay2","inputLength","outputLength","workBuffer","evenSum","oddSum","newDelay","synthesizeQmfPair","_qmfWorkBuffers$delay3","_qmfWorkBuffers$delay4","subbandLength","low","high","sample0","sample1","synthesizePcm","delays","bands","delayedHigh","stage2","stage1","synthesize","prepare","bfuData","bfuSizes","coeffIndex","bandStart","bandSize","bandEnd","startPositions","startPos","endPos","srcStart","srcEnd","bfuCount","groupIntoBFUs","biasedScaleFactorCache","Map","search","activeBfuCount","maxBfuCount","remainingBits","biasedScaleFactors","allScaleFactorIndices","zeroBitDistortions","allocation","wordLengths","heapIndices","heapPriorities","heapSize","sfi","deltaBits","distortionDelta","siftDown","cur","sz","cost","last","nxt","deltaBitsNext","distributeBits","distortion","totalDistortion","wl","measureDistortion","startIndex","idxVal","prVal","maxI","maxP","solve","bias","has","buildBiasedScaleFactorTable","findScaleFactor","effectiveScaleFactor","bestResult","minTotalDistortion","Infinity","candidateBfuCount","availableBits","FRAME_BITS","result","fallbackBfuCount","maxAmplitude","abs","index","ceil","allocate","_context$options","_prepare","analyzeBands","pcmSamples","calculateSpectralFeatures","currentCoeffs","prevCoeffs","spectralFlux","flux","currentEnergy","currentMag","diff","normalization","calculateSpectralFlux","currentFlatness","calculateSpectralFlatness","prevFlatness","flatnessChange","currentHfRatio","calculateHighFrequencyRatio","prevHfRatio","hfChange","energyChange","prevEnergy","changeDb","log10","calculateEnergyChange","coeffs","sumLog","sumLinear","validBins","magnitude","log","geometricMean","exp","arithmeticMean","midPoint","lowEnergy","highEnergy","totalEnergy","detectTransient","threshold","transientScore","features","log1p","calculateTransientScore","selectBlocks","fftSizes","bandSamples","samples","copyLen","performFFT","transient","transformSpectrum","mdctSize","mdctInput","applyTailWindowing","transformLongBlock","blockStart","blockSamples","transformShortBlocks","blockSize","tailStart","tailValue","originalFrame","forEach","transformed","calculateBandOffset","analyze","analyzeFrame","_analyzeFrame","data","quantizeCoefficient","_defineProperties","_toPropertyKey","_typeof","toPrimitive","String","_toPrimitive","asyncGeneratorStep","Promise","resolve","then","_asyncToGenerator","apply","_next","_throw","_awaitAsyncGenerator","_OverloadYield","_wrapAsyncGenerator","AsyncGenerator","resume","settle","reject","arg","_asyncIterator","asyncIterator","AsyncFromSyncIterator","AsyncFromSyncIteratorContinuation","return","throw","validateChannels","validateChunk","some","createDummyFrame","collect","_x","_collect","_callee3","_iteratorAbruptCompletion","_didIteratorError","_iteratorError","_t3","_context5","AeaStreamingEncoder","_options$channelCount","onProgress","encoderOptions","codecOptions","frameIndex","finalized","leftEncoder","rightEncoder","_this","_iteratorAbruptCompletion2","_didIteratorError2","_iteratorError2","_frame","_t","finish","silence","_context2","AeaStreamingDecoder","_options$channelCount2","_options$primingSampl","_options$sampleCount","POSITIVE_INFINITY","timelinePosition","emittedSamples","leftDecoder","rightDecoder","_this2","_callee2","_iteratorAbruptCompletion3","_didIteratorError3","_iteratorError3","_iterator3","_step3","_t2","_context3","trim","reportProgress","_context4","isFinite","remaining","count","createAeaStreamingEncoder","createAeaStreamingDecoder","_encodeAeaPcm","_callee4","_options$title","encoderValues","encoder","encoded","_args6","_context6","_objectWithoutProperties","_excluded","_toConsumableArray","createHeader","_decodeAeaPcm","_callee6","bytes","info","decoder","decoded","_t4","_t5","_context8","Blob","arrayBuffer","ArrayBuffer","parseHeader","_callee5","_context7","_ref4","_asyncGeneratorDelegate","pump","AudioProcessor","_x2","encodeAeaPcm","_x3","decodeAeaPcm","audioFrames","_regeneratorValues","encodedFrames","_collectFrames","frameStream","_createAeaBlob","timelineFrames","_args5","_x4","_parseAeaBlob","blob","_x5","deserializedFrameStream","pcmFrames","_ref3","createPcmWaveBlob","_ref5","_ref7","_left$i","_right$i","encodeAtrac","_encodeAtrac","pcmData","frameArray","aeaBlob","encodeStream","collectFrames","createAeaBlob","console","error","getEncoderOptionsMetadata","toObject","decodeAtrac","_decodeAtrac","aea","aeaData","decodingInfo","headerInfo","encodedFrameStream","decodedFrames","wavBlob","decodeStream","self","onmessage","_e$data","jobId","parseAeaBlob","postMessage","message"],"sourceRoot":""}
|
|
1
|
+
{"version":3,"file":"carta1-worker.min.js","mappings":"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","sources":["webpack://carta1/./codec/core/constants.js","webpack://carta1/./codec/core/tables.js","webpack://carta1/./codec/boundary/container.js","webpack://carta1/./codec/core/options.js","webpack://carta1/./codec/syntax/bitstream.js","webpack://carta1/./codec/syntax/frame.js","webpack://carta1/./codec/boundary/pcm.js","webpack://carta1/./codec/quantization/spectrum.js","webpack://carta1/./codec/dequantization.js","webpack://carta1/./codec/state.js","webpack://carta1/./codec/utils.js","webpack://carta1/./codec/signal/fft.js","webpack://carta1/./codec/signal/mdct.js","webpack://carta1/./codec/signal/order.js","webpack://carta1/./codec/synthesis/bands.js","webpack://carta1/./codec/core/geometry.js","webpack://carta1/./codec/signal/qmf.js","webpack://carta1/./codec/synthesis/pcm.js","webpack://carta1/./codec/synthesis/stage.js","webpack://carta1/./codec/pipeline/decoder.js","webpack://carta1/./codec/allocation/source.js","webpack://carta1/./codec/allocation/solve.js","webpack://carta1/./codec/allocation/stage.js","webpack://carta1/./codec/analysis/bands.js","webpack://carta1/./codec/analysis/blocks.js","webpack://carta1/./codec/analysis/spectrum.js","webpack://carta1/./codec/analysis/stage.js","webpack://carta1/./codec/quantization/stage.js","webpack://carta1/./codec/pipeline/encoder.js","webpack://carta1/./codec/boundary/stream.js","webpack://carta1/./codec/boundary/processor.js","webpack://carta1/./codec/boundary/worker.js"],"sourcesContent":["/**\n * Carta1 scalar format constants.\n */\n\nexport const SAMPLE_RATE = 44100\nexport const SAMPLES_PER_FRAME = 512\nexport const FRAME_RATE = SAMPLE_RATE / SAMPLES_PER_FRAME\n\nexport const AEA_HEADER_SIZE = 2048\nexport const AEA_TITLE_OFFSET = 4\nexport const AEA_TITLE_SIZE = 256\nexport const AEA_FRAME_COUNT_OFFSET = 260\nexport const AEA_CHANNEL_COUNT_OFFSET = 264\nexport const AEA_PRIMING_SAMPLE_COUNT_OFFSET = 268\nexport const AEA_SOURCE_SAMPLE_COUNT_OFFSET = 272\n\nexport const STREAM_PRIMING_SAMPLES = 266\nexport const STREAM_FLUSH_TAIL_FRAMES = 1\n\nexport const SOUND_UNIT_SIZE = 212\nexport const FRAME_BITS = SOUND_UNIT_SIZE * 8\nexport const FRAME_OVERHEAD_BITS = 40\nexport const BITRATE_PER_CHANNEL = SOUND_UNIT_SIZE * FRAME_RATE * 8\n\nexport const NUM_BFUS = 52\nexport const MAX_BFU_SIZE = 20\nexport const BITS_PER_BFU_METADATA = 10\nexport const BFU_AMOUNTS_COUNT = 8\n\nexport const MDCT_SIZE_SHORT = 64\nexport const MDCT_SIZE_MID = 256\nexport const MDCT_SIZE_LONG = 512\nexport const MDCT_SHORT_BLOCK_SIZE = 32\nexport const MDCT_OVERLAP_SIZE = 32\nexport const MDCT_TAIL_WINDOW_SIZE = 16\n\nexport const QMF_BANDS = 2\nexport const QMF_TAPS = 48\nexport const QMF_ANALYSIS_START_SAMPLE = 0\nexport const QMF_ANALYSIS_STEP_SAMPLES = QMF_BANDS\nexport const QMF_ANALYSIS_WINDOW_SAMPLES = QMF_TAPS\nexport const QMF_ANALYSIS_MODULATION_SCALE = 1\nexport const QMF_ANALYSIS_TERMS = 24\nexport const QMF_ANALYSIS_DELAY_SAMPLES = QMF_TAPS - QMF_BANDS\nexport const QMF_SYNTHESIS_DELAY_ROWS = 24\nexport const QMF_SYNTHESIS_TERMS = 24\nexport const QMF_SYNTHESIS_DELAY_SAMPLES = QMF_BANDS * QMF_SYNTHESIS_DELAY_ROWS\nexport const QMF_HIGH_BAND_DELAY = 39\n\nexport const FFT_SIZE_LOW = 128\nexport const FFT_SIZE_MID = 128\nexport const FFT_SIZE_HIGH = 256\n\nexport const WAV_HEADER_SIZE = 44\nexport const WAV_BYTES_PER_SAMPLE = 2\nexport const WAV_BITS_PER_SAMPLE = 16\nexport const WAV_PCM_MAX_POSITIVE = 0x7fff\nexport const WAV_PCM_MAX_NEGATIVE = 0x8000\nexport const WAV_DATA_OFFSET = 36\n\nexport const FRAME_HEADER_BITS = 16\nexport const FRAME_WORD_LENGTH_BITS = 4\nexport const FRAME_SCALE_FACTOR_BITS = 6\n\nexport const QUANTIZATION_SIGN_BIT_SHIFT = 1\nexport const MAX_WORD_LENGTH_INDEX = 15\n","/**\n * Stable ATRAC1 geometry, signal, allocation, and quantization tables.\n */\n\nimport {\n MAX_WORD_LENGTH_INDEX,\n QMF_ANALYSIS_TERMS,\n QMF_BANDS,\n QMF_SYNTHESIS_DELAY_ROWS,\n QMF_SYNTHESIS_TERMS,\n QMF_TAPS,\n} from './constants.js'\n\nexport const AEA_MAGIC = new Uint8Array([0x00, 0x08, 0x00, 0x00])\n\nexport const SPECS_PER_BFU = new Int32Array([\n 8, 8, 8, 8, 4, 4, 4, 4, 8, 8, 8, 8, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 7, 7,\n 7, 7, 9, 9, 9, 9, 10, 10, 10, 10, 12, 12, 12, 12, 12, 12, 12, 12, 20, 20, 20,\n 20, 20, 20, 20, 20,\n])\n\nexport const BFU_AMOUNTS = new Int32Array([20, 28, 32, 36, 40, 44, 48, 52])\nexport const BFU_BAND_BOUNDARIES = new Int32Array([20, 36, 52])\n\nexport const BFU_START_LONG = new Int32Array([\n 0, 8, 16, 24, 32, 36, 40, 44, 48, 56, 64, 72, 80, 86, 92, 98, 104, 110, 116,\n 122, 128, 134, 140, 146, 152, 159, 166, 173, 180, 189, 198, 207, 216, 226,\n 236, 246, 256, 268, 280, 292, 304, 316, 328, 340, 352, 372, 392, 412, 432,\n 452, 472, 492,\n])\n\nexport const BFU_START_SHORT = new Int32Array([\n 0, 32, 64, 96, 8, 40, 72, 104, 12, 44, 76, 108, 20, 52, 84, 116, 26, 58, 90,\n 122, 128, 160, 192, 224, 134, 166, 198, 230, 141, 173, 205, 237, 150, 182,\n 214, 246, 256, 288, 320, 352, 384, 416, 448, 480, 268, 300, 332, 364, 396,\n 428, 460, 492,\n])\n\nexport const WINDOW_SHORT = (() => {\n const table = new Float64Array(32)\n for (let i = 0; i < 32; i++) {\n table[i] = Math.sin(((i + 0.5) * Math.PI) / 64)\n }\n return table\n})()\n\nexport const QMF_COEFFS = new Float32Array([\n -0.00001461907, -0.00009205479, -0.000056157569, 0.00030117269, 0.0002422519,\n -0.00085293897, -0.0005205574, 0.0020340169, 0.00078333891, -0.0042153862,\n -0.00075614988, 0.0078402944, -0.000061169922, -0.01344162, 0.0024626821,\n 0.021736089, -0.007801671, -0.034090221, 0.01880949, 0.054326009,\n -0.043596379, -0.099384367, 0.13207909, 0.46424159,\n])\n\nexport const QMF_WINDOW = (() => {\n const window = new Float32Array(QMF_TAPS)\n for (let i = 0; i < 24; i++) {\n window[i] = QMF_COEFFS[i] * 2.0\n window[47 - i] = QMF_COEFFS[i] * 2.0\n }\n return window\n})()\n\nexport const QMF_EVEN = (() => {\n const even = new Float32Array(24)\n for (let i = 0; i < 24; i++) {\n even[i] = QMF_WINDOW[i * 2]\n }\n return even\n})()\n\nexport const QMF_ODD = (() => {\n const odd = new Float32Array(24)\n for (let i = 0; i < 24; i++) {\n odd[i] = QMF_WINDOW[i * 2 + 1]\n }\n return odd\n})()\n\n/** Sample positions read by each component of the configurable QMF analysis. */\nexport const QMF_ANALYSIS_SAMPLE_OFFSETS = (() => {\n const offsets = new Uint8Array(QMF_BANDS * QMF_ANALYSIS_TERMS)\n for (let term = 0; term < QMF_ANALYSIS_TERMS; term++) {\n offsets[term] = QMF_TAPS - 1 - term * QMF_BANDS\n offsets[QMF_ANALYSIS_TERMS + term] = QMF_TAPS - QMF_BANDS - term * QMF_BANDS\n }\n return offsets\n})()\n\n/** Prototype-filter coefficients in component-major QMF analysis order. */\nexport const QMF_ANALYSIS_FILTER_COEFFICIENTS = (() => {\n const coefficients = new Float32Array(QMF_BANDS * QMF_ANALYSIS_TERMS)\n coefficients.set(QMF_EVEN)\n coefficients.set(QMF_ODD, QMF_ANALYSIS_TERMS)\n return coefficients\n})()\n\n/** Dense modulation applied after Carta1 QMF analysis filtering. */\nexport const QMF_ANALYSIS_MODULATION_COEFFICIENTS = new Float32Array([\n 1, 1, 1, -1,\n])\n\n/* eslint-disable no-loss-of-precision -- Float32Array applies the intended float32 rounding. */\n\n/** Reference factors used by the optimized sixteen-band modulation path. */\nexport const QMF_ANALYSIS_PI_OVER_8_BUTTERFLY_SCALES = new Float32Array([\n 1.8477590084075928, 0.7653668522834778, 1.8477590084075928,\n 0.7653668522834778,\n])\n\n/** Reference half-angle factors used by sixteen-band modulation. */\nexport const QMF_ANALYSIS_HALF_BUTTERFLY_SCALES = new Float32Array([\n 0.7071067690849304, 0.2071067839860916, 1.2071068286895752,\n])\n\n/** Reference odd pi/32 cosines used by sixteen-band modulation. */\nexport const QMF_ANALYSIS_ODD_PI_OVER_32_COSINES = new Float32Array([\n 1.990369439125061, 1.913880705833435, 1.7638425827026367, 1.5460208654403687,\n 1.2687865495681763, 0.9427934885025024, 0.5805693864822388,\n 0.1960342824459076,\n])\n\n/** Reference odd pi/16 cosines used by sixteen-band modulation. */\nexport const QMF_ANALYSIS_ODD_PI_OVER_16_COSINES = new Float32Array([\n 1.9615705013275146, 1.662939190864563, 1.111140489578247, 0.39018064737319946,\n])\n\n/** Reference odd pi/64 cosines used by sixteen-band modulation. */\nexport const QMF_ANALYSIS_ODD_PI_OVER_64_COSINES = new Float32Array([\n 1.9975908994674683, 1.9783530235290527, 1.9400625228881836,\n 1.8830881118774414, 1.807978630065918, 1.7154572010040283, 1.606415033340454,\n 1.4819022417068481, 1.3431179523468018, 1.1913986206054688,\n 1.0282055139541626, 0.8551101684570312, 0.6737797260284424,\n 0.48596036434173584, 0.2934609651565552, 0.09813535213470459,\n])\n\n/* eslint-enable no-loss-of-precision */\n\n/** Delay-row offsets read by each sample of configurable QMF synthesis. */\nexport const QMF_SYNTHESIS_DELAY_ROW_OFFSETS = (() => {\n const offsets = new Uint8Array(QMF_BANDS * QMF_SYNTHESIS_TERMS)\n for (let sample = 0; sample < QMF_BANDS; sample++) {\n const sampleOffset = sample * QMF_SYNTHESIS_TERMS\n for (let term = 0; term < QMF_SYNTHESIS_TERMS; term++) {\n offsets[sampleOffset + term] = QMF_SYNTHESIS_DELAY_ROWS - 1 - term\n }\n }\n return offsets\n})()\n\n/** Delay components read by each sample of configurable QMF synthesis. */\nexport const QMF_SYNTHESIS_DELAY_COMPONENTS = (() => {\n const components = new Uint8Array(QMF_BANDS * QMF_SYNTHESIS_TERMS)\n components.fill(1, 0, QMF_SYNTHESIS_TERMS)\n return components\n})()\n\n/** Prototype-filter coefficients in output-sample-major QMF synthesis order. */\nexport const QMF_SYNTHESIS_FILTER_COEFFICIENTS = (() => {\n const coefficients = new Float64Array(QMF_BANDS * QMF_SYNTHESIS_TERMS)\n coefficients.set(QMF_ODD)\n coefficients.set(QMF_EVEN, QMF_SYNTHESIS_TERMS)\n return coefficients\n})()\n\n/** Dense modulation applied before Carta1 QMF synthesis filtering. */\nexport const QMF_SYNTHESIS_MODULATION_COEFFICIENTS = new Float64Array([\n 0.5, 0.5, 0.5, -0.5,\n])\n\nexport const MDCT_BAND_CONFIGS = [\n { size: 128, windowStart: 48 },\n { size: 128, windowStart: 48 },\n { size: 256, windowStart: 112 },\n]\n\nexport const WORD_LENGTH_BITS = new Int32Array([\n 0, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,\n])\n\nexport const SCALE_FACTORS = (() => {\n const table = new Float64Array(64)\n for (let i = 0; i < 64; i++) {\n table[i] = Math.pow(2.0, i / 3.0 - 21)\n }\n return table\n})()\n\nexport const INV_POWER_OF_TWO = (() => {\n const maxBits = WORD_LENGTH_BITS[MAX_WORD_LENGTH_INDEX]\n const table = new Float64Array(maxBits + 1)\n for (let bits = 0; bits <= maxBits; bits++) {\n table[bits] = Math.pow(2, -bits)\n }\n return table\n})()\n\nexport const WORD_LENGTH_DELTA_BITS = (() => {\n const table = new Int32Array(MAX_WORD_LENGTH_INDEX)\n for (let i = 0; i < MAX_WORD_LENGTH_INDEX; i++) {\n table[i] = (WORD_LENGTH_BITS[i + 1] - WORD_LENGTH_BITS[i]) | 0\n }\n return table\n})()\n\nexport const DISTORTION_DELTA_FACTORS = (() => {\n const table = new Float64Array(MAX_WORD_LENGTH_INDEX)\n table[0] = 2.0 - INV_POWER_OF_TWO[WORD_LENGTH_BITS[1]]\n for (let i = 1; i < MAX_WORD_LENGTH_INDEX; i++) {\n const bits1 = WORD_LENGTH_BITS[i] | 0\n const bits2 = WORD_LENGTH_BITS[i + 1] | 0\n table[i] = INV_POWER_OF_TWO[bits1] - INV_POWER_OF_TWO[bits2]\n }\n return table\n})()\n","/**\n * Carta1 AEA container boundary.\n */\n\nimport {\n AEA_CHANNEL_COUNT_OFFSET,\n AEA_FRAME_COUNT_OFFSET,\n AEA_HEADER_SIZE,\n AEA_PRIMING_SAMPLE_COUNT_OFFSET,\n AEA_SOURCE_SAMPLE_COUNT_OFFSET,\n AEA_TITLE_OFFSET,\n AEA_TITLE_SIZE,\n STREAM_PRIMING_SAMPLES,\n} from '../core/constants.js'\nimport { AEA_MAGIC } from '../core/tables.js'\n\n/**\n * AEA file-format handler.\n */\nexport class AeaFile {\n /**\n * Create an AEA header.\n *\n * @param {string} [title='']\n * @param {number} [frameCount=0]\n * @param {number} [channelCount=1]\n * @param {number} [sampleCount=0]\n * @param {number} [primingSampleCount=STREAM_PRIMING_SAMPLES]\n * @returns {Uint8Array}\n */\n static createHeader(\n title = '',\n frameCount = 0,\n channelCount = 1,\n sampleCount = 0,\n primingSampleCount = STREAM_PRIMING_SAMPLES\n ) {\n const header = new Uint8Array(AEA_HEADER_SIZE)\n const view = new DataView(header.buffer)\n header.set(AEA_MAGIC, 0)\n\n const titleBytes = new TextEncoder().encode(title)\n header.set(\n titleBytes.subarray(0, Math.min(titleBytes.length, AEA_TITLE_SIZE - 1)),\n AEA_TITLE_OFFSET\n )\n view.setUint32(AEA_FRAME_COUNT_OFFSET, frameCount, true)\n header[AEA_CHANNEL_COUNT_OFFSET] = channelCount\n view.setUint32(\n AEA_PRIMING_SAMPLE_COUNT_OFFSET,\n primingSampleCount >>> 0,\n true\n )\n view.setUint32(AEA_SOURCE_SAMPLE_COUNT_OFFSET, sampleCount >>> 0, true)\n return header\n }\n\n /**\n * Parse an AEA header.\n *\n * @param {Uint8Array} header\n * @returns {object} Container metadata.\n * @throws {Error} If the header is invalid\n */\n static parseHeader(header) {\n if (header.length !== AEA_HEADER_SIZE) {\n throw new Error(`Header must be ${AEA_HEADER_SIZE} bytes`)\n }\n\n for (let i = 0; i < AEA_MAGIC.length; i++) {\n if (header[i] !== AEA_MAGIC[i]) {\n throw new Error('Invalid AEA file')\n }\n }\n\n const view = new DataView(\n header.buffer,\n header.byteOffset,\n header.byteLength\n )\n const titleEnd = header.indexOf(0, AEA_TITLE_OFFSET)\n const titleLength =\n titleEnd === -1 ? AEA_TITLE_SIZE : titleEnd - AEA_TITLE_OFFSET\n const title = new TextDecoder().decode(\n header.subarray(AEA_TITLE_OFFSET, AEA_TITLE_OFFSET + titleLength)\n )\n\n return {\n title,\n frameCount: view.getUint32(AEA_FRAME_COUNT_OFFSET, true),\n channelCount: header[AEA_CHANNEL_COUNT_OFFSET],\n primingSampleCount: view.getUint32(AEA_PRIMING_SAMPLE_COUNT_OFFSET, true),\n sampleCount: view.getUint32(AEA_SOURCE_SAMPLE_COUNT_OFFSET, true),\n }\n }\n}\n","/**\n * Carta1 Audio Codec - Encoder Options\n *\n * This module provides configuration management for the ATRAC1 encoder,\n * including parameter validation and metadata for UI controls.\n */\n\n/**\n * Configuration options for the ATRAC1 encoder\n */\nclass EncoderOptions {\n /**\n * Create a new EncoderOptions instance\n * @param {Object} options - Initial option values\n */\n constructor(options = {}) {\n this.values = {\n transientThresholdLow: 1.0,\n transientThresholdMid: 1.5,\n transientThresholdHigh: 2.0,\n allocationBias: 1.0,\n fixedBlockModes: null,\n }\n\n this.metadata = {\n transientThresholdLow: {\n default: this.values.transientThresholdLow,\n name: 'Low Band Transient Threshold',\n description:\n 'Controls the transient detection threshold for the low frequency band (0-5.5kHz). Lower values make detection more sensitive, triggering short blocks more easily. Higher values require stronger transients.',\n range: [0.01, 2],\n step: 0.01,\n },\n transientThresholdMid: {\n default: this.values.transientThresholdMid,\n name: 'Mid Band Transient Threshold',\n description:\n 'Controls the transient detection threshold for the mid frequency band (5.5-11kHz). Lower values make detection more sensitive, triggering short blocks more easily. Higher values require stronger transients.',\n range: [0.01, 3],\n step: 0.01,\n },\n transientThresholdHigh: {\n default: this.values.transientThresholdHigh,\n name: 'High Band Transient Threshold',\n description:\n 'Controls the transient detection threshold for the high frequency band (11-22kHz). Lower values make detection more sensitive, triggering short blocks more easily. Higher values require stronger transients.',\n range: [0.01, 4],\n step: 0.01,\n },\n allocationBias: {\n default: this.values.allocationBias,\n name: 'Bit allocation bias',\n description:\n 'Controls how bits are distributed across the frequency spectrum during allocation. Higher values focus more bits on loud spectral components, while lower values spread bits more evenly across frequencies.',\n range: [0.0, 5.0],\n step: 0.01,\n },\n fixedBlockModes: {\n default: this.values.fixedBlockModes,\n name: 'Fixed block modes',\n description:\n 'Override transient detection and use fixed block modes. Format: [low, mid, high] where low/mid can be 0 or 2, high can be 0 or 3. When set, transient detection is skipped.',\n type: 'array',\n },\n }\n\n // Apply user-provided options\n if (options) {\n this.setOptions(options)\n }\n }\n\n /**\n * Set multiple options at once\n * @param {Object} options - Object containing option key-value pairs\n */\n setOptions(options) {\n for (const [key, value] of Object.entries(options)) {\n if (key in this.values) {\n this.setValue(key, value)\n }\n }\n }\n\n /**\n * Set a single option value with validation\n * @param {string} key - Option key\n * @param {*} value - Option value\n * @throws {Error} If key is unknown or value is out of range\n */\n setValue(key, value) {\n if (!(key in this.metadata)) {\n throw new Error(`Unknown option: ${key}`)\n }\n\n const meta = this.metadata[key]\n\n // Skip range validation for array types\n if (meta.type !== 'array') {\n const [min, max] = meta.range\n if (value < min || value > max) {\n throw new Error(\n `Value for ${key} must be between ${min} and ${max}, got ${value}`\n )\n }\n }\n\n this.values[key] = value\n }\n\n /**\n * Get the value of an option\n * @param {string} key - Option key\n * @returns {*} Option value\n * @throws {Error} If key is unknown\n */\n getValue(key) {\n if (!(key in this.values)) {\n throw new Error(`Unknown option: ${key}`)\n }\n return this.values[key]\n }\n\n get transientThresholdLow() {\n return this.values.transientThresholdLow\n }\n\n get transientThresholdMid() {\n return this.values.transientThresholdMid\n }\n\n get transientThresholdHigh() {\n return this.values.transientThresholdHigh\n }\n\n get allocationBias() {\n return this.values.allocationBias\n }\n\n get fixedBlockModes() {\n return this.values.fixedBlockModes\n }\n\n getMetadata(key) {\n return this.metadata[key]\n }\n\n getAllMetadata() {\n return { ...this.metadata }\n }\n\n reset() {\n for (const [key, meta] of Object.entries(this.metadata)) {\n this.values[key] = meta.default\n }\n }\n\n toObject() {\n return {\n values: { ...this.values },\n metadata: { ...this.metadata },\n }\n }\n}\n\nexport { EncoderOptions }\n","/**\n * Carta1 bitstream syntax operators.\n *\n * This module provides low-level bitstream packing and unpacking operations\n * for reading and writing ATRAC1 frame data with bit-level precision.\n */\n\n/**\n * Reject field widths outside the shared bitstream primitive's safe range.\n *\n * @param {number} bitCount\n * @returns {void}\n */\nfunction assertBitCount(bitCount) {\n if (!Number.isInteger(bitCount) || bitCount < 0 || bitCount > 32) {\n throw new RangeError(\n `Bit count must be an integer in 0..32, got ${bitCount}`\n )\n }\n}\n\n/**\n * Pack bits into a buffer at a specific bit position\n * @param {Uint8Array} buffer - Destination buffer\n * @param {number} bitPosition - Bit position to start writing at\n * @param {number} value - Value to pack\n * @param {number} bitCount - Number of bits to pack\n * @returns {void}\n */\nexport function packBits(buffer, bitPosition, value, bitCount) {\n assertBitCount(bitCount)\n if (bitCount === 0) return\n\n let byteIndex = Math.floor(bitPosition / 8)\n let bitOffset = bitPosition % 8\n\n const unsignedValue = Number(value) >>> 0\n\n let bitsWritten = 0\n while (bitsWritten < bitCount && byteIndex < buffer.length) {\n const bitsAvailable = 8 - bitOffset\n const bitsToWrite = Math.min(bitCount - bitsWritten, bitsAvailable)\n\n const shift = bitCount - bitsWritten - bitsToWrite\n const valueBits = (unsignedValue >>> shift) & (2 ** bitsToWrite - 1)\n\n const mask = (2 ** bitsToWrite - 1) << (bitsAvailable - bitsToWrite)\n buffer[byteIndex] =\n (buffer[byteIndex] & ~mask) | (valueBits << (bitsAvailable - bitsToWrite))\n\n bitsWritten += bitsToWrite\n byteIndex++\n bitOffset = 0\n }\n}\n\n/**\n * Unpack bits from a buffer at a specific bit position\n * @param {Uint8Array} buffer - Source buffer\n * @param {number} bitPosition - Bit position to start reading from\n * @param {number} bitCount - Number of bits to unpack\n * @returns {number} Unpacked unsigned value\n */\nexport function unpackBits(buffer, bitPosition, bitCount) {\n assertBitCount(bitCount)\n if (bitCount === 0) return 0\n\n let byteIndex = Math.floor(bitPosition / 8)\n let bitOffset = bitPosition % 8\n let value = 0\n\n for (let bitsRead = 0; bitsRead < bitCount && byteIndex < buffer.length;) {\n const bitsAvailable = 8 - bitOffset\n const bitsToRead = Math.min(bitCount - bitsRead, bitsAvailable)\n\n const mask = 2 ** bitsToRead - 1\n const bits = (buffer[byteIndex] >> (bitsAvailable - bitsToRead)) & mask\n\n value = (value * 2 ** bitsToRead + bits) >>> 0\n bitsRead += bitsToRead\n byteIndex++\n bitOffset = 0\n }\n\n return value\n}\n\n/**\n * Unpack signed bits from a buffer at a specific bit position\n * @param {Uint8Array} buffer - Source buffer\n * @param {number} bitPosition - Bit position to start reading from\n * @param {number} bitCount - Number of bits to unpack\n * @returns {number} Unpacked signed value (two's complement)\n */\nexport function unpackSignedBits(buffer, bitPosition, bitCount) {\n assertBitCount(bitCount)\n if (bitCount === 0) return 0\n const value = unpackBits(buffer, bitPosition, bitCount)\n const signBit = 2 ** (bitCount - 1)\n return value >= signBit ? value - 2 ** bitCount : value\n}\n","/**\n * Carta1 structured-frame syntax.\n *\n * Handles serialization and deserialization of ATRAC1 audio frames.\n * Provides functions for packing encoded frame data into binary format and unpacking\n * it back into structured data for processing.\n *\n * The module manages:\n * - Frame data serialization/deserialization with proper bit packing\n * - AEA file header creation and parsing\n * - Binary format compliance for ATRAC1 specification\n */\n\nimport {\n SOUND_UNIT_SIZE,\n FRAME_HEADER_BITS,\n FRAME_WORD_LENGTH_BITS,\n FRAME_SCALE_FACTOR_BITS,\n} from '../core/constants.js'\nimport { BFU_AMOUNTS, SPECS_PER_BFU, WORD_LENGTH_BITS } from '../core/tables.js'\nimport { packBits, unpackBits, unpackSignedBits } from './bitstream.js'\n\n/**\n * Serializes encoded frame data into binary format\n * @param {object} frameData - The encoded frame data to serialize\n * @returns {Uint8Array} Serialized frame data buffer\n */\nexport function serializeFrame(frameData) {\n const buffer = new Uint8Array(SOUND_UNIT_SIZE)\n const view = new DataView(buffer.buffer)\n\n // Pack header (16 bits)\n const bfuIndex = BFU_AMOUNTS.indexOf(frameData.nBfu)\n const header =\n ((2 - frameData.blockModes[0]) << 14) |\n ((2 - frameData.blockModes[1]) << 12) |\n ((3 - frameData.blockModes[2]) << 10) |\n (bfuIndex << 5)\n\n view.setUint16(0, header, false)\n let bitPosition = FRAME_HEADER_BITS\n\n // Pack word lengths (4 bits each)\n for (let i = 0; i < frameData.nBfu; i++) {\n packBits(\n buffer,\n bitPosition,\n frameData.wordLengthIndices[i],\n FRAME_WORD_LENGTH_BITS\n )\n bitPosition += FRAME_WORD_LENGTH_BITS\n }\n\n // Pack scale factors (6 bits each)\n for (let i = 0; i < frameData.nBfu; i++) {\n packBits(\n buffer,\n bitPosition,\n frameData.scaleFactorIndices[i],\n FRAME_SCALE_FACTOR_BITS\n )\n bitPosition += FRAME_SCALE_FACTOR_BITS\n }\n\n // Pack quantized coefficients\n for (let i = 0; i < frameData.nBfu; i++) {\n const bitsPerSample = WORD_LENGTH_BITS[frameData.wordLengthIndices[i]]\n if (bitsPerSample > 0) {\n const coefficients = frameData.quantizedCoefficients[i]\n for (const coefficient of coefficients) {\n const value =\n coefficient < 0 ? coefficient + (1 << bitsPerSample) : coefficient\n packBits(buffer, bitPosition, value, bitsPerSample)\n bitPosition += bitsPerSample\n }\n }\n }\n\n // Zero padding at end\n buffer[SOUND_UNIT_SIZE - 3] = 0\n buffer[SOUND_UNIT_SIZE - 2] = 0\n buffer[SOUND_UNIT_SIZE - 1] = 0\n\n return buffer\n}\n\n/**\n * Deserializes binary frame data back into structured format\n * @param {Uint8Array} buffer - Binary frame data buffer\n * @returns {object} Deserialized frame data\n * @throws {Error} If buffer size is invalid\n */\nexport function deserializeFrame(buffer) {\n if (buffer.length !== SOUND_UNIT_SIZE) {\n throw new Error(`Frame must be ${SOUND_UNIT_SIZE} bytes`)\n }\n\n const view = new DataView(buffer.buffer, buffer.byteOffset, buffer.byteLength)\n\n // Unpack header\n const header = view.getUint16(0, false)\n const blockModes = [\n 2 - ((header >> 14) & 3),\n 2 - ((header >> 12) & 3),\n 3 - ((header >> 10) & 3),\n ]\n const bfuIndex = (header >> 5) & 7\n const nBfu = BFU_AMOUNTS[bfuIndex]\n\n let bitPosition = FRAME_HEADER_BITS\n\n // Unpack word lengths\n const wordLengthIndices = new Int32Array(nBfu)\n for (let i = 0; i < nBfu; i++) {\n wordLengthIndices[i] = unpackBits(\n buffer,\n bitPosition,\n FRAME_WORD_LENGTH_BITS\n )\n bitPosition += FRAME_WORD_LENGTH_BITS\n }\n\n // Unpack scale factors\n const scaleFactorIndices = new Int32Array(nBfu)\n for (let i = 0; i < nBfu; i++) {\n scaleFactorIndices[i] = unpackBits(\n buffer,\n bitPosition,\n FRAME_SCALE_FACTOR_BITS\n )\n bitPosition += FRAME_SCALE_FACTOR_BITS\n }\n\n // Unpack coefficients\n const quantizedCoefficients = []\n for (let i = 0; i < nBfu; i++) {\n const bitsPerSample = WORD_LENGTH_BITS[wordLengthIndices[i]]\n const bfuSize = SPECS_PER_BFU[i]\n const coefficients = new Int32Array(bfuSize)\n\n if (bitsPerSample > 0) {\n for (let j = 0; j < bfuSize; j++) {\n coefficients[j] = unpackSignedBits(buffer, bitPosition, bitsPerSample)\n bitPosition += bitsPerSample\n }\n }\n\n quantizedCoefficients.push(coefficients)\n }\n\n return {\n nBfu,\n scaleFactorIndices,\n wordLengthIndices,\n quantizedCoefficients,\n blockModes,\n }\n}\n","/**\n * Carta1 PCM boundary conversions.\n */\n\nimport {\n SAMPLE_RATE,\n SAMPLES_PER_FRAME,\n WAV_BITS_PER_SAMPLE,\n WAV_BYTES_PER_SAMPLE,\n WAV_DATA_OFFSET,\n WAV_HEADER_SIZE,\n WAV_PCM_MAX_NEGATIVE,\n WAV_PCM_MAX_POSITIVE,\n} from '../core/constants.js'\n\n/**\n * Write a four-character code.\n *\n * @param {DataView} output\n * @param {number} offset\n * @param {string} value\n */\nfunction writeFourCc(output, offset, value) {\n for (let i = 0; i < value.length; i++) {\n output.setUint8(offset + i, value.charCodeAt(i))\n }\n}\n\n/**\n * Join complete PCM frames into one channel.\n *\n * @param {Float32Array[]} frames\n * @returns {Float32Array}\n */\nexport function joinChannelFrames(frames) {\n const sampleCount = frames.reduce((total, frame) => total + frame.length, 0)\n const channel = new Float32Array(sampleCount)\n let offset = 0\n\n for (const frame of frames) {\n channel.set(frame, offset)\n offset += frame.length\n }\n return channel\n}\n\n/**\n * Split planar PCM buffers into complete zero-padded codec frames.\n *\n * @param {Float32Array[]} buffers\n * @param {number} [frameSize=SAMPLES_PER_FRAME]\n * @returns {Generator<Float32Array>|Generator<[Float32Array, Float32Array]>}\n * @throws {Error} If the channel count is unsupported\n */\nexport function* frameBufferToFrames(buffers, frameSize = SAMPLES_PER_FRAME) {\n if (\n !Array.isArray(buffers) ||\n (buffers.length !== 1 && buffers.length !== 2) ||\n !buffers.every(\n (buffer) =>\n buffer instanceof Float32Array && buffer.length === buffers[0].length\n ) ||\n !Number.isInteger(frameSize) ||\n frameSize < 1\n ) {\n throw new RangeError(\n 'ATRAC1 framing requires one or two equally sized Float32 channels and a positive integer frame size'\n )\n }\n if (buffers.length === 1) {\n const [left] = buffers\n for (let offset = 0; offset < left.length; offset += frameSize) {\n const frame = new Float32Array(frameSize)\n frame.set(left.subarray(offset, offset + frameSize))\n yield frame\n }\n return\n }\n\n if (buffers.length === 2) {\n const [left, right] = buffers\n const sampleCount = left.length\n for (let offset = 0; offset < sampleCount; offset += frameSize) {\n const leftFrame = new Float32Array(frameSize)\n const rightFrame = new Float32Array(frameSize)\n leftFrame.set(left.subarray(offset, offset + frameSize))\n rightFrame.set(right.subarray(offset, offset + frameSize))\n yield [leftFrame, rightFrame]\n }\n return\n }\n}\n\n/**\n * Convert one normalized sample to signed PCM16.\n *\n * @param {number} sample\n * @returns {number}\n */\nexport function floatToPcm16(sample) {\n const clipped = Math.max(-1, Math.min(1, sample))\n return clipped < 0\n ? clipped * WAV_PCM_MAX_NEGATIVE\n : clipped * WAV_PCM_MAX_POSITIVE\n}\n\n/**\n * Create a PCM WAVE header.\n *\n * @param {Object} options\n * @param {number} options.sampleCount\n * @param {number} options.sampleRate\n * @param {number} options.channels\n * @returns {Uint8Array}\n */\nexport function createPcmWaveHeader({ sampleCount, sampleRate, channels }) {\n const byteRate = sampleRate * channels * WAV_BYTES_PER_SAMPLE\n const blockAlign = channels * WAV_BYTES_PER_SAMPLE\n const dataSize = sampleCount * blockAlign\n const output = new Uint8Array(WAV_HEADER_SIZE)\n const view = new DataView(output.buffer)\n\n writeFourCc(view, 0, 'RIFF')\n view.setUint32(4, WAV_DATA_OFFSET + dataSize, true)\n writeFourCc(view, 8, 'WAVE')\n writeFourCc(view, 12, 'fmt ')\n view.setUint32(16, 16, true)\n view.setUint16(20, 1, true)\n view.setUint16(22, channels, true)\n view.setUint32(24, sampleRate, true)\n view.setUint32(28, byteRate, true)\n view.setUint16(32, blockAlign, true)\n view.setUint16(34, WAV_BITS_PER_SAMPLE, true)\n writeFourCc(view, 36, 'data')\n view.setUint32(40, dataSize, true)\n return output\n}\n\n/**\n * Interleave planar normalized channels as PCM16.\n *\n * @param {Float32Array[]} channels\n * @returns {Uint8Array}\n */\nexport function interleavePcm16(channels) {\n if (\n !Array.isArray(channels) ||\n channels.length < 1 ||\n !channels.every(\n (channel) =>\n channel instanceof Float32Array && channel.length === channels[0].length\n )\n ) {\n throw new RangeError('PCM must contain equally sized Float32 channels')\n }\n const sampleCount = channels[0].length\n const output = new Uint8Array(\n sampleCount * channels.length * WAV_BYTES_PER_SAMPLE\n )\n const view = new DataView(output.buffer)\n let offset = 0\n\n for (let sample = 0; sample < sampleCount; sample++) {\n for (const channel of channels) {\n view.setInt16(offset, floatToPcm16(channel[sample]), true)\n offset += WAV_BYTES_PER_SAMPLE\n }\n }\n return output\n}\n\n/**\n * Create a complete PCM WAVE byte image from planar channels.\n *\n * @param {Float32Array[]} channels\n * @param {Object} [options]\n * @param {number} [options.sampleRate=SAMPLE_RATE]\n * @returns {Uint8Array}\n */\nexport function createPcmWave(channels, options = {}) {\n const { sampleRate = SAMPLE_RATE } = options\n const pcm = interleavePcm16(channels)\n const sampleCount = channels[0].length\n const header = createPcmWaveHeader({\n sampleCount,\n sampleRate,\n channels: channels.length,\n })\n const output = new Uint8Array(header.length + pcm.length)\n output.set(header)\n output.set(pcm, header.length)\n return output\n}\n","/**\n * Carta1 Audio Codec - Spectrum Quantization\n *\n * This module handles the quantization and dequantization of MDCT frequency coefficients\n * for the Carta1 audio codec. It provides functions to convert floating-point frequency\n * domain data into integer representations suitable for bitstream encoding.\n *\n * The quantization process uses configurable scale factors to maintain audio quality\n * while achieving the target compression ratio. The module supports both uniform\n * and non-uniform quantization schemes based on perceptual importance.\n */\n\nimport { QUANTIZATION_SIGN_BIT_SHIFT } from '../core/constants.js'\nimport { SCALE_FACTORS } from '../core/tables.js'\n\n/**\n * Quantize coefficients.\n * @param {Float32Array} coefficients\n * @param {number} scaleFactorIndex\n * @param {number} bitsPerSample\n * @returns {Int32Array} out\n */\nexport function quantize(coefficients, scaleFactorIndex, bitsPerSample) {\n const length = coefficients.length\n const out = new Int32Array(length)\n if (bitsPerSample === 0 || scaleFactorIndex === 0) {\n out.fill(0, 0, length)\n return out\n }\n\n const scaleFactor = SCALE_FACTORS[scaleFactorIndex]\n const quantRange = (1 << (bitsPerSample - QUANTIZATION_SIGN_BIT_SHIFT)) - 1\n const normFactor = quantRange / scaleFactor\n\n const hi = quantRange\n const lo = -quantRange\n\n for (let i = 0; i < length; i++) {\n const x = coefficients[i] * normFactor\n const y = (x + (x >= 0 ? 0.5 : -0.5)) | 0\n out[i] = y > hi ? hi : y < lo ? lo : y\n }\n\n return out\n}\n\n/**\n * Dequantize coefficients.\n * @param {Int32Array} quantized\n * @param {number} scaleFactorIndex\n * @param {number} bitsPerSample\n * @returns {Float32Array}\n */\nexport function dequantize(quantized, scaleFactorIndex, bitsPerSample) {\n if (bitsPerSample === 0 || scaleFactorIndex === 0) {\n return new Float32Array(quantized.length)\n }\n\n const scaleFactor = SCALE_FACTORS[scaleFactorIndex]\n const quantRange = (1 << (bitsPerSample - QUANTIZATION_SIGN_BIT_SHIFT)) - 1\n\n const deq = new Float32Array(quantized.length)\n for (let i = 0; i < quantized.length; i++) {\n deq[i] = (quantized[i] * scaleFactor) / quantRange\n }\n return deq\n}\n","/**\n * Carta1 dequantization stage.\n */\n\nimport {\n BFU_BAND_BOUNDARIES,\n BFU_START_LONG,\n BFU_START_SHORT,\n WORD_LENGTH_BITS,\n} from './core/tables.js'\nimport * as spectrumQuantization from './quantization/spectrum.js'\n\n/**\n * Reconstruct the continuous ATRAC1 spectrum.\n *\n * @returns {Function}\n */\nexport function dequantize() {\n /**\n * @param {object} frameData\n * @returns {object}\n */\n return (frameData) => {\n const coefficients = new Float32Array(512)\n const {\n nBfu,\n scaleFactorIndices,\n wordLengthIndices,\n quantizedCoefficients,\n blockModes,\n } = frameData\n\n for (let bfu = 0; bfu < nBfu; bfu++) {\n const bitsPerSample = WORD_LENGTH_BITS[wordLengthIndices[bfu]]\n let band = 0\n if (bfu >= BFU_BAND_BOUNDARIES[0]) band = 1\n if (bfu >= BFU_BAND_BOUNDARIES[1]) band = 2\n\n const position =\n blockModes[band] === 0 ? BFU_START_LONG[bfu] : BFU_START_SHORT[bfu]\n\n if (bitsPerSample > 0) {\n const dequantized = spectrumQuantization.dequantize(\n quantizedCoefficients[bfu],\n scaleFactorIndices[bfu],\n bitsPerSample\n )\n coefficients.set(dequantized, position)\n }\n }\n\n return { coefficients, blockModes }\n }\n}\n","/**\n * Carta1 stream state and reusable scratch.\n */\n\nimport {\n QMF_ANALYSIS_DELAY_SAMPLES,\n QMF_BANDS,\n QMF_HIGH_BAND_DELAY,\n QMF_SYNTHESIS_DELAY_SAMPLES,\n} from './core/constants.js'\n\n/** Persistent delay state for one two-band QMF synthesis stage. */\nclass QmfSynthesisState {\n constructor() {\n this.delay = new Float32Array(QMF_SYNTHESIS_DELAY_SAMPLES)\n this.delayRow = 0\n }\n}\n\n/**\n * Values with meaning across chronological frames.\n */\nclass History {\n constructor() {\n this.qmfAnalysisDelays = {\n lowBand: new Float32Array(QMF_ANALYSIS_DELAY_SAMPLES),\n midBand: new Float32Array(QMF_ANALYSIS_DELAY_SAMPLES),\n }\n this.qmfSynthesisStates = {\n lowBand: new QmfSynthesisState(),\n midBand: new QmfSynthesisState(),\n }\n this.qmfHighBandDelay = new Float32Array(QMF_HIGH_BAND_DELAY)\n\n this.transientDetection = [\n new Float32Array(64),\n new Float32Array(64),\n new Float32Array(128),\n ]\n\n this.mdctOverlap = [\n new Float32Array(32),\n new Float32Array(32),\n new Float32Array(32),\n ]\n\n this.imdctOverlap = [\n new Float32Array(256),\n new Float32Array(256),\n new Float32Array(512),\n ]\n }\n}\n\n/**\n * Reusable storage with no meaning between operations.\n */\nclass Scratch {\n constructor() {\n this.transformBuffers = {\n 64: new Float32Array(64),\n 128: new Float32Array(128),\n 256: new Float32Array(256),\n 512: new Float32Array(512),\n }\n\n this.qmfScratch = {\n analysisWindows: {\n 128: new Float32Array(QMF_ANALYSIS_DELAY_SAMPLES + 128),\n 256: new Float32Array(QMF_ANALYSIS_DELAY_SAMPLES + 256),\n 512: new Float32Array(QMF_ANALYSIS_DELAY_SAMPLES + 512),\n },\n highBandWindows: {\n 128: new Float32Array(QMF_HIGH_BAND_DELAY + 128),\n 256: new Float32Array(QMF_HIGH_BAND_DELAY + 256),\n },\n polyphase: new Float32Array(QMF_BANDS),\n extended: new Float64Array(QMF_BANDS),\n bands: new Float32Array(QMF_BANDS),\n }\n\n this.mdctBuffers = {\n 16: {\n real: new Float32Array(16),\n imaginary: new Float32Array(16),\n },\n 64: {\n real: new Float32Array(64),\n imaginary: new Float32Array(64),\n },\n 128: {\n real: new Float32Array(128),\n imaginary: new Float32Array(128),\n },\n }\n\n this.reversalBuffers = {\n 32: new Float32Array(32),\n 128: new Float32Array(128),\n 256: new Float32Array(256),\n }\n }\n}\n\n/**\n * Own one chronological stream's history and reusable storage.\n */\nexport class BufferPool {\n constructor() {\n Object.assign(this, new History(), new Scratch())\n }\n}\n","/**\n * Carta1 Audio Codec - Utilities\n *\n * This module provides common utility functions for the ATRAC1 codec.\n */\n\n/**\n * Throws an error with the given message\n * @param {string} msg - Error message\n * @throws {Error} Always throws an error with the provided message\n */\nexport function throwError(msg) {\n throw new Error(msg)\n}\n\n/**\n * Compose stateful stage factories once and return the reusable frame path.\n *\n * @param {*} context Shared stage ownership and persistent state.\n * @param {...Function} stages Ordered stage factories.\n * @returns {Function} Reusable composed frame operation.\n */\nexport function pipe(context, ...stages) {\n const operations = stages.map((stage) => stage(context))\n return (input) =>\n operations.reduce((value, operation) => operation(value), input)\n}\n","/** Complex radix-2 Fast Fourier Transform. */\n\nexport class FFT {\n /**\n * Transform split complex data in place.\n *\n * @param {Float32Array} real Real input and output components.\n * @param {Float32Array} imaginary Imaginary input and output components.\n */\n static transform(real, imaginary) {\n const size = real.length\n if (size === 1) return\n\n const bits = Math.log2(size)\n for (let index = 0; index < size; index++) {\n let reversed = 0\n let remaining = index\n for (let bit = 0; bit < bits; bit++) {\n reversed = (reversed << 1) | (remaining & 1)\n remaining >>= 1\n }\n if (reversed > index) {\n const realValue = real[index]\n real[index] = real[reversed]\n real[reversed] = realValue\n const imaginaryValue = imaginary[index]\n imaginary[index] = imaginary[reversed]\n imaginary[reversed] = imaginaryValue\n }\n }\n\n for (let stride = 2; stride <= size; stride <<= 1) {\n const halfStride = stride >> 1\n const angle = (-2 * Math.PI) / stride\n const stepReal = Math.cos(angle)\n const stepImaginary = Math.sin(angle)\n\n for (let start = 0; start < size; start += stride) {\n let twiddleReal = 1\n let twiddleImaginary = 0\n\n for (let offset = 0; offset < halfStride; offset++) {\n const evenIndex = start + offset\n const oddIndex = evenIndex + halfStride\n const evenReal = real[evenIndex]\n const evenImaginary = imaginary[evenIndex]\n const oddReal = real[oddIndex]\n const oddImaginary = imaginary[oddIndex]\n const rotatedReal =\n oddReal * twiddleReal - oddImaginary * twiddleImaginary\n const rotatedImaginary =\n oddReal * twiddleImaginary + oddImaginary * twiddleReal\n\n real[evenIndex] = evenReal + rotatedReal\n imaginary[evenIndex] = evenImaginary + rotatedImaginary\n real[oddIndex] = evenReal - rotatedReal\n imaginary[oddIndex] = evenImaginary - rotatedImaginary\n\n const nextReal =\n twiddleReal * stepReal - twiddleImaginary * stepImaginary\n twiddleImaginary =\n twiddleReal * stepImaginary + twiddleImaginary * stepReal\n twiddleReal = nextReal\n }\n }\n }\n }\n}\n","/**\n * Modified discrete cosine transforms backed by a complex FFT.\n *\n * The evaluation order is part of Carta1's numerical contract. The staged\n * Float32 decomposition used by Carta5 is mathematically equivalent but does\n * not preserve Carta1's encoded output or perceptual-quality floor.\n */\n\nimport { FFT } from './fft.js'\nimport { throwError } from '../utils.js'\n\n/**\n * Base class for MDCT and IMDCT transforms\n */\nclass MdctBase {\n constructor(size, scale) {\n this.size = size\n this.halfSize = size >> 1\n this.quarterSize = size >> 2\n this.fftSize = this.halfSize >> 1\n\n const alpha = (2.0 * Math.PI) / (8.0 * size)\n const omega = (2.0 * Math.PI) / size\n const scaleRoot = Math.sqrt(scale / size)\n\n this.sinCosTable = new Float64Array(this.halfSize)\n for (let i = 0; i < this.quarterSize; i++) {\n const angle = omega * i + alpha\n this.sinCosTable[i * 2] = scaleRoot * Math.cos(angle)\n this.sinCosTable[i * 2 + 1] = scaleRoot * Math.sin(angle)\n }\n }\n}\n\n/**\n * Forward MDCT transform\n */\nexport class MDCT extends MdctBase {\n constructor(size, scale) {\n super(size, scale)\n }\n\n /**\n * Perform forward MDCT transform\n * @param {Float32Array} input - Time-domain input samples\n * @param {Object} mdctBuffers - Optional work buffers for FFT\n * @returns {Float32Array} Frequency-domain MDCT coefficients\n */\n transform(\n input,\n mdctBuffers = null,\n destination = null,\n destinationOffset = 0\n ) {\n const buffers =\n mdctBuffers?.[this.fftSize] ??\n throwError(`MDCT.transform: mdctBuffers[${this.fftSize}] is required`)\n const real =\n buffers?.real ??\n throwError(\n `MDCT.transform: mdctBuffers[${this.fftSize}].real is required`\n )\n const imag =\n buffers?.imaginary ??\n throwError(\n `MDCT.transform: mdctBuffers[${this.fftSize}].imaginary is required`\n )\n\n const n4 = this.quarterSize\n const n34 = 3 * n4\n\n real.fill(0)\n imag.fill(0)\n\n // Pre-FFT butterfly\n for (let i = 0; i < n4; i += 2) {\n const i1 = n34 - 1 - i\n const i2 = n34 + i\n const i3 = n4 + i\n const i4 = n4 - 1 - i\n\n const r = input[i1] + input[i2]\n const im = input[i3] - input[i4]\n const c = this.sinCosTable[i]\n const s = this.sinCosTable[i + 1]\n\n real[i >> 1] = r * c + im * s\n imag[i >> 1] = im * c - r * s\n }\n\n for (let i = n4; i < this.halfSize; i += 2) {\n const idx = i >> 1\n const i1 = n34 - 1 - i\n const i2 = i - n4\n const i3 = n4 + i\n const i4 = 5 * n4 - 1 - i\n\n const r = input[i1] - input[i2]\n const im = input[i3] + input[i4]\n const c = this.sinCosTable[i]\n const s = this.sinCosTable[i + 1]\n\n real[idx] = r * c + im * s\n imag[idx] = im * c - r * s\n }\n\n FFT.transform(real, imag)\n\n // Post-FFT processing\n const output = destination ?? new Float32Array(this.halfSize)\n for (let i = 0; i < this.fftSize; i++) {\n const c = this.sinCosTable[i * 2]\n const s = this.sinCosTable[i * 2 + 1]\n const re = real[i]\n const im = imag[i]\n\n output[destinationOffset + i * 2] = -re * c - im * s\n output[destinationOffset + this.halfSize - 1 - i * 2] = -re * s + im * c\n }\n\n return output\n }\n}\n\n/**\n * Inverse MDCT transform\n */\nexport class IMDCT extends MdctBase {\n constructor(size, scale = null) {\n super(size, scale || size)\n }\n\n /**\n * Perform inverse MDCT transform\n * @param {Float32Array} input - Frequency-domain MDCT coefficients\n * @param {Object} mdctBuffers - Optional work buffers for FFT\n * @returns {Float32Array} Time-domain output samples\n */\n transform(\n input,\n mdctBuffers = null,\n destination = null,\n destinationOffset = 0\n ) {\n const buffers =\n mdctBuffers?.[this.fftSize] ??\n throwError(`IMDCT.transform: mdctBuffers[${this.fftSize}] is required`)\n const real =\n buffers?.real ??\n throwError(\n `IMDCT.transform: mdctBuffers[${this.fftSize}].real is required`\n )\n const imag =\n buffers?.imaginary ??\n throwError(\n `IMDCT.transform: mdctBuffers[${this.fftSize}].imaginary is required`\n )\n\n const n4 = this.quarterSize\n const n34 = 3 * n4\n\n real.fill(0)\n imag.fill(0)\n\n // Pre-FFT processing\n for (let i = 0; i < this.fftSize; i++) {\n const i2 = i * 2\n const r = -input[i2]\n const im = -input[this.halfSize - 1 - i2]\n const c = this.sinCosTable[i2]\n const s = this.sinCosTable[i2 + 1]\n\n real[i] = im * s + r * c\n imag[i] = im * c - r * s\n }\n\n FFT.transform(real, imag)\n\n // Post-FFT butterfly\n const output = destination ?? new Float32Array(this.size)\n\n for (let i = 0; i < this.fftSize / 2; i++) {\n const i2 = i * 2\n const c = this.sinCosTable[i2]\n const s = this.sinCosTable[i2 + 1]\n const re = real[i]\n const im = imag[i]\n\n const r1 = re * c + im * s\n const i1 = re * s - im * c\n\n output[destinationOffset + n34 - 1 - i2] = r1\n output[destinationOffset + n34 + i2] = r1\n output[destinationOffset + n4 + i2] = i1\n output[destinationOffset + n4 - 1 - i2] = -i1\n }\n\n for (let i = this.fftSize / 2; i < this.fftSize; i++) {\n const idx = (i - this.fftSize / 2) * 2 + n4\n const i2 = i * 2\n const c = this.sinCosTable[i2]\n const s = this.sinCosTable[i2 + 1]\n const re = real[i]\n const im = imag[i]\n\n const r1 = re * c + im * s\n const i1 = re * s - im * c\n\n output[destinationOffset + n34 - 1 - idx] = r1\n output[destinationOffset + idx - n4] = -r1\n output[destinationOffset + n4 + idx] = i1\n output[destinationOffset + 5 * n4 - 1 - idx] = i1\n }\n\n return output\n }\n}\n","/** ATRAC1 spectral ordering. */\n\n/**\n * Reverse spectral order for ATRAC1 mid and high bands.\n *\n * @param {Float32Array} spectrum Spectrum in transform order.\n * @param {object} reversalBuffers Reusable outputs indexed by spectrum length.\n * @returns {Float32Array} Reversed spectrum.\n */\nexport function reverseSpectrum(spectrum, reversalBuffers) {\n const reversed = reversalBuffers[spectrum.length]\n for (let index = 0; index < spectrum.length; index++) {\n reversed[index] = spectrum[spectrum.length - 1 - index]\n }\n return reversed\n}\n","/**\n * Carta1 spectral synthesis application.\n */\n\nimport {\n MDCT_SHORT_BLOCK_SIZE,\n MDCT_SIZE_LONG,\n MDCT_SIZE_MID,\n MDCT_SIZE_SHORT,\n MDCT_TAIL_WINDOW_SIZE,\n} from '../core/constants.js'\nimport { extractBandCoefficients } from '../core/geometry.js'\nimport { MDCT_BAND_CONFIGS, WINDOW_SHORT } from '../core/tables.js'\nimport { IMDCT } from '../signal/mdct.js'\nimport { reverseSpectrum } from '../signal/order.js'\nimport { throwError } from '../utils.js'\n\nconst shortImdct = new IMDCT(MDCT_SIZE_SHORT, MDCT_SIZE_SHORT * 8)\nconst middleImdct = new IMDCT(MDCT_SIZE_MID, MDCT_SIZE_MID * 8)\nconst longImdct = new IMDCT(MDCT_SIZE_LONG, MDCT_SIZE_LONG * 4)\n\n/**\n * Combine adjacent inverse-transform blocks through the codec window.\n *\n * @param {Float32Array} previous Previous block samples.\n * @param {Float32Array} current Current block samples.\n * @param {Float32Array} window Window coefficients.\n * @returns {Float32Array} Overlap-added samples.\n */\nexport function overlapAdd(previous, current, window) {\n const size = previous.length\n const output = new Float32Array(size * 2)\n for (let index = 0; index < size; index++) {\n const headWindow = window[index]\n const tailWindow = window[2 * size - 1 - index]\n const previousSample = previous[index]\n const currentSample = current[size - 1 - index]\n output[index] = previousSample * tailWindow - currentSample * headWindow\n output[2 * size - 1 - index] =\n previousSample * headWindow + currentSample * tailWindow\n }\n return output\n}\n\n/**\n * Synthesize time-domain bands from the ATRAC1 spectrum.\n *\n * @param {object} context\n * @returns {Function}\n * @throws {Error} If the buffer pool is missing\n */\nexport function synthesizeSpectrum(context) {\n const bufferPool =\n context?.bufferPool ??\n throwError('synthesizeSpectrum: bufferPool is required')\n const overlapBuffers = bufferPool.imdctOverlap\n const transformFunctions = [middleImdct, middleImdct, longImdct]\n\n /**\n * @param {Float32Array} coefficients\n * @param {number} bandIndex\n * @param {number} blockMode\n * @param {Float32Array} overlapBuffer\n * @param {Object} config\n * @returns {Float32Array}\n */\n function transformBand(\n coefficients,\n bandIndex,\n blockMode,\n overlapBuffer,\n config\n ) {\n if (blockMode === 0) {\n return inverseLongBlock(\n coefficients,\n bandIndex,\n overlapBuffer,\n config,\n transformFunctions[bandIndex]\n )\n }\n\n return inverseShortBlocks(coefficients, bandIndex, overlapBuffer, config)\n }\n\n /**\n * @param {Float32Array} coefficients\n * @param {number} bandIndex\n * @param {Float32Array} overlapBuffer\n * @param {Object} config\n * @param {Object} transformFunction\n * @returns {Float32Array}\n */\n function inverseLongBlock(\n coefficients,\n bandIndex,\n overlapBuffer,\n config,\n transformFunction\n ) {\n let blockSpectrum = coefficients\n if (bandIndex > 0) {\n blockSpectrum = reverseSpectrum(coefficients, bufferPool.reversalBuffers)\n }\n\n const inverse = transformFunction.transform(\n blockSpectrum,\n bufferPool.mdctBuffers\n )\n const inverseStart = inverse.length / 4\n const inverseBuffer = bufferPool.transformBuffers[MDCT_SIZE_LONG]\n inverseBuffer.fill(0)\n\n for (let i = 0; i < config.size; i++) {\n inverseBuffer[i] = inverse[inverseStart + i]\n }\n\n const previous = overlapBuffer.slice(\n config.size * 2 - MDCT_TAIL_WINDOW_SIZE,\n config.size * 2\n )\n const overlap = overlapAdd(\n previous.slice(0, MDCT_TAIL_WINDOW_SIZE),\n inverseBuffer.slice(0, MDCT_TAIL_WINDOW_SIZE),\n WINDOW_SHORT\n )\n overlapBuffer.set(overlap, 0)\n\n for (let i = 0; i < MDCT_TAIL_WINDOW_SIZE; i++) {\n previous[i] = inverseBuffer[MDCT_TAIL_WINDOW_SIZE + i]\n }\n\n const copyLength = bandIndex === 2 ? 240 : 112\n for (let i = 0; i < copyLength; i++) {\n overlapBuffer[32 + i] = inverseBuffer[MDCT_TAIL_WINDOW_SIZE + i]\n }\n\n for (let i = 0; i < MDCT_TAIL_WINDOW_SIZE; i++) {\n overlapBuffer[config.size * 2 - MDCT_TAIL_WINDOW_SIZE + i] =\n inverseBuffer[config.size - MDCT_TAIL_WINDOW_SIZE + i]\n }\n\n return overlapBuffer.slice(0, config.size)\n }\n\n /**\n * @param {Float32Array} coefficients\n * @param {number} bandIndex\n * @param {Float32Array} overlapBuffer\n * @param {Object} config\n * @returns {Float32Array}\n */\n function inverseShortBlocks(coefficients, bandIndex, overlapBuffer, config) {\n const numBlocks = 1 << (config.size === 256 ? 3 : 2)\n const inverseBuffer = bufferPool.transformBuffers[MDCT_SIZE_LONG]\n inverseBuffer.fill(0)\n\n const previous = overlapBuffer.slice(\n config.size * 2 - MDCT_TAIL_WINDOW_SIZE,\n config.size * 2\n )\n let start = 0\n let position = 0\n\n for (let block = 0; block < numBlocks; block++) {\n let blockSpectrum = coefficients.slice(\n position,\n position + MDCT_SHORT_BLOCK_SIZE\n )\n if (bandIndex > 0) {\n blockSpectrum = reverseSpectrum(\n blockSpectrum,\n bufferPool.reversalBuffers\n )\n }\n\n const inverse = shortImdct.transform(\n blockSpectrum,\n bufferPool.mdctBuffers\n )\n const inverseStart = inverse.length / 4\n for (let i = 0; i < MDCT_SHORT_BLOCK_SIZE; i++) {\n inverseBuffer[start + i] = inverse[inverseStart + i]\n }\n\n const overlap = overlapAdd(\n previous.slice(0, MDCT_TAIL_WINDOW_SIZE),\n inverseBuffer.slice(start, start + MDCT_TAIL_WINDOW_SIZE),\n WINDOW_SHORT\n )\n overlapBuffer.set(overlap, start)\n\n for (let i = 0; i < MDCT_TAIL_WINDOW_SIZE; i++) {\n previous[i] = inverseBuffer[start + MDCT_TAIL_WINDOW_SIZE + i]\n }\n\n start += MDCT_SHORT_BLOCK_SIZE\n position += MDCT_SHORT_BLOCK_SIZE\n }\n\n for (let i = 0; i < MDCT_TAIL_WINDOW_SIZE; i++) {\n overlapBuffer[config.size * 2 - MDCT_TAIL_WINDOW_SIZE + i] =\n inverseBuffer[config.size - MDCT_TAIL_WINDOW_SIZE + i]\n }\n\n return overlapBuffer.slice(0, config.size)\n }\n\n /**\n * @param {object} input\n * @returns {Array<Float32Array>}\n */\n return (input) => {\n const { coefficients, blockModes } = input\n\n return MDCT_BAND_CONFIGS.map((config, bandIndex) => {\n const bandCoefficients = extractBandCoefficients(coefficients, bandIndex)\n return transformBand(\n bandCoefficients,\n bandIndex,\n blockModes[bandIndex],\n overlapBuffers[bandIndex],\n config\n )\n })\n }\n}\n","/**\n * Stable ATRAC1 spectral geometry.\n */\n\n/**\n * Calculate a band's offset in the 512-coefficient spectrum.\n *\n * @param {number} bandIndex\n * @returns {number}\n */\nexport function calculateBandOffset(bandIndex) {\n return bandIndex === 0 ? 0 : bandIndex === 1 ? 128 : 256\n}\n\n/**\n * Extract one band from the full coefficient spectrum.\n *\n * @param {Float32Array} coefficients\n * @param {number} bandIndex\n * @returns {Float32Array}\n */\nexport function extractBandCoefficients(coefficients, bandIndex) {\n const offsets = [0, 128, 256, 512]\n return coefficients.subarray(offsets[bandIndex], offsets[bandIndex + 1])\n}\n","/** Configurable polyphase quadrature-mirror analysis and synthesis. */\n\nimport {\n QMF_ANALYSIS_MODULATION_SCALE,\n QMF_ANALYSIS_START_SAMPLE,\n QMF_ANALYSIS_STEP_SAMPLES,\n QMF_ANALYSIS_TERMS,\n QMF_ANALYSIS_WINDOW_SAMPLES,\n QMF_BANDS,\n QMF_SYNTHESIS_DELAY_ROWS,\n QMF_SYNTHESIS_TERMS,\n} from '../core/constants.js'\nimport {\n QMF_ANALYSIS_HALF_BUTTERFLY_SCALES,\n QMF_ANALYSIS_ODD_PI_OVER_16_COSINES,\n QMF_ANALYSIS_ODD_PI_OVER_32_COSINES,\n QMF_ANALYSIS_ODD_PI_OVER_64_COSINES,\n QMF_ANALYSIS_PI_OVER_8_BUTTERFLY_SCALES,\n QMF_ANALYSIS_FILTER_COEFFICIENTS,\n QMF_ANALYSIS_MODULATION_COEFFICIENTS,\n QMF_ANALYSIS_SAMPLE_OFFSETS,\n QMF_SYNTHESIS_DELAY_COMPONENTS,\n QMF_SYNTHESIS_DELAY_ROW_OFFSETS,\n QMF_SYNTHESIS_FILTER_COEFFICIENTS,\n QMF_SYNTHESIS_MODULATION_COEFFICIENTS,\n} from '../core/tables.js'\n\nconst float32Round = Math.fround\n\n/**\n * Preserve the reference spill order of the native sixteen-band polyphase sum.\n * Other supported widths use the dense configurable path below.\n *\n * @param {Float32Array} input\n * @param {number} inputOffset\n * @param {Float32Array} accumulator\n * @param {Float64Array} extended\n */\nfunction filter16Band(input, inputOffset, accumulator, extended) {\n const c = QMF_ANALYSIS_FILTER_COEFFICIENTS\n\n for (let component = 0; component < 16; component++) {\n const coefficientOffset = component * QMF_ANALYSIS_TERMS\n const firstSample = component < 8 ? component : component + 8\n const secondSample = component < 8 ? 15 - component : 39 - component\n const firstProduct = input[inputOffset + firstSample] * c[coefficientOffset]\n accumulator[component] = float32Round(\n input[inputOffset + secondSample] * c[coefficientOffset + 1] +\n (component % 4 === 0 ? float32Round(firstProduct) : firstProduct)\n )\n }\n\n let extended7 = accumulator[7]\n let extended8 = accumulator[8]\n let extended10 = accumulator[10]\n let extended11 = accumulator[11]\n let extended12 = accumulator[12]\n let extended13 = accumulator[13]\n let extended14 = accumulator[14]\n let extended15 = accumulator[15]\n\n for (let segment = 1; segment < 12; segment++) {\n const inputBase = inputOffset + segment * 32\n const term = segment * 2\n\n const product0 = float32Round(input[inputBase] * c[term])\n accumulator[0] = float32Round(\n accumulator[0] + product0 + input[inputBase + 15] * c[term + 1]\n )\n accumulator[1] = float32Round(\n input[inputBase + 1] * c[QMF_ANALYSIS_TERMS + term] +\n float32Round(\n input[inputBase + 14] * c[QMF_ANALYSIS_TERMS + term + 1] +\n accumulator[1]\n )\n )\n const product2 = float32Round(\n input[inputBase + 2] * c[QMF_ANALYSIS_TERMS * 2 + term]\n )\n accumulator[2] = float32Round(\n accumulator[2] +\n product2 +\n input[inputBase + 13] * c[QMF_ANALYSIS_TERMS * 2 + term + 1]\n )\n accumulator[3] = float32Round(\n accumulator[3] +\n input[inputBase + 3] * c[QMF_ANALYSIS_TERMS * 3 + term] +\n input[inputBase + 12] * c[QMF_ANALYSIS_TERMS * 3 + term + 1]\n )\n const product4 = float32Round(\n input[inputBase + 4] * c[QMF_ANALYSIS_TERMS * 4 + term]\n )\n const product4Sum =\n product4 + input[inputBase + 11] * c[QMF_ANALYSIS_TERMS * 4 + term + 1]\n accumulator[4] = float32Round(accumulator[4] + product4Sum)\n accumulator[5] = float32Round(\n input[inputBase + 5] * c[QMF_ANALYSIS_TERMS * 5 + term] +\n float32Round(\n input[inputBase + 10] * c[QMF_ANALYSIS_TERMS * 5 + term + 1] +\n accumulator[5]\n )\n )\n const product6 = float32Round(\n input[inputBase + 6] * c[QMF_ANALYSIS_TERMS * 6 + term]\n )\n accumulator[6] = float32Round(\n accumulator[6] +\n product6 +\n input[inputBase + 9] * c[QMF_ANALYSIS_TERMS * 6 + term + 1]\n )\n extended7 =\n accumulator[7] +\n (input[inputBase + 7] * c[QMF_ANALYSIS_TERMS * 7 + term] +\n input[inputBase + 8] * c[QMF_ANALYSIS_TERMS * 7 + term + 1])\n accumulator[7] = float32Round(extended7)\n\n extended8 =\n input[inputBase + 31] * c[QMF_ANALYSIS_TERMS * 8 + term + 1] +\n input[inputBase + 16] * c[QMF_ANALYSIS_TERMS * 8 + term] +\n accumulator[8]\n accumulator[8] = float32Round(extended8)\n accumulator[9] = float32Round(\n input[inputBase + 17] * c[QMF_ANALYSIS_TERMS * 9 + term] +\n float32Round(\n input[inputBase + 30] * c[QMF_ANALYSIS_TERMS * 9 + term + 1] +\n accumulator[9]\n )\n )\n extended10 =\n accumulator[10] +\n (input[inputBase + 18] * c[QMF_ANALYSIS_TERMS * 10 + term] +\n input[inputBase + 29] * c[QMF_ANALYSIS_TERMS * 10 + term + 1])\n accumulator[10] = float32Round(extended10)\n extended11 =\n accumulator[11] +\n (input[inputBase + 19] * c[QMF_ANALYSIS_TERMS * 11 + term] +\n input[inputBase + 28] * c[QMF_ANALYSIS_TERMS * 11 + term + 1])\n accumulator[11] = float32Round(extended11)\n extended12 =\n accumulator[12] +\n (input[inputBase + 20] * c[QMF_ANALYSIS_TERMS * 12 + term] +\n input[inputBase + 27] * c[QMF_ANALYSIS_TERMS * 12 + term + 1])\n accumulator[12] = float32Round(extended12)\n extended13 =\n accumulator[13] +\n (input[inputBase + 21] * c[QMF_ANALYSIS_TERMS * 13 + term] +\n input[inputBase + 26] * c[QMF_ANALYSIS_TERMS * 13 + term + 1])\n accumulator[13] = float32Round(extended13)\n extended14 =\n accumulator[14] +\n (input[inputBase + 22] * c[QMF_ANALYSIS_TERMS * 14 + term] +\n input[inputBase + 25] * c[QMF_ANALYSIS_TERMS * 14 + term + 1])\n accumulator[14] = float32Round(extended14)\n const product15 =\n input[inputBase + 24] * c[QMF_ANALYSIS_TERMS * 15 + term + 1] +\n input[inputBase + 23] * c[QMF_ANALYSIS_TERMS * 15 + term]\n extended15 = accumulator[15] + product15\n accumulator[15] = float32Round(extended15)\n }\n\n extended[7] = extended7\n extended[10] = extended10\n extended[11] = extended11\n extended[12] = extended12\n extended[13] = extended13\n extended[14] = extended14\n extended[15] = extended15\n}\n\n/**\n * Preserve the reference factorization and spill order of 16-band modulation.\n *\n * @param {Float32Array} polyphase\n * @param {Float64Array} extended\n * @param {Float32Array} output\n */\nfunction modulate16Band(polyphase, extended, output) {\n const half = QMF_ANALYSIS_HALF_BUTTERFLY_SCALES\n const cos32 = QMF_ANALYSIS_ODD_PI_OVER_32_COSINES\n const cos16 = QMF_ANALYSIS_ODD_PI_OVER_16_COSINES\n const cos64 = QMF_ANALYSIS_ODD_PI_OVER_64_COSINES\n const pi8 = QMF_ANALYSIS_PI_OVER_8_BUTTERFLY_SCALES\n\n const twoCosPi8 = pi8[0]\n const cosPi4 = half[0]\n const twoCosPi32 = cos32[0]\n const twoCosPi16 = cos16[0]\n\n const rotated7Extended = extended[7] * cos64[0]\n const rotated0Extended = polyphase[0] * cos64[7]\n const rotated13Extended = extended[13] * cos64[13]\n const rotated7 = float32Round(rotated7Extended)\n const rotated5 = float32Round(polyphase[5] * cos64[2])\n const rotated6Extended = polyphase[6] * cos64[1]\n const rotated6 = float32Round(rotated6Extended)\n const rotated4Extended = polyphase[4] * cos64[3]\n const rotated4 = float32Round(rotated4Extended)\n const rotated3 = float32Round(polyphase[3] * cos64[4])\n const rotated3Extended = rotated3\n const rotated2 = float32Round(polyphase[2] * cos64[5])\n const rotated0 = float32Round(rotated0Extended)\n const rotated1Extended = polyphase[1] * cos64[6]\n const rotated8Extended = polyphase[8] * cos64[8]\n const rotated8 = float32Round(rotated8Extended)\n const rotated14Extended = extended[14] * cos64[14]\n const rotated14 = float32Round(rotated14Extended)\n const rotated15Extended = extended[15] * cos64[15]\n const rotated9Extended = polyphase[9] * cos64[9]\n const rotated9 = float32Round(rotated9Extended)\n const rotated13 = float32Round(rotated13Extended)\n const rotated10Extended = extended[10] * cos64[10]\n const rotated10 = float32Round(rotated10Extended)\n const rotated11Extended = extended[11] * cos64[11]\n const rotated11 = float32Round(rotated11Extended)\n const rotated12Extended = extended[12] * cos64[12]\n\n const sum0Extended = rotated0 + rotated8 + (rotated7 + rotated15Extended)\n const mix0Term0Extended = (rotated7 - rotated15Extended) * twoCosPi32\n const mix0Term1Extended = (rotated0 - rotated8) * cos32[7]\n const mix0Extended = mix0Term0Extended + mix0Term1Extended\n const mix0 = float32Round(mix0Extended)\n const mixASum0Extended = rotated7 + rotated15Extended\n const mixASum1Extended = rotated0 + rotated8\n const mixAExtended = twoCosPi16 * (mixASum0Extended - mixASum1Extended)\n const mix1 = float32Round(\n twoCosPi16 * (mix0Term0Extended - mix0Term1Extended)\n )\n\n const sum1Extended = rotated14 + rotated1Extended + (rotated6 + rotated9)\n const sum1Float32 = float32Round(sum1Extended)\n const mix2Term0Extended = (rotated1Extended - rotated9) * cos32[6]\n const mixBInnerExtended = rotated6 + rotated14 - rotated1Extended - rotated9\n const mixBInnerFloat32 = float32Round(mixBInnerExtended)\n const mixBExtended = cos16[1] * mixBInnerFloat32\n const mixB = float32Round(mixBExtended)\n const mix2Term1Extended = float32Round(rotated6 - rotated14) * cos32[1]\n const mix2 = float32Round(mix2Term1Extended + mix2Term0Extended)\n const mix3 = float32Round(cos16[1] * (mix2Term1Extended - mix2Term0Extended))\n\n const sum2Pair0Extended = rotated5 + rotated13\n const sum2Pair1Extended = rotated2 + rotated10\n const sum2Extended = sum2Pair0Extended + sum2Pair1Extended\n const sum2Float32 = float32Round(sum2Extended)\n const mixCInnerExtended = sum2Pair0Extended - rotated2 - rotated10\n const mixCInnerFloat32 = float32Round(mixCInnerExtended)\n const mixCExtended = cos16[2] * mixCInnerFloat32\n const mixC = float32Round(mixCExtended)\n const mix4Term0Extended = (rotated5 - rotated13) * cos32[2]\n const mix4Term1Extended = (rotated2 - rotated10) * cos32[5]\n const mix4 = float32Round(mix4Term0Extended + mix4Term1Extended)\n const mix5 = float32Round(cos16[2] * (mix4Term0Extended - mix4Term1Extended))\n\n const sum3Extended =\n rotated3 + rotated4 + rotated11Extended + rotated12Extended\n const mix6Term0Extended = (rotated4 - rotated12Extended) * cos32[3]\n const mixDInnerExtended =\n rotated4 + rotated12Extended - rotated3Extended - rotated11Extended\n const mixDExtended = cos16[3] * mixDInnerExtended\n const mix6Term1Extended = (rotated3Extended - rotated11) * cos32[4]\n const mix6 = float32Round(mix6Term0Extended + mix6Term1Extended)\n const mix6Term0SpilledExtended = float32Round(mix6Term0Extended)\n const mix7 = float32Round(\n cos16[3] * (mix6Term0SpilledExtended - mix6Term1Extended)\n )\n\n const sumAllExtended = sum0Extended + sum1Float32 + sum2Float32 + sum3Extended\n const out0Extended = sumAllExtended * 0.5\n output[0] = float32Round(out0Extended)\n const mid0Extended =\n cosPi4 * (sum0Extended - sum1Float32 - sum2Float32 + sum3Extended)\n const mid0 = float32Round(mid0Extended)\n const diff03Extended = (sum0Extended - sum3Extended) * twoCosPi8\n const diff12Extended = float32Round(sum1Float32 - sum2Float32) * pi8[1]\n const diff12 = float32Round(diff12Extended)\n const mid1Extended = half[1] * diff03Extended - half[2] * diff12\n const mid1 = float32Round(mid1Extended)\n const mid2Extended = (mixAExtended - mixDExtended) * pi8[2]\n const mid2 = float32Round(mid2Extended)\n const mid3Extended = (mixB - mixC) * pi8[3]\n const avg2Pair0Extended = mixB + mixC\n const avg2Pair1Extended = mixAExtended + mixDExtended\n const avg2Extended = (avg2Pair0Extended + avg2Pair1Extended) * 0.5\n const mid4Extended = (mid2 + mid3Extended) * 0.5 - avg2Extended\n const mid4 = float32Round(mid4Extended)\n const mid5Extended =\n cosPi4 * (mixAExtended - mixB - mixC + mixDExtended) - mid4Extended\n const mid6Extended = half[1] * mid2 - half[2] * mid3Extended - mid5Extended\n const mid6 = float32Round(mid6Extended)\n\n const avg1Extended = (mix0 + mix2 + mix4 + mix6) * 0.5\n const out1Extended = avg1Extended - output[0]\n output[1] = float32Round(out1Extended)\n const out2Extended = avg2Extended - out1Extended\n output[2] = float32Round(out2Extended)\n const mid7Extended = cosPi4 * (mix0 - mix2 - mix4 + mix6)\n const mid7 = float32Round(mid7Extended)\n const mid8Extended = twoCosPi8 * (mix0 - mix6)\n const mid8 = float32Round(mid8Extended)\n const mid9 = float32Round(pi8[1] * float32Round(mix2 - mix4))\n const mid10Extended = half[1] * mid8 - half[2] * mid9\n const mid10 = float32Round(mid10Extended)\n const avg3Extended = (mix1 + mix3 + mix5 + mix7) * 0.5 - avg1Extended\n const out3Extended = avg3Extended - out2Extended\n output[3] = float32Round(out3Extended)\n const mid11Extended = (mid8 + mid9) * 0.5 - avg3Extended\n const mid11 = float32Round(mid11Extended)\n const out4Extended = (diff03Extended + diff12) * 0.5 - out3Extended\n output[4] = float32Round(out4Extended)\n const mid12Extended = (mix1 - mix7) * pi8[2]\n const mid13Extended = (mix3 - mix5) * pi8[3]\n const out5Extended = mid11Extended - out4Extended\n output[5] = float32Round(out5Extended)\n const out6Extended = mid4 - out5Extended\n output[6] = float32Round(out6Extended)\n const mid14Extended =\n mid12Extended + mid13Extended - mix1 - mix3 - mix5 - mix7\n const mid14HalfExtended = mid14Extended * 0.5\n const mid15Extended = cosPi4 * (mix1 - mix3 - mix5 + mix7) - mid14HalfExtended\n const mid16Extended =\n half[1] * mid12Extended - half[2] * mid13Extended - mid15Extended\n const mid17Extended = mid14HalfExtended - mid11\n const out7Extended = mid17Extended - output[6]\n output[7] = float32Round(out7Extended)\n const mid18Extended = mid7 - mid17Extended\n const out8Extended = mid0 - out7Extended\n output[8] = float32Round(out8Extended)\n const out9Extended = mid18Extended - out8Extended\n output[9] = float32Round(out9Extended)\n const mid19Extended = mid15Extended - mid18Extended\n const out10Extended = mid5Extended - out9Extended\n output[10] = float32Round(out10Extended)\n const out11Extended = mid19Extended - out10Extended\n output[11] = float32Round(out11Extended)\n const mid20Extended = mid10 - mid19Extended\n const out12Extended = mid1 - out11Extended\n output[12] = float32Round(out12Extended)\n const out13Extended = mid20Extended - out12Extended\n output[13] = float32Round(out13Extended)\n const mid21Extended = mid16Extended - mid20Extended\n const out14Extended = mid6 - out13Extended\n output[14] = float32Round(out14Extended)\n const out15Extended = mid21Extended - out14Extended\n output[15] = float32Round(out15Extended)\n}\n\n/**\n * Transform one complete time window into caller-owned QMF subband rows.\n *\n * @param {Float32Array} input Current samples preceded by the required history.\n * @param {Float32Array[]} outputBands Caller-owned chronological subband rows.\n * @param {QmfScratch} scratch Reusable component and modulation storage.\n * @returns {Float32Array[]} The completed subband rows.\n */\nexport function analyzeQmf(input, outputBands, scratch) {\n if (\n !(input instanceof Float32Array) ||\n outputBands?.length !== QMF_BANDS ||\n outputBands.some(\n (band) =>\n !(band instanceof Float32Array) || band.length !== outputBands[0].length\n ) ||\n !scratch ||\n scratch.polyphase?.length !== QMF_BANDS ||\n scratch.extended?.length !== QMF_BANDS ||\n scratch.bands?.length !== QMF_BANDS\n ) {\n throw new RangeError('QMF analysis geometry is invalid')\n }\n\n const sampleCount = outputBands[0].length\n const requiredSamples =\n QMF_ANALYSIS_START_SAMPLE +\n Math.max(0, sampleCount - 1) * QMF_ANALYSIS_STEP_SAMPLES +\n QMF_ANALYSIS_WINDOW_SAMPLES\n if (input.length < requiredSamples) {\n throw new RangeError('QMF analysis window is incomplete')\n }\n\n const { polyphase, extended, bands } = scratch\n\n for (let sample = 0; sample < sampleCount; sample++) {\n const inputOffset =\n QMF_ANALYSIS_START_SAMPLE + sample * QMF_ANALYSIS_STEP_SAMPLES\n if (QMF_BANDS === 2) {\n for (let component = 0; component < QMF_BANDS; component++) {\n const termOffset = component * QMF_ANALYSIS_TERMS\n let sum = 0\n for (let term = 0; term < QMF_ANALYSIS_TERMS; term++) {\n const index = termOffset + term\n sum +=\n input[inputOffset + QMF_ANALYSIS_SAMPLE_OFFSETS[index]] *\n QMF_ANALYSIS_FILTER_COEFFICIENTS[index]\n }\n extended[component] = sum\n }\n for (let band = 0; band < QMF_BANDS; band++) {\n const coefficientOffset = band * QMF_BANDS\n let sum = 0\n for (let component = 0; component < QMF_BANDS; component++) {\n sum +=\n extended[component] *\n QMF_ANALYSIS_MODULATION_COEFFICIENTS[coefficientOffset + component]\n }\n outputBands[band][sample] = sum * QMF_ANALYSIS_MODULATION_SCALE\n }\n continue\n }\n if (QMF_BANDS === 16) {\n filter16Band(input, inputOffset, polyphase, extended)\n modulate16Band(polyphase, extended, bands)\n for (let band = 0; band < QMF_BANDS; band++) {\n outputBands[band][sample] = bands[band]\n }\n continue\n }\n\n for (let component = 0; component < QMF_BANDS; component++) {\n const termOffset = component * QMF_ANALYSIS_TERMS\n let sum = 0\n for (let term = 0; term < QMF_ANALYSIS_TERMS; term++) {\n const index = termOffset + term\n sum +=\n input[inputOffset + QMF_ANALYSIS_SAMPLE_OFFSETS[index]] *\n QMF_ANALYSIS_FILTER_COEFFICIENTS[index]\n }\n polyphase[component] = sum\n }\n\n for (let band = 0; band < QMF_BANDS; band++) {\n const coefficientOffset = band * QMF_BANDS\n let sum = 0\n for (let component = 0; component < QMF_BANDS; component++) {\n sum +=\n polyphase[component] *\n QMF_ANALYSIS_MODULATION_COEFFICIENTS[coefficientOffset + component]\n }\n bands[band] = sum * QMF_ANALYSIS_MODULATION_SCALE\n outputBands[band][sample] = bands[band]\n }\n }\n return outputBands\n}\n\n/**\n * Fold caller-owned QMF subband rows through one circular synthesis delay.\n *\n * @param {Float32Array[]} inputBands Chronological subband rows.\n * @param {Float32Array} delay Caller-owned component delay ring.\n * @param {number} delayRow Current delay-ring row.\n * @param {Float32Array} output Caller-owned interleaved PCM output.\n * @param {QmfScratch} scratch Reusable component and modulation storage.\n * @returns {number} Next delay-ring row.\n */\nexport function synthesizeQmf(inputBands, delay, delayRow, output, scratch) {\n if (\n inputBands?.length !== QMF_BANDS ||\n inputBands.some(\n (band) =>\n !(band instanceof Float32Array) || band.length !== inputBands[0].length\n ) ||\n !(delay instanceof Float32Array) ||\n delay.length !== QMF_SYNTHESIS_DELAY_ROWS * QMF_BANDS ||\n !Number.isInteger(delayRow) ||\n delayRow < 0 ||\n delayRow >= QMF_SYNTHESIS_DELAY_ROWS ||\n !(output instanceof Float32Array) ||\n output.length < inputBands[0].length * QMF_BANDS ||\n !scratch ||\n scratch.polyphase?.length !== QMF_BANDS ||\n scratch.bands?.length !== QMF_BANDS\n ) {\n throw new RangeError('QMF synthesis geometry is invalid')\n }\n\n const { polyphase, bands } = scratch\n const sampleCount = inputBands[0].length\n\n for (let sample = 0; sample < sampleCount; sample++) {\n for (let band = 0; band < QMF_BANDS; band++) {\n bands[band] = inputBands[band][sample]\n }\n\n const delayOffset = delayRow * QMF_BANDS\n for (let component = 0; component < QMF_BANDS; component++) {\n const coefficientOffset = component * QMF_BANDS\n let sum = 0\n for (let band = 0; band < QMF_BANDS; band++) {\n sum +=\n QMF_SYNTHESIS_MODULATION_COEFFICIENTS[coefficientOffset + band] *\n bands[band]\n }\n polyphase[component] = sum\n delay[delayOffset + component] = polyphase[component]\n }\n\n const outputOffset = sample * QMF_BANDS\n for (let outputSample = 0; outputSample < QMF_BANDS; outputSample++) {\n const termOffset = outputSample * QMF_SYNTHESIS_TERMS\n let sum = 0\n if (QMF_BANDS === 16) {\n for (let term = 0; term < QMF_SYNTHESIS_TERMS; term += 2) {\n const first = termOffset + term\n const second = first + 1\n const firstRow =\n (delayRow + QMF_SYNTHESIS_DELAY_ROW_OFFSETS[first]) %\n QMF_SYNTHESIS_DELAY_ROWS\n const secondRow =\n (delayRow + QMF_SYNTHESIS_DELAY_ROW_OFFSETS[second]) %\n QMF_SYNTHESIS_DELAY_ROWS\n sum = float32Round(\n delay[\n firstRow * QMF_BANDS + QMF_SYNTHESIS_DELAY_COMPONENTS[first]\n ] *\n QMF_SYNTHESIS_FILTER_COEFFICIENTS[first] +\n delay[\n secondRow * QMF_BANDS + QMF_SYNTHESIS_DELAY_COMPONENTS[second]\n ] *\n QMF_SYNTHESIS_FILTER_COEFFICIENTS[second] +\n sum\n )\n }\n output[outputOffset + outputSample] = sum\n continue\n }\n for (let term = 0; term < QMF_SYNTHESIS_TERMS; term++) {\n const index = termOffset + term\n const row =\n (delayRow + QMF_SYNTHESIS_DELAY_ROW_OFFSETS[index]) %\n QMF_SYNTHESIS_DELAY_ROWS\n sum +=\n delay[row * QMF_BANDS + QMF_SYNTHESIS_DELAY_COMPONENTS[index]] *\n QMF_SYNTHESIS_FILTER_COEFFICIENTS[index]\n }\n output[outputOffset + outputSample] = sum\n }\n delayRow = delayRow === 0 ? QMF_SYNTHESIS_DELAY_ROWS - 1 : delayRow - 1\n }\n return delayRow\n}\n","/**\n * Carta1 PCM synthesis application.\n */\n\nimport { synthesizeQmf } from '../signal/qmf.js'\nimport { throwError } from '../utils.js'\n\n/**\n * Join two subband rows through a configurable QMF synthesis stage.\n *\n * @param {Float32Array[]} bands\n * @param {object} state\n * @param {object} scratch\n * @returns {Float32Array}\n */\nfunction synthesizePair(bands, state, scratch) {\n const output = new Float32Array(bands[0].length * 2)\n state.delayRow = synthesizeQmf(\n bands,\n state.delay,\n state.delayRow,\n output,\n scratch\n )\n return output\n}\n\n/**\n * Synthesize full-spectrum PCM from frequency bands.\n *\n * @param {object} context\n * @returns {Function}\n * @throws {Error} If the buffer pool is missing\n */\nexport function synthesizePcm(context) {\n const bufferPool =\n context?.bufferPool ?? throwError('synthesizePcm: bufferPool is required')\n const states = bufferPool.qmfSynthesisStates\n const scratch = bufferPool.qmfScratch\n\n /**\n * @param {Array<Float32Array>} bands\n * @returns {Float32Array}\n */\n return (bands) => {\n const delayedHigh = scratch.highBandWindows[bands[2].length]\n delayedHigh.set(bufferPool.qmfHighBandDelay)\n delayedHigh.set(bands[2], bufferPool.qmfHighBandDelay.length)\n\n const highBand = delayedHigh.slice(0, bands[0].length * 2)\n bufferPool.qmfHighBandDelay.set(\n delayedHigh.subarray(\n bands[0].length * 2,\n bands[0].length * 2 + bufferPool.qmfHighBandDelay.length\n )\n )\n\n const stage2 = synthesizePair([bands[0], bands[1]], states.midBand, scratch)\n\n const stage1 = synthesizePair([stage2, highBand], states.lowBand, scratch)\n\n return stage1\n }\n}\n","/**\n * Carta1 synthesis stage.\n */\n\nimport { pipe } from '../utils.js'\nimport { synthesizeSpectrum } from './bands.js'\nimport { synthesizePcm } from './pcm.js'\n\n/**\n * Synthesize PCM from the dequantized ATRAC1 spectrum.\n *\n * @param {object} context\n * @returns {Function}\n */\nexport function synthesize(context) {\n return pipe(context, synthesizeSpectrum, synthesizePcm)\n}\n","/**\n * Carta1 Audio Codec - Decoding Pipeline\n *\n * The frame pipeline reads as dequantization, then synthesis. Byte unpacking\n * remains the responsibility of deserializeFrame().\n */\n\nimport { dequantize } from '../dequantization.js'\nimport { BufferPool } from '../state.js'\nimport { synthesize } from '../synthesis/stage.js'\nimport { pipe } from '../utils.js'\n\n/**\n * Create an ATRAC1 decoder.\n *\n * @param {BufferPool} [bufferPool=new BufferPool()]\n * @returns {Function}\n */\nexport function decode(bufferPool = new BufferPool()) {\n const context = { bufferPool }\n return pipe(context, dequantize, synthesize)\n}\n","/**\n * Carta1 allocation-source preparation.\n */\n\nimport {\n BFU_BAND_BOUNDARIES,\n BFU_START_LONG,\n BFU_START_SHORT,\n SPECS_PER_BFU,\n} from '../core/tables.js'\n\n/**\n * Group spectral coefficients into block floating units.\n *\n * @param {Float32Array} coefficients\n * @param {Array<number>} blockModes\n * @returns {object} Grouped bit-frequency units.\n */\nexport function groupIntoBFUs(coefficients, blockModes) {\n const bfuData = []\n const bfuSizes = []\n let coeffIndex = 0\n let bfuIndex = 0\n\n for (let band = 0; band < 3; band++) {\n const bandStart = coeffIndex\n const bandSize = band === 2 ? 256 : 128\n const bandEnd = band < 2 ? BFU_BAND_BOUNDARIES[band] : SPECS_PER_BFU.length\n const startPositions =\n blockModes[band] === 0 ? BFU_START_LONG : BFU_START_SHORT\n\n while (bfuIndex < bandEnd) {\n const size = SPECS_PER_BFU[bfuIndex]\n const startPos = startPositions[bfuIndex] - bandStart\n const endPos = startPos + size\n const bfu = new Float32Array(size)\n\n if (startPos >= 0 && endPos <= bandSize) {\n bfu.set(coefficients.subarray(bandStart + startPos, bandStart + endPos))\n } else if (startPos < bandSize && endPos > 0) {\n const srcStart = Math.max(0, startPos)\n const srcEnd = Math.min(bandSize, endPos)\n bfu.set(\n coefficients.subarray(bandStart + srcStart, bandStart + srcEnd),\n Math.max(0, -startPos)\n )\n }\n\n bfuData.push(bfu)\n bfuSizes.push(size)\n bfuIndex++\n }\n\n coeffIndex += bandSize\n }\n\n return { bfuData, bfuSizes, bfuCount: bfuIndex }\n}\n\n/**\n * Prepare the spectrum as an allocation source.\n *\n * @param {Float32Array} coefficients\n * @param {Array<number>} blockModes\n * @returns {object} Allocation source.\n */\nexport function prepare(coefficients, blockModes) {\n return groupIntoBFUs(coefficients, blockModes)\n}\n","/**\n * Carta1 Audio Codec - Bit Allocation Module\n *\n * This module implements the bit allocation system for the Carta1 audio codec,\n * responsible for distributing available bits across frequency bands to minimize\n * perceptual distortion while maintaining the target bitrate.\n *\n * The module uses Rate-Distortion Optimization (RDO) by searching over a\n * predefined set of valid Band Frequency Unit (BFU) counts. For each count,\n * it performs a greedy bit distribution to find the best allocation. This\n * approach optimally trades off the cost of encoding more frequency bands\n * (metadata overhead) against the benefit of reducing truncation distortion.\n *\n * Key components:\n * - RDO search over valid BFU counts to select the optimal number of bands.\n * - Greedy bit allocation for a fixed BFU count using a max-heap.\n * - Exponential distortion modeling based on scale factors.\n * - Support for variable word lengths per BFU.\n *\n * The algorithm ensures that the codec dynamically adapts the encoded bandwidth\n * to best match the signal characteristics for the given bitrate.\n */\n\nimport {\n NUM_BFUS,\n FRAME_BITS,\n FRAME_OVERHEAD_BITS,\n BITS_PER_BFU_METADATA,\n MAX_WORD_LENGTH_INDEX,\n} from '../core/constants.js'\nimport {\n WORD_LENGTH_BITS,\n INV_POWER_OF_TWO,\n SCALE_FACTORS,\n BFU_AMOUNTS,\n WORD_LENGTH_DELTA_BITS,\n DISTORTION_DELTA_FACTORS,\n} from '../core/tables.js'\n\nconst biasedScaleFactorCache = new Map()\n\n/**\n * Builds and returns a cached table of biased scale factors.\n *\n * @param {number} bias\n * @returns {Float64Array}\n */\nfunction buildBiasedScaleFactorTable(bias) {\n if (biasedScaleFactorCache.has(bias)) {\n return biasedScaleFactorCache.get(bias)\n }\n\n const out = new Float64Array(64)\n if (bias === 1) {\n out.set(SCALE_FACTORS)\n } else {\n for (let i = 0; i < 64; i++) {\n out[i] = Math.pow(SCALE_FACTORS[i], bias)\n }\n }\n biasedScaleFactorCache.set(bias, out)\n return out\n}\n\n/**\n * Evaluate one legal active-BFU count.\n *\n * @param {number} activeBfuCount\n * @param {number} maxBfuCount\n * @param {Int32Array} bfuSizes\n * @param {number} remainingBits\n * @param {Float64Array} biasedScaleFactors\n * @param {Int32Array} allScaleFactorIndices\n * @param {Float32Array} zeroBitDistortions\n * @returns {object} Allocation result.\n */\nfunction search(\n activeBfuCount,\n maxBfuCount,\n bfuSizes,\n remainingBits,\n biasedScaleFactors,\n allScaleFactorIndices,\n zeroBitDistortions\n) {\n const allocation = distributeBits(\n activeBfuCount,\n bfuSizes,\n remainingBits,\n biasedScaleFactors,\n allScaleFactorIndices\n )\n const distortion = measureDistortion(\n activeBfuCount,\n maxBfuCount,\n bfuSizes,\n allocation.wordLengths,\n allocation.scaleFactorIndices,\n biasedScaleFactors,\n zeroBitDistortions\n )\n return { distortion, ...allocation }\n}\n\n/**\n * Calculates the total distortion for a given allocation.\n * This includes quantization distortion for coded bands and truncation\n * distortion for uncoded bands.\n * @param {number} activeBfuCount\n * @param {number} maxBfuCount\n * @param {Int32Array} bfuSizes\n * @param {Int32Array} wordLengths\n * @param {Int32Array} scaleFactorIndices\n * @param {number} biasedScaleFactors\n * @param {Float32Array} zeroBitDistortions\n * @returns {number}\n */\nfunction measureDistortion(\n activeBfuCount,\n maxBfuCount,\n bfuSizes,\n wordLengths,\n scaleFactorIndices,\n biasedScaleFactors,\n zeroBitDistortions\n) {\n let totalDistortion = 0.0\n\n for (let i = 0; i < activeBfuCount; i++) {\n const wl = wordLengths[i] | 0\n const bits = WORD_LENGTH_BITS[wl] | 0\n if (bits === 0) {\n totalDistortion += zeroBitDistortions[i]\n continue\n }\n\n const sfi = scaleFactorIndices[i]\n if (sfi === 0) continue\n\n const effectiveScaleFactor = biasedScaleFactors[sfi]\n const distortionFactor = INV_POWER_OF_TWO[bits]\n\n totalDistortion += effectiveScaleFactor * distortionFactor * bfuSizes[i]\n }\n\n for (let i = activeBfuCount; i < maxBfuCount; i++) {\n totalDistortion += zeroBitDistortions[i]\n }\n\n return totalDistortion\n}\n\n/**\n * Distributes available bits across Band Frequency Units (BFUs) using Rate-Distortion Optimization.\n * (Modified to accept pre-calculated scale factors)\n *\n * @param {number} activeBfuCount\n * @param {Int32Array} bfuSizes\n * @param {number} remainingBits\n * @param {Float64Array} biasedScaleFactors\n * @param {Int32Array} allScaleFactorIndices\n * @returns {object} Retained allocation decisions.\n */\nfunction distributeBits(\n activeBfuCount,\n bfuSizes,\n remainingBits,\n biasedScaleFactors,\n allScaleFactorIndices\n) {\n const wordLengths = new Int32Array(activeBfuCount)\n\n const heapIndices = new Int32Array(activeBfuCount)\n const heapPriorities = new Float32Array(activeBfuCount)\n let heapSize = 0\n\n for (let bfuIndex = 0; bfuIndex < activeBfuCount; bfuIndex++) {\n const sz = bfuSizes[bfuIndex] | 0\n if (sz === 0) continue\n\n const sfi = allScaleFactorIndices[bfuIndex]\n if (sfi === 0) continue\n\n const deltaBits = WORD_LENGTH_DELTA_BITS[0]\n if (deltaBits <= 0) continue\n\n const distortionDelta =\n biasedScaleFactors[sfi] * DISTORTION_DELTA_FACTORS[0]\n\n heapIndices[heapSize] = bfuIndex\n heapPriorities[heapSize] = distortionDelta / deltaBits\n heapSize++\n }\n\n if (heapSize === 0) {\n return { wordLengths, scaleFactorIndices: allScaleFactorIndices }\n }\n\n // Heapify\n for (let i = (heapSize >> 1) - 1; i >= 0; i--) {\n siftDown(heapIndices, heapPriorities, i, heapSize)\n }\n\n // Greedy spending loop\n while (remainingBits > 0 && heapSize > 0) {\n const bfu = heapIndices[0]\n const cur = wordLengths[bfu] | 0\n const sz = bfuSizes[bfu] | 0\n const deltaBits = WORD_LENGTH_DELTA_BITS[cur]\n const cost = deltaBits * sz\n\n if (cost > remainingBits || cost <= 0) {\n const last = heapSize - 1\n heapIndices[0] = heapIndices[last]\n heapPriorities[0] = heapPriorities[last]\n heapSize--\n if (heapSize > 0) siftDown(heapIndices, heapPriorities, 0, heapSize)\n continue\n }\n\n remainingBits -= cost\n const nxt = cur + 1\n wordLengths[bfu] = nxt\n\n const deltaBitsNext = WORD_LENGTH_DELTA_BITS[nxt]\n if (nxt < MAX_WORD_LENGTH_INDEX && deltaBitsNext > 0) {\n const sfi = allScaleFactorIndices[bfu]\n const distortionDelta =\n biasedScaleFactors[sfi] * DISTORTION_DELTA_FACTORS[nxt]\n heapPriorities[0] = distortionDelta / deltaBitsNext\n siftDown(heapIndices, heapPriorities, 0, heapSize)\n } else {\n const last = heapSize - 1\n heapIndices[0] = heapIndices[last]\n heapPriorities[0] = heapPriorities[last]\n heapSize--\n if (heapSize > 0) siftDown(heapIndices, heapPriorities, 0, heapSize)\n }\n }\n\n return { wordLengths, scaleFactorIndices: allScaleFactorIndices }\n}\n\n/**\n * Restores max-heap property by sifting an element down from a given position.\n *\n * This function maintains the heap invariant where parent nodes have higher\n * priority values than their children. It compares the element at startIndex\n * with its children and swaps with the larger child until the heap property\n * is satisfied, or it reaches a leaf position.\n *\n * @param {Int32Array} heapIndices\n * @param {Float32Array} heapPriorities\n * @param {number} startIndex\n * @param {number} heapSize\n */\nfunction siftDown(heapIndices, heapPriorities, startIndex, heapSize) {\n let i = startIndex\n const idxVal = heapIndices[i]\n const prVal = heapPriorities[i]\n\n while (true) {\n const l = (i << 1) + 1\n const r = l + 1\n let maxI = i\n let maxP = prVal\n\n if (l < heapSize && heapPriorities[l] > maxP) {\n maxI = l\n maxP = heapPriorities[l]\n }\n if (r < heapSize && heapPriorities[r] > maxP) {\n maxI = r\n }\n if (maxI === i) break\n\n heapIndices[i] = heapIndices[maxI]\n heapPriorities[i] = heapPriorities[maxI]\n i = maxI\n }\n\n heapIndices[i] = idxVal\n heapPriorities[i] = prVal\n}\n\n/**\n * Allocate bits by finding the optimal BFU count and distribution using RDO.\n * This function searches through the valid BFU counts to find the one that\n * minimizes the total perceptual distortion.\n *\n * @param {Array<Float32Array>} bfuData\n * @param {Int32Array} bfuSizes\n * @param {number} maxBfuCount\n * @param {number} allocationBias\n * @returns {{bfuCount:number, allocation:Int32Array, scaleFactorIndices:Int32Array}}\n */\nexport function solve(bfuData, bfuSizes, maxBfuCount, allocationBias) {\n const allScaleFactorIndices = new Int32Array(maxBfuCount)\n const zeroBitDistortions = new Float32Array(maxBfuCount)\n const biasedScaleFactors = buildBiasedScaleFactorTable(allocationBias)\n\n for (let i = 0; i < maxBfuCount; i++) {\n const sz = bfuSizes[i] | 0\n if (sz === 0) continue\n\n const sfi = findScaleFactor(bfuData[i], sz)\n allScaleFactorIndices[i] = sfi\n if (sfi > 0) {\n const effectiveScaleFactor = biasedScaleFactors[sfi]\n zeroBitDistortions[i] = effectiveScaleFactor * 2.0 * sz\n }\n }\n\n let bestResult = null\n let minTotalDistortion = Infinity\n\n for (const candidateBfuCount of BFU_AMOUNTS) {\n if (candidateBfuCount > maxBfuCount) continue\n\n const availableBits =\n FRAME_BITS -\n FRAME_OVERHEAD_BITS -\n candidateBfuCount * BITS_PER_BFU_METADATA\n\n if (availableBits < 0) continue\n\n const result = search(\n candidateBfuCount,\n maxBfuCount,\n bfuSizes,\n availableBits,\n biasedScaleFactors,\n allScaleFactorIndices,\n zeroBitDistortions\n )\n\n if (result.distortion < minTotalDistortion) {\n minTotalDistortion = result.distortion\n bestResult = {\n bfuCount: candidateBfuCount,\n allocation: result.wordLengths,\n scaleFactorIndices: result.scaleFactorIndices,\n }\n }\n }\n\n if (!bestResult) {\n const fallbackBfuCount = BFU_AMOUNTS[0]\n return {\n bfuCount: fallbackBfuCount,\n allocation: new Int32Array(fallbackBfuCount),\n scaleFactorIndices: new Int32Array(NUM_BFUS),\n }\n }\n\n return bestResult\n}\n\n/**\n * Find the optimal scale factor index for a set of coefficients.\n * Same semantics as the original.\n * @param {Float32Array} coefficients\n * @param {number} length\n * @returns {number}\n */\nexport function findScaleFactor(coefficients, length) {\n let maxAmplitude = 0.0\n for (let i = 0; i < length; i++) {\n const a = Math.abs(coefficients[i])\n if (a > maxAmplitude) maxAmplitude = a\n }\n if (maxAmplitude === 0) return 0\n const index = Math.ceil(3 * (Math.log2(maxAmplitude) + 21))\n return Math.max(0, Math.min(63, index))\n}\n","/**\n * Carta1 allocation stage.\n */\n\nimport { throwError } from '../utils.js'\nimport { prepare } from './source.js'\nimport { solve } from './solve.js'\n\n/**\n * Allocate the frame budget across block floating units.\n *\n * @param {object} context\n * @returns {Function}\n */\nexport function allocate(context) {\n const options =\n context?.options ?? throwError('allocate: options is required')\n\n /**\n * @param {object} input\n * @returns {object}\n */\n return (input) => {\n const { coefficients, blockModes } = input\n const { bfuData, bfuSizes, bfuCount } = prepare(coefficients, blockModes)\n const result = solve(bfuData, bfuSizes, bfuCount, options.allocationBias)\n const nBfu = result.bfuCount\n\n return {\n bfuData,\n bfuSizes,\n nBfu,\n scaleFactorIndices: result.scaleFactorIndices.slice(0, nBfu),\n wordLengthIndices: result.allocation.slice(0, nBfu),\n blockModes,\n }\n }\n}\n","/**\n * Carta1 QMF analysis application.\n */\n\nimport { QMF_ANALYSIS_DELAY_SAMPLES } from '../core/constants.js'\nimport { analyzeQmf } from '../signal/qmf.js'\nimport { throwError } from '../utils.js'\n\n/**\n * Split one sample row through a two-band configurable QMF stage.\n *\n * @param {Float32Array} input\n * @param {Float32Array} delay\n * @param {object} scratch\n * @returns {Float32Array[]}\n */\nfunction analyzePair(input, delay, scratch) {\n const window =\n scratch.analysisWindows[input.length] ??\n throwError(`QMF analysis window for ${input.length} samples is required`)\n window.set(delay)\n window.set(input, delay.length)\n\n const sampleCount = input.length / 2\n const bands = [new Float32Array(sampleCount), new Float32Array(sampleCount)]\n analyzeQmf(window, bands, scratch)\n delay.set(\n window.subarray(input.length, input.length + QMF_ANALYSIS_DELAY_SAMPLES)\n )\n return bands\n}\n\n/**\n * Split PCM into the three ATRAC1 frequency bands.\n *\n * @param {object} context\n * @returns {Function}\n * @throws {Error} If the buffer pool is missing\n */\nexport function analyzeBands(context) {\n const bufferPool =\n context?.bufferPool ?? throwError('analyzeBands: bufferPool is required')\n const delays = bufferPool.qmfAnalysisDelays\n const scratch = bufferPool.qmfScratch\n\n /**\n * @param {Float32Array} pcmSamples\n * @returns {object}\n */\n return (pcmSamples) => {\n const stage1 = analyzePair(pcmSamples, delays.lowBand, scratch)\n const stage2 = analyzePair(stage1[0], delays.midBand, scratch)\n\n const delayedHigh = scratch.highBandWindows[stage1[1].length]\n delayedHigh.set(bufferPool.qmfHighBandDelay)\n delayedHigh.set(stage1[1], bufferPool.qmfHighBandDelay.length)\n\n const highBand = delayedHigh.slice(0, stage1[1].length)\n bufferPool.qmfHighBandDelay.set(\n delayedHigh.subarray(\n stage1[1].length,\n stage1[1].length + bufferPool.qmfHighBandDelay.length\n )\n )\n\n return { bands: [stage2[0], stage2[1], highBand] }\n }\n}\n","/**\n * Carta1 Audio Codec - Transient Detection Module\n *\n * Detects transients using spectral flux analysis to prevent pre-echo artifacts.\n * Combines multiple spectral features to identify sudden changes in signal\n * characteristics that require special handling during encoding.\n */\n\nimport { FFT_SIZE_HIGH, FFT_SIZE_LOW, FFT_SIZE_MID } from '../core/constants.js'\nimport { FFT } from '../signal/fft.js'\nimport { throwError } from '../utils.js'\n\n/**\n * Calculate all spectral features for transient detection\n * @param {Float32Array} currentCoeffs - Current frame coefficients\n * @param {Float32Array} prevCoeffs - Previous frame coefficients\n * @returns {Object} Computed spectral features\n */\nfunction calculateSpectralFeatures(currentCoeffs, prevCoeffs) {\n // Calculate spectral flux (positive differences only)\n const spectralFlux = calculateSpectralFlux(currentCoeffs, prevCoeffs)\n\n // Calculate spectral flatness for both frames\n const currentFlatness = calculateSpectralFlatness(currentCoeffs)\n const prevFlatness = calculateSpectralFlatness(prevCoeffs)\n const flatnessChange = Math.abs(currentFlatness - prevFlatness)\n\n // Calculate high-frequency content ratio\n const currentHfRatio = calculateHighFrequencyRatio(currentCoeffs)\n const prevHfRatio = calculateHighFrequencyRatio(prevCoeffs)\n const hfChange = Math.abs(currentHfRatio - prevHfRatio)\n\n // Calculate energy change in dB\n const energyChange = calculateEnergyChange(currentCoeffs, prevCoeffs)\n\n return {\n spectralFlux,\n flatnessChange,\n hfChange,\n energyChange,\n }\n}\n\n/**\n * Calculate normalized spectral flux (positive spectral differences)\n * High values indicate sudden onset of new spectral components\n */\nfunction calculateSpectralFlux(currentCoeffs, prevCoeffs) {\n let flux = 0\n let currentEnergy = 0\n\n for (let i = 0; i < currentCoeffs.length; i++) {\n const currentMag = Math.abs(currentCoeffs[i])\n const prevMag = Math.abs(prevCoeffs[i])\n\n // Only count positive differences (new energy)\n const diff = currentMag - prevMag\n if (diff > 0) {\n flux += diff\n }\n\n currentEnergy += currentMag * currentMag\n }\n\n // Normalize by current frame energy to make threshold independent of level\n const normalization = Math.sqrt(currentEnergy) || 1e-6\n return flux / normalization\n}\n\n/**\n * Calculate spectral flatness (geometric mean / arithmetic mean)\n * Measures how noise-like vs tonal the spectrum is\n * @param {Float32Array} coeffs - Spectral coefficients\n * @returns {number} Flatness measure (0 = tonal, 1 = noise-like)\n */\nfunction calculateSpectralFlatness(coeffs) {\n const EPSILON = 1e-10\n let sumLog = 0\n let sumLinear = 0\n let validBins = 0\n\n for (let i = 0; i < coeffs.length; i++) {\n const magnitude = Math.abs(coeffs[i])\n if (magnitude > EPSILON) {\n sumLog += Math.log(magnitude)\n sumLinear += magnitude\n validBins++\n }\n }\n\n if (validBins === 0) return 0\n\n const geometricMean = Math.exp(sumLog / validBins)\n const arithmeticMean = sumLinear / validBins\n\n return arithmeticMean > EPSILON ? geometricMean / arithmeticMean : 0\n}\n\n/**\n * Calculate ratio of high-frequency to total energy\n * High values indicate bright/harsh sounds that are perceptually important\n * @param {Float32Array} coeffs - Spectral coefficients\n * @returns {number} High-frequency energy ratio (0-1)\n */\nfunction calculateHighFrequencyRatio(coeffs) {\n const midPoint = Math.floor(coeffs.length / 2)\n let lowEnergy = 0\n let highEnergy = 0\n\n for (let i = 0; i < midPoint; i++) {\n lowEnergy += coeffs[i] * coeffs[i]\n }\n\n for (let i = midPoint; i < coeffs.length; i++) {\n highEnergy += coeffs[i] * coeffs[i]\n }\n\n const totalEnergy = lowEnergy + highEnergy\n return totalEnergy > 0 ? highEnergy / totalEnergy : 0\n}\n\n/**\n * Calculate energy change between frames in dB\n * @param {Float32Array} currentCoeffs - Current frame coefficients\n * @param {Float32Array} prevCoeffs - Previous frame coefficients\n * @returns {number} Energy change in dB (positive values only)\n */\nfunction calculateEnergyChange(currentCoeffs, prevCoeffs) {\n let currentEnergy = 0\n let prevEnergy = 0\n\n for (let i = 0; i < currentCoeffs.length; i++) {\n currentEnergy += currentCoeffs[i] * currentCoeffs[i]\n prevEnergy += prevCoeffs[i] * prevCoeffs[i]\n }\n\n // Avoid log of zero and ensure minimum energy\n currentEnergy = Math.max(currentEnergy, 1e-10)\n prevEnergy = Math.max(prevEnergy, 1e-10)\n\n const changeDb = 10 * Math.log10(currentEnergy / prevEnergy)\n\n // Only interested in energy increases (potential transients)\n return Math.max(0, changeDb)\n}\n\n/**\n * Calculate unified transient score from spectral features\n * Uses perceptually-motivated combination instead of magic numbers\n * @param {Object} features - Spectral features\n * @returns {number} Transient score\n */\nfunction calculateTransientScore(features) {\n const { spectralFlux, flatnessChange, hfChange, energyChange } = features\n\n // Spectral flux is the primary indicator - it directly measures\n // sudden onset of new frequency components\n const fluxContribution = spectralFlux\n\n // Flatness change indicates transition between tonal and noise-like\n // signals (e.g., pitched to unpitched percussion)\n // Scale by sqrt to reduce dominance\n const flatnessContribution = Math.sqrt(flatnessChange)\n\n // High-frequency changes are perceptually important but shouldn't\n // dominate the decision. Use log scaling for perceptual relevance\n const hfContribution = Math.log1p(hfChange * 10) / Math.log1p(10)\n\n // Energy changes in dB are already perceptually scaled\n // Normalize to 0-1 range assuming 30dB is a strong transient\n const energyContribution = Math.min(energyChange / 30, 1)\n\n // Combine features with equal perceptual importance\n // Each contribution is normalized to roughly 0-1 range\n return (\n (fluxContribution +\n flatnessContribution +\n hfContribution +\n energyContribution) /\n 4\n )\n}\n\n/**\n * Perform FFT on time-domain samples and return magnitude spectrum\n * @param {Float32Array} samples - Time-domain samples\n * @param {number} fftSize - FFT size (must be power of 2)\n * @returns {Float32Array} Magnitude spectrum (positive frequencies only)\n */\nexport function performFFT(samples, fftSize) {\n const real = new Float32Array(fftSize)\n const imag = new Float32Array(fftSize)\n\n // Copy samples with zero-padding if necessary\n const copyLen = Math.min(samples.length, fftSize)\n real.set(samples.subarray(0, copyLen))\n\n // Perform FFT\n FFT.transform(real, imag)\n\n // Calculate magnitude spectrum for positive frequencies\n const magnitude = new Float32Array(fftSize / 2)\n for (let i = 0; i < fftSize / 2; i++) {\n magnitude[i] = Math.sqrt(real[i] * real[i] + imag[i] * imag[i])\n }\n\n return magnitude\n}\n\n/**\n * Detect transients by analyzing spectral changes between frames\n * @param {Float32Array} currentCoeffs - Current frame coefficients\n * @param {Float32Array} prevCoeffs - Previous frame coefficients\n * @param {number} threshold - Detection threshold\n * @returns {boolean} True if transient detected\n */\nexport function detectTransient(currentCoeffs, prevCoeffs, threshold) {\n // Can't detect transients without previous frame\n if (!prevCoeffs) return false\n\n // Calculate all spectral features\n const features = calculateSpectralFeatures(currentCoeffs, prevCoeffs)\n\n // Combine features using perceptually-motivated weighting\n const transientScore = calculateTransientScore(features)\n\n return transientScore > threshold\n}\n\n/**\n * Select transform block sizes from transient analysis.\n *\n * @param {object} context\n * @returns {Function}\n * @throws {Error} If the required context is missing\n */\nexport function selectBlocks(context) {\n const bufferPool =\n context?.bufferPool ?? throwError('selectBlocks: bufferPool is required')\n const options =\n context?.options ?? throwError('selectBlocks: options is required')\n const fftSizes = [FFT_SIZE_LOW, FFT_SIZE_MID, FFT_SIZE_HIGH]\n\n /**\n * @param {object} input\n * @returns {object}\n */\n return (input) => {\n const { bands } = input\n let blockModes\n\n if (options.fixedBlockModes) {\n blockModes = options.fixedBlockModes\n } else {\n blockModes = bands.map((bandSamples, bandIndex) => {\n const coeffs = performFFT(bandSamples, fftSizes[bandIndex])\n const transient = detectTransient(\n coeffs,\n bufferPool.transientDetection[bandIndex],\n options.transientThresholdLow\n )\n bufferPool.transientDetection[bandIndex] = coeffs\n return transient * Math.max(bandIndex + 1, 2)\n })\n }\n\n return { bands, blockModes }\n }\n}\n","/**\n * Carta1 spectral analysis application.\n */\n\nimport {\n MDCT_OVERLAP_SIZE,\n MDCT_SHORT_BLOCK_SIZE,\n MDCT_SIZE_LONG,\n MDCT_SIZE_MID,\n MDCT_SIZE_SHORT,\n} from '../core/constants.js'\nimport { calculateBandOffset } from '../core/geometry.js'\nimport { MDCT_BAND_CONFIGS, WINDOW_SHORT } from '../core/tables.js'\nimport { MDCT } from '../signal/mdct.js'\nimport { reverseSpectrum } from '../signal/order.js'\nimport { throwError } from '../utils.js'\n\nconst shortMdct = new MDCT(MDCT_SIZE_SHORT, 0.5)\nconst middleMdct = new MDCT(MDCT_SIZE_MID, 0.5)\nconst longMdct = new MDCT(MDCT_SIZE_LONG, 1)\n\n/**\n * Build the ATRAC1 spectrum from analyzed bands.\n *\n * @param {object} context\n * @returns {Function}\n * @throws {Error} If the buffer pool is missing\n */\nexport function transformSpectrum(context) {\n const bufferPool =\n context?.bufferPool ??\n throwError('transformSpectrum: bufferPool is required')\n const overlapBuffers = bufferPool.mdctOverlap\n const transformFunctions = [middleMdct, middleMdct, longMdct]\n\n /**\n * @param {Float32Array} samples\n * @param {number} bandIndex\n * @param {number} blockMode\n * @param {Float32Array} overlapBuffer\n * @returns {Float32Array}\n */\n function transformBand(samples, bandIndex, blockMode, overlapBuffer) {\n const config = MDCT_BAND_CONFIGS[bandIndex]\n\n if (blockMode === 0) {\n return transformLongBlock(\n samples,\n bandIndex,\n config,\n transformFunctions[bandIndex],\n overlapBuffer\n )\n }\n\n return transformShortBlocks(samples, bandIndex, config, overlapBuffer)\n }\n\n /**\n * @param {Float32Array} samples\n * @param {number} bandIndex\n * @param {Object} config\n * @param {Object} transformFunction\n * @param {Float32Array} overlapBuffer\n * @returns {Float32Array}\n */\n function transformLongBlock(\n samples,\n bandIndex,\n config,\n transformFunction,\n overlapBuffer\n ) {\n const mdctSize = bandIndex === 2 ? MDCT_SIZE_LONG : MDCT_SIZE_MID\n const mdctInput = bufferPool.transformBuffers[mdctSize]\n mdctInput.fill(0)\n mdctInput.set(overlapBuffer, config.windowStart)\n\n applyTailWindowing(samples, overlapBuffer, config.size)\n mdctInput.set(samples, config.windowStart + MDCT_OVERLAP_SIZE)\n\n let spectrum = transformFunction.transform(\n mdctInput,\n bufferPool.mdctBuffers\n )\n if (bandIndex > 0) {\n spectrum = reverseSpectrum(spectrum, bufferPool.reversalBuffers)\n }\n return spectrum\n }\n\n /**\n * @param {Float32Array} samples\n * @param {number} bandIndex\n * @param {Object} config\n * @param {Float32Array} overlapBuffer\n * @returns {Float32Array}\n */\n function transformShortBlocks(samples, bandIndex, config, overlapBuffer) {\n const numBlocks = 1 << (config.size === 256 ? 3 : 2)\n const output = new Float32Array(config.size)\n\n for (let block = 0; block < numBlocks; block++) {\n const blockStart = block * MDCT_SHORT_BLOCK_SIZE\n const blockSamples = samples.subarray(\n blockStart,\n blockStart + MDCT_SHORT_BLOCK_SIZE\n )\n const mdctInput = bufferPool.transformBuffers[MDCT_SIZE_SHORT]\n mdctInput.fill(0)\n mdctInput.set(overlapBuffer, 0)\n\n applyTailWindowing(blockSamples, overlapBuffer, MDCT_SHORT_BLOCK_SIZE)\n mdctInput.set(blockSamples, MDCT_OVERLAP_SIZE)\n\n let spectrum = shortMdct.transform(mdctInput, bufferPool.mdctBuffers)\n if (bandIndex > 0) {\n spectrum = reverseSpectrum(spectrum, bufferPool.reversalBuffers)\n }\n output.set(spectrum, blockStart)\n }\n\n return output\n }\n\n /**\n * @param {Float32Array} samples\n * @param {Float32Array} overlapBuffer\n * @param {number} blockSize\n */\n function applyTailWindowing(samples, overlapBuffer, blockSize) {\n const tailStart = blockSize - MDCT_OVERLAP_SIZE\n for (let i = 0; i < MDCT_OVERLAP_SIZE; i++) {\n const tailValue = samples[tailStart + i]\n overlapBuffer[i] = WINDOW_SHORT[i] * tailValue\n samples[tailStart + i] = tailValue * WINDOW_SHORT[31 - i]\n }\n }\n\n /**\n * @param {object} input\n * @returns {object}\n */\n return (input) => {\n const { bands, blockModes, originalFrame } = input\n const coefficients = new Float32Array(512)\n\n bands.forEach((bandSamples, bandIndex) => {\n const transformed = transformBand(\n bandSamples,\n bandIndex,\n blockModes[bandIndex],\n overlapBuffers[bandIndex]\n )\n coefficients.set(transformed, calculateBandOffset(bandIndex))\n })\n\n return { bands, coefficients, blockModes, originalFrame }\n }\n}\n","/**\n * Carta1 analysis stage.\n */\n\nimport { pipe } from '../utils.js'\nimport { analyzeBands } from './bands.js'\nimport { selectBlocks } from './blocks.js'\nimport { transformSpectrum } from './spectrum.js'\n\n/**\n * Analyze a PCM frame in the ATRAC1 signal domain.\n *\n * @param {object} context\n * @returns {Function}\n */\nexport function analyze(context) {\n const analyzeFrame = pipe(\n context,\n analyzeBands,\n selectBlocks,\n transformSpectrum\n )\n\n /**\n * @param {Float32Array} pcmSamples\n * @returns {object}\n */\n return (pcmSamples) => {\n const { coefficients, blockModes } = analyzeFrame(pcmSamples)\n return { coefficients, blockModes }\n }\n}\n","/**\n * Carta1 quantization stage.\n */\n\nimport { WORD_LENGTH_BITS } from '../core/tables.js'\nimport * as spectrumQuantization from './spectrum.js'\n\n/**\n * Materialize retained allocation as quantized ATRAC1 symbols.\n *\n * @returns {QuantizeFrame}\n */\nexport function quantize() {\n /**\n * @param {object} input\n * @returns {object}\n */\n return (input) => {\n const {\n bfuData,\n bfuSizes,\n nBfu,\n scaleFactorIndices,\n wordLengthIndices,\n blockModes,\n } = input\n const quantizedCoefficients = []\n\n for (let bfu = 0; bfu < nBfu; bfu++) {\n const data = bfuData[bfu].subarray(0, bfuSizes[bfu])\n const bitsPerSample = WORD_LENGTH_BITS[wordLengthIndices[bfu]]\n quantizedCoefficients.push(\n spectrumQuantization.quantize(\n data,\n scaleFactorIndices[bfu],\n bitsPerSample\n )\n )\n }\n\n return {\n nBfu,\n scaleFactorIndices,\n wordLengthIndices,\n quantizedCoefficients,\n blockModes,\n }\n }\n}\n","/**\n * Carta1 Audio Codec - Encoding Pipeline\n *\n * The frame pipeline reads as analysis, allocation, then quantization. Byte\n * packing remains the responsibility of serializeFrame().\n */\n\nimport { allocate } from '../allocation/stage.js'\nimport { analyze } from '../analysis/stage.js'\nimport { EncoderOptions } from '../core/options.js'\nimport { quantize } from '../quantization/stage.js'\nimport { BufferPool } from '../state.js'\nimport { pipe } from '../utils.js'\n\n/**\n * Create an ATRAC1 encoder.\n *\n * @param {EncoderOptions} [options=new EncoderOptions()]\n * @param {BufferPool} [bufferPool=new BufferPool()]\n * @returns {Function}\n */\nexport function encode(\n options = new EncoderOptions(),\n bufferPool = new BufferPool()\n) {\n const context = { options, bufferPool }\n return pipe(context, analyze, allocate, quantize)\n}\n","/**\n * Carta1 chronological stream adapters.\n */\n\nimport {\n AEA_HEADER_SIZE,\n SAMPLES_PER_FRAME,\n SOUND_UNIT_SIZE,\n STREAM_FLUSH_TAIL_FRAMES,\n STREAM_PRIMING_SAMPLES,\n} from '../core/constants.js'\nimport { EncoderOptions } from '../core/options.js'\nimport { decode } from '../pipeline/decoder.js'\nimport { encode } from '../pipeline/encoder.js'\nimport { deserializeFrame, serializeFrame } from '../syntax/frame.js'\nimport { AeaFile } from './container.js'\nimport { frameBufferToFrames, joinChannelFrames } from './pcm.js'\n\n/**\n * Validate a supported channel mode.\n *\n * @param {number} channelCount\n * @throws {Error} If the channel count is unsupported\n */\nfunction validateChannels(channelCount) {\n if (channelCount !== 1 && channelCount !== 2) {\n throw new Error(`Unsupported channel count: ${channelCount}`)\n }\n}\n\n/**\n * Validate one PCM frame in the selected channel mode.\n *\n * @param {object} frame\n * @param {number} channelCount\n * @throws {TypeError} If the frame does not match the selected mode\n * @throws {RangeError} If a selected channel is not one complete frame\n */\nfunction validateChunk(frame, channelCount) {\n const channels = channelCount === 1 ? [frame] : frame\n if (\n !Array.isArray(channels) ||\n channels.length !== channelCount ||\n channels.some((channel) => !(channel instanceof Float32Array))\n ) {\n throw new TypeError(\n `ATRAC1 streaming requires ${channelCount} Float32 channel${\n channelCount === 1 ? '' : 's'\n } per frame`\n )\n }\n\n if (channels.some((channel) => channel.length !== SAMPLES_PER_FRAME)) {\n throw new RangeError(\n `ATRAC1 streaming requires exactly ${SAMPLES_PER_FRAME} samples per channel`\n )\n }\n}\n\n/**\n * Create an empty structured frame for an unmatched stereo channel.\n *\n * @returns {object}\n */\nfunction createDummyFrame() {\n return {\n nBfu: 0,\n blockModes: [0, 0, 0],\n scaleFactorIndices: new Int32Array(0),\n wordLengthIndices: new Int32Array(0),\n quantizedCoefficients: [],\n }\n}\n\n/**\n * Collect an async iterable.\n *\n * @param {AsyncIterable} frames\n * @returns {Promise<Array>}\n */\nasync function collect(frames) {\n const output = []\n for await (const frame of frames) {\n output.push(frame)\n }\n return output\n}\n\n/**\n * Encode chronological PCM frames.\n */\nexport class AeaStreamingEncoder {\n /**\n * @param {object} [options]\n */\n constructor(options = {}) {\n const { channelCount = 1, onProgress, encoderOptions } = options\n validateChannels(channelCount)\n\n const codecOptions = encoderOptions || new EncoderOptions()\n this.channelCount = channelCount\n this.onProgress = onProgress\n this.frameIndex = 0\n this.sampleCount = 0\n this.finalized = false\n this.leftEncoder = encode(codecOptions)\n this.rightEncoder = channelCount === 2 ? encode(codecOptions) : null\n }\n\n /**\n * @param {AsyncIterable<object>} frames\n * @returns {AsyncGenerator<object>}\n */\n async *frames(frames) {\n if (this.finalized) {\n throw new Error('ATRAC1 encoder has already been finalized')\n }\n for await (const frame of frames) {\n validateChunk(frame, this.channelCount)\n if (this.channelCount === 1) {\n yield this.leftEncoder(frame)\n } else {\n const [left, right] = frame\n yield this.leftEncoder(left)\n yield this.rightEncoder(right)\n }\n\n this.sampleCount += SAMPLES_PER_FRAME\n\n if (this.onProgress) {\n this.onProgress(this.frameIndex++)\n }\n }\n }\n\n /**\n * Flush the synthesis tail after a nonempty stream.\n *\n * @returns {Generator<object>}\n */\n *finish() {\n if (this.finalized) return\n this.finalized = true\n if (this.sampleCount === 0) return\n const silence = new Float32Array(SAMPLES_PER_FRAME)\n for (let frame = 0; frame < STREAM_FLUSH_TAIL_FRAMES; frame++) {\n yield this.leftEncoder(silence)\n if (this.channelCount === 2) yield this.rightEncoder(silence)\n }\n }\n}\n\n/**\n * Decode chronological structured frames.\n */\nexport class AeaStreamingDecoder {\n /**\n * @param {object} [options]\n */\n constructor(options = {}) {\n const {\n channelCount = 1,\n onProgress,\n primingSampleCount = 0,\n sampleCount = Number.POSITIVE_INFINITY,\n } = options\n validateChannels(channelCount)\n\n this.channelCount = channelCount\n this.onProgress = onProgress\n this.frameIndex = 0\n this.primingSampleCount = primingSampleCount\n this.sampleCount = sampleCount\n this.timelinePosition = 0\n this.emittedSamples = 0\n this.leftFrame = null\n this.leftDecoder = decode()\n this.rightDecoder = channelCount === 2 ? decode() : null\n }\n\n /**\n * @param {AsyncIterable<object>} frames\n * @returns {AsyncGenerator<object>}\n */\n async *frames(frames) {\n for await (const frame of frames) {\n if (this.channelCount === 1) {\n yield this.trim(this.leftDecoder(frame))\n this.reportProgress()\n } else if (this.leftFrame === null) {\n this.leftFrame = frame\n } else {\n yield this.trim([\n this.leftDecoder(this.leftFrame),\n this.rightDecoder(frame),\n ])\n this.leftFrame = null\n this.reportProgress()\n }\n }\n }\n\n /**\n * Complete an unmatched stereo pair.\n *\n * @returns {Generator<[Float32Array, Float32Array]>}\n */\n *finish() {\n if (this.channelCount === 2 && this.leftFrame !== null) {\n yield this.trim([\n this.leftDecoder(this.leftFrame),\n this.rightDecoder(createDummyFrame()),\n ])\n this.leftFrame = null\n this.reportProgress()\n }\n if (\n Number.isFinite(this.sampleCount) &&\n this.emittedSamples !== this.sampleCount\n ) {\n throw new RangeError(\n `Truncated ATRAC1 timeline: decoded ${this.emittedSamples} of ${this.sampleCount} samples`\n )\n }\n }\n\n /**\n * Apply stream priming and visible-length trimming once per PCM frame.\n *\n * @param {object} frame\n * @returns {object}\n * @private\n */\n trim(frame) {\n const start = Math.max(0, this.primingSampleCount - this.timelinePosition)\n const remaining = this.sampleCount - this.emittedSamples\n const count = Math.max(0, Math.min(SAMPLES_PER_FRAME - start, remaining))\n this.timelinePosition += SAMPLES_PER_FRAME\n this.emittedSamples += count\n if (this.channelCount === 1) return frame.slice(start, start + count)\n return frame.map((channel) => channel.slice(start, start + count))\n }\n\n /**\n * Publish one frame's progress.\n *\n * @private\n */\n reportProgress() {\n if (this.onProgress) {\n this.onProgress(this.frameIndex++)\n }\n }\n}\n\n/**\n * Create a chronological encoder.\n *\n * @param {object} [options]\n * @returns {AeaStreamingEncoder}\n */\nexport function createAeaStreamingEncoder(options) {\n return new AeaStreamingEncoder(options)\n}\n\n/**\n * Create a chronological decoder.\n *\n * @param {object} [options]\n * @returns {AeaStreamingDecoder}\n */\nexport function createAeaStreamingDecoder(options) {\n return new AeaStreamingDecoder(options)\n}\n\n/**\n * Encode complete planar PCM buffers into an AEA byte image.\n *\n * @param {Float32Array[]} channels\n * @param {object} [options]\n * @returns {Promise<Uint8Array>}\n */\nexport async function encodeAeaPcm(channels, options = {}) {\n if (\n !Array.isArray(channels) ||\n (channels.length !== 1 && channels.length !== 2) ||\n channels.some((channel) => !(channel instanceof Float32Array))\n ) {\n throw new TypeError('ATRAC1 encoding requires one or two Float32 channels')\n }\n\n const { title = 'encoded by carta1', ...encoderValues } = options\n const encoder = createAeaStreamingEncoder({\n channelCount: channels.length,\n encoderOptions: new EncoderOptions(encoderValues),\n })\n const frames = encoder.frames(frameBufferToFrames(channels))\n const encoded = await collect(frames)\n encoded.push(...encoder.finish())\n\n const header = AeaFile.createHeader(\n title,\n encoded.length,\n channels.length,\n channels[0].length,\n STREAM_PRIMING_SAMPLES\n )\n const output = new Uint8Array(\n header.length + encoded.length * SOUND_UNIT_SIZE\n )\n output.set(header)\n encoded.forEach((frame, index) => {\n output.set(serializeFrame(frame), header.length + index * SOUND_UNIT_SIZE)\n })\n return output\n}\n\n/**\n * Decode a complete AEA byte image into planar normalized PCM buffers.\n *\n * @param {Uint8Array|ArrayBuffer|Blob} input\n * @returns {Promise<Float32Array[]>}\n */\nexport async function decodeAeaPcm(input) {\n let bytes\n if (input instanceof Blob) {\n bytes = new Uint8Array(await input.arrayBuffer())\n } else if (input instanceof Uint8Array) {\n bytes = input\n } else if (input instanceof ArrayBuffer) {\n bytes = new Uint8Array(input)\n } else {\n throw new TypeError('ATRAC1 decoding requires AEA bytes or a Blob')\n }\n\n const info = AeaFile.parseHeader(bytes.subarray(0, AEA_HEADER_SIZE))\n const decoder = createAeaStreamingDecoder({\n channelCount: info.channelCount,\n primingSampleCount: info.primingSampleCount,\n sampleCount: info.sampleCount,\n })\n const frames = (async function* () {\n for (\n let offset = AEA_HEADER_SIZE;\n offset + SOUND_UNIT_SIZE <= bytes.length;\n offset += SOUND_UNIT_SIZE\n ) {\n yield deserializeFrame(bytes.subarray(offset, offset + SOUND_UNIT_SIZE))\n }\n })()\n const decoded = await collect(decoder.frames(frames))\n decoded.push(...decoder.finish())\n\n if (info.channelCount === 1) {\n return [joinChannelFrames(decoded)]\n }\n return [\n joinChannelFrames(decoded.map(([left]) => left)),\n joinChannelFrames(decoded.map(([, right]) => right)),\n ]\n}\n","/**\n * Carta1 public processing facade.\n */\n\nimport {\n AEA_HEADER_SIZE,\n SAMPLE_RATE,\n SAMPLES_PER_FRAME,\n SOUND_UNIT_SIZE,\n STREAM_FLUSH_TAIL_FRAMES,\n STREAM_PRIMING_SAMPLES,\n} from '../core/constants.js'\nimport { deserializeFrame, serializeFrame } from '../syntax/frame.js'\nimport { AeaFile } from './container.js'\nimport { createPcmWave, frameBufferToFrames, joinChannelFrames } from './pcm.js'\nimport {\n createAeaStreamingDecoder,\n createAeaStreamingEncoder,\n decodeAeaPcm,\n encodeAeaPcm,\n} from './stream.js'\n\n/**\n * High-level audio processing facade.\n */\nexport class AudioProcessor {\n /**\n * @param {Float32Array[]} channels\n * @param {object} [options]\n * @returns {Promise<Uint8Array>}\n */\n static encodeAeaPcm(channels, options = {}) {\n return encodeAeaPcm(channels, options)\n }\n\n /**\n * @param {Uint8Array|ArrayBuffer|Blob} input\n * @returns {Promise<Float32Array[]>}\n */\n static decodeAeaPcm(input) {\n return decodeAeaPcm(input)\n }\n\n /**\n * @param {AsyncIterable<object>} audioFrames\n * @param {object} [options]\n * @returns {AsyncGenerator<object>}\n */\n static async *encodeStream(audioFrames, options = {}) {\n const encoder = createAeaStreamingEncoder(options)\n yield* encoder.frames(audioFrames)\n yield* encoder.finish()\n }\n\n /**\n * @param {AsyncIterable<object>} encodedFrames\n * @param {object} [options]\n * @returns {AsyncGenerator<object>}\n */\n static async *decodeStream(encodedFrames, options = {}) {\n const decoder = createAeaStreamingDecoder(options)\n yield* decoder.frames(encodedFrames)\n yield* decoder.finish()\n }\n\n /**\n * @param {Float32Array[]} buffers\n * @param {number} [frameSize]\n * @returns {Generator<Float32Array>|Generator<[Float32Array, Float32Array]>}\n */\n static *frameBufferToFrames(buffers, frameSize) {\n yield* frameBufferToFrames(buffers, frameSize)\n }\n\n /**\n * @param {AsyncIterable|Iterable} frameStream\n * @returns {Promise<Array>}\n */\n static async collectFrames(frameStream) {\n const frames = []\n for await (const frame of frameStream) {\n frames.push(frame)\n }\n return frames\n }\n\n /**\n * @param {AsyncIterable<object>} encodedFrames\n * @param {object} [options]\n * @returns {Promise<Blob>}\n */\n static async createAeaBlob(encodedFrames, options = {}) {\n const { title = 'encoded by atrac1.js', channelCount = 1 } = options\n const frames = []\n for await (const frame of encodedFrames) {\n frames.push(serializeFrame(frame))\n }\n\n const timelineFrames = frames.length / channelCount\n const sampleCount =\n options.sampleCount ??\n Math.max(0, timelineFrames - STREAM_FLUSH_TAIL_FRAMES) * SAMPLES_PER_FRAME\n const header = AeaFile.createHeader(\n title,\n frames.length,\n channelCount,\n sampleCount,\n STREAM_PRIMING_SAMPLES\n )\n return new Blob([header, ...frames], { type: 'application/octet-stream' })\n }\n\n /**\n * @param {Blob} blob\n * @returns {Promise<object>} Parsed AEA data.\n */\n static async parseAeaBlob(blob) {\n const buffer = await blob.arrayBuffer()\n const header = new Uint8Array(buffer.slice(0, AEA_HEADER_SIZE))\n const info = AeaFile.parseHeader(header)\n const frameData = []\n\n for (let offset = AEA_HEADER_SIZE; offset < buffer.byteLength;) {\n const frame = new Uint8Array(\n buffer.slice(offset, offset + SOUND_UNIT_SIZE)\n )\n if (frame.length === SOUND_UNIT_SIZE) {\n frameData.push(frame)\n }\n offset += SOUND_UNIT_SIZE\n }\n return { info, frameData }\n }\n\n /**\n * @param {Uint8Array[]} frameData\n * @returns {Generator<object>}\n */\n static *deserializedFrameStream(frameData) {\n for (const frame of frameData) {\n yield deserializeFrame(frame)\n }\n }\n\n /**\n * @param {Float32Array[]|[Float32Array, Float32Array][]} pcmFrames\n * @param {number} [channelCount=1]\n * @param {number} [sampleRate=SAMPLE_RATE]\n * @returns {Blob}\n */\n static createPcmWaveBlob(\n pcmFrames,\n channelCount = 1,\n sampleRate = SAMPLE_RATE\n ) {\n let channels\n if (channelCount === 1) {\n channels = [joinChannelFrames(pcmFrames)]\n } else if (channelCount === 2) {\n channels = [\n joinChannelFrames(pcmFrames.map(([left]) => left)),\n joinChannelFrames(pcmFrames.map(([, right]) => right)),\n ]\n } else {\n throw new Error(`Unsupported channel count: ${channelCount}`)\n }\n return new Blob([createPcmWave(channels, { sampleRate })], {\n type: 'audio/wav',\n })\n }\n\n /**\n * Preserve the supported WAVE facade name.\n *\n * @param {Float32Array[]|[Float32Array, Float32Array][]} pcmFrames\n * @param {number} [channelCount=1]\n * @param {number} [sampleRate=SAMPLE_RATE]\n * @returns {Blob}\n */\n static createWavBlob(pcmFrames, channelCount = 1, sampleRate = SAMPLE_RATE) {\n return AudioProcessor.createPcmWaveBlob(pcmFrames, channelCount, sampleRate)\n }\n\n /**\n * Assemble PCM frames using the supported interleaved result shape.\n *\n * @param {Float32Array[]|[Float32Array, Float32Array][]} pcmFrames\n * @param {number} channelCount\n * @returns {Float32Array}\n */\n static assemblePcmFrames(pcmFrames, channelCount) {\n if (channelCount === 1) {\n return joinChannelFrames(pcmFrames)\n }\n if (channelCount !== 2) {\n throw new Error(`Unsupported channel count: ${channelCount}`)\n }\n\n const left = joinChannelFrames(pcmFrames.map(([channel]) => channel))\n const right = joinChannelFrames(pcmFrames.map(([, channel]) => channel))\n const pcm = new Float32Array(Math.max(left.length, right.length) * 2)\n for (let i = 0; i < pcm.length / 2; i++) {\n pcm[i * 2] = left[i] ?? 0\n pcm[i * 2 + 1] = right[i] ?? 0\n }\n return pcm\n }\n}\n","/**\n * Carta1 Web Worker - Self-contained audio codec worker\n *\n * Provides asynchronous encoding and decoding of ATRAC1 audio format\n * in a separate thread to prevent blocking the main UI thread.\n *\n * Usage:\n * Include this file as a web worker:\n * new Worker('carta1-worker.min.js')\n */\n\nimport { AeaFile } from './container.js'\nimport { EncoderOptions } from '../core/options.js'\nimport { AudioProcessor } from './processor.js'\nimport { SAMPLE_RATE } from '../core/constants.js'\n\n/**\n * Encode PCM audio data to ATRAC1 format\n *\n * @param {Array<Float32Array>} pcmData - PCM audio data [mono] or [left, right]\n * @param {Object} options - Encoder options\n * @returns {Promise<Object>} Encoded AEA blob\n */\nasync function encodeAtrac(pcmData, options, title) {\n title = title ?? 'encoded by carta1'\n try {\n const audioFrames = AudioProcessor.frameBufferToFrames(pcmData)\n const channelCount = pcmData.length\n\n // Create encoder options from provided settings\n const encoderOptions = new EncoderOptions(options)\n\n const encodedFrames = AudioProcessor.encodeStream(audioFrames, {\n channelCount,\n encoderOptions,\n })\n\n const frameArray = await AudioProcessor.collectFrames(encodedFrames)\n\n const aeaBlob = await AudioProcessor.createAeaBlob(frameArray, {\n title,\n channelCount,\n sampleCount: pcmData[0].length,\n })\n\n // Return the blob\n return { aeaBlob }\n } catch (error) {\n console.error('Worker encode error:', error)\n throw error\n }\n}\n\n/**\n * Get default encoder options metadata\n *\n * @returns {Object} Default encoder options as plain object\n */\nfunction getEncoderOptionsMetadata() {\n const defaultOptions = new EncoderOptions()\n return defaultOptions.toObject()\n}\n\n/**\n * Decode ATRAC1 data to PCM WAV format\n *\n * @param {Object} aea - AEA data object\n * @param {Uint8Array} aea.header - AEA file header\n * @param {Array} aea.aeaData - Serialized frame data\n * @param {Object} [aea.info] - Optional metadata\n * @returns {Promise<Object>} WAV blob and decoding info\n */\nasync function decodeAtrac(aea) {\n const { header, aeaData, info } = aea\n\n // Use provided info, or fall back to header parsing, or defaults\n let decodingInfo\n if (info) {\n decodingInfo = { sampleRate: SAMPLE_RATE, ...info }\n } else if (header) {\n const headerInfo = AeaFile.parseHeader(header)\n decodingInfo = { sampleRate: SAMPLE_RATE, ...headerInfo }\n } else {\n decodingInfo = { channelCount: 2, sampleRate: SAMPLE_RATE }\n }\n\n const encodedFrameStream = AudioProcessor.deserializedFrameStream(aeaData)\n const decodedFrames = AudioProcessor.decodeStream(encodedFrameStream, {\n channelCount: decodingInfo.channelCount,\n primingSampleCount: decodingInfo.primingSampleCount,\n sampleCount: decodingInfo.sampleCount,\n })\n\n const pcmFrames = await AudioProcessor.collectFrames(decodedFrames)\n\n // Create WAV blob directly\n const wavBlob = AudioProcessor.createPcmWaveBlob(\n pcmFrames,\n decodingInfo.channelCount,\n decodingInfo.sampleRate\n )\n\n return { wavBlob, info: decodingInfo }\n}\n\n/**\n * Handle messages from the main thread\n *\n * Supported message types:\n * - 'encode': Encode PCM to ATRAC1\n * - 'decode': Decode ATRAC1 to PCM\n * - 'parseAea': Parse AEA blob metadata\n * - 'getEncoderOptions': Get default encoder options\n */\nself.onmessage = async (e) => {\n const { jobId, type, pcmData, aea, options, title, blob } = e.data\n\n try {\n let result\n\n switch (type) {\n case 'encode':\n result = await encodeAtrac(pcmData, options, title)\n break\n case 'decode':\n result = await decodeAtrac(aea)\n break\n case 'parseAea':\n result = await AudioProcessor.parseAeaBlob(blob)\n break\n case 'getEncoderOptions':\n result = getEncoderOptionsMetadata()\n break\n default:\n throw new Error(`Unknown worker message type: ${type}`)\n }\n\n self.postMessage({ jobId, result })\n } catch (error) {\n console.error('Worker error:', error)\n self.postMessage({ jobId, error: error.message })\n }\n}\n"],"names":["coefficients","components","SAMPLE_RATE","SAMPLES_PER_FRAME","AEA_HEADER_SIZE","SOUND_UNIT_SIZE","MDCT_SIZE_MID","MDCT_SIZE_LONG","MDCT_SHORT_BLOCK_SIZE","MDCT_OVERLAP_SIZE","MDCT_TAIL_WINDOW_SIZE","QMF_ANALYSIS_TERMS","QMF_ANALYSIS_DELAY_SAMPLES","QMF_TAPS","QMF_SYNTHESIS_DELAY_ROWS","QMF_SYNTHESIS_TERMS","MAX_WORD_LENGTH_INDEX","AEA_MAGIC","Uint8Array","SPECS_PER_BFU","Int32Array","BFU_AMOUNTS","BFU_BAND_BOUNDARIES","BFU_START_LONG","BFU_START_SHORT","WINDOW_SHORT","table","Float64Array","i","Math","sin","PI","QMF_COEFFS","Float32Array","QMF_WINDOW","window","QMF_EVEN","even","QMF_ODD","odd","QMF_ANALYSIS_SAMPLE_OFFSETS","offsets","QMF_BANDS","term","QMF_ANALYSIS_FILTER_COEFFICIENTS","set","QMF_ANALYSIS_MODULATION_COEFFICIENTS","QMF_SYNTHESIS_DELAY_ROW_OFFSETS","sample","sampleOffset","QMF_SYNTHESIS_DELAY_COMPONENTS","fill","QMF_SYNTHESIS_FILTER_COEFFICIENTS","QMF_SYNTHESIS_MODULATION_COEFFICIENTS","MDCT_BAND_CONFIGS","size","windowStart","WORD_LENGTH_BITS","SCALE_FACTORS","pow","INV_POWER_OF_TWO","maxBits","bits","WORD_LENGTH_DELTA_BITS","DISTORTION_DELTA_FACTORS","bits1","bits2","AeaFile","_classCallCheck","this","key","value","title","arguments","length","undefined","frameCount","channelCount","sampleCount","primingSampleCount","header","view","DataView","buffer","titleBytes","TextEncoder","encode","subarray","min","AEA_TITLE_SIZE","setUint32","Error","concat","byteOffset","byteLength","titleEnd","indexOf","titleLength","TextDecoder","decode","getUint32","EncoderOptions","options","values","transientThresholdLow","transientThresholdMid","transientThresholdHigh","allocationBias","fixedBlockModes","metadata","default","name","description","range","step","type","setOptions","_i","_Object$entries","Object","entries","_Object$entries$_i","_slicedToArray","setValue","meta","_meta$range","max","get","_objectSpread","_i2","_Object$entries2","_Object$entries2$_i","assertBitCount","bitCount","Number","isInteger","RangeError","packBits","bitPosition","byteIndex","floor","bitOffset","unsignedValue","bitsWritten","bitsAvailable","bitsToWrite","valueBits","mask","unpackBits","bitsRead","bitsToRead","unpackSignedBits","serializeFrame","frameData","bfuIndex","nBfu","blockModes","setUint16","wordLengthIndices","scaleFactorIndices","bitsPerSample","_step","_iterator","_createForOfIteratorHelper","quantizedCoefficients","s","n","done","coefficient","err","e","f","deserializeFrame","getUint16","bfuSize","j","push","t","r","Symbol","iterator","o","toStringTag","c","prototype","Generator","u","create","_regeneratorDefine2","p","y","G","v","a","d","bind","l","TypeError","call","GeneratorFunction","GeneratorFunctionPrototype","getPrototypeOf","setPrototypeOf","__proto__","displayName","_regenerator","w","m","defineProperty","_invoke","enumerable","configurable","writable","Array","isArray","_arrayWithHoles","next","_iterableToArrayLimit","_unsupportedIterableToArray","_nonIterableRest","_n","F","_arrayLikeToArray","toString","slice","constructor","from","test","writeFourCc","output","offset","setUint8","charCodeAt","joinChannelFrames","frames","reduce","total","frame","channel","frameBufferToFrames","buffers","frameSize","_callee","_buffers","left","_buffers2","_left","right","_offset","leftFrame","rightFrame","_context","every","floatToPcm16","clipped","createPcmWave","channels","_options$sampleRate","sampleRate","pcm","_step2","_iterator2","setInt16","interleavePcm16","_ref","byteRate","blockAlign","dataSize","createPcmWaveHeader","quantize","scaleFactorIndex","out","quantRange","normFactor","hi","lo","x","dequantize","quantized","scaleFactor","deq","bfu","band","position","dequantized","spectrumQuantization","QmfSynthesisState","_createClass","delay","delayRow","History","qmfAnalysisDelays","lowBand","midBand","qmfSynthesisStates","qmfHighBandDelay","transientDetection","mdctOverlap","imdctOverlap","Scratch","transformBuffers","qmfScratch","analysisWindows","highBandWindows","QMF_HIGH_BAND_DELAY","polyphase","extended","bands","mdctBuffers","real","imaginary","reversalBuffers","BufferPool","assign","throwError","msg","pipe","context","_len","stages","_key","operations","map","stage","input","operation","FFT","log2","index","reversed","remaining","bit","realValue","imaginaryValue","stride","halfStride","angle","stepReal","cos","stepImaginary","start","twiddleReal","twiddleImaginary","evenIndex","oddIndex","evenReal","evenImaginary","oddReal","oddImaginary","rotatedReal","rotatedImaginary","nextReal","MdctBase","scale","halfSize","quarterSize","fftSize","alpha","omega","scaleRoot","sqrt","sinCosTable","MDCT","_MdctBase","_callSuper","_inherits","_mdctBuffers$this$fft","_buffers$real","_buffers$imaginary","destination","destinationOffset","imag","n4","n34","i2","i3","i4","im","idx","transform","re","IMDCT","_MdctBase2","_mdctBuffers$this$fft2","_buffers$real2","_buffers$imaginary2","r1","i1","reverseSpectrum","spectrum","shortImdct","MDCT_SIZE_SHORT","middleImdct","longImdct","overlapAdd","previous","current","headWindow","tailWindow","previousSample","currentSample","synthesizeSpectrum","_context$bufferPool","bufferPool","overlapBuffers","transformFunctions","transformBand","bandIndex","blockMode","overlapBuffer","config","transformFunction","blockSpectrum","inverse","inverseStart","inverseBuffer","overlap","copyLength","inverseLongBlock","numBlocks","block","inverseShortBlocks","bandCoefficients","extractBandCoefficients","fround","synthesizePair","state","scratch","inputBands","_scratch$polyphase2","_scratch$bands2","some","delayOffset","component","coefficientOffset","sum","outputOffset","outputSample","termOffset","synthesizeQmf","synthesizePcm","states","delayedHigh","highBand","stage2","synthesize","prepare","bfuData","bfuSizes","coeffIndex","bandStart","bandSize","bandEnd","startPositions","startPos","endPos","srcStart","srcEnd","bfuCount","groupIntoBFUs","biasedScaleFactorCache","Map","search","activeBfuCount","maxBfuCount","remainingBits","biasedScaleFactors","allScaleFactorIndices","zeroBitDistortions","allocation","wordLengths","heapIndices","heapPriorities","heapSize","sfi","deltaBits","distortionDelta","siftDown","cur","sz","cost","last","nxt","deltaBitsNext","distributeBits","distortion","totalDistortion","wl","measureDistortion","startIndex","idxVal","prVal","maxI","maxP","solve","bias","has","buildBiasedScaleFactorTable","findScaleFactor","effectiveScaleFactor","bestResult","minTotalDistortion","Infinity","candidateBfuCount","availableBits","FRAME_BITS","result","fallbackBfuCount","maxAmplitude","abs","ceil","allocate","_context$options","_prepare","analyzePair","_scratch$analysisWind","outputBands","_scratch$polyphase","_scratch$extended","_scratch$bands","requiredSamples","inputOffset","analyzeQmf","analyzeBands","delays","pcmSamples","stage1","calculateSpectralFeatures","currentCoeffs","prevCoeffs","spectralFlux","flux","currentEnergy","currentMag","diff","normalization","calculateSpectralFlux","currentFlatness","calculateSpectralFlatness","prevFlatness","flatnessChange","currentHfRatio","calculateHighFrequencyRatio","prevHfRatio","hfChange","energyChange","prevEnergy","changeDb","log10","calculateEnergyChange","coeffs","sumLog","sumLinear","validBins","magnitude","log","geometricMean","exp","arithmeticMean","midPoint","lowEnergy","highEnergy","totalEnergy","detectTransient","threshold","transientScore","features","log1p","calculateTransientScore","selectBlocks","fftSizes","bandSamples","samples","copyLen","performFFT","transient","shortMdct","middleMdct","longMdct","transformSpectrum","mdctSize","mdctInput","applyTailWindowing","transformLongBlock","blockStart","blockSamples","transformShortBlocks","blockSize","tailStart","tailValue","originalFrame","forEach","transformed","calculateBandOffset","analyze","analyzeFrame","_analyzeFrame","data","_defineProperties","_toPropertyKey","_typeof","toPrimitive","String","_toPrimitive","asyncGeneratorStep","Promise","resolve","then","_asyncToGenerator","apply","_next","_throw","_awaitAsyncGenerator","_OverloadYield","_wrapAsyncGenerator","AsyncGenerator","resume","k","settle","reject","arg","_asyncIterator","asyncIterator","AsyncFromSyncIterator","AsyncFromSyncIteratorContinuation","return","throw","validateChannels","validateChunk","createDummyFrame","collect","_x","_collect","_callee3","_iteratorAbruptCompletion","_didIteratorError","_iteratorError","_t3","_context5","AeaStreamingEncoder","_options$channelCount","onProgress","encoderOptions","codecOptions","frameIndex","finalized","leftEncoder","rightEncoder","_this","_iteratorAbruptCompletion2","_didIteratorError2","_iteratorError2","_frame","_t","finish","silence","_context2","AeaStreamingDecoder","_options$channelCount2","_options$primingSampl","_options$sampleCount","POSITIVE_INFINITY","timelinePosition","emittedSamples","leftDecoder","rightDecoder","_this2","_callee2","_iteratorAbruptCompletion3","_didIteratorError3","_iteratorError3","_iterator3","_step3","_t2","_context3","trim","reportProgress","_context4","isFinite","count","createAeaStreamingEncoder","createAeaStreamingDecoder","_encodeAeaPcm","_callee4","_options$title","encoderValues","encoder","encoded","_args6","_context6","_objectWithoutProperties","_excluded","_toConsumableArray","createHeader","_decodeAeaPcm","_callee6","bytes","info","decoder","decoded","_t4","_t5","_context8","Blob","arrayBuffer","ArrayBuffer","parseHeader","_callee5","_context7","_ref2","_ref4","_asyncGeneratorDelegate","pump","AudioProcessor","_x2","encodeAeaPcm","_x3","decodeAeaPcm","audioFrames","_regeneratorValues","encodedFrames","_collectFrames","frameStream","_createAeaBlob","timelineFrames","_args5","_x4","_parseAeaBlob","blob","_x5","deserializedFrameStream","pcmFrames","_ref3","createPcmWaveBlob","_ref5","_ref7","_left$i","_right$i","encodeAtrac","_encodeAtrac","pcmData","frameArray","aeaBlob","encodeStream","collectFrames","createAeaBlob","console","error","getEncoderOptionsMetadata","toObject","decodeAtrac","_decodeAtrac","aea","aeaData","decodingInfo","headerInfo","encodedFrameStream","decodedFrames","wavBlob","decodeStream","self","onmessage","_e$data","jobId","parseAeaBlob","postMessage","message"],"sourceRoot":""}
|