carta1 1.1.1 → 1.1.2
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/bin/cli.js +10 -10
- package/codec/analysis/transient.js +13 -13
- package/codec/browser/interface.js +3 -3
- package/codec/browser/worker.js +1 -1
- package/codec/coding/bitallocation.js +3 -3
- package/codec/coding/quantization.js +9 -11
- package/codec/core/buffers.js +32 -32
- package/codec/core/constants.js +9 -66
- package/codec/io/processor.js +18 -18
- package/codec/pipeline/decoder.js +15 -15
- package/codec/pipeline/encoder.js +19 -19
- package/codec/transforms/fft.js +4 -4
- package/codec/transforms/mdct.js +19 -19
- package/codec/transforms/qmf.js +8 -8
- package/codec/utils.js +12 -12
- package/dist/carta1-worker-interface.min.js.map +1 -1
- 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
|
@@ -59,11 +59,11 @@ export function dequantizationStage() {
|
|
|
59
59
|
* @param {Array<Int32Array>} frameData.quantizedCoefficients - Quantized coefficient data
|
|
60
60
|
* @param {Array<number>} frameData.blockModes - Block modes for each band
|
|
61
61
|
* @returns {Object} Dequantization results
|
|
62
|
-
* @returns {
|
|
62
|
+
* @returns {Float64Array} returns.coefficients - Reconstructed MDCT coefficients (512 samples)
|
|
63
63
|
* @returns {Array<number>} returns.blockModes - Block modes for each band
|
|
64
64
|
*/
|
|
65
65
|
return (frameData) => {
|
|
66
|
-
const coefficients = new
|
|
66
|
+
const coefficients = new Float64Array(512)
|
|
67
67
|
const {
|
|
68
68
|
nBfu,
|
|
69
69
|
scaleFactorIndices,
|
|
@@ -123,13 +123,13 @@ export function imdctStage(context) {
|
|
|
123
123
|
|
|
124
124
|
/**
|
|
125
125
|
* Inverse transform a single frequency band.
|
|
126
|
-
* @param {
|
|
126
|
+
* @param {Float64Array} coeffs
|
|
127
127
|
* @param {number} bandIndex
|
|
128
128
|
* @param {number} blockMode
|
|
129
|
-
* @param {
|
|
129
|
+
* @param {Float64Array} overlapBuffer
|
|
130
130
|
* @param {Object} bufferPool
|
|
131
131
|
* @param {Object} config
|
|
132
|
-
* @returns {
|
|
132
|
+
* @returns {Float64Array}
|
|
133
133
|
*/
|
|
134
134
|
function transformBand(
|
|
135
135
|
coeffs,
|
|
@@ -164,13 +164,13 @@ export function imdctStage(context) {
|
|
|
164
164
|
|
|
165
165
|
/**
|
|
166
166
|
* Inverse transform using long block.
|
|
167
|
-
* @param {
|
|
167
|
+
* @param {Float64Array} coeffs
|
|
168
168
|
* @param {number} bandIndex
|
|
169
|
-
* @param {
|
|
169
|
+
* @param {Float64Array} overlapBuffer
|
|
170
170
|
* @param {Object} bufferPool
|
|
171
171
|
* @param {Object} config
|
|
172
172
|
* @param {Object} transformFunc
|
|
173
|
-
* @returns {
|
|
173
|
+
* @returns {Float64Array}
|
|
174
174
|
*/
|
|
175
175
|
function inverseLongBlock(
|
|
176
176
|
coeffs,
|
|
@@ -234,12 +234,12 @@ export function imdctStage(context) {
|
|
|
234
234
|
|
|
235
235
|
/**
|
|
236
236
|
* Inverse transform using short blocks.
|
|
237
|
-
* @param {
|
|
237
|
+
* @param {Float64Array} coeffs
|
|
238
238
|
* @param {number} bandIndex
|
|
239
|
-
* @param {
|
|
239
|
+
* @param {Float64Array} overlapBuffer
|
|
240
240
|
* @param {Object} bufferPool
|
|
241
241
|
* @param {Object} config
|
|
242
|
-
* @returns {
|
|
242
|
+
* @returns {Float64Array}
|
|
243
243
|
*/
|
|
244
244
|
function inverseShortBlocks(
|
|
245
245
|
coeffs,
|
|
@@ -308,9 +308,9 @@ export function imdctStage(context) {
|
|
|
308
308
|
/**
|
|
309
309
|
* Transform coefficients back to time domain using inverse MDCT
|
|
310
310
|
* @param {Object} input - Dequantization results
|
|
311
|
-
* @param {
|
|
311
|
+
* @param {Float64Array} input.coefficients - MDCT coefficients (512 samples)
|
|
312
312
|
* @param {Array<number>} input.blockModes - Block modes for each band
|
|
313
|
-
* @returns {Array<
|
|
313
|
+
* @returns {Array<Float64Array>} Three reconstructed frequency bands [low, mid, high]
|
|
314
314
|
*/
|
|
315
315
|
return (input) => {
|
|
316
316
|
const { coefficients, blockModes } = input
|
|
@@ -354,8 +354,8 @@ export function qmfSynthesisStage(context) {
|
|
|
354
354
|
|
|
355
355
|
/**
|
|
356
356
|
* Reconstruct full-spectrum PCM samples from frequency bands
|
|
357
|
-
* @param {Array<
|
|
358
|
-
* @returns {
|
|
357
|
+
* @param {Array<Float64Array>} bands - Three frequency bands [low, mid, high]
|
|
358
|
+
* @returns {Float64Array} Reconstructed PCM samples
|
|
359
359
|
*/
|
|
360
360
|
return (bands) => {
|
|
361
361
|
// Apply high band delay compensation
|
|
@@ -62,9 +62,9 @@ export function qmfAnalysisStage(context) {
|
|
|
62
62
|
|
|
63
63
|
/**
|
|
64
64
|
* Process PCM samples through QMF analysis
|
|
65
|
-
* @param {
|
|
65
|
+
* @param {Float64Array} pcmSamples - Input PCM samples
|
|
66
66
|
* @returns {Object} Analysis result containing frequency bands
|
|
67
|
-
* @returns {Array<
|
|
67
|
+
* @returns {Array<Float64Array>} returns.bands - Three frequency bands [low, mid, high]
|
|
68
68
|
*/
|
|
69
69
|
return (pcmSamples) => {
|
|
70
70
|
const stage1 = qmfAnalysis(
|
|
@@ -118,9 +118,9 @@ export function blockSelectorStage(context) {
|
|
|
118
118
|
/**
|
|
119
119
|
* Analyze frequency bands and determine block modes
|
|
120
120
|
* @param {Object} input - QMF analysis results
|
|
121
|
-
* @param {Array<
|
|
121
|
+
* @param {Array<Float64Array>} input.bands - Three frequency bands [low, mid, high]
|
|
122
122
|
* @returns {Object} Block selection results
|
|
123
|
-
* @returns {Array<
|
|
123
|
+
* @returns {Array<Float64Array>} returns.bands - Original frequency bands
|
|
124
124
|
* @returns {Array<number>} returns.blockModes - Block modes for each band
|
|
125
125
|
*/
|
|
126
126
|
return (input) => {
|
|
@@ -170,12 +170,12 @@ export function mdctStage(context) {
|
|
|
170
170
|
|
|
171
171
|
/**
|
|
172
172
|
* Transform a single frequency band using MDCT.
|
|
173
|
-
* @param {
|
|
173
|
+
* @param {Float64Array} samples
|
|
174
174
|
* @param {number} bandIndex
|
|
175
175
|
* @param {number} blockMode
|
|
176
|
-
* @param {
|
|
176
|
+
* @param {Float64Array} overlapBuffer
|
|
177
177
|
* @param {Object} bufferPool
|
|
178
|
-
* @returns {
|
|
178
|
+
* @returns {Float64Array}
|
|
179
179
|
*/
|
|
180
180
|
function transformBand(
|
|
181
181
|
samples,
|
|
@@ -210,13 +210,13 @@ export function mdctStage(context) {
|
|
|
210
210
|
|
|
211
211
|
/**
|
|
212
212
|
* Transform using long block (better frequency resolution).
|
|
213
|
-
* @param {
|
|
213
|
+
* @param {Float64Array} samples
|
|
214
214
|
* @param {number} bandIndex
|
|
215
215
|
* @param {Object} config
|
|
216
216
|
* @param {Object} transformFunc
|
|
217
|
-
* @param {
|
|
217
|
+
* @param {Float64Array} overlapBuffer
|
|
218
218
|
* @param {Object} bufferPool
|
|
219
|
-
* @returns {
|
|
219
|
+
* @returns {Float64Array}
|
|
220
220
|
*/
|
|
221
221
|
function transformLongBlock(
|
|
222
222
|
samples,
|
|
@@ -252,12 +252,12 @@ export function mdctStage(context) {
|
|
|
252
252
|
|
|
253
253
|
/**
|
|
254
254
|
* Transform using short blocks (better time resolution for transients).
|
|
255
|
-
* @param {
|
|
255
|
+
* @param {Float64Array} samples
|
|
256
256
|
* @param {number} bandIndex
|
|
257
257
|
* @param {Object} config
|
|
258
|
-
* @param {
|
|
258
|
+
* @param {Float64Array} overlapBuffer
|
|
259
259
|
* @param {Object} bufferPool
|
|
260
|
-
* @returns {
|
|
260
|
+
* @returns {Float64Array}
|
|
261
261
|
*/
|
|
262
262
|
function transformShortBlocks(
|
|
263
263
|
samples,
|
|
@@ -267,7 +267,7 @@ export function mdctStage(context) {
|
|
|
267
267
|
bufferPool
|
|
268
268
|
) {
|
|
269
269
|
const numBlocks = 1 << (config.size === 256 ? 3 : 2) // 8 for band 2, 4 for bands 0-1
|
|
270
|
-
const output = new
|
|
270
|
+
const output = new Float64Array(config.size)
|
|
271
271
|
|
|
272
272
|
for (let block = 0; block < numBlocks; block++) {
|
|
273
273
|
const blockStart = block * MDCT_SHORT_BLOCK_SIZE
|
|
@@ -311,18 +311,18 @@ export function mdctStage(context) {
|
|
|
311
311
|
/**
|
|
312
312
|
* Transform frequency bands using MDCT
|
|
313
313
|
* @param {Object} input - Block selection results
|
|
314
|
-
* @param {Array<
|
|
314
|
+
* @param {Array<Float64Array>} input.bands - Three frequency bands
|
|
315
315
|
* @param {Array<number>} input.blockModes - Block modes for each band
|
|
316
316
|
* @param {any} input.originalFrame - Original frame data (passed through)
|
|
317
317
|
* @returns {Object} MDCT transform results
|
|
318
|
-
* @returns {Array<
|
|
319
|
-
* @returns {
|
|
318
|
+
* @returns {Array<Float64Array>} returns.bands - Original frequency bands
|
|
319
|
+
* @returns {Float64Array} returns.coefficients - MDCT coefficients (512 samples)
|
|
320
320
|
* @returns {Array<number>} returns.blockModes - Block modes
|
|
321
321
|
* @returns {any} returns.originalFrame - Original frame data
|
|
322
322
|
*/
|
|
323
323
|
return (input) => {
|
|
324
324
|
const { bands, blockModes, originalFrame } = input
|
|
325
|
-
const coefficients = new
|
|
325
|
+
const coefficients = new Float64Array(512)
|
|
326
326
|
|
|
327
327
|
bands.forEach((bandSamples, bandIndex) => {
|
|
328
328
|
const transformed = transformBand(
|
|
@@ -359,7 +359,7 @@ export function quantizationStage() {
|
|
|
359
359
|
/**
|
|
360
360
|
* Perform RDO bit allocation and quantization
|
|
361
361
|
* @param {Object} input - MDCT transform results
|
|
362
|
-
* @param {
|
|
362
|
+
* @param {Float64Array} input.coefficients - MDCT coefficients
|
|
363
363
|
* @param {Array<number>} input.blockModes - Block modes
|
|
364
364
|
* @returns {Object} Quantization results ready for bitstream encoding
|
|
365
365
|
* @returns {number} returns.nBfu - Number of active BFUs
|
package/codec/transforms/fft.js
CHANGED
|
@@ -7,8 +7,8 @@ export class FFT {
|
|
|
7
7
|
|
|
8
8
|
/**
|
|
9
9
|
* Perform an in-place forward FFT on complex data.
|
|
10
|
-
* @param {
|
|
11
|
-
* @param {
|
|
10
|
+
* @param {Float64Array} real - Real part of the input/output data
|
|
11
|
+
* @param {Float64Array} imag - Imaginary part of the input/output data
|
|
12
12
|
*/
|
|
13
13
|
static fft(real, imag) {
|
|
14
14
|
const n = real.length
|
|
@@ -123,8 +123,8 @@ export class FFT {
|
|
|
123
123
|
bitRev[i] = (bitRev[i >>> 1] >>> 1) | ((i & 1) << (log2n - 1))
|
|
124
124
|
}
|
|
125
125
|
const halfN = n >>> 1
|
|
126
|
-
const cosTbl = new
|
|
127
|
-
const sinTbl = new
|
|
126
|
+
const cosTbl = new Float64Array(halfN)
|
|
127
|
+
const sinTbl = new Float64Array(halfN)
|
|
128
128
|
const ang = (-2 * Math.PI) / n
|
|
129
129
|
for (let i = 0; i < halfN; i++) {
|
|
130
130
|
const a = ang * i
|
package/codec/transforms/mdct.js
CHANGED
|
@@ -28,7 +28,7 @@ class MDCTBase {
|
|
|
28
28
|
const omega = (2.0 * Math.PI) / size
|
|
29
29
|
const scaleRoot = Math.sqrt(scale / size)
|
|
30
30
|
|
|
31
|
-
this.sinCosTable = new
|
|
31
|
+
this.sinCosTable = new Float64Array(this.halfSize)
|
|
32
32
|
for (let i = 0; i < this.quarterSize; i++) {
|
|
33
33
|
const angle = omega * i + alpha
|
|
34
34
|
this.sinCosTable[i * 2] = scaleRoot * Math.cos(angle)
|
|
@@ -47,9 +47,9 @@ export class MDCT extends MDCTBase {
|
|
|
47
47
|
|
|
48
48
|
/**
|
|
49
49
|
* Perform forward MDCT transform
|
|
50
|
-
* @param {
|
|
50
|
+
* @param {Float64Array} input - Time-domain input samples
|
|
51
51
|
* @param {Object} mdctBuffers - Optional work buffers for FFT
|
|
52
|
-
* @returns {
|
|
52
|
+
* @returns {Float64Array} Frequency-domain MDCT coefficients
|
|
53
53
|
*/
|
|
54
54
|
transform(input, mdctBuffers = null) {
|
|
55
55
|
const buffers =
|
|
@@ -107,7 +107,7 @@ export class MDCT extends MDCTBase {
|
|
|
107
107
|
FFT.fft(real, imag)
|
|
108
108
|
|
|
109
109
|
// Post-FFT processing
|
|
110
|
-
const output = new
|
|
110
|
+
const output = new Float64Array(this.halfSize)
|
|
111
111
|
for (let i = 0; i < this.fftSize; i++) {
|
|
112
112
|
const c = this.sinCosTable[i * 2]
|
|
113
113
|
const s = this.sinCosTable[i * 2 + 1]
|
|
@@ -132,9 +132,9 @@ export class IMDCT extends MDCTBase {
|
|
|
132
132
|
|
|
133
133
|
/**
|
|
134
134
|
* Perform inverse MDCT transform
|
|
135
|
-
* @param {
|
|
135
|
+
* @param {Float64Array} input - Frequency-domain MDCT coefficients
|
|
136
136
|
* @param {Object} mdctBuffers - Optional work buffers for FFT
|
|
137
|
-
* @returns {
|
|
137
|
+
* @returns {Float64Array} Time-domain output samples
|
|
138
138
|
*/
|
|
139
139
|
transform(input, mdctBuffers = null) {
|
|
140
140
|
const buffers =
|
|
@@ -160,19 +160,19 @@ export class IMDCT extends MDCTBase {
|
|
|
160
160
|
// Pre-FFT processing
|
|
161
161
|
for (let i = 0; i < this.fftSize; i++) {
|
|
162
162
|
const i2 = i * 2
|
|
163
|
-
const r = input[i2]
|
|
164
|
-
const im = input[this.halfSize - 1 - i2]
|
|
163
|
+
const r = -input[i2]
|
|
164
|
+
const im = -input[this.halfSize - 1 - i2]
|
|
165
165
|
const c = this.sinCosTable[i2]
|
|
166
166
|
const s = this.sinCosTable[i2 + 1]
|
|
167
167
|
|
|
168
|
-
real[i] =
|
|
169
|
-
imag[i] =
|
|
168
|
+
real[i] = im * s + r * c
|
|
169
|
+
imag[i] = im * c - r * s
|
|
170
170
|
}
|
|
171
171
|
|
|
172
172
|
FFT.fft(real, imag)
|
|
173
173
|
|
|
174
174
|
// Post-FFT butterfly
|
|
175
|
-
const output = new
|
|
175
|
+
const output = new Float64Array(this.size)
|
|
176
176
|
|
|
177
177
|
for (let i = 0; i < this.fftSize / 2; i++) {
|
|
178
178
|
const i2 = i * 2
|
|
@@ -216,20 +216,20 @@ export const mdct64 = new MDCT(MDCT_SIZE_SHORT, 0.5)
|
|
|
216
216
|
export const mdct256 = new MDCT(MDCT_SIZE_MID, 0.5)
|
|
217
217
|
export const mdct512 = new MDCT(MDCT_SIZE_LONG, 1.0)
|
|
218
218
|
|
|
219
|
-
export const imdct64 = new IMDCT(MDCT_SIZE_SHORT, MDCT_SIZE_SHORT *
|
|
220
|
-
export const imdct256 = new IMDCT(MDCT_SIZE_MID, MDCT_SIZE_MID *
|
|
221
|
-
export const imdct512 = new IMDCT(MDCT_SIZE_LONG, MDCT_SIZE_LONG *
|
|
219
|
+
export const imdct64 = new IMDCT(MDCT_SIZE_SHORT, MDCT_SIZE_SHORT * 8)
|
|
220
|
+
export const imdct256 = new IMDCT(MDCT_SIZE_MID, MDCT_SIZE_MID * 8)
|
|
221
|
+
export const imdct512 = new IMDCT(MDCT_SIZE_LONG, MDCT_SIZE_LONG * 4)
|
|
222
222
|
|
|
223
223
|
/**
|
|
224
224
|
* Perform overlap-add operation for MDCT reconstruction
|
|
225
|
-
* @param {
|
|
226
|
-
* @param {
|
|
227
|
-
* @param {
|
|
228
|
-
* @returns {
|
|
225
|
+
* @param {Float64Array} prev - Previous block samples
|
|
226
|
+
* @param {Float64Array} curr - Current block samples
|
|
227
|
+
* @param {Float64Array} window - Window function coefficients
|
|
228
|
+
* @returns {Float64Array} Overlap-added output samples
|
|
229
229
|
*/
|
|
230
230
|
export function overlapAdd(prev, curr, window) {
|
|
231
231
|
const size = prev.length
|
|
232
|
-
const output = new
|
|
232
|
+
const output = new Float64Array(size * 2)
|
|
233
233
|
|
|
234
234
|
for (let i = 0; i < size; i++) {
|
|
235
235
|
const w1 = window[i]
|
package/codec/transforms/qmf.js
CHANGED
|
@@ -11,8 +11,8 @@ import { throwError } from '../utils.js'
|
|
|
11
11
|
|
|
12
12
|
/**
|
|
13
13
|
* Perform QMF analysis filtering to split input into low and high frequency bands
|
|
14
|
-
* @param {
|
|
15
|
-
* @param {
|
|
14
|
+
* @param {Float64Array} input - Input audio samples
|
|
15
|
+
* @param {Float64Array} delayLine - QMF delay line state
|
|
16
16
|
* @param {Object} qmfWorkBuffers - Optional work buffers for processing
|
|
17
17
|
* @returns {Object} Object containing lowBand, highBand, and newDelay
|
|
18
18
|
*/
|
|
@@ -26,8 +26,8 @@ export function qmfAnalysis(input, delayLine, qmfWorkBuffers = null) {
|
|
|
26
26
|
workBuffer.set(delayLine)
|
|
27
27
|
workBuffer.set(input, delayLine.length)
|
|
28
28
|
|
|
29
|
-
const lowBand = new
|
|
30
|
-
const highBand = new
|
|
29
|
+
const lowBand = new Float64Array(outputLength)
|
|
30
|
+
const highBand = new Float64Array(outputLength)
|
|
31
31
|
|
|
32
32
|
for (let i = 0; i < outputLength; i++) {
|
|
33
33
|
let evenSum = 0
|
|
@@ -51,9 +51,9 @@ export function qmfAnalysis(input, delayLine, qmfWorkBuffers = null) {
|
|
|
51
51
|
|
|
52
52
|
/**
|
|
53
53
|
* Perform QMF synthesis filtering to reconstruct audio from low and high frequency bands
|
|
54
|
-
* @param {
|
|
55
|
-
* @param {
|
|
56
|
-
* @param {
|
|
54
|
+
* @param {Float64Array} lowBand - Low frequency band samples
|
|
55
|
+
* @param {Float64Array} highBand - High frequency band samples
|
|
56
|
+
* @param {Float64Array} delayLine - QMF delay line state
|
|
57
57
|
* @param {Object} qmfWorkBuffers - Optional work buffers for processing
|
|
58
58
|
* @returns {Object} Object containing output and newDelay
|
|
59
59
|
*/
|
|
@@ -82,7 +82,7 @@ export function qmfSynthesis(
|
|
|
82
82
|
workBuffer[offset + 1] = 0.5 * (low - high)
|
|
83
83
|
}
|
|
84
84
|
|
|
85
|
-
const output = new
|
|
85
|
+
const output = new Float64Array(outputLength)
|
|
86
86
|
|
|
87
87
|
// Convolution
|
|
88
88
|
for (let i = 0; i < subbandLength; i++) {
|
package/codec/utils.js
CHANGED
|
@@ -33,9 +33,9 @@ export function pipe(context, ...stages) {
|
|
|
33
33
|
|
|
34
34
|
/**
|
|
35
35
|
* Pads audio frames and adds flush samples for proper codec delay handling
|
|
36
|
-
* @param {AsyncIterable<
|
|
36
|
+
* @param {AsyncIterable<Float64Array>} iter - Input frame stream
|
|
37
37
|
* @param {number} [samplesToFlush=CODEC_DELAY] - Number of samples to flush
|
|
38
|
-
* @yields {
|
|
38
|
+
* @yields {Float64Array} Padded frames with flush samples
|
|
39
39
|
*/
|
|
40
40
|
export async function* withFlushSamples(iter, samplesToFlush = CODEC_DELAY) {
|
|
41
41
|
let lastFrameLength = SAMPLES_PER_FRAME
|
|
@@ -45,27 +45,27 @@ export async function* withFlushSamples(iter, samplesToFlush = CODEC_DELAY) {
|
|
|
45
45
|
yield frame
|
|
46
46
|
} else {
|
|
47
47
|
// We need to pad
|
|
48
|
-
const paddedFrame = new
|
|
48
|
+
const paddedFrame = new Float64Array(SAMPLES_PER_FRAME)
|
|
49
49
|
paddedFrame.set(frame)
|
|
50
50
|
yield paddedFrame
|
|
51
51
|
}
|
|
52
52
|
}
|
|
53
53
|
if (SAMPLES_PER_FRAME - lastFrameLength < samplesToFlush) {
|
|
54
|
-
yield new
|
|
54
|
+
yield new Float64Array(SAMPLES_PER_FRAME)
|
|
55
55
|
}
|
|
56
56
|
}
|
|
57
57
|
|
|
58
58
|
/**
|
|
59
59
|
* Applies delay compensation to PCM frame stream by dropping initial samples
|
|
60
|
-
* @param {AsyncIterable<
|
|
60
|
+
* @param {AsyncIterable<Float64Array>} pcmFrameStream - Input PCM frame stream
|
|
61
61
|
* @param {number} [samplesToDrop=CODEC_DELAY] - Number of samples to drop for delay compensation
|
|
62
|
-
* @yields {
|
|
62
|
+
* @yields {Float64Array} Delay-compensated PCM frames
|
|
63
63
|
*/
|
|
64
64
|
export async function* withDelayCompensation(
|
|
65
65
|
pcmFrameStream,
|
|
66
66
|
samplesToDrop = CODEC_DELAY
|
|
67
67
|
) {
|
|
68
|
-
let buffer = new
|
|
68
|
+
let buffer = new Float64Array(0)
|
|
69
69
|
let droppedInitialSamples = false
|
|
70
70
|
|
|
71
71
|
for await (const frame of pcmFrameStream) {
|
|
@@ -84,7 +84,7 @@ export async function* withDelayCompensation(
|
|
|
84
84
|
}
|
|
85
85
|
|
|
86
86
|
// Concatenate buffer with new frame
|
|
87
|
-
const combined = new
|
|
87
|
+
const combined = new Float64Array(buffer.length + frame.length)
|
|
88
88
|
combined.set(buffer)
|
|
89
89
|
combined.set(frame, buffer.length)
|
|
90
90
|
|
|
@@ -152,9 +152,9 @@ export function withStereo(monoTransform, ...args) {
|
|
|
152
152
|
* Used in both MDCT and IMDCT stages to handle spectral reversal required
|
|
153
153
|
* by the ATRAC1 format for mid and high frequency bands.
|
|
154
154
|
*
|
|
155
|
-
* @param {
|
|
155
|
+
* @param {Float64Array} spectrum - Input spectrum coefficients
|
|
156
156
|
* @param {Object} reversalBuffers - Pre-allocated buffers for different spectrum sizes
|
|
157
|
-
* @returns {
|
|
157
|
+
* @returns {Float64Array} Spectrum with reversed coefficient order
|
|
158
158
|
*/
|
|
159
159
|
export function reverseSpectrum(spectrum, reversalBuffers) {
|
|
160
160
|
const reversed = reversalBuffers[spectrum.length]
|
|
@@ -177,9 +177,9 @@ export function calculateBandOffset(bandIndex) {
|
|
|
177
177
|
/**
|
|
178
178
|
* Extracts coefficients for a specific frequency band from the full coefficient array
|
|
179
179
|
*
|
|
180
|
-
* @param {
|
|
180
|
+
* @param {Float64Array} coefficients - Full 512-sample coefficient array
|
|
181
181
|
* @param {number} bandIndex - Band index (0=low, 1=mid, 2=high)
|
|
182
|
-
* @returns {
|
|
182
|
+
* @returns {Float64Array} Subarray containing coefficients for the specified band
|
|
183
183
|
*/
|
|
184
184
|
export function extractBandCoefficients(coefficients, bandIndex) {
|
|
185
185
|
const offsets = [0, 128, 256, 512]
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"carta1-worker-interface.min.js","mappings":"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","sources":["webpack://carta1/webpack/bootstrap","webpack://carta1/webpack/runtime/define property getters","webpack://carta1/webpack/runtime/hasOwnProperty shorthand","webpack://carta1/./codec/browser/interface.js"],"sourcesContent":["// The require scope\nvar __webpack_require__ = {};\n\n","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","/**\n * Carta1 Worker Interface - Client-side API\n *\n * Provides a clean async interface for encoding and decoding ATRAC1 audio\n * using Web Workers for non-blocking operation.\n *\n * Usage:\n * const codec = new Carta1Worker('carta1-worker.min.js')\n * const result = await codec.encode(pcmData, options)\n * codec.terminate()\n *\n * The worker path can be customized to match your deployment:\n * new Carta1Worker('/js/carta1-worker.min.js')\n * new Carta1Worker('https://cdn.example.com/carta1-worker.min.js')\n */\n\nclass Carta1Worker {\n /**\n * Create a new ATRAC1 codec worker\n *\n * @param {string} [workerPath='atrac1-worker.min.js'] - Path to the worker script\n */\n constructor(workerPath = 'carta1-worker.min.js') {\n this.worker = new Worker(workerPath)\n this.nextJobId = 1\n this.jobs = new Map()\n\n // Handle worker responses\n this.worker.onmessage = (e) => {\n const { jobId, error, result } = e.data\n\n if (!jobId) {\n console.warn('Received message without jobId:', e.data)\n return\n }\n\n if (this.jobs.has(jobId)) {\n const { resolve, reject } = this.jobs.get(jobId)\n this.jobs.delete(jobId)\n\n if (error) {\n reject(new Error(error))\n } else if (result) {\n resolve(result)\n } else {\n reject(new Error('Worker returned no result'))\n }\n } else {\n console.warn('Received result for unknown job:', jobId)\n }\n }\n\n // Handle worker errors\n this.worker.onerror = (error) => {\n console.error('Worker crashed:', error)\n // Reject all pending jobs\n for (const [, { reject }] of this.jobs) {\n reject(new Error('Worker crashed: ' + error.message))\n }\n this.jobs.clear()\n }\n }\n\n /**\n * Encode PCM audio to ATRAC1 format\n *\n * @param {Float32Array|Array<Float32Array>} pcmData - PCM audio data\n * - Mono: Float32Array\n * - Stereo: [left, right] Float32Arrays\n * @param {Object} [options={}] - Encoder options\n * @param {number} [options.transientThresholdLow] - Low band transient threshold\n * @param {number} [options.transientThresholdMid] - Mid band transient threshold\n * @param {number} [options.transientThresholdHigh] - High band transient threshold\n * @returns {Promise<Object>} Encoding result\n * @returns {Blob} returns.aeaBlob - ATRAC1 encoded audio blob\n * @returns {Object} returns.shortBlockData - Short block frame indices\n */\n async encode(pcmData, options = {}) {\n const jobId = this.nextJobId++\n return new Promise((resolve, reject) => {\n this.jobs.set(jobId, { resolve, reject })\n try {\n // Ensure plain object for serialization\n const plainOptions = { ...options }\n this.worker.postMessage({\n jobId,\n type: 'encode',\n pcmData,\n options: plainOptions,\n })\n } catch (error) {\n this.jobs.delete(jobId)\n reject(error)\n }\n })\n }\n\n /**\n * Decode ATRAC1 audio to PCM WAV format\n *\n * @param {Object} aea - ATRAC1 audio data\n * @param {Uint8Array} aea.header - AEA file header\n * @param {Array} aea.aeaData - Encoded frame data\n * @param {Object} [aea.info] - Optional metadata\n * @returns {Promise<Object>} Decoding result\n * @returns {Blob} returns.wavBlob - Decoded WAV audio blob\n * @returns {Object} returns.info - Audio metadata (channels, sample rate)\n */\n async decode(aea) {\n const jobId = this.nextJobId++\n return new Promise((resolve, reject) => {\n this.jobs.set(jobId, { resolve, reject })\n try {\n this.worker.postMessage({ jobId, type: 'decode', aea })\n } catch (error) {\n this.jobs.delete(jobId)\n reject(error)\n }\n })\n }\n\n /**\n * Parse AEA file blob to extract metadata and frame data\n *\n * @param {Blob} blob - AEA file blob\n * @returns {Promise<Object>} Parsed AEA data\n * @returns {Uint8Array} returns.header - AEA file header\n * @returns {Array} returns.aeaData - Encoded frame data\n * @returns {Object} returns.info - Metadata (title, channels, frames)\n */\n async parseAeaBlob(blob) {\n const jobId = this.nextJobId++\n return new Promise((resolve, reject) => {\n this.jobs.set(jobId, { resolve, reject })\n try {\n this.worker.postMessage({ jobId, type: 'parseAea', blob })\n } catch (error) {\n this.jobs.delete(jobId)\n reject(error)\n }\n })\n }\n\n /**\n * Get default encoder options metadata\n *\n * @returns {Promise<Object>} Default encoder options\n */\n async getEncoderOptions() {\n const jobId = this.nextJobId++\n return new Promise((resolve, reject) => {\n this.jobs.set(jobId, { resolve, reject })\n try {\n this.worker.postMessage({ jobId, type: 'getEncoderOptions' })\n } catch (error) {\n this.jobs.delete(jobId)\n reject(error)\n }\n })\n }\n\n /**\n * Terminate the worker and clean up resources\n *\n * Call this when done using the codec to free memory\n */\n terminate() {\n if (this.worker) {\n this.worker.terminate()\n this.worker = null\n }\n this.jobs.clear()\n }\n}\n\nexport default Carta1Worker\nexport { Carta1Worker }\n"],"names":["__webpack_require__","exports","definition","key","o","Object","defineProperty","enumerable","get","obj","prop","prototype","hasOwnProperty","call","e","t","r","Symbol","n","iterator","toStringTag","i","c","Generator","u","create","_regeneratorDefine2","f","p","y","G","v","a","d","bind","length","l","TypeError","done","value","GeneratorFunction","GeneratorFunctionPrototype","getPrototypeOf","setPrototypeOf","__proto__","displayName","_regenerator","w","m","configurable","writable","_invoke","ownKeys","keys","getOwnPropertySymbols","filter","getOwnPropertyDescriptor","push","apply","_objectSpread","arguments","forEach","_defineProperty","getOwnPropertyDescriptors","defineProperties","_toPropertyKey","asyncGeneratorStep","Promise","resolve","then","_asyncToGenerator","_next","_throw","_slicedToArray","Array","isArray","_arrayWithHoles","next","_iterableToArrayLimit","_unsupportedIterableToArray","_nonIterableRest","_arrayLikeToArray","toString","slice","constructor","name","from","test","_defineProperties","_typeof","toPrimitive","String","Number","_toPrimitive","Carta1Worker","_this","workerPath","undefined","_classCallCheck","this","worker","Worker","nextJobId","jobs","Map","onmessage","_e$data","data","jobId","error","result","has","_this$jobs$get","reject","Error","console","warn","onerror","_step","_iterator","_n","F","s","_createForOfIteratorHelper","message","err","clear","_encode","_callee","pcmData","options","_this2","_args","_context","set","plainOptions","postMessage","type","_x","_decode","_callee2","aea","_this3","_context2","_x2","_parseAeaBlob","_callee3","blob","_this4","_context3","_x3","_getEncoderOptions","_callee4","_this5","_context4","terminate"],"sourceRoot":""}
|
|
1
|
+
{"version":3,"file":"carta1-worker-interface.min.js","mappings":"AACA,IAAIA,EAAsB,CCA1BA,EAAwB,CAACC,EAASC,KACjC,IAAI,IAAIC,KAAOD,EACXF,EAAoBI,EAAEF,EAAYC,KAASH,EAAoBI,EAAEH,EAASE,IAC5EE,OAAOC,eAAeL,EAASE,EAAK,CAAEI,YAAY,EAAMC,IAAKN,EAAWC,MCJ3EH,EAAwB,CAACS,EAAKC,IAAUL,OAAOM,UAAUC,eAAeC,KAAKJ,EAAKC,I,0ZCClF,IAAAI,EAAAC,EAAAC,EAAA,mBAAAC,OAAAA,OAAA,GAAAC,EAAAF,EAAAG,UAAA,aAAAf,EAAAY,EAAAI,aAAA,yBAAAC,EAAAL,EAAAE,EAAAd,EAAAiB,GAAA,IAAAC,EAAAJ,GAAAA,EAAAP,qBAAAY,EAAAL,EAAAK,EAAAC,EAAAnB,OAAAoB,OAAAH,EAAAX,WAAA,OAAAe,EAAAF,EAAA,mBAAAR,EAAAE,EAAAd,GAAA,IAAAiB,EAAAC,EAAAE,EAAAG,EAAA,EAAAC,EAAAxB,GAAA,GAAAyB,GAAA,EAAAC,EAAA,CAAAF,EAAA,EAAAV,EAAA,EAAAa,EAAAjB,EAAAkB,EAAAC,EAAAN,EAAAM,EAAAC,KAAApB,EAAA,GAAAmB,EAAA,SAAAlB,EAAAC,GAAA,OAAAK,EAAAN,EAAAO,EAAA,EAAAE,EAAAV,EAAAgB,EAAAZ,EAAAF,EAAAgB,CAAA,YAAAC,EAAAjB,EAAAE,GAAA,IAAAI,EAAAN,EAAAQ,EAAAN,EAAAH,EAAA,GAAAc,GAAAF,IAAAvB,GAAAW,EAAAa,EAAAO,OAAApB,IAAA,KAAAX,EAAAiB,EAAAO,EAAAb,GAAAkB,EAAAH,EAAAF,EAAAQ,EAAAf,EAAA,GAAAL,EAAA,GAAAZ,EAAAgC,IAAAlB,KAAAM,EAAAH,GAAAC,EAAAD,EAAA,OAAAC,EAAA,MAAAD,EAAA,GAAAA,EAAA,GAAAP,GAAAO,EAAA,IAAAY,KAAA7B,EAAAY,EAAA,GAAAiB,EAAAZ,EAAA,KAAAC,EAAA,EAAAQ,EAAAC,EAAAb,EAAAY,EAAAZ,EAAAG,EAAA,IAAAY,EAAAG,IAAAhC,EAAAY,EAAA,GAAAK,EAAA,GAAAH,GAAAA,EAAAkB,KAAAf,EAAA,GAAAL,EAAAK,EAAA,GAAAH,EAAAY,EAAAZ,EAAAkB,EAAAd,EAAA,OAAAlB,GAAAY,EAAA,SAAAgB,EAAA,MAAAH,GAAA,EAAAX,CAAA,iBAAAd,EAAAwB,EAAAQ,GAAA,GAAAT,EAAA,QAAAU,UAAA,oCAAAR,GAAA,IAAAD,GAAAK,EAAAL,EAAAQ,GAAAd,EAAAM,EAAAJ,EAAAY,GAAArB,EAAAO,EAAA,EAAAR,EAAAU,KAAAK,GAAA,CAAAR,IAAAC,EAAAA,EAAA,GAAAA,EAAA,IAAAQ,EAAAZ,GAAA,GAAAe,EAAAX,EAAAE,IAAAM,EAAAZ,EAAAM,EAAAM,EAAAC,EAAAP,GAAA,OAAAG,EAAA,EAAAN,EAAA,IAAAC,IAAAlB,EAAA,QAAAW,EAAAM,EAAAjB,GAAA,MAAAW,EAAAA,EAAAF,KAAAQ,EAAAG,IAAA,MAAAa,UAAA,wCAAAtB,EAAAuB,KAAA,OAAAvB,EAAAS,EAAAT,EAAAwB,MAAAjB,EAAA,IAAAA,EAAA,YAAAA,IAAAP,EAAAM,EAAA,SAAAN,EAAAF,KAAAQ,GAAAC,EAAA,IAAAE,EAAAa,UAAA,oCAAAjC,EAAA,YAAAkB,EAAA,GAAAD,EAAAP,CAAA,UAAAC,GAAAc,EAAAC,EAAAZ,EAAA,GAAAM,EAAAR,EAAAH,KAAAK,EAAAY,MAAAE,EAAA,YAAAjB,GAAAM,EAAAP,EAAAQ,EAAA,EAAAE,EAAAT,CAAA,SAAAY,EAAA,UAAAY,MAAAxB,EAAAuB,KAAAT,EAAA,GAAAb,EAAAZ,EAAAiB,IAAA,GAAAG,CAAA,KAAAQ,EAAA,YAAAT,IAAA,UAAAiB,IAAA,UAAAC,IAAA,CAAA1B,EAAAV,OAAAqC,eAAA,IAAApB,EAAA,GAAAJ,GAAAH,EAAAA,EAAA,GAAAG,QAAAQ,EAAAX,EAAA,GAAAG,EAAA,yBAAAH,GAAAS,EAAAiB,EAAA9B,UAAAY,EAAAZ,UAAAN,OAAAoB,OAAAH,GAAA,SAAAK,EAAAb,GAAA,OAAAT,OAAAsC,eAAAtC,OAAAsC,eAAA7B,EAAA2B,IAAA3B,EAAA8B,UAAAH,EAAAf,EAAAZ,EAAAV,EAAA,sBAAAU,EAAAH,UAAAN,OAAAoB,OAAAD,GAAAV,CAAA,QAAA0B,EAAA7B,UAAA8B,EAAAf,EAAAF,EAAA,cAAAiB,GAAAf,EAAAe,EAAA,cAAAD,GAAAA,EAAAK,YAAA,oBAAAnB,EAAAe,EAAArC,EAAA,qBAAAsB,EAAAF,GAAAE,EAAAF,EAAApB,EAAA,aAAAsB,EAAAF,EAAAN,EAAA,yBAAAQ,EAAAF,EAAA,oDAAAsB,EAAA,kBAAAC,EAAA1B,EAAA2B,EAAArB,EAAA,cAAAD,EAAAZ,EAAAE,EAAAE,EAAAH,GAAA,IAAAM,EAAAhB,OAAAC,eAAA,IAAAe,EAAA,gBAAAP,GAAAO,EAAA,EAAAK,EAAA,SAAAZ,EAAAE,EAAAE,EAAAH,GAAA,GAAAC,EAAAK,EAAAA,EAAAP,EAAAE,EAAA,CAAAuB,MAAArB,EAAAX,YAAAQ,EAAAkC,cAAAlC,EAAAmC,UAAAnC,IAAAD,EAAAE,GAAAE,MAAA,KAAAd,EAAA,SAAAY,EAAAE,GAAAQ,EAAAZ,EAAAE,EAAA,SAAAF,GAAA,YAAAqC,QAAAnC,EAAAE,EAAAJ,EAAA,IAAAV,EAAA,UAAAA,EAAA,WAAAA,EAAA,cAAAsB,EAAAZ,EAAAE,EAAAE,EAAAH,EAAA,UAAAqC,EAAAtC,EAAAE,GAAA,IAAAD,EAAAV,OAAAgD,KAAAvC,GAAA,GAAAT,OAAAiD,sBAAA,KAAAlD,EAAAC,OAAAiD,sBAAAxC,GAAAE,IAAAZ,EAAAA,EAAAmD,OAAA,SAAAvC,GAAA,OAAAX,OAAAmD,yBAAA1C,EAAAE,GAAAT,UAAA,IAAAQ,EAAA0C,KAAAC,MAAA3C,EAAAX,EAAA,QAAAW,CAAA,UAAA4C,EAAA7C,GAAA,QAAAE,EAAA,EAAAA,EAAA4C,UAAAzB,OAAAnB,IAAA,KAAAD,EAAA,MAAA6C,UAAA5C,GAAA4C,UAAA5C,GAAA,GAAAA,EAAA,EAAAoC,EAAA/C,OAAAU,IAAA,GAAA8C,QAAA,SAAA7C,GAAA8C,EAAAhD,EAAAE,EAAAD,EAAAC,GAAA,GAAAX,OAAA0D,0BAAA1D,OAAA2D,iBAAAlD,EAAAT,OAAA0D,0BAAAhD,IAAAqC,EAAA/C,OAAAU,IAAA8C,QAAA,SAAA7C,GAAAX,OAAAC,eAAAQ,EAAAE,EAAAX,OAAAmD,yBAAAzC,EAAAC,GAAA,UAAAF,CAAA,UAAAgD,EAAAhD,EAAAE,EAAAD,GAAA,OAAAC,EAAAiD,EAAAjD,MAAAF,EAAAT,OAAAC,eAAAQ,EAAAE,EAAA,CAAAuB,MAAAxB,EAAAR,YAAA,EAAA0C,cAAA,EAAAC,UAAA,IAAApC,EAAAE,GAAAD,EAAAD,CAAA,UAAAoD,EAAAhD,EAAAH,EAAAD,EAAAE,EAAAZ,EAAA4B,EAAAV,GAAA,QAAAD,EAAAH,EAAAc,GAAAV,GAAAE,EAAAH,EAAAkB,KAAA,OAAArB,GAAA,YAAAJ,EAAAI,EAAA,CAAAG,EAAAiB,KAAAvB,EAAAS,GAAA2C,QAAAC,QAAA5C,GAAA6C,KAAArD,EAAAZ,EAAA,UAAAkE,EAAApD,GAAA,sBAAAH,EAAA,KAAAD,EAAA8C,UAAA,WAAAO,QAAA,SAAAnD,EAAAZ,GAAA,IAAA4B,EAAAd,EAAAwC,MAAA3C,EAAAD,GAAA,SAAAyD,EAAArD,GAAAgD,EAAAlC,EAAAhB,EAAAZ,EAAAmE,EAAAC,EAAA,OAAAtD,EAAA,UAAAsD,EAAAtD,GAAAgD,EAAAlC,EAAAhB,EAAAZ,EAAAmE,EAAAC,EAAA,QAAAtD,EAAA,CAAAqD,OAAA,eAAAE,EAAAzD,EAAAF,GAAA,gBAAAE,GAAA,GAAA0D,MAAAC,QAAA3D,GAAA,OAAAA,CAAA,CAAA4D,CAAA5D,IAAA,SAAAA,EAAAoB,GAAA,IAAArB,EAAA,MAAAC,EAAA,yBAAAC,QAAAD,EAAAC,OAAAE,WAAAH,EAAA,uBAAAD,EAAA,KAAAD,EAAAI,EAAAG,EAAAG,EAAAQ,EAAA,GAAAL,GAAA,EAAAvB,GAAA,SAAAiB,GAAAN,EAAAA,EAAAF,KAAAG,IAAA6D,KAAA,IAAAzC,EAAA,IAAA/B,OAAAU,KAAAA,EAAA,OAAAY,GAAA,cAAAA,GAAAb,EAAAO,EAAAR,KAAAE,IAAAuB,QAAAN,EAAAyB,KAAA3C,EAAAyB,OAAAP,EAAAG,SAAAC,GAAAT,GAAA,UAAAX,GAAAZ,GAAA,EAAAc,EAAAF,CAAA,iBAAAW,GAAA,MAAAZ,EAAA,SAAAS,EAAAT,EAAA,SAAAV,OAAAmB,KAAAA,GAAA,kBAAApB,EAAA,MAAAc,CAAA,SAAAc,CAAA,EAAA8C,CAAA9D,EAAAF,IAAAiE,EAAA/D,EAAAF,IAAA,qBAAAuB,UAAA,6IAAA2C,EAAA,UAAAD,EAAA/D,EAAAgB,GAAA,GAAAhB,EAAA,qBAAAA,EAAA,OAAAiE,EAAAjE,EAAAgB,GAAA,IAAAjB,EAAA,GAAAmE,SAAArE,KAAAG,GAAAmE,MAAA,uBAAApE,GAAAC,EAAAoE,cAAArE,EAAAC,EAAAoE,YAAAC,MAAA,QAAAtE,GAAA,QAAAA,EAAA2D,MAAAY,KAAAtE,GAAA,cAAAD,GAAA,2CAAAwE,KAAAxE,GAAAkE,EAAAjE,EAAAgB,QAAA,YAAAiD,EAAAjE,EAAAgB,IAAA,MAAAA,GAAAA,EAAAhB,EAAAmB,UAAAH,EAAAhB,EAAAmB,QAAA,QAAArB,EAAA,EAAAI,EAAAwD,MAAA1C,GAAAlB,EAAAkB,EAAAlB,IAAAI,EAAAJ,GAAAE,EAAAF,GAAA,OAAAI,CAAA,UAAAsE,EAAA1E,EAAAE,GAAA,QAAAD,EAAA,EAAAA,EAAAC,EAAAmB,OAAApB,IAAA,KAAAX,EAAAY,EAAAD,GAAAX,EAAAG,WAAAH,EAAAG,aAAA,EAAAH,EAAA6C,cAAA,YAAA7C,IAAAA,EAAA8C,UAAA,GAAA7C,OAAAC,eAAAQ,EAAAmD,EAAA7D,EAAAD,KAAAC,EAAA,WAAA6D,EAAAlD,GAAA,IAAAM,EAAA,SAAAN,EAAAC,GAAA,aAAAyE,EAAA1E,KAAAA,EAAA,OAAAA,EAAA,IAAAD,EAAAC,EAAAE,OAAAyE,aAAA,YAAA5E,EAAA,KAAAO,EAAAP,EAAAD,KAAAE,EAAAC,GAAA,wBAAAyE,EAAApE,GAAA,OAAAA,EAAA,UAAAgB,UAAA,kEAAArB,EAAA2E,OAAAC,QAAA7E,EAAA,CAAA8E,CAAA9E,EAAA,0BAAA0E,EAAApE,GAAAA,EAAAA,EAAA,G,yBADA,IAgBMyE,EAAY,WA+ChB,OA9DFhF,EAqBE,SAAAgF,IAAiD,IAAAC,EAAA,KAArCC,EAAUpC,UAAAzB,OAAA,QAAA8D,IAAArC,UAAA,GAAAA,UAAA,GAAG,wBArB3B,SAAA5B,EAAAd,GAAA,KAAAc,aAAAd,GAAA,UAAAmB,UAAA,qCAqBiD6D,CAAA,KAAAJ,GAC7CK,KAAKC,OAAS,IAAIC,OAAOL,GACzBG,KAAKG,UAAY,EACjBH,KAAKI,KAAO,IAAIC,IAGhBL,KAAKC,OAAOK,UAAY,SAAC3F,GACvB,IAAA4F,EAAiC5F,EAAE6F,KAA3BC,EAAKF,EAALE,MAAOC,EAAKH,EAALG,MAAOC,EAAMJ,EAANI,OAEtB,GAAKF,EAKL,GAAIb,EAAKQ,KAAKQ,IAAIH,GAAQ,CACxB,IAAAI,EAA4BjB,EAAKQ,KAAK/F,IAAIoG,GAAlCxC,EAAO4C,EAAP5C,QAAS6C,EAAMD,EAANC,OACjBlB,EAAKQ,KAAI,OAAQK,GAEbC,EACFI,EAAO,IAAIC,MAAML,IACRC,EACT1C,EAAQ0C,GAERG,EAAO,IAAIC,MAAM,6BAErB,MACEC,QAAQC,KAAK,mCAAoCR,QAhBjDO,QAAQC,KAAK,kCAAmCtG,EAAE6F,KAkBtD,EAGAR,KAAKC,OAAOiB,QAAU,SAACR,GACrBM,QAAQN,MAAM,kBAAmBA,GACjC,IACsCS,EADtCC,EAtDN,SAAAvG,EAAAF,GAAA,IAAAC,EAAA,oBAAAE,QAAAD,EAAAC,OAAAE,WAAAH,EAAA,kBAAAD,EAAA,IAAA2D,MAAAC,QAAA3D,KAAAD,EAAAgE,EAAA/D,KAAAF,GAAAE,GAAA,iBAAAA,EAAAmB,OAAA,CAAApB,IAAAC,EAAAD,GAAA,IAAAyG,EAAA,EAAAC,EAAA,oBAAAC,EAAAD,EAAAvG,EAAA,kBAAAsG,GAAAxG,EAAAmB,OAAA,CAAAG,MAAA,IAAAA,MAAA,EAAAC,MAAAvB,EAAAwG,KAAA,EAAA1G,EAAA,SAAAE,GAAA,MAAAA,CAAA,EAAAW,EAAA8F,EAAA,WAAApF,UAAA,6IAAAjC,EAAA4B,GAAA,EAAAR,GAAA,SAAAkG,EAAA,WAAA3G,EAAAA,EAAAF,KAAAG,EAAA,EAAAE,EAAA,eAAAF,EAAAD,EAAA8D,OAAA,OAAA7C,EAAAhB,EAAAsB,KAAAtB,CAAA,EAAAF,EAAA,SAAAE,GAAAQ,GAAA,EAAApB,EAAAY,CAAA,EAAAW,EAAA,eAAAK,GAAA,MAAAjB,EAAA,QAAAA,EAAA,oBAAAS,EAAA,MAAApB,CAAA,IAsDMuH,CAC6B5B,EAAKQ,MAAI,IAAtC,IAAAgB,EAAAG,MAAAJ,EAAAC,EAAArG,KAAAoB,OACE2E,EADsCxC,EAAA6C,EAAA/E,MAAA,GAAlB,GAAN0E,QACP,IAAIC,MAAM,mBAAqBL,EAAMe,SAC7C,OAAAC,GAAAN,EAAAzG,EAAA+G,EAAA,SAAAN,EAAA5F,GAAA,CACDoE,EAAKQ,KAAKuB,OACZ,CACF,EA5DF9G,EA8DE,EAAAb,IAAA,SAAAoC,OAAAwF,EAAAzD,EAAAxB,IAAAE,EAcA,SAAAgF,EAAaC,GAAO,IAAAC,EAAAtB,EAAAuB,EAAA,KAAAC,EAAAxE,UAAA,OAAAd,IAAAC,EAAA,SAAAsF,GAAA,cAAAA,EAAAnH,EACY,OADVgH,EAAOE,EAAAjG,OAAA,QAAA8D,IAAAmC,EAAA,GAAAA,EAAA,GAAG,CAAC,EACzBxB,EAAQT,KAAKG,YAAW+B,EAAArG,EAAA,EACvB,IAAImC,QAAQ,SAACC,EAAS6C,GAC3BkB,EAAK5B,KAAK+B,IAAI1B,EAAO,CAAExC,QAAAA,EAAS6C,OAAAA,IAChC,IAEE,IAAMsB,EAAY5E,EAAA,GAAQuE,GAC1BC,EAAK/B,OAAOoC,YAAY,CACtB5B,MAAAA,EACA6B,KAAM,SACNR,QAAAA,EACAC,QAASK,GAEb,CAAE,MAAO1B,GACPsB,EAAK5B,KAAI,OAAQK,GACjBK,EAAOJ,EACT,CACF,GAAE,EAAAmB,EAAA,SACH,SAlBWU,GAAA,OAAAX,EAAArE,MAAC,KAADE,UAAA,IAoBZ,CAAAzD,IAAA,SAAAoC,OAAAoG,EAAArE,EAAAxB,IAAAE,EAWA,SAAA4F,EAAaC,GAAG,IAAAjC,EAAAkC,EAAA,YAAAhG,IAAAC,EAAA,SAAAgG,GAAA,cAAAA,EAAA7H,EACgB,OAAxB0F,EAAQT,KAAKG,YAAWyC,EAAA/G,EAAA,EACvB,IAAImC,QAAQ,SAACC,EAAS6C,GAC3B6B,EAAKvC,KAAK+B,IAAI1B,EAAO,CAAExC,QAAAA,EAAS6C,OAAAA,IAChC,IACE6B,EAAK1C,OAAOoC,YAAY,CAAE5B,MAAAA,EAAO6B,KAAM,SAAUI,IAAAA,GACnD,CAAE,MAAOhC,GACPiC,EAAKvC,KAAI,OAAQK,GACjBK,EAAOJ,EACT,CACF,GAAE,EAAA+B,EAAA,SACH,SAXWI,GAAA,OAAAL,EAAAjF,MAAC,KAADE,UAAA,IAaZ,CAAAzD,IAAA,eAAAoC,OAAA0G,EAAA3E,EAAAxB,IAAAE,EASA,SAAAkG,EAAmBC,GAAI,IAAAvC,EAAAwC,EAAA,YAAAtG,IAAAC,EAAA,SAAAsG,GAAA,cAAAA,EAAAnI,EACS,OAAxB0F,EAAQT,KAAKG,YAAW+C,EAAArH,EAAA,EACvB,IAAImC,QAAQ,SAACC,EAAS6C,GAC3BmC,EAAK7C,KAAK+B,IAAI1B,EAAO,CAAExC,QAAAA,EAAS6C,OAAAA,IAChC,IACEmC,EAAKhD,OAAOoC,YAAY,CAAE5B,MAAAA,EAAO6B,KAAM,WAAYU,KAAAA,GACrD,CAAE,MAAOtC,GACPuC,EAAK7C,KAAI,OAAQK,GACjBK,EAAOJ,EACT,CACF,GAAE,EAAAqC,EAAA,SACH,SAXiBI,GAAA,OAAAL,EAAAvF,MAAC,KAADE,UAAA,IAalB,CAAAzD,IAAA,oBAAAoC,OAAAgH,EAAAjF,EAAAxB,IAAAE,EAKA,SAAAwG,IAAA,IAAA5C,EAAA6C,EAAA,YAAA3G,IAAAC,EAAA,SAAA2G,GAAA,cAAAA,EAAAxI,EACgC,OAAxB0F,EAAQT,KAAKG,YAAWoD,EAAA1H,EAAA,EACvB,IAAImC,QAAQ,SAACC,EAAS6C,GAC3BwC,EAAKlD,KAAK+B,IAAI1B,EAAO,CAAExC,QAAAA,EAAS6C,OAAAA,IAChC,IACEwC,EAAKrD,OAAOoC,YAAY,CAAE5B,MAAAA,EAAO6B,KAAM,qBACzC,CAAE,MAAO5B,GACP4C,EAAKlD,KAAI,OAAQK,GACjBK,EAAOJ,EACT,CACF,GAAE,EAAA2C,EAAA,SACH,WAXsB,OAAAD,EAAA7F,MAAC,KAADE,UAAA,IAavB,CAAAzD,IAAA,YAAAoC,MAKA,WACM4D,KAAKC,SACPD,KAAKC,OAAOuD,YACZxD,KAAKC,OAAS,MAEhBD,KAAKI,KAAKuB,OACZ,IA3KF9G,GAAAwE,EAAA1E,EAAAH,UAAAK,GAAAD,GAAAyE,EAAA1E,EAAAC,GAAAV,OAAAC,eAAAQ,EAAA,aAAAoC,UAAA,IAAApC,EAAA,IAAAA,EAAAE,EAAAD,EA8IEwI,EAtBAN,EAxBAN,EAlCAZ,CA6GC,CA5Je,GA+JlB,U","sources":["webpack://carta1/webpack/bootstrap","webpack://carta1/webpack/runtime/define property getters","webpack://carta1/webpack/runtime/hasOwnProperty shorthand","webpack://carta1/./codec/browser/interface.js"],"sourcesContent":["// The require scope\nvar __webpack_require__ = {};\n\n","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","/**\n * Carta1 Worker Interface - Client-side API\n *\n * Provides a clean async interface for encoding and decoding ATRAC1 audio\n * using Web Workers for non-blocking operation.\n *\n * Usage:\n * const codec = new Carta1Worker('carta1-worker.min.js')\n * const result = await codec.encode(pcmData, options)\n * codec.terminate()\n *\n * The worker path can be customized to match your deployment:\n * new Carta1Worker('/js/carta1-worker.min.js')\n * new Carta1Worker('https://cdn.example.com/carta1-worker.min.js')\n */\n\nclass Carta1Worker {\n /**\n * Create a new ATRAC1 codec worker\n *\n * @param {string} [workerPath='atrac1-worker.min.js'] - Path to the worker script\n */\n constructor(workerPath = 'carta1-worker.min.js') {\n this.worker = new Worker(workerPath)\n this.nextJobId = 1\n this.jobs = new Map()\n\n // Handle worker responses\n this.worker.onmessage = (e) => {\n const { jobId, error, result } = e.data\n\n if (!jobId) {\n console.warn('Received message without jobId:', e.data)\n return\n }\n\n if (this.jobs.has(jobId)) {\n const { resolve, reject } = this.jobs.get(jobId)\n this.jobs.delete(jobId)\n\n if (error) {\n reject(new Error(error))\n } else if (result) {\n resolve(result)\n } else {\n reject(new Error('Worker returned no result'))\n }\n } else {\n console.warn('Received result for unknown job:', jobId)\n }\n }\n\n // Handle worker errors\n this.worker.onerror = (error) => {\n console.error('Worker crashed:', error)\n // Reject all pending jobs\n for (const [, { reject }] of this.jobs) {\n reject(new Error('Worker crashed: ' + error.message))\n }\n this.jobs.clear()\n }\n }\n\n /**\n * Encode PCM audio to ATRAC1 format\n *\n * @param {Float64Array|Array<Float64Array>} pcmData - PCM audio data\n * - Mono: Float64Array\n * - Stereo: [left, right] Float64Arrays\n * @param {Object} [options={}] - Encoder options\n * @param {number} [options.transientThresholdLow] - Low band transient threshold\n * @param {number} [options.transientThresholdMid] - Mid band transient threshold\n * @param {number} [options.transientThresholdHigh] - High band transient threshold\n * @returns {Promise<Object>} Encoding result\n * @returns {Blob} returns.aeaBlob - ATRAC1 encoded audio blob\n * @returns {Object} returns.shortBlockData - Short block frame indices\n */\n async encode(pcmData, options = {}) {\n const jobId = this.nextJobId++\n return new Promise((resolve, reject) => {\n this.jobs.set(jobId, { resolve, reject })\n try {\n // Ensure plain object for serialization\n const plainOptions = { ...options }\n this.worker.postMessage({\n jobId,\n type: 'encode',\n pcmData,\n options: plainOptions,\n })\n } catch (error) {\n this.jobs.delete(jobId)\n reject(error)\n }\n })\n }\n\n /**\n * Decode ATRAC1 audio to PCM WAV format\n *\n * @param {Object} aea - ATRAC1 audio data\n * @param {Uint8Array} aea.header - AEA file header\n * @param {Array} aea.aeaData - Encoded frame data\n * @param {Object} [aea.info] - Optional metadata\n * @returns {Promise<Object>} Decoding result\n * @returns {Blob} returns.wavBlob - Decoded WAV audio blob\n * @returns {Object} returns.info - Audio metadata (channels, sample rate)\n */\n async decode(aea) {\n const jobId = this.nextJobId++\n return new Promise((resolve, reject) => {\n this.jobs.set(jobId, { resolve, reject })\n try {\n this.worker.postMessage({ jobId, type: 'decode', aea })\n } catch (error) {\n this.jobs.delete(jobId)\n reject(error)\n }\n })\n }\n\n /**\n * Parse AEA file blob to extract metadata and frame data\n *\n * @param {Blob} blob - AEA file blob\n * @returns {Promise<Object>} Parsed AEA data\n * @returns {Uint8Array} returns.header - AEA file header\n * @returns {Array} returns.aeaData - Encoded frame data\n * @returns {Object} returns.info - Metadata (title, channels, frames)\n */\n async parseAeaBlob(blob) {\n const jobId = this.nextJobId++\n return new Promise((resolve, reject) => {\n this.jobs.set(jobId, { resolve, reject })\n try {\n this.worker.postMessage({ jobId, type: 'parseAea', blob })\n } catch (error) {\n this.jobs.delete(jobId)\n reject(error)\n }\n })\n }\n\n /**\n * Get default encoder options metadata\n *\n * @returns {Promise<Object>} Default encoder options\n */\n async getEncoderOptions() {\n const jobId = this.nextJobId++\n return new Promise((resolve, reject) => {\n this.jobs.set(jobId, { resolve, reject })\n try {\n this.worker.postMessage({ jobId, type: 'getEncoderOptions' })\n } catch (error) {\n this.jobs.delete(jobId)\n reject(error)\n }\n })\n }\n\n /**\n * Terminate the worker and clean up resources\n *\n * Call this when done using the codec to free memory\n */\n terminate() {\n if (this.worker) {\n this.worker.terminate()\n this.worker = null\n }\n this.jobs.clear()\n }\n}\n\nexport default Carta1Worker\nexport { Carta1Worker }\n"],"names":["__webpack_require__","exports","definition","key","o","Object","defineProperty","enumerable","get","obj","prop","prototype","hasOwnProperty","call","e","t","r","Symbol","n","iterator","toStringTag","i","c","Generator","u","create","_regeneratorDefine2","f","p","y","G","v","a","d","bind","length","l","TypeError","done","value","GeneratorFunction","GeneratorFunctionPrototype","getPrototypeOf","setPrototypeOf","__proto__","displayName","_regenerator","w","m","configurable","writable","_invoke","ownKeys","keys","getOwnPropertySymbols","filter","getOwnPropertyDescriptor","push","apply","_objectSpread","arguments","forEach","_defineProperty","getOwnPropertyDescriptors","defineProperties","_toPropertyKey","asyncGeneratorStep","Promise","resolve","then","_asyncToGenerator","_next","_throw","_slicedToArray","Array","isArray","_arrayWithHoles","next","_iterableToArrayLimit","_unsupportedIterableToArray","_nonIterableRest","_arrayLikeToArray","toString","slice","constructor","name","from","test","_defineProperties","_typeof","toPrimitive","String","Number","_toPrimitive","Carta1Worker","_this","workerPath","undefined","_classCallCheck","this","worker","Worker","nextJobId","jobs","Map","onmessage","_e$data","data","jobId","error","result","has","_this$jobs$get","reject","Error","console","warn","onerror","_step","_iterator","_n","F","s","_createForOfIteratorHelper","message","err","clear","_encode","_callee","pcmData","options","_this2","_args","_context","set","plainOptions","postMessage","type","_x","_decode","_callee2","aea","_this3","_context2","_x2","_parseAeaBlob","_callee3","blob","_this4","_context3","_x3","_getEncoderOptions","_callee4","_this5","_context4","terminate"],"sourceRoot":""}
|