@libraz/libsonare 1.2.1 → 1.2.3

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.
@@ -2,7 +2,7 @@
2
2
  * Type declarations for the Emscripten-generated WASM module with embind
3
3
  */
4
4
 
5
- interface SonareModuleOptions {
5
+ export interface SonareModuleOptions {
6
6
  locateFile?: (path: string, prefix: string) => string;
7
7
  onRuntimeInitialized?: () => void;
8
8
  print?: (text: string) => void;
@@ -10,7 +10,7 @@ interface SonareModuleOptions {
10
10
  }
11
11
 
12
12
  // Result types
13
- interface WasmKeyResult {
13
+ export interface WasmKeyResult {
14
14
  root: number;
15
15
  mode: number;
16
16
  confidence: number;
@@ -18,17 +18,58 @@ interface WasmKeyResult {
18
18
  shortName: string;
19
19
  }
20
20
 
21
- interface WasmKeyCandidateResult {
21
+ export interface WasmKeyCandidateResult {
22
22
  key: WasmKeyResult;
23
23
  correlation: number;
24
24
  }
25
25
 
26
- interface WasmBeatResult {
26
+ // Flat POD mirror of SonareRealtimeVoiceChangerConfig. Field names match the
27
+ // C ABI / Python POD exactly (snake_case).
28
+ export interface WasmRealtimeVoiceChangerPodConfig {
29
+ input_gain_db: number;
30
+ output_gain_db: number;
31
+ wet_mix: number;
32
+ retune_semitones: number;
33
+ retune_mix: number;
34
+ retune_grain_size: number;
35
+ formant_factor: number;
36
+ formant_amount: number;
37
+ formant_body: number;
38
+ formant_brightness: number;
39
+ formant_nasal: number;
40
+ eq_highpass_hz: number;
41
+ eq_body_db: number;
42
+ eq_presence_db: number;
43
+ eq_air_db: number;
44
+ gate_threshold_db: number;
45
+ gate_attack_ms: number;
46
+ gate_release_ms: number;
47
+ gate_range_db: number;
48
+ compressor_threshold_db: number;
49
+ compressor_ratio: number;
50
+ compressor_attack_ms: number;
51
+ compressor_release_ms: number;
52
+ compressor_makeup_gain_db: number;
53
+ deesser_frequency_hz: number;
54
+ deesser_threshold_db: number;
55
+ deesser_ratio: number;
56
+ deesser_range_db: number;
57
+ reverb_mix: number;
58
+ reverb_time_ms: number;
59
+ reverb_damping: number;
60
+ reverb_seed: number;
61
+ limiter_ceiling_db: number;
62
+ limiter_release_ms: number;
63
+ limiter_enable_isp_limiter: boolean;
64
+ limiter_isp_ceiling_dbtp: number;
65
+ }
66
+
67
+ export interface WasmBeatResult {
27
68
  time: number;
28
69
  strength: number;
29
70
  }
30
71
 
31
- interface WasmChordResult {
72
+ export interface WasmChordResult {
32
73
  root: number;
33
74
  bass: number;
34
75
  quality: number;
@@ -38,7 +79,7 @@ interface WasmChordResult {
38
79
  name: string;
39
80
  }
40
81
 
41
- interface WasmSectionResult {
82
+ export interface WasmSectionResult {
42
83
  type: number;
43
84
  start: number;
44
85
  end: number;
@@ -47,7 +88,7 @@ interface WasmSectionResult {
47
88
  name: string;
48
89
  }
49
90
 
50
- interface WasmTimbreResult {
91
+ export interface WasmTimbreResult {
51
92
  brightness: number;
52
93
  warmth: number;
53
94
  density: number;
@@ -55,26 +96,26 @@ interface WasmTimbreResult {
55
96
  complexity: number;
56
97
  }
57
98
 
58
- interface WasmDynamicsResult {
99
+ export interface WasmDynamicsResult {
59
100
  dynamicRangeDb: number;
60
101
  loudnessRangeDb: number;
61
102
  crestFactor: number;
62
103
  isCompressed: boolean;
63
104
  }
64
105
 
65
- interface WasmRhythmResult {
106
+ export interface WasmRhythmResult {
66
107
  syncopation: number;
67
108
  grooveType: string;
68
109
  patternRegularity: number;
69
110
  }
70
111
 
71
- interface WasmTimeSignatureResult {
112
+ export interface WasmTimeSignatureResult {
72
113
  numerator: number;
73
114
  denominator: number;
74
115
  confidence: number;
75
116
  }
76
117
 
77
- interface WasmAnalysisResult {
118
+ export interface WasmAnalysisResult {
78
119
  bpm: number;
79
120
  bpmConfidence: number;
80
121
  key: WasmKeyResult;
@@ -88,11 +129,65 @@ interface WasmAnalysisResult {
88
129
  form: string;
89
130
  }
90
131
 
91
- interface WasmChordAnalysisResult {
132
+ export interface WasmBpmCandidate {
133
+ bpm: number;
134
+ confidence: number;
135
+ }
136
+
137
+ export interface WasmBpmAnalysisResult {
138
+ bpm: number;
139
+ confidence: number;
140
+ candidates: WasmBpmCandidate[];
141
+ autocorrelation: Float32Array;
142
+ tempogram: Float32Array;
143
+ }
144
+
145
+ export interface WasmRhythmAnalysisResult {
146
+ timeSignature: WasmTimeSignatureResult;
147
+ syncopation: number;
148
+ grooveType: string;
149
+ patternRegularity: number;
150
+ tempoStability: number;
151
+ bpm: number;
152
+ beatIntervals: Float32Array;
153
+ }
154
+
155
+ export interface WasmDynamicsAnalysisResult {
156
+ dynamicRangeDb: number;
157
+ peakDb: number;
158
+ rmsDb: number;
159
+ crestFactor: number;
160
+ loudnessRangeDb: number;
161
+ isCompressed: boolean;
162
+ loudnessTimes: Float32Array;
163
+ loudnessRmsDb: Float32Array;
164
+ }
165
+
166
+ export interface WasmTimbreFrameResult {
167
+ brightness: number;
168
+ warmth: number;
169
+ density: number;
170
+ roughness: number;
171
+ complexity: number;
172
+ }
173
+
174
+ export interface WasmTimbreAnalysisResult {
175
+ brightness: number;
176
+ warmth: number;
177
+ density: number;
178
+ roughness: number;
179
+ complexity: number;
180
+ spectralCentroid: Float32Array;
181
+ spectralFlatness: Float32Array;
182
+ spectralRolloff: Float32Array;
183
+ timbreOverTime: WasmTimbreFrameResult[];
184
+ }
185
+
186
+ export interface WasmChordAnalysisResult {
92
187
  chords: WasmChordResult[];
93
188
  }
94
189
 
95
- interface WasmAcousticResult {
190
+ export interface WasmAcousticResult {
96
191
  rt60: number;
97
192
  edt: number;
98
193
  c50: number;
@@ -106,13 +201,88 @@ interface WasmAcousticResult {
106
201
  isBlind: boolean;
107
202
  }
108
203
 
109
- interface WasmHpssResult {
204
+ export interface WasmRoomGeometryOptions {
205
+ lengthM?: number;
206
+ widthM?: number;
207
+ heightM?: number;
208
+ absorption?: number;
209
+ sourceX?: number;
210
+ sourceY?: number;
211
+ sourceZ?: number;
212
+ listenerX?: number;
213
+ listenerY?: number;
214
+ listenerZ?: number;
215
+ ismOrder?: number;
216
+ seed?: number;
217
+ maxSeconds?: number;
218
+ }
219
+
220
+ export interface WasmRirSynthOptions extends WasmRoomGeometryOptions {
221
+ sampleRate?: number;
222
+ preferEyring?: boolean;
223
+ mixingTimeMs?: number;
224
+ crossfadeMs?: number;
225
+ }
226
+
227
+ export interface WasmRirResult {
228
+ rir: Float32Array;
229
+ sampleRate: number;
230
+ hasError: boolean;
231
+ }
232
+
233
+ export interface WasmRoomEstimateOptions {
234
+ aspectHintLw?: number;
235
+ aspectHintLh?: number;
236
+ referenceAbsorption?: number;
237
+ preferEyring?: boolean;
238
+ nOctaveBands?: number;
239
+ mode?: number;
240
+ minDecayDb?: number;
241
+ noiseFloorMarginDb?: number;
242
+ }
243
+
244
+ export interface WasmRoomEstimateResult {
245
+ volume: number;
246
+ length: number;
247
+ width: number;
248
+ height: number;
249
+ drrDb: number;
250
+ confidence: number;
251
+ absorptionBands: Float32Array;
252
+ rt60Bands: Float32Array;
253
+ }
254
+
255
+ export interface WasmRoomMorphOptions extends WasmRoomGeometryOptions {
256
+ wet?: number;
257
+ sourceTailSuppression?: number;
258
+ }
259
+
260
+ export interface WasmHpssResult {
110
261
  harmonic: Float32Array;
111
262
  percussive: Float32Array;
112
263
  sampleRate: number;
113
264
  }
114
265
 
115
- interface WasmStftResult {
266
+ export interface WasmHpssWithResidualResult {
267
+ harmonic: Float32Array;
268
+ percussive: Float32Array;
269
+ residual: Float32Array;
270
+ sampleRate: number;
271
+ }
272
+
273
+ /** Row-major 2-D matrix as a flat buffer plus its dimensions. */
274
+ export interface WasmMatrix2dResult {
275
+ data: Float32Array;
276
+ rows: number;
277
+ cols: number;
278
+ }
279
+
280
+ export interface WasmDecomposeResult {
281
+ w: Float32Array;
282
+ h: Float32Array;
283
+ }
284
+
285
+ export interface WasmStftResult {
116
286
  nBins: number;
117
287
  nFrames: number;
118
288
  nFft: number;
@@ -122,13 +292,13 @@ interface WasmStftResult {
122
292
  power: Float32Array;
123
293
  }
124
294
 
125
- interface WasmStftDbResult {
295
+ export interface WasmStftDbResult {
126
296
  nBins: number;
127
297
  nFrames: number;
128
298
  db: Float32Array;
129
299
  }
130
300
 
131
- interface WasmMelResult {
301
+ export interface WasmMelResult {
132
302
  nMels: number;
133
303
  nFrames: number;
134
304
  sampleRate: number;
@@ -137,25 +307,25 @@ interface WasmMelResult {
137
307
  db: Float32Array;
138
308
  }
139
309
 
140
- interface WasmMfccResult {
310
+ export interface WasmMfccResult {
141
311
  nMfcc: number;
142
312
  nFrames: number;
143
313
  coefficients: Float32Array;
144
314
  }
145
315
 
146
- interface WasmStftPowerResult {
316
+ export interface WasmStftPowerResult {
147
317
  nBins: number;
148
318
  nFrames: number;
149
319
  power: Float32Array;
150
320
  }
151
321
 
152
- interface WasmMelPowerResult {
322
+ export interface WasmMelPowerResult {
153
323
  nMels: number;
154
324
  nFrames: number;
155
325
  power: Float32Array;
156
326
  }
157
327
 
158
- interface WasmChromaResult {
328
+ export interface WasmChromaResult {
159
329
  nChroma: number;
160
330
  nFrames: number;
161
331
  sampleRate: number;
@@ -164,7 +334,7 @@ interface WasmChromaResult {
164
334
  meanEnergy: number[];
165
335
  }
166
336
 
167
- interface WasmPitchResult {
337
+ export interface WasmPitchResult {
168
338
  f0: Float32Array;
169
339
  voicedProb: Float32Array;
170
340
  voicedFlag: boolean[];
@@ -173,48 +343,48 @@ interface WasmPitchResult {
173
343
  meanF0: number;
174
344
  }
175
345
 
176
- interface WasmTrimResult {
346
+ export interface WasmTrimResult {
177
347
  audio: Float32Array;
178
348
  startSample: number;
179
349
  endSample: number;
180
350
  }
181
351
 
182
- interface WasmFrameResult {
352
+ export interface WasmFrameResult {
183
353
  nFrames: number;
184
354
  frames: Float32Array;
185
355
  }
186
356
 
187
- interface WasmTempogramResult {
357
+ export interface WasmTempogramResult {
188
358
  nFrames: number;
189
359
  winLength: number;
190
360
  data: Float32Array;
191
361
  }
192
362
 
193
- interface WasmCyclicTempogramResult {
363
+ export interface WasmCyclicTempogramResult {
194
364
  nFrames: number;
195
365
  nBins: number;
196
366
  data: Float32Array;
197
367
  }
198
368
 
199
- interface WasmFourierTempogramResult {
369
+ export interface WasmFourierTempogramResult {
200
370
  nBins: number;
201
371
  nFrames: number;
202
372
  data: Float32Array;
203
373
  }
204
374
 
205
- interface WasmNnlsChromaResult {
375
+ export interface WasmNnlsChromaResult {
206
376
  nChroma: number;
207
377
  nFrames: number;
208
378
  data: Float32Array;
209
379
  }
210
380
 
211
- interface WasmMelodyPoint {
381
+ export interface WasmMelodyPoint {
212
382
  time: number;
213
383
  frequency: number;
214
384
  confidence: number;
215
385
  }
216
386
 
217
- interface WasmMelodyResult {
387
+ export interface WasmMelodyResult {
218
388
  points: WasmMelodyPoint[];
219
389
  pitchRangeOctaves: number;
220
390
  pitchStability: number;
@@ -222,7 +392,7 @@ interface WasmMelodyResult {
222
392
  vibratoRate: number;
223
393
  }
224
394
 
225
- interface WasmCqtResult {
395
+ export interface WasmCqtResult {
226
396
  nBins: number;
227
397
  nFrames: number;
228
398
  hopLength: number;
@@ -231,14 +401,14 @@ interface WasmCqtResult {
231
401
  frequencies: Float32Array;
232
402
  }
233
403
 
234
- interface WasmLufsResult {
404
+ export interface WasmLufsResult {
235
405
  integratedLufs: number;
236
406
  momentaryLufs: number;
237
407
  shortTermLufs: number;
238
408
  loudnessRange: number;
239
409
  }
240
410
 
241
- interface WasmMasteringResult {
411
+ export interface WasmMasteringResult {
242
412
  samples: Float32Array;
243
413
  sampleRate: number;
244
414
  inputLufs: number;
@@ -247,11 +417,11 @@ interface WasmMasteringResult {
247
417
  latencySamples?: number;
248
418
  }
249
419
 
250
- interface WasmMasteringChainResult extends WasmMasteringResult {
420
+ export interface WasmMasteringChainResult extends WasmMasteringResult {
251
421
  stages: string[];
252
422
  }
253
423
 
254
- interface WasmMasteringStereoChainResult {
424
+ export interface WasmMasteringStereoChainResult {
255
425
  left: Float32Array;
256
426
  right: Float32Array;
257
427
  sampleRate: number;
@@ -261,7 +431,7 @@ interface WasmMasteringStereoChainResult {
261
431
  stages: string[];
262
432
  }
263
433
 
264
- interface WasmMasteringStereoResult {
434
+ export interface WasmMasteringStereoResult {
265
435
  left: Float32Array;
266
436
  right: Float32Array;
267
437
  sampleRate: number;
@@ -271,7 +441,7 @@ interface WasmMasteringStereoResult {
271
441
  latencySamples: number;
272
442
  }
273
443
 
274
- interface WasmMixMeterSnapshot {
444
+ export interface WasmMixMeterSnapshot {
275
445
  peakDbL: number;
276
446
  peakDbR: number;
277
447
  rmsDbL: number;
@@ -291,14 +461,14 @@ interface WasmMixMeterSnapshot {
291
461
  seq: number;
292
462
  }
293
463
 
294
- interface WasmMixResult {
464
+ export interface WasmMixResult {
295
465
  left: Float32Array;
296
466
  right: Float32Array;
297
467
  sampleRate: number;
298
468
  meters: WasmMixMeterSnapshot[];
299
469
  }
300
470
 
301
- interface WasmEngineClip {
471
+ export interface WasmEngineClip {
302
472
  id?: number;
303
473
  channels: Float32Array[];
304
474
  startPpq: number;
@@ -310,7 +480,7 @@ interface WasmEngineClip {
310
480
  fadeOutSamples?: number;
311
481
  }
312
482
 
313
- interface WasmEngineParameterInfo {
483
+ export interface WasmEngineParameterInfo {
314
484
  id: number;
315
485
  name: string;
316
486
  unit: string;
@@ -321,33 +491,35 @@ interface WasmEngineParameterInfo {
321
491
  defaultCurve: number;
322
492
  }
323
493
 
324
- interface WasmEngineAutomationPoint {
494
+ export interface WasmEngineAutomationPoint {
325
495
  ppq: number;
326
496
  value: number;
327
497
  curveToNext?: number;
328
498
  }
329
499
 
330
- interface WasmEngineMarker {
500
+ export interface WasmEngineMarker {
331
501
  id: number;
332
502
  ppq: number;
333
503
  name?: string;
334
504
  }
335
505
 
336
- interface WasmEngineMetronomeConfig {
506
+ export interface WasmEngineMetronomeConfig {
337
507
  enabled: boolean;
338
508
  beatGain?: number;
339
509
  accentGain?: number;
340
510
  clickSamples?: number;
511
+ /** Optional click length in seconds; > 0 overrides the engine 2 ms default. */
512
+ clickSeconds?: number;
341
513
  }
342
514
 
343
- interface WasmEngineGraphNode {
515
+ export interface WasmEngineGraphNode {
344
516
  id: string;
345
517
  type?: number;
346
518
  gainDb?: number;
347
519
  numPorts?: number;
348
520
  }
349
521
 
350
- interface WasmEngineGraphConnection {
522
+ export interface WasmEngineGraphConnection {
351
523
  sourceNode: string;
352
524
  sourcePort: number;
353
525
  destNode: string;
@@ -355,12 +527,12 @@ interface WasmEngineGraphConnection {
355
527
  mix?: number;
356
528
  }
357
529
 
358
- interface WasmEngineGraphParameterBinding {
530
+ export interface WasmEngineGraphParameterBinding {
359
531
  paramId: number;
360
532
  nodeId: string;
361
533
  }
362
534
 
363
- interface WasmEngineGraphSpec {
535
+ export interface WasmEngineGraphSpec {
364
536
  nodes: WasmEngineGraphNode[];
365
537
  connections: WasmEngineGraphConnection[];
366
538
  inputNode: string;
@@ -369,7 +541,7 @@ interface WasmEngineGraphSpec {
369
541
  parameterBindings?: WasmEngineGraphParameterBinding[];
370
542
  }
371
543
 
372
- interface WasmEngineTelemetry {
544
+ export interface WasmEngineTelemetry {
373
545
  type: number;
374
546
  error: number;
375
547
  renderFrame: number;
@@ -379,7 +551,7 @@ interface WasmEngineTelemetry {
379
551
  value: number;
380
552
  }
381
553
 
382
- interface WasmEngineMeterTelemetry {
554
+ export interface WasmEngineMeterTelemetry {
383
555
  targetId: number;
384
556
  renderFrame: number;
385
557
  seq: number;
@@ -399,14 +571,14 @@ interface WasmEngineMeterTelemetry {
399
571
  droppedRecords: number;
400
572
  }
401
573
 
402
- interface WasmEngineCaptureStatus {
574
+ export interface WasmEngineCaptureStatus {
403
575
  capturedFrames: number;
404
576
  overflowCount: number;
405
577
  armed: boolean;
406
578
  punchEnabled: boolean;
407
579
  }
408
580
 
409
- interface WasmEngineTransportState {
581
+ export interface WasmEngineTransportState {
410
582
  playing: boolean;
411
583
  looping: boolean;
412
584
  renderFrame: number;
@@ -416,9 +588,15 @@ interface WasmEngineTransportState {
416
588
  loopStartPpq: number;
417
589
  loopEndPpq: number;
418
590
  sampleRate: number;
591
+ /** PPQ of the current bar's downbeat (derived from the tempo map). */
592
+ barStartPpq: number;
593
+ /** Zero-based index of the current bar. */
594
+ barCount: number;
595
+ /** Time signature in effect at the current PPQ. */
596
+ timeSignature: { numerator: number; denominator: number; confidence: number };
419
597
  }
420
598
 
421
- interface WasmEngineBounceOptions {
599
+ export interface WasmEngineBounceOptions {
422
600
  totalFrames: number;
423
601
  blockSize?: number;
424
602
  numChannels?: number;
@@ -431,7 +609,7 @@ interface WasmEngineBounceOptions {
431
609
  ditherSeed?: number;
432
610
  }
433
611
 
434
- interface WasmEngineBounceResult {
612
+ export interface WasmEngineBounceResult {
435
613
  interleaved: Float32Array;
436
614
  frames: number;
437
615
  numChannels: number;
@@ -439,7 +617,7 @@ interface WasmEngineBounceResult {
439
617
  integratedLufs: number;
440
618
  }
441
619
 
442
- interface WasmEngineFreezeOptions {
620
+ export interface WasmEngineFreezeOptions {
443
621
  totalFrames: number;
444
622
  blockSize?: number;
445
623
  numChannels?: number;
@@ -448,18 +626,18 @@ interface WasmEngineFreezeOptions {
448
626
  gain?: number;
449
627
  }
450
628
 
451
- interface WasmEngineFreezeResult {
629
+ export interface WasmEngineFreezeResult {
452
630
  clipId: number;
453
631
  frames: number;
454
632
  numChannels: number;
455
633
  }
456
634
 
457
- interface WasmEngineProcessWithMonitorResult {
635
+ export interface WasmEngineProcessWithMonitorResult {
458
636
  output: Float32Array[];
459
637
  monitor: Float32Array[];
460
638
  }
461
639
 
462
- interface WasmRealtimeEngine {
640
+ export interface WasmRealtimeEngine {
463
641
  prepare: (
464
642
  sampleRate: number,
465
643
  maxBlockSize: number,
@@ -503,6 +681,9 @@ interface WasmRealtimeEngine {
503
681
  captureStatus: () => WasmEngineCaptureStatus;
504
682
  capturedAudio: () => Float32Array[];
505
683
  process: (channels: Float32Array[]) => Float32Array[];
684
+ prepareChannels: (numChannels: number, maxFrames: number) => void;
685
+ getChannelBuffer: (channel: number, numFrames: number) => Float32Array;
686
+ processPrepared: (numFrames: number) => void;
506
687
  processWithMonitor: (channels: Float32Array[]) => WasmEngineProcessWithMonitorResult;
507
688
  renderOffline: (channels: Float32Array[], blockSize: number) => Float32Array[];
508
689
  bounceOffline: (options: WasmEngineBounceOptions) => WasmEngineBounceResult;
@@ -512,10 +693,10 @@ interface WasmRealtimeEngine {
512
693
  delete: () => void;
513
694
  }
514
695
 
515
- type ProgressCallback = (progress: number, stage: string) => void;
516
- type TempogramMode = 'autocorrelation' | 'auto' | 'ac' | 'cosine' | 0 | 1;
696
+ export type ProgressCallback = (progress: number, stage: string) => void;
697
+ export type TempogramMode = 'autocorrelation' | 'auto' | 'ac' | 'cosine' | 0 | 1;
517
698
 
518
- interface SonareModule {
699
+ export interface SonareModule {
519
700
  // Quick API (high-level)
520
701
  detectBpm: (samples: Float32Array, sampleRate: number) => number;
521
702
  detectKey: (samples: Float32Array, sampleRate: number) => WasmKeyResult;
@@ -578,13 +759,157 @@ interface SonareModule {
578
759
  minDecayDb: number,
579
760
  noiseFloorMarginDb: number,
580
761
  ) => WasmAcousticResult;
762
+ // Acoustic-simulation entry points are present only in builds compiled with
763
+ // SONARE_WITH_ACOUSTIC_SIM; absent otherwise (the wrappers throw a clear error).
764
+ synthesizeRir?: (options: WasmRirSynthOptions) => WasmRirResult;
765
+ estimateRoom?: (
766
+ samples: Float32Array,
767
+ sampleRate: number,
768
+ options: WasmRoomEstimateOptions,
769
+ ) => WasmRoomEstimateResult;
770
+ roomMorph?: (
771
+ samples: Float32Array,
772
+ sampleRate: number,
773
+ options: WasmRoomMorphOptions,
774
+ ) => Float32Array;
581
775
  analyzeWithProgress: (
582
776
  samples: Float32Array,
583
777
  sampleRate: number,
584
778
  progressCallback: ProgressCallback | null,
585
779
  ) => WasmAnalysisResult;
780
+ analyzeBpm: (
781
+ samples: Float32Array,
782
+ sampleRate: number,
783
+ bpmMin: number,
784
+ bpmMax: number,
785
+ startBpm: number,
786
+ nFft: number,
787
+ hopLength: number,
788
+ maxCandidates: number,
789
+ ) => WasmBpmAnalysisResult;
790
+ analyzeRhythm: (
791
+ samples: Float32Array,
792
+ sampleRate: number,
793
+ bpmMin: number,
794
+ bpmMax: number,
795
+ startBpm: number,
796
+ nFft: number,
797
+ hopLength: number,
798
+ ) => WasmRhythmAnalysisResult;
799
+ analyzeDynamics: (
800
+ samples: Float32Array,
801
+ sampleRate: number,
802
+ windowSec: number,
803
+ hopLength: number,
804
+ compressionThreshold: number,
805
+ ) => WasmDynamicsAnalysisResult;
806
+ analyzeTimbre: (
807
+ samples: Float32Array,
808
+ sampleRate: number,
809
+ nFft: number,
810
+ hopLength: number,
811
+ nMels: number,
812
+ nMfcc: number,
813
+ windowSec: number,
814
+ ) => WasmTimbreAnalysisResult;
815
+ detectKeyCandidates: (samples: Float32Array, sampleRate: number) => WasmKeyCandidateResult[];
816
+ hasFfmpegSupport: () => boolean;
586
817
  version: () => string;
587
818
  engineAbiVersion: () => number;
819
+ voiceChangerAbiVersion: () => number;
820
+ voiceCharacterPresetId: (preset: number) => string | null;
821
+ realtimeVoiceChangerPresetConfig: (preset: number) => WasmRealtimeVoiceChangerPodConfig | null;
822
+
823
+ meteringPeakDb: (samples: Float32Array, sampleRate: number) => number;
824
+ meteringRmsDb: (samples: Float32Array, sampleRate: number) => number;
825
+ meteringCrestFactorDb: (samples: Float32Array, sampleRate: number) => number;
826
+ meteringDcOffset: (samples: Float32Array, sampleRate: number) => number;
827
+ meteringTruePeakDb: (
828
+ samples: Float32Array,
829
+ sampleRate: number,
830
+ oversampleFactor: number,
831
+ ) => number;
832
+ meteringDetectClipping: (
833
+ samples: Float32Array,
834
+ sampleRate: number,
835
+ threshold: number,
836
+ minRegionSamples: number,
837
+ ) => {
838
+ clippedSamples: number;
839
+ clippingRatio: number;
840
+ maxClippedPeak: number;
841
+ regions: Array<{ startSample: number; endSample: number; length: number; peak: number }>;
842
+ };
843
+ meteringDynamicRange: (
844
+ samples: Float32Array,
845
+ sampleRate: number,
846
+ windowSec: number,
847
+ hopSec: number,
848
+ lowPercentile: number,
849
+ highPercentile: number,
850
+ ) => {
851
+ dynamicRangeDb: number;
852
+ lowPercentileDb: number;
853
+ highPercentileDb: number;
854
+ windowRmsDb: Float32Array;
855
+ };
856
+
857
+ meteringStereoCorrelation: (
858
+ left: Float32Array,
859
+ right: Float32Array,
860
+ sampleRate: number,
861
+ ) => number;
862
+ meteringStereoWidth: (left: Float32Array, right: Float32Array, sampleRate: number) => number;
863
+ meteringVectorscope: (
864
+ left: Float32Array,
865
+ right: Float32Array,
866
+ sampleRate: number,
867
+ ) => { mid: Float32Array; side: Float32Array };
868
+ meteringPhaseScope: (
869
+ left: Float32Array,
870
+ right: Float32Array,
871
+ sampleRate: number,
872
+ ) => {
873
+ mid: Float32Array;
874
+ side: Float32Array;
875
+ radius: Float32Array;
876
+ angleRad: Float32Array;
877
+ correlation: number;
878
+ averageAbsAngleRad: number;
879
+ maxRadius: number;
880
+ };
881
+ meteringSpectrum: (
882
+ samples: Float32Array,
883
+ sampleRate: number,
884
+ options: {
885
+ nFft?: number;
886
+ applyOctaveSmoothing?: boolean;
887
+ octaveFraction?: number;
888
+ dbRef?: number;
889
+ dbAmin?: number;
890
+ },
891
+ ) => {
892
+ frequencies: Float32Array;
893
+ magnitude: Float32Array;
894
+ power: Float32Array;
895
+ db: Float32Array;
896
+ nFft: number;
897
+ sampleRate: number;
898
+ };
899
+
900
+ scaleQuantizeMidi: (
901
+ root: number,
902
+ modeMask: number,
903
+ midi: number,
904
+ referenceMidi: number,
905
+ ) => number;
906
+ scaleCorrectionSemitones: (
907
+ root: number,
908
+ modeMask: number,
909
+ midi: number,
910
+ referenceMidi: number,
911
+ ) => number;
912
+ scalePitchClassEnabled: (root: number, modeMask: number, pitchClass: number) => boolean;
588
913
 
589
914
  // Effects
590
915
  hpss: (
@@ -593,6 +918,41 @@ interface SonareModule {
593
918
  kernelHarmonic: number,
594
919
  kernelPercussive: number,
595
920
  ) => WasmHpssResult;
921
+ hpssWithResidual: (
922
+ samples: Float32Array,
923
+ sampleRate: number,
924
+ kernelHarmonic: number,
925
+ kernelPercussive: number,
926
+ ) => WasmHpssWithResidualResult;
927
+ decompose: (
928
+ s: Float32Array,
929
+ nFeatures: number,
930
+ nFrames: number,
931
+ nComponents: number,
932
+ nIter: number,
933
+ beta: number,
934
+ ) => WasmDecomposeResult;
935
+ nnFilter: (
936
+ s: Float32Array,
937
+ nFeatures: number,
938
+ nFrames: number,
939
+ aggregate: string,
940
+ k: number,
941
+ width: number,
942
+ ) => WasmMatrix2dResult;
943
+ remix: (
944
+ samples: Float32Array,
945
+ intervals: Int32Array,
946
+ sampleRate: number,
947
+ alignZeros: boolean,
948
+ ) => Float32Array;
949
+ phaseVocoder: (
950
+ samples: Float32Array,
951
+ sampleRate: number,
952
+ rate: number,
953
+ nFft: number,
954
+ hopLength: number,
955
+ ) => Float32Array;
596
956
  harmonic: (samples: Float32Array, sampleRate: number) => Float32Array;
597
957
  percussive: (samples: Float32Array, sampleRate: number) => Float32Array;
598
958
  timeStretch: (samples: Float32Array, sampleRate: number, rate: number) => Float32Array;
@@ -677,6 +1037,56 @@ interface SonareModule {
677
1037
  sampleRate: number,
678
1038
  platforms: Array<{ name: string; targetLufs: number; ceilingDb: number }>,
679
1039
  ) => string;
1040
+ masteringRepairDeclick: (
1041
+ samples: Float32Array,
1042
+ sampleRate: number,
1043
+ options: object,
1044
+ ) => Float32Array;
1045
+ masteringRepairDenoiseClassical: (
1046
+ samples: Float32Array,
1047
+ sampleRate: number,
1048
+ options: object,
1049
+ ) => Float32Array;
1050
+ masteringRepairDeclip: (
1051
+ samples: Float32Array,
1052
+ sampleRate: number,
1053
+ options: object,
1054
+ ) => Float32Array;
1055
+ masteringRepairDecrackle: (
1056
+ samples: Float32Array,
1057
+ sampleRate: number,
1058
+ options: object,
1059
+ ) => Float32Array;
1060
+ masteringRepairDehum: (
1061
+ samples: Float32Array,
1062
+ sampleRate: number,
1063
+ options: object,
1064
+ ) => Float32Array;
1065
+ masteringRepairDereverbClassical: (
1066
+ samples: Float32Array,
1067
+ sampleRate: number,
1068
+ options: object,
1069
+ ) => Float32Array;
1070
+ masteringRepairTrimSilence: (
1071
+ samples: Float32Array,
1072
+ sampleRate: number,
1073
+ options: object,
1074
+ ) => Float32Array;
1075
+ masteringDynamicsCompressor: (
1076
+ samples: Float32Array,
1077
+ sampleRate: number,
1078
+ options: object,
1079
+ ) => { samples: Float32Array; latencySamples: number };
1080
+ masteringDynamicsGate: (
1081
+ samples: Float32Array,
1082
+ sampleRate: number,
1083
+ options: object,
1084
+ ) => { samples: Float32Array; latencySamples: number };
1085
+ masteringDynamicsTransientShaper: (
1086
+ samples: Float32Array,
1087
+ sampleRate: number,
1088
+ options: object,
1089
+ ) => { samples: Float32Array; latencySamples: number };
680
1090
  masteringChain: (
681
1091
  samples: Float32Array,
682
1092
  sampleRate: number,
@@ -715,6 +1125,21 @@ interface SonareModule {
715
1125
  sampleRate: number,
716
1126
  overrides: Record<string, number | boolean> | null,
717
1127
  ) => WasmMasteringStereoChainResult;
1128
+ masterAudioWithProgress: (
1129
+ presetName: string,
1130
+ samples: Float32Array,
1131
+ sampleRate: number,
1132
+ overrides: Record<string, number | boolean> | null,
1133
+ progressCallback: ProgressCallback | null,
1134
+ ) => WasmMasteringChainResult;
1135
+ masterAudioStereoWithProgress: (
1136
+ presetName: string,
1137
+ left: Float32Array,
1138
+ right: Float32Array,
1139
+ sampleRate: number,
1140
+ overrides: Record<string, number | boolean> | null,
1141
+ progressCallback: ProgressCallback | null,
1142
+ ) => WasmMasteringStereoChainResult;
718
1143
  mixingScenePresetNames: () => string[];
719
1144
  mixingScenePresetJson: (presetName: string) => string;
720
1145
  mixStereo: (
@@ -763,7 +1188,6 @@ interface SonareModule {
763
1188
  nFrames: number,
764
1189
  sampleRate: number,
765
1190
  nFft: number,
766
- hopLength: number,
767
1191
  fmin: number,
768
1192
  fmax: number,
769
1193
  ) => WasmStftPowerResult;
@@ -774,9 +1198,9 @@ interface SonareModule {
774
1198
  sampleRate: number,
775
1199
  nFft: number,
776
1200
  hopLength: number,
777
- nIter: number,
778
1201
  fmin: number,
779
1202
  fmax: number,
1203
+ nIter: number,
780
1204
  ) => Float32Array;
781
1205
  mfccToMel: (
782
1206
  mfcc: Float32Array,
@@ -792,9 +1216,9 @@ interface SonareModule {
792
1216
  sampleRate: number,
793
1217
  nFft: number,
794
1218
  hopLength: number,
795
- nIter: number,
796
1219
  fmin: number,
797
1220
  fmax: number,
1221
+ nIter: number,
798
1222
  ) => Float32Array;
799
1223
 
800
1224
  // Features - Chroma
@@ -843,6 +1267,38 @@ interface SonareModule {
843
1267
  frameLength: number,
844
1268
  hopLength: number,
845
1269
  ) => Float32Array;
1270
+ spectralContrast: (
1271
+ samples: Float32Array,
1272
+ sampleRate: number,
1273
+ nFft: number,
1274
+ hopLength: number,
1275
+ nBands: number,
1276
+ fmin: number,
1277
+ quantile: number,
1278
+ ) => WasmMatrix2dResult;
1279
+ polyFeatures: (
1280
+ samples: Float32Array,
1281
+ sampleRate: number,
1282
+ nFft: number,
1283
+ hopLength: number,
1284
+ order: number,
1285
+ ) => WasmMatrix2dResult;
1286
+ zeroCrossings: (
1287
+ samples: Float32Array,
1288
+ threshold: number,
1289
+ refMagnitude: boolean,
1290
+ pad: boolean,
1291
+ zeroPos: boolean,
1292
+ ) => Int32Array;
1293
+ pitchTuning: (frequencies: Float32Array, resolution: number, binsPerOctave: number) => number;
1294
+ estimateTuning: (
1295
+ samples: Float32Array,
1296
+ sampleRate: number,
1297
+ nFft: number,
1298
+ hopLength: number,
1299
+ resolution: number,
1300
+ binsPerOctave: number,
1301
+ ) => number;
846
1302
 
847
1303
  // Features - Pitch
848
1304
  pitchYin: (
@@ -853,6 +1309,7 @@ interface SonareModule {
853
1309
  fmin: number,
854
1310
  fmax: number,
855
1311
  threshold: number,
1312
+ fillNa: boolean,
856
1313
  ) => WasmPitchResult;
857
1314
  pitchPyin: (
858
1315
  samples: Float32Array,
@@ -862,6 +1319,7 @@ interface SonareModule {
862
1319
  fmin: number,
863
1320
  fmax: number,
864
1321
  threshold: number,
1322
+ fillNa: boolean,
865
1323
  ) => WasmPitchResult;
866
1324
 
867
1325
  // Core - Conversion
@@ -993,6 +1451,8 @@ interface SonareModule {
993
1451
  lufs: (samples: Float32Array, sampleRate: number) => WasmLufsResult;
994
1452
  momentaryLufs: (samples: Float32Array, sampleRate: number) => Float32Array;
995
1453
  shortTermLufs: (samples: Float32Array, sampleRate: number) => Float32Array;
1454
+ lufsInterleaved: (samples: Float32Array, channels: number, sampleRate: number) => WasmLufsResult;
1455
+ ebur128LoudnessRange: (samples: Float32Array, sampleRate: number) => number;
996
1456
 
997
1457
  // Core - Resample
998
1458
  resample: (samples: Float32Array, srcSr: number, targetSr: number) => Float32Array;
@@ -1083,13 +1543,22 @@ interface SonareModule {
1083
1543
 
1084
1544
  // Streaming - StreamingRetune
1085
1545
  createStreamingRetune: (config: Record<string, unknown>) => WasmStreamingRetune;
1546
+ createRealtimeVoiceChanger: (
1547
+ config: Record<string, unknown> | string,
1548
+ ) => WasmRealtimeVoiceChanger;
1549
+ realtimeVoiceChangerPresetNames: () => string[];
1550
+ realtimeVoiceChangerPresetJson: (id: string) => string;
1551
+ validateRealtimeVoiceChangerPresetJson: (json: string) => {
1552
+ ok: boolean;
1553
+ normalizedJson?: string;
1554
+ error?: string;
1555
+ };
1086
1556
 
1087
1557
  // Mixing - scene-based Mixer
1088
1558
  createMixerFromSceneJson: (json: string, sampleRate: number, blockSize: number) => WasmMixer;
1089
- mixerPresetJson: (presetName: string) => string;
1090
1559
  }
1091
1560
 
1092
- interface WasmStreamingMasteringChain {
1561
+ export interface WasmStreamingMasteringChain {
1093
1562
  prepare: (sampleRate: number, maxBlockSize: number, numChannels: number) => void;
1094
1563
  processMono: (samples: Float32Array) => Float32Array;
1095
1564
  processStereo: (
@@ -1102,7 +1571,7 @@ interface WasmStreamingMasteringChain {
1102
1571
  delete: () => void;
1103
1572
  }
1104
1573
 
1105
- interface WasmEqSpectrumSnapshot {
1574
+ export interface WasmEqSpectrumSnapshot {
1106
1575
  preLeft: Float32Array;
1107
1576
  preRight: Float32Array;
1108
1577
  postLeft: Float32Array;
@@ -1113,7 +1582,7 @@ interface WasmEqSpectrumSnapshot {
1113
1582
  seq: number;
1114
1583
  }
1115
1584
 
1116
- interface WasmStreamingEqualizer {
1585
+ export interface WasmStreamingEqualizer {
1117
1586
  setBand: (index: number, band: Record<string, unknown>) => void;
1118
1587
  clear: () => void;
1119
1588
  setPhaseMode: (mode: number) => void;
@@ -1136,7 +1605,7 @@ interface WasmStreamingEqualizer {
1136
1605
  delete: () => void;
1137
1606
  }
1138
1607
 
1139
- interface WasmStreamingRetune {
1608
+ export interface WasmStreamingRetune {
1140
1609
  prepare: (sampleRate: number, maxBlockSize: number) => void;
1141
1610
  reset: () => void;
1142
1611
  setConfig: (config: Record<string, unknown>) => void;
@@ -1146,7 +1615,32 @@ interface WasmStreamingRetune {
1146
1615
  delete: () => void;
1147
1616
  }
1148
1617
 
1149
- interface WasmMixer {
1618
+ export interface WasmRealtimeVoiceChanger {
1619
+ prepare: (sampleRate: number, maxBlockSize: number, channels: number) => void;
1620
+ reset: () => void;
1621
+ setConfig: (config: Record<string, unknown> | string) => void;
1622
+ configJson: () => string;
1623
+ latencySamples: () => number;
1624
+ processMono: (samples: Float32Array) => Float32Array;
1625
+ processMonoInto: (samples: Float32Array, output: Float32Array) => void;
1626
+ processInterleaved: (samples: Float32Array, channels: number) => Float32Array;
1627
+ processInterleavedInto: (samples: Float32Array, channels: number, output: Float32Array) => void;
1628
+ // Zero-copy "prepared" path. The returned Float32Array is a typed_memory_view
1629
+ // backed by the WASM heap; it is only valid until the next call to a method
1630
+ // that may grow the underlying scratch buffer (i.e. another get*Buffer with a
1631
+ // larger length) or until delete().
1632
+ getMonoInputBuffer: (numSamples: number) => Float32Array;
1633
+ getMonoOutputBuffer: (numSamples: number) => Float32Array;
1634
+ processPreparedMono: (numSamples: number) => void;
1635
+ getInterleavedInputBuffer: (numFrames: number, numChannels: number) => Float32Array;
1636
+ getInterleavedOutputBuffer: (numFrames: number, numChannels: number) => Float32Array;
1637
+ processPreparedInterleaved: (numFrames: number, numChannels: number) => void;
1638
+ getPlanarChannelBuffer: (channel: number, numFrames: number) => Float32Array;
1639
+ processPreparedPlanar: (numFrames: number) => void;
1640
+ delete: () => void;
1641
+ }
1642
+
1643
+ export interface WasmMixer {
1150
1644
  compile: () => void;
1151
1645
  processStereo: (
1152
1646
  leftChannels: Float32Array[],
@@ -1173,6 +1667,11 @@ interface WasmMixer {
1173
1667
  curve: number,
1174
1668
  ) => void;
1175
1669
  stripById: (id: string) => number;
1670
+ setInputTrimDb: (stripIndex: number, db: number) => void;
1671
+ setFaderDb: (stripIndex: number, db: number) => void;
1672
+ setPan: (stripIndex: number, pan: number, panMode: number) => void;
1673
+ setWidth: (stripIndex: number, width: number) => void;
1674
+ setMuted: (stripIndex: number, muted: boolean) => void;
1176
1675
  setSoloed: (stripIndex: number, soloed: boolean) => void;
1177
1676
  setSoloSafe: (stripIndex: number, soloSafe: boolean) => void;
1178
1677
  setPolarityInvert: (stripIndex: number, invertLeft: boolean, invertRight: boolean) => void;
@@ -1226,20 +1725,20 @@ interface WasmMixer {
1226
1725
  delete: () => void;
1227
1726
  }
1228
1727
 
1229
- interface WasmGoniometerPoint {
1728
+ export interface WasmGoniometerPoint {
1230
1729
  left: number;
1231
1730
  right: number;
1232
1731
  }
1233
1732
 
1234
1733
  // Streaming types for StreamAnalyzer
1235
- interface WasmChordChange {
1734
+ export interface WasmChordChange {
1236
1735
  root: number;
1237
1736
  quality: number;
1238
1737
  startTime: number;
1239
1738
  confidence: number;
1240
1739
  }
1241
1740
 
1242
- interface WasmBarChord {
1741
+ export interface WasmBarChord {
1243
1742
  barIndex: number;
1244
1743
  root: number;
1245
1744
  quality: number;
@@ -1247,12 +1746,12 @@ interface WasmBarChord {
1247
1746
  confidence: number;
1248
1747
  }
1249
1748
 
1250
- interface WasmPatternScore {
1749
+ export interface WasmPatternScore {
1251
1750
  name: string;
1252
1751
  score: number;
1253
1752
  }
1254
1753
 
1255
- interface WasmProgressiveEstimate {
1754
+ export interface WasmProgressiveEstimate {
1256
1755
  bpm: number;
1257
1756
  bpmConfidence: number;
1258
1757
  bpmCandidateCount: number;
@@ -1277,15 +1776,17 @@ interface WasmProgressiveEstimate {
1277
1776
  updated: boolean;
1278
1777
  }
1279
1778
 
1280
- interface WasmAnalyzerStats {
1779
+ export interface WasmAnalyzerStats {
1281
1780
  totalFrames: number;
1282
1781
  totalSamples: number;
1283
1782
  durationSeconds: number;
1284
1783
  estimate: WasmProgressiveEstimate;
1285
1784
  }
1286
1785
 
1287
- interface WasmFrameBuffer {
1786
+ export interface WasmFrameBuffer {
1288
1787
  nFrames: number;
1788
+ /** Number of mel bands; flat `mel` is `[nFrames * nMels]` row-major. */
1789
+ nMels: number;
1289
1790
  timestamps: Float32Array;
1290
1791
  mel: Float32Array;
1291
1792
  chroma: Float32Array;
@@ -1298,7 +1799,7 @@ interface WasmFrameBuffer {
1298
1799
  chordConfidence: Float32Array;
1299
1800
  }
1300
1801
 
1301
- interface WasmStreamFramesU8 {
1802
+ export interface WasmStreamFramesU8 {
1302
1803
  nFrames: number;
1303
1804
  nMels: number;
1304
1805
  timestamps: Float32Array;
@@ -1310,7 +1811,7 @@ interface WasmStreamFramesU8 {
1310
1811
  spectralFlatness: Uint8Array;
1311
1812
  }
1312
1813
 
1313
- interface WasmStreamFramesI16 {
1814
+ export interface WasmStreamFramesI16 {
1314
1815
  nFrames: number;
1315
1816
  nMels: number;
1316
1817
  timestamps: Float32Array;
@@ -1322,7 +1823,7 @@ interface WasmStreamFramesI16 {
1322
1823
  spectralFlatness: Int16Array;
1323
1824
  }
1324
1825
 
1325
- interface WasmStreamAnalyzer {
1826
+ export interface WasmStreamAnalyzer {
1326
1827
  process: (samples: Float32Array) => void;
1327
1828
  processWithOffset: (samples: Float32Array, sampleOffset: number) => void;
1328
1829
  availableFrames: () => number;