@libraz/libsonare 1.2.0 → 1.2.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.
@@ -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,56 @@ 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
+ }
64
+
65
+ export interface WasmBeatResult {
27
66
  time: number;
28
67
  strength: number;
29
68
  }
30
69
 
31
- interface WasmChordResult {
70
+ export interface WasmChordResult {
32
71
  root: number;
33
72
  bass: number;
34
73
  quality: number;
@@ -38,7 +77,7 @@ interface WasmChordResult {
38
77
  name: string;
39
78
  }
40
79
 
41
- interface WasmSectionResult {
80
+ export interface WasmSectionResult {
42
81
  type: number;
43
82
  start: number;
44
83
  end: number;
@@ -47,7 +86,7 @@ interface WasmSectionResult {
47
86
  name: string;
48
87
  }
49
88
 
50
- interface WasmTimbreResult {
89
+ export interface WasmTimbreResult {
51
90
  brightness: number;
52
91
  warmth: number;
53
92
  density: number;
@@ -55,26 +94,26 @@ interface WasmTimbreResult {
55
94
  complexity: number;
56
95
  }
57
96
 
58
- interface WasmDynamicsResult {
97
+ export interface WasmDynamicsResult {
59
98
  dynamicRangeDb: number;
60
99
  loudnessRangeDb: number;
61
100
  crestFactor: number;
62
101
  isCompressed: boolean;
63
102
  }
64
103
 
65
- interface WasmRhythmResult {
104
+ export interface WasmRhythmResult {
66
105
  syncopation: number;
67
106
  grooveType: string;
68
107
  patternRegularity: number;
69
108
  }
70
109
 
71
- interface WasmTimeSignatureResult {
110
+ export interface WasmTimeSignatureResult {
72
111
  numerator: number;
73
112
  denominator: number;
74
113
  confidence: number;
75
114
  }
76
115
 
77
- interface WasmAnalysisResult {
116
+ export interface WasmAnalysisResult {
78
117
  bpm: number;
79
118
  bpmConfidence: number;
80
119
  key: WasmKeyResult;
@@ -88,11 +127,65 @@ interface WasmAnalysisResult {
88
127
  form: string;
89
128
  }
90
129
 
91
- interface WasmChordAnalysisResult {
130
+ export interface WasmBpmCandidate {
131
+ bpm: number;
132
+ confidence: number;
133
+ }
134
+
135
+ export interface WasmBpmAnalysisResult {
136
+ bpm: number;
137
+ confidence: number;
138
+ candidates: WasmBpmCandidate[];
139
+ autocorrelation: Float32Array;
140
+ tempogram: Float32Array;
141
+ }
142
+
143
+ export interface WasmRhythmAnalysisResult {
144
+ timeSignature: WasmTimeSignatureResult;
145
+ syncopation: number;
146
+ grooveType: string;
147
+ patternRegularity: number;
148
+ tempoStability: number;
149
+ bpm: number;
150
+ beatIntervals: Float32Array;
151
+ }
152
+
153
+ export interface WasmDynamicsAnalysisResult {
154
+ dynamicRangeDb: number;
155
+ peakDb: number;
156
+ rmsDb: number;
157
+ crestFactor: number;
158
+ loudnessRangeDb: number;
159
+ isCompressed: boolean;
160
+ loudnessTimes: Float32Array;
161
+ loudnessRmsDb: Float32Array;
162
+ }
163
+
164
+ export interface WasmTimbreFrameResult {
165
+ brightness: number;
166
+ warmth: number;
167
+ density: number;
168
+ roughness: number;
169
+ complexity: number;
170
+ }
171
+
172
+ export interface WasmTimbreAnalysisResult {
173
+ brightness: number;
174
+ warmth: number;
175
+ density: number;
176
+ roughness: number;
177
+ complexity: number;
178
+ spectralCentroid: Float32Array;
179
+ spectralFlatness: Float32Array;
180
+ spectralRolloff: Float32Array;
181
+ timbreOverTime: WasmTimbreFrameResult[];
182
+ }
183
+
184
+ export interface WasmChordAnalysisResult {
92
185
  chords: WasmChordResult[];
93
186
  }
94
187
 
95
- interface WasmAcousticResult {
188
+ export interface WasmAcousticResult {
96
189
  rt60: number;
97
190
  edt: number;
98
191
  c50: number;
@@ -106,13 +199,32 @@ interface WasmAcousticResult {
106
199
  isBlind: boolean;
107
200
  }
108
201
 
109
- interface WasmHpssResult {
202
+ export interface WasmHpssResult {
203
+ harmonic: Float32Array;
204
+ percussive: Float32Array;
205
+ sampleRate: number;
206
+ }
207
+
208
+ export interface WasmHpssWithResidualResult {
110
209
  harmonic: Float32Array;
111
210
  percussive: Float32Array;
211
+ residual: Float32Array;
112
212
  sampleRate: number;
113
213
  }
114
214
 
115
- interface WasmStftResult {
215
+ /** Row-major 2-D matrix as a flat buffer plus its dimensions. */
216
+ export interface WasmMatrix2dResult {
217
+ data: Float32Array;
218
+ rows: number;
219
+ cols: number;
220
+ }
221
+
222
+ export interface WasmDecomposeResult {
223
+ w: Float32Array;
224
+ h: Float32Array;
225
+ }
226
+
227
+ export interface WasmStftResult {
116
228
  nBins: number;
117
229
  nFrames: number;
118
230
  nFft: number;
@@ -122,13 +234,13 @@ interface WasmStftResult {
122
234
  power: Float32Array;
123
235
  }
124
236
 
125
- interface WasmStftDbResult {
237
+ export interface WasmStftDbResult {
126
238
  nBins: number;
127
239
  nFrames: number;
128
240
  db: Float32Array;
129
241
  }
130
242
 
131
- interface WasmMelResult {
243
+ export interface WasmMelResult {
132
244
  nMels: number;
133
245
  nFrames: number;
134
246
  sampleRate: number;
@@ -137,25 +249,25 @@ interface WasmMelResult {
137
249
  db: Float32Array;
138
250
  }
139
251
 
140
- interface WasmMfccResult {
252
+ export interface WasmMfccResult {
141
253
  nMfcc: number;
142
254
  nFrames: number;
143
255
  coefficients: Float32Array;
144
256
  }
145
257
 
146
- interface WasmStftPowerResult {
258
+ export interface WasmStftPowerResult {
147
259
  nBins: number;
148
260
  nFrames: number;
149
261
  power: Float32Array;
150
262
  }
151
263
 
152
- interface WasmMelPowerResult {
264
+ export interface WasmMelPowerResult {
153
265
  nMels: number;
154
266
  nFrames: number;
155
267
  power: Float32Array;
156
268
  }
157
269
 
158
- interface WasmChromaResult {
270
+ export interface WasmChromaResult {
159
271
  nChroma: number;
160
272
  nFrames: number;
161
273
  sampleRate: number;
@@ -164,7 +276,7 @@ interface WasmChromaResult {
164
276
  meanEnergy: number[];
165
277
  }
166
278
 
167
- interface WasmPitchResult {
279
+ export interface WasmPitchResult {
168
280
  f0: Float32Array;
169
281
  voicedProb: Float32Array;
170
282
  voicedFlag: boolean[];
@@ -173,48 +285,48 @@ interface WasmPitchResult {
173
285
  meanF0: number;
174
286
  }
175
287
 
176
- interface WasmTrimResult {
288
+ export interface WasmTrimResult {
177
289
  audio: Float32Array;
178
290
  startSample: number;
179
291
  endSample: number;
180
292
  }
181
293
 
182
- interface WasmFrameResult {
294
+ export interface WasmFrameResult {
183
295
  nFrames: number;
184
296
  frames: Float32Array;
185
297
  }
186
298
 
187
- interface WasmTempogramResult {
299
+ export interface WasmTempogramResult {
188
300
  nFrames: number;
189
301
  winLength: number;
190
302
  data: Float32Array;
191
303
  }
192
304
 
193
- interface WasmCyclicTempogramResult {
305
+ export interface WasmCyclicTempogramResult {
194
306
  nFrames: number;
195
307
  nBins: number;
196
308
  data: Float32Array;
197
309
  }
198
310
 
199
- interface WasmFourierTempogramResult {
311
+ export interface WasmFourierTempogramResult {
200
312
  nBins: number;
201
313
  nFrames: number;
202
314
  data: Float32Array;
203
315
  }
204
316
 
205
- interface WasmNnlsChromaResult {
317
+ export interface WasmNnlsChromaResult {
206
318
  nChroma: number;
207
319
  nFrames: number;
208
320
  data: Float32Array;
209
321
  }
210
322
 
211
- interface WasmMelodyPoint {
323
+ export interface WasmMelodyPoint {
212
324
  time: number;
213
325
  frequency: number;
214
326
  confidence: number;
215
327
  }
216
328
 
217
- interface WasmMelodyResult {
329
+ export interface WasmMelodyResult {
218
330
  points: WasmMelodyPoint[];
219
331
  pitchRangeOctaves: number;
220
332
  pitchStability: number;
@@ -222,7 +334,7 @@ interface WasmMelodyResult {
222
334
  vibratoRate: number;
223
335
  }
224
336
 
225
- interface WasmCqtResult {
337
+ export interface WasmCqtResult {
226
338
  nBins: number;
227
339
  nFrames: number;
228
340
  hopLength: number;
@@ -231,14 +343,14 @@ interface WasmCqtResult {
231
343
  frequencies: Float32Array;
232
344
  }
233
345
 
234
- interface WasmLufsResult {
346
+ export interface WasmLufsResult {
235
347
  integratedLufs: number;
236
348
  momentaryLufs: number;
237
349
  shortTermLufs: number;
238
350
  loudnessRange: number;
239
351
  }
240
352
 
241
- interface WasmMasteringResult {
353
+ export interface WasmMasteringResult {
242
354
  samples: Float32Array;
243
355
  sampleRate: number;
244
356
  inputLufs: number;
@@ -247,11 +359,11 @@ interface WasmMasteringResult {
247
359
  latencySamples?: number;
248
360
  }
249
361
 
250
- interface WasmMasteringChainResult extends WasmMasteringResult {
362
+ export interface WasmMasteringChainResult extends WasmMasteringResult {
251
363
  stages: string[];
252
364
  }
253
365
 
254
- interface WasmMasteringStereoChainResult {
366
+ export interface WasmMasteringStereoChainResult {
255
367
  left: Float32Array;
256
368
  right: Float32Array;
257
369
  sampleRate: number;
@@ -261,7 +373,7 @@ interface WasmMasteringStereoChainResult {
261
373
  stages: string[];
262
374
  }
263
375
 
264
- interface WasmMasteringStereoResult {
376
+ export interface WasmMasteringStereoResult {
265
377
  left: Float32Array;
266
378
  right: Float32Array;
267
379
  sampleRate: number;
@@ -271,7 +383,7 @@ interface WasmMasteringStereoResult {
271
383
  latencySamples: number;
272
384
  }
273
385
 
274
- interface WasmMixMeterSnapshot {
386
+ export interface WasmMixMeterSnapshot {
275
387
  peakDbL: number;
276
388
  peakDbR: number;
277
389
  rmsDbL: number;
@@ -291,14 +403,14 @@ interface WasmMixMeterSnapshot {
291
403
  seq: number;
292
404
  }
293
405
 
294
- interface WasmMixResult {
406
+ export interface WasmMixResult {
295
407
  left: Float32Array;
296
408
  right: Float32Array;
297
409
  sampleRate: number;
298
410
  meters: WasmMixMeterSnapshot[];
299
411
  }
300
412
 
301
- interface WasmEngineClip {
413
+ export interface WasmEngineClip {
302
414
  id?: number;
303
415
  channels: Float32Array[];
304
416
  startPpq: number;
@@ -310,7 +422,7 @@ interface WasmEngineClip {
310
422
  fadeOutSamples?: number;
311
423
  }
312
424
 
313
- interface WasmEngineParameterInfo {
425
+ export interface WasmEngineParameterInfo {
314
426
  id: number;
315
427
  name: string;
316
428
  unit: string;
@@ -321,33 +433,33 @@ interface WasmEngineParameterInfo {
321
433
  defaultCurve: number;
322
434
  }
323
435
 
324
- interface WasmEngineAutomationPoint {
436
+ export interface WasmEngineAutomationPoint {
325
437
  ppq: number;
326
438
  value: number;
327
439
  curveToNext?: number;
328
440
  }
329
441
 
330
- interface WasmEngineMarker {
442
+ export interface WasmEngineMarker {
331
443
  id: number;
332
444
  ppq: number;
333
445
  name?: string;
334
446
  }
335
447
 
336
- interface WasmEngineMetronomeConfig {
448
+ export interface WasmEngineMetronomeConfig {
337
449
  enabled: boolean;
338
450
  beatGain?: number;
339
451
  accentGain?: number;
340
452
  clickSamples?: number;
341
453
  }
342
454
 
343
- interface WasmEngineGraphNode {
455
+ export interface WasmEngineGraphNode {
344
456
  id: string;
345
457
  type?: number;
346
458
  gainDb?: number;
347
459
  numPorts?: number;
348
460
  }
349
461
 
350
- interface WasmEngineGraphConnection {
462
+ export interface WasmEngineGraphConnection {
351
463
  sourceNode: string;
352
464
  sourcePort: number;
353
465
  destNode: string;
@@ -355,12 +467,12 @@ interface WasmEngineGraphConnection {
355
467
  mix?: number;
356
468
  }
357
469
 
358
- interface WasmEngineGraphParameterBinding {
470
+ export interface WasmEngineGraphParameterBinding {
359
471
  paramId: number;
360
472
  nodeId: string;
361
473
  }
362
474
 
363
- interface WasmEngineGraphSpec {
475
+ export interface WasmEngineGraphSpec {
364
476
  nodes: WasmEngineGraphNode[];
365
477
  connections: WasmEngineGraphConnection[];
366
478
  inputNode: string;
@@ -369,7 +481,7 @@ interface WasmEngineGraphSpec {
369
481
  parameterBindings?: WasmEngineGraphParameterBinding[];
370
482
  }
371
483
 
372
- interface WasmEngineTelemetry {
484
+ export interface WasmEngineTelemetry {
373
485
  type: number;
374
486
  error: number;
375
487
  renderFrame: number;
@@ -379,7 +491,7 @@ interface WasmEngineTelemetry {
379
491
  value: number;
380
492
  }
381
493
 
382
- interface WasmEngineMeterTelemetry {
494
+ export interface WasmEngineMeterTelemetry {
383
495
  targetId: number;
384
496
  renderFrame: number;
385
497
  seq: number;
@@ -399,14 +511,14 @@ interface WasmEngineMeterTelemetry {
399
511
  droppedRecords: number;
400
512
  }
401
513
 
402
- interface WasmEngineCaptureStatus {
514
+ export interface WasmEngineCaptureStatus {
403
515
  capturedFrames: number;
404
516
  overflowCount: number;
405
517
  armed: boolean;
406
518
  punchEnabled: boolean;
407
519
  }
408
520
 
409
- interface WasmEngineTransportState {
521
+ export interface WasmEngineTransportState {
410
522
  playing: boolean;
411
523
  looping: boolean;
412
524
  renderFrame: number;
@@ -418,7 +530,7 @@ interface WasmEngineTransportState {
418
530
  sampleRate: number;
419
531
  }
420
532
 
421
- interface WasmEngineBounceOptions {
533
+ export interface WasmEngineBounceOptions {
422
534
  totalFrames: number;
423
535
  blockSize?: number;
424
536
  numChannels?: number;
@@ -431,7 +543,7 @@ interface WasmEngineBounceOptions {
431
543
  ditherSeed?: number;
432
544
  }
433
545
 
434
- interface WasmEngineBounceResult {
546
+ export interface WasmEngineBounceResult {
435
547
  interleaved: Float32Array;
436
548
  frames: number;
437
549
  numChannels: number;
@@ -439,7 +551,7 @@ interface WasmEngineBounceResult {
439
551
  integratedLufs: number;
440
552
  }
441
553
 
442
- interface WasmEngineFreezeOptions {
554
+ export interface WasmEngineFreezeOptions {
443
555
  totalFrames: number;
444
556
  blockSize?: number;
445
557
  numChannels?: number;
@@ -448,18 +560,18 @@ interface WasmEngineFreezeOptions {
448
560
  gain?: number;
449
561
  }
450
562
 
451
- interface WasmEngineFreezeResult {
563
+ export interface WasmEngineFreezeResult {
452
564
  clipId: number;
453
565
  frames: number;
454
566
  numChannels: number;
455
567
  }
456
568
 
457
- interface WasmEngineProcessWithMonitorResult {
569
+ export interface WasmEngineProcessWithMonitorResult {
458
570
  output: Float32Array[];
459
571
  monitor: Float32Array[];
460
572
  }
461
573
 
462
- interface WasmRealtimeEngine {
574
+ export interface WasmRealtimeEngine {
463
575
  prepare: (
464
576
  sampleRate: number,
465
577
  maxBlockSize: number,
@@ -512,10 +624,10 @@ interface WasmRealtimeEngine {
512
624
  delete: () => void;
513
625
  }
514
626
 
515
- type ProgressCallback = (progress: number, stage: string) => void;
516
- type TempogramMode = 'autocorrelation' | 'auto' | 'ac' | 'cosine' | 0 | 1;
627
+ export type ProgressCallback = (progress: number, stage: string) => void;
628
+ export type TempogramMode = 'autocorrelation' | 'auto' | 'ac' | 'cosine' | 0 | 1;
517
629
 
518
- interface SonareModule {
630
+ export interface SonareModule {
519
631
  // Quick API (high-level)
520
632
  detectBpm: (samples: Float32Array, sampleRate: number) => number;
521
633
  detectKey: (samples: Float32Array, sampleRate: number) => WasmKeyResult;
@@ -583,8 +695,139 @@ interface SonareModule {
583
695
  sampleRate: number,
584
696
  progressCallback: ProgressCallback | null,
585
697
  ) => WasmAnalysisResult;
698
+ analyzeBpm: (
699
+ samples: Float32Array,
700
+ sampleRate: number,
701
+ bpmMin: number,
702
+ bpmMax: number,
703
+ startBpm: number,
704
+ nFft: number,
705
+ hopLength: number,
706
+ maxCandidates: number,
707
+ ) => WasmBpmAnalysisResult;
708
+ analyzeRhythm: (
709
+ samples: Float32Array,
710
+ sampleRate: number,
711
+ bpmMin: number,
712
+ bpmMax: number,
713
+ startBpm: number,
714
+ nFft: number,
715
+ hopLength: number,
716
+ ) => WasmRhythmAnalysisResult;
717
+ analyzeDynamics: (
718
+ samples: Float32Array,
719
+ sampleRate: number,
720
+ windowSec: number,
721
+ hopLength: number,
722
+ compressionThreshold: number,
723
+ ) => WasmDynamicsAnalysisResult;
724
+ analyzeTimbre: (
725
+ samples: Float32Array,
726
+ sampleRate: number,
727
+ nFft: number,
728
+ hopLength: number,
729
+ nMels: number,
730
+ nMfcc: number,
731
+ windowSec: number,
732
+ ) => WasmTimbreAnalysisResult;
733
+ detectKeyCandidates: (samples: Float32Array, sampleRate: number) => WasmKeyCandidateResult[];
734
+ hasFfmpegSupport: () => boolean;
586
735
  version: () => string;
587
736
  engineAbiVersion: () => number;
737
+ voiceChangerAbiVersion: () => number;
738
+ voiceCharacterPresetId: (preset: number) => string | null;
739
+ realtimeVoiceChangerPresetConfig: (preset: number) => WasmRealtimeVoiceChangerPodConfig | null;
740
+
741
+ meteringPeakDb: (samples: Float32Array, sampleRate: number) => number;
742
+ meteringRmsDb: (samples: Float32Array, sampleRate: number) => number;
743
+ meteringCrestFactorDb: (samples: Float32Array, sampleRate: number) => number;
744
+ meteringDcOffset: (samples: Float32Array, sampleRate: number) => number;
745
+ meteringTruePeakDb: (
746
+ samples: Float32Array,
747
+ sampleRate: number,
748
+ oversampleFactor: number,
749
+ ) => number;
750
+ meteringDetectClipping: (
751
+ samples: Float32Array,
752
+ sampleRate: number,
753
+ threshold: number,
754
+ minRegionSamples: number,
755
+ ) => {
756
+ clippedSamples: number;
757
+ clippingRatio: number;
758
+ maxClippedPeak: number;
759
+ regions: Array<{ startSample: number; endSample: number; length: number; peak: number }>;
760
+ };
761
+ meteringDynamicRange: (
762
+ samples: Float32Array,
763
+ sampleRate: number,
764
+ windowSec: number,
765
+ hopSec: number,
766
+ lowPercentile: number,
767
+ highPercentile: number,
768
+ ) => {
769
+ dynamicRangeDb: number;
770
+ lowPercentileDb: number;
771
+ highPercentileDb: number;
772
+ windowRmsDb: Float32Array;
773
+ };
774
+
775
+ meteringStereoCorrelation: (
776
+ left: Float32Array,
777
+ right: Float32Array,
778
+ sampleRate: number,
779
+ ) => number;
780
+ meteringStereoWidth: (left: Float32Array, right: Float32Array, sampleRate: number) => number;
781
+ meteringVectorscope: (
782
+ left: Float32Array,
783
+ right: Float32Array,
784
+ sampleRate: number,
785
+ ) => { mid: Float32Array; side: Float32Array };
786
+ meteringPhaseScope: (
787
+ left: Float32Array,
788
+ right: Float32Array,
789
+ sampleRate: number,
790
+ ) => {
791
+ mid: Float32Array;
792
+ side: Float32Array;
793
+ radius: Float32Array;
794
+ angleRad: Float32Array;
795
+ correlation: number;
796
+ averageAbsAngleRad: number;
797
+ maxRadius: number;
798
+ };
799
+ meteringSpectrum: (
800
+ samples: Float32Array,
801
+ sampleRate: number,
802
+ options: {
803
+ nFft?: number;
804
+ applyOctaveSmoothing?: boolean;
805
+ octaveFraction?: number;
806
+ dbRef?: number;
807
+ dbAmin?: number;
808
+ },
809
+ ) => {
810
+ frequencies: Float32Array;
811
+ magnitude: Float32Array;
812
+ power: Float32Array;
813
+ db: Float32Array;
814
+ nFft: number;
815
+ sampleRate: number;
816
+ };
817
+
818
+ scaleQuantizeMidi: (
819
+ root: number,
820
+ modeMask: number,
821
+ midi: number,
822
+ referenceMidi: number,
823
+ ) => number;
824
+ scaleCorrectionSemitones: (
825
+ root: number,
826
+ modeMask: number,
827
+ midi: number,
828
+ referenceMidi: number,
829
+ ) => number;
830
+ scalePitchClassEnabled: (root: number, modeMask: number, pitchClass: number) => boolean;
588
831
 
589
832
  // Effects
590
833
  hpss: (
@@ -593,6 +836,41 @@ interface SonareModule {
593
836
  kernelHarmonic: number,
594
837
  kernelPercussive: number,
595
838
  ) => WasmHpssResult;
839
+ hpssWithResidual: (
840
+ samples: Float32Array,
841
+ sampleRate: number,
842
+ kernelHarmonic: number,
843
+ kernelPercussive: number,
844
+ ) => WasmHpssWithResidualResult;
845
+ decompose: (
846
+ s: Float32Array,
847
+ nFeatures: number,
848
+ nFrames: number,
849
+ nComponents: number,
850
+ nIter: number,
851
+ beta: number,
852
+ ) => WasmDecomposeResult;
853
+ nnFilter: (
854
+ s: Float32Array,
855
+ nFeatures: number,
856
+ nFrames: number,
857
+ aggregate: string,
858
+ k: number,
859
+ width: number,
860
+ ) => WasmMatrix2dResult;
861
+ remix: (
862
+ samples: Float32Array,
863
+ intervals: Int32Array,
864
+ sampleRate: number,
865
+ alignZeros: boolean,
866
+ ) => Float32Array;
867
+ phaseVocoder: (
868
+ samples: Float32Array,
869
+ sampleRate: number,
870
+ rate: number,
871
+ nFft: number,
872
+ hopLength: number,
873
+ ) => Float32Array;
596
874
  harmonic: (samples: Float32Array, sampleRate: number) => Float32Array;
597
875
  percussive: (samples: Float32Array, sampleRate: number) => Float32Array;
598
876
  timeStretch: (samples: Float32Array, sampleRate: number, rate: number) => Float32Array;
@@ -677,6 +955,56 @@ interface SonareModule {
677
955
  sampleRate: number,
678
956
  platforms: Array<{ name: string; targetLufs: number; ceilingDb: number }>,
679
957
  ) => string;
958
+ masteringRepairDeclick: (
959
+ samples: Float32Array,
960
+ sampleRate: number,
961
+ options: object,
962
+ ) => Float32Array;
963
+ masteringRepairDenoiseClassical: (
964
+ samples: Float32Array,
965
+ sampleRate: number,
966
+ options: object,
967
+ ) => Float32Array;
968
+ masteringRepairDeclip: (
969
+ samples: Float32Array,
970
+ sampleRate: number,
971
+ options: object,
972
+ ) => Float32Array;
973
+ masteringRepairDecrackle: (
974
+ samples: Float32Array,
975
+ sampleRate: number,
976
+ options: object,
977
+ ) => Float32Array;
978
+ masteringRepairDehum: (
979
+ samples: Float32Array,
980
+ sampleRate: number,
981
+ options: object,
982
+ ) => Float32Array;
983
+ masteringRepairDereverbClassical: (
984
+ samples: Float32Array,
985
+ sampleRate: number,
986
+ options: object,
987
+ ) => Float32Array;
988
+ masteringRepairTrimSilence: (
989
+ samples: Float32Array,
990
+ sampleRate: number,
991
+ options: object,
992
+ ) => Float32Array;
993
+ masteringDynamicsCompressor: (
994
+ samples: Float32Array,
995
+ sampleRate: number,
996
+ options: object,
997
+ ) => { samples: Float32Array; latencySamples: number };
998
+ masteringDynamicsGate: (
999
+ samples: Float32Array,
1000
+ sampleRate: number,
1001
+ options: object,
1002
+ ) => { samples: Float32Array; latencySamples: number };
1003
+ masteringDynamicsTransientShaper: (
1004
+ samples: Float32Array,
1005
+ sampleRate: number,
1006
+ options: object,
1007
+ ) => { samples: Float32Array; latencySamples: number };
680
1008
  masteringChain: (
681
1009
  samples: Float32Array,
682
1010
  sampleRate: number,
@@ -715,6 +1043,21 @@ interface SonareModule {
715
1043
  sampleRate: number,
716
1044
  overrides: Record<string, number | boolean> | null,
717
1045
  ) => WasmMasteringStereoChainResult;
1046
+ masterAudioWithProgress: (
1047
+ presetName: string,
1048
+ samples: Float32Array,
1049
+ sampleRate: number,
1050
+ overrides: Record<string, number | boolean> | null,
1051
+ progressCallback: ProgressCallback | null,
1052
+ ) => WasmMasteringChainResult;
1053
+ masterAudioStereoWithProgress: (
1054
+ presetName: string,
1055
+ left: Float32Array,
1056
+ right: Float32Array,
1057
+ sampleRate: number,
1058
+ overrides: Record<string, number | boolean> | null,
1059
+ progressCallback: ProgressCallback | null,
1060
+ ) => WasmMasteringStereoChainResult;
718
1061
  mixingScenePresetNames: () => string[];
719
1062
  mixingScenePresetJson: (presetName: string) => string;
720
1063
  mixStereo: (
@@ -763,7 +1106,6 @@ interface SonareModule {
763
1106
  nFrames: number,
764
1107
  sampleRate: number,
765
1108
  nFft: number,
766
- hopLength: number,
767
1109
  fmin: number,
768
1110
  fmax: number,
769
1111
  ) => WasmStftPowerResult;
@@ -774,9 +1116,9 @@ interface SonareModule {
774
1116
  sampleRate: number,
775
1117
  nFft: number,
776
1118
  hopLength: number,
777
- nIter: number,
778
1119
  fmin: number,
779
1120
  fmax: number,
1121
+ nIter: number,
780
1122
  ) => Float32Array;
781
1123
  mfccToMel: (
782
1124
  mfcc: Float32Array,
@@ -792,9 +1134,9 @@ interface SonareModule {
792
1134
  sampleRate: number,
793
1135
  nFft: number,
794
1136
  hopLength: number,
795
- nIter: number,
796
1137
  fmin: number,
797
1138
  fmax: number,
1139
+ nIter: number,
798
1140
  ) => Float32Array;
799
1141
 
800
1142
  // Features - Chroma
@@ -843,6 +1185,38 @@ interface SonareModule {
843
1185
  frameLength: number,
844
1186
  hopLength: number,
845
1187
  ) => Float32Array;
1188
+ spectralContrast: (
1189
+ samples: Float32Array,
1190
+ sampleRate: number,
1191
+ nFft: number,
1192
+ hopLength: number,
1193
+ nBands: number,
1194
+ fmin: number,
1195
+ quantile: number,
1196
+ ) => WasmMatrix2dResult;
1197
+ polyFeatures: (
1198
+ samples: Float32Array,
1199
+ sampleRate: number,
1200
+ nFft: number,
1201
+ hopLength: number,
1202
+ order: number,
1203
+ ) => WasmMatrix2dResult;
1204
+ zeroCrossings: (
1205
+ samples: Float32Array,
1206
+ threshold: number,
1207
+ refMagnitude: boolean,
1208
+ pad: boolean,
1209
+ zeroPos: boolean,
1210
+ ) => Int32Array;
1211
+ pitchTuning: (frequencies: Float32Array, resolution: number, binsPerOctave: number) => number;
1212
+ estimateTuning: (
1213
+ samples: Float32Array,
1214
+ sampleRate: number,
1215
+ nFft: number,
1216
+ hopLength: number,
1217
+ resolution: number,
1218
+ binsPerOctave: number,
1219
+ ) => number;
846
1220
 
847
1221
  // Features - Pitch
848
1222
  pitchYin: (
@@ -853,6 +1227,7 @@ interface SonareModule {
853
1227
  fmin: number,
854
1228
  fmax: number,
855
1229
  threshold: number,
1230
+ fillNa: boolean,
856
1231
  ) => WasmPitchResult;
857
1232
  pitchPyin: (
858
1233
  samples: Float32Array,
@@ -862,6 +1237,7 @@ interface SonareModule {
862
1237
  fmin: number,
863
1238
  fmax: number,
864
1239
  threshold: number,
1240
+ fillNa: boolean,
865
1241
  ) => WasmPitchResult;
866
1242
 
867
1243
  // Core - Conversion
@@ -993,6 +1369,8 @@ interface SonareModule {
993
1369
  lufs: (samples: Float32Array, sampleRate: number) => WasmLufsResult;
994
1370
  momentaryLufs: (samples: Float32Array, sampleRate: number) => Float32Array;
995
1371
  shortTermLufs: (samples: Float32Array, sampleRate: number) => Float32Array;
1372
+ lufsInterleaved: (samples: Float32Array, channels: number, sampleRate: number) => WasmLufsResult;
1373
+ ebur128LoudnessRange: (samples: Float32Array, sampleRate: number) => number;
996
1374
 
997
1375
  // Core - Resample
998
1376
  resample: (samples: Float32Array, srcSr: number, targetSr: number) => Float32Array;
@@ -1081,12 +1459,24 @@ interface SonareModule {
1081
1459
  // Streaming - StreamingEqualizer
1082
1460
  createEqualizer: (config: Record<string, unknown>) => WasmStreamingEqualizer;
1083
1461
 
1462
+ // Streaming - StreamingRetune
1463
+ createStreamingRetune: (config: Record<string, unknown>) => WasmStreamingRetune;
1464
+ createRealtimeVoiceChanger: (
1465
+ config: Record<string, unknown> | string,
1466
+ ) => WasmRealtimeVoiceChanger;
1467
+ realtimeVoiceChangerPresetNames: () => string[];
1468
+ realtimeVoiceChangerPresetJson: (id: string) => string;
1469
+ validateRealtimeVoiceChangerPresetJson: (json: string) => {
1470
+ ok: boolean;
1471
+ normalizedJson?: string;
1472
+ error?: string;
1473
+ };
1474
+
1084
1475
  // Mixing - scene-based Mixer
1085
1476
  createMixerFromSceneJson: (json: string, sampleRate: number, blockSize: number) => WasmMixer;
1086
- mixerPresetJson: (presetName: string) => string;
1087
1477
  }
1088
1478
 
1089
- interface WasmStreamingMasteringChain {
1479
+ export interface WasmStreamingMasteringChain {
1090
1480
  prepare: (sampleRate: number, maxBlockSize: number, numChannels: number) => void;
1091
1481
  processMono: (samples: Float32Array) => Float32Array;
1092
1482
  processStereo: (
@@ -1099,7 +1489,7 @@ interface WasmStreamingMasteringChain {
1099
1489
  delete: () => void;
1100
1490
  }
1101
1491
 
1102
- interface WasmEqSpectrumSnapshot {
1492
+ export interface WasmEqSpectrumSnapshot {
1103
1493
  preLeft: Float32Array;
1104
1494
  preRight: Float32Array;
1105
1495
  postLeft: Float32Array;
@@ -1110,7 +1500,7 @@ interface WasmEqSpectrumSnapshot {
1110
1500
  seq: number;
1111
1501
  }
1112
1502
 
1113
- interface WasmStreamingEqualizer {
1503
+ export interface WasmStreamingEqualizer {
1114
1504
  setBand: (index: number, band: Record<string, unknown>) => void;
1115
1505
  clear: () => void;
1116
1506
  setPhaseMode: (mode: number) => void;
@@ -1133,7 +1523,42 @@ interface WasmStreamingEqualizer {
1133
1523
  delete: () => void;
1134
1524
  }
1135
1525
 
1136
- interface WasmMixer {
1526
+ export interface WasmStreamingRetune {
1527
+ prepare: (sampleRate: number, maxBlockSize: number) => void;
1528
+ reset: () => void;
1529
+ setConfig: (config: Record<string, unknown>) => void;
1530
+ config: () => { semitones: number; mix: number; grainSize: number };
1531
+ grainSize: () => number;
1532
+ processMono: (samples: Float32Array) => Float32Array;
1533
+ delete: () => void;
1534
+ }
1535
+
1536
+ export interface WasmRealtimeVoiceChanger {
1537
+ prepare: (sampleRate: number, maxBlockSize: number, channels: number) => void;
1538
+ reset: () => void;
1539
+ setConfig: (config: Record<string, unknown> | string) => void;
1540
+ configJson: () => string;
1541
+ latencySamples: () => number;
1542
+ processMono: (samples: Float32Array) => Float32Array;
1543
+ processMonoInto: (samples: Float32Array, output: Float32Array) => void;
1544
+ processInterleaved: (samples: Float32Array, channels: number) => Float32Array;
1545
+ processInterleavedInto: (samples: Float32Array, channels: number, output: Float32Array) => void;
1546
+ // Zero-copy "prepared" path. The returned Float32Array is a typed_memory_view
1547
+ // backed by the WASM heap; it is only valid until the next call to a method
1548
+ // that may grow the underlying scratch buffer (i.e. another get*Buffer with a
1549
+ // larger length) or until delete().
1550
+ getMonoInputBuffer: (numSamples: number) => Float32Array;
1551
+ getMonoOutputBuffer: (numSamples: number) => Float32Array;
1552
+ processPreparedMono: (numSamples: number) => void;
1553
+ getInterleavedInputBuffer: (numFrames: number, numChannels: number) => Float32Array;
1554
+ getInterleavedOutputBuffer: (numFrames: number, numChannels: number) => Float32Array;
1555
+ processPreparedInterleaved: (numFrames: number, numChannels: number) => void;
1556
+ getPlanarChannelBuffer: (channel: number, numFrames: number) => Float32Array;
1557
+ processPreparedPlanar: (numFrames: number) => void;
1558
+ delete: () => void;
1559
+ }
1560
+
1561
+ export interface WasmMixer {
1137
1562
  compile: () => void;
1138
1563
  processStereo: (
1139
1564
  leftChannels: Float32Array[],
@@ -1160,6 +1585,11 @@ interface WasmMixer {
1160
1585
  curve: number,
1161
1586
  ) => void;
1162
1587
  stripById: (id: string) => number;
1588
+ setInputTrimDb: (stripIndex: number, db: number) => void;
1589
+ setFaderDb: (stripIndex: number, db: number) => void;
1590
+ setPan: (stripIndex: number, pan: number, panMode: number) => void;
1591
+ setWidth: (stripIndex: number, width: number) => void;
1592
+ setMuted: (stripIndex: number, muted: boolean) => void;
1163
1593
  setSoloed: (stripIndex: number, soloed: boolean) => void;
1164
1594
  setSoloSafe: (stripIndex: number, soloSafe: boolean) => void;
1165
1595
  setPolarityInvert: (stripIndex: number, invertLeft: boolean, invertRight: boolean) => void;
@@ -1213,20 +1643,20 @@ interface WasmMixer {
1213
1643
  delete: () => void;
1214
1644
  }
1215
1645
 
1216
- interface WasmGoniometerPoint {
1646
+ export interface WasmGoniometerPoint {
1217
1647
  left: number;
1218
1648
  right: number;
1219
1649
  }
1220
1650
 
1221
1651
  // Streaming types for StreamAnalyzer
1222
- interface WasmChordChange {
1652
+ export interface WasmChordChange {
1223
1653
  root: number;
1224
1654
  quality: number;
1225
1655
  startTime: number;
1226
1656
  confidence: number;
1227
1657
  }
1228
1658
 
1229
- interface WasmBarChord {
1659
+ export interface WasmBarChord {
1230
1660
  barIndex: number;
1231
1661
  root: number;
1232
1662
  quality: number;
@@ -1234,12 +1664,12 @@ interface WasmBarChord {
1234
1664
  confidence: number;
1235
1665
  }
1236
1666
 
1237
- interface WasmPatternScore {
1667
+ export interface WasmPatternScore {
1238
1668
  name: string;
1239
1669
  score: number;
1240
1670
  }
1241
1671
 
1242
- interface WasmProgressiveEstimate {
1672
+ export interface WasmProgressiveEstimate {
1243
1673
  bpm: number;
1244
1674
  bpmConfidence: number;
1245
1675
  bpmCandidateCount: number;
@@ -1264,14 +1694,14 @@ interface WasmProgressiveEstimate {
1264
1694
  updated: boolean;
1265
1695
  }
1266
1696
 
1267
- interface WasmAnalyzerStats {
1697
+ export interface WasmAnalyzerStats {
1268
1698
  totalFrames: number;
1269
1699
  totalSamples: number;
1270
1700
  durationSeconds: number;
1271
1701
  estimate: WasmProgressiveEstimate;
1272
1702
  }
1273
1703
 
1274
- interface WasmFrameBuffer {
1704
+ export interface WasmFrameBuffer {
1275
1705
  nFrames: number;
1276
1706
  timestamps: Float32Array;
1277
1707
  mel: Float32Array;
@@ -1285,7 +1715,7 @@ interface WasmFrameBuffer {
1285
1715
  chordConfidence: Float32Array;
1286
1716
  }
1287
1717
 
1288
- interface WasmStreamFramesU8 {
1718
+ export interface WasmStreamFramesU8 {
1289
1719
  nFrames: number;
1290
1720
  nMels: number;
1291
1721
  timestamps: Float32Array;
@@ -1297,7 +1727,7 @@ interface WasmStreamFramesU8 {
1297
1727
  spectralFlatness: Uint8Array;
1298
1728
  }
1299
1729
 
1300
- interface WasmStreamFramesI16 {
1730
+ export interface WasmStreamFramesI16 {
1301
1731
  nFrames: number;
1302
1732
  nMels: number;
1303
1733
  timestamps: Float32Array;
@@ -1309,7 +1739,7 @@ interface WasmStreamFramesI16 {
1309
1739
  spectralFlatness: Int16Array;
1310
1740
  }
1311
1741
 
1312
- interface WasmStreamAnalyzer {
1742
+ export interface WasmStreamAnalyzer {
1313
1743
  process: (samples: Float32Array) => void;
1314
1744
  processWithOffset: (samples: Float32Array, sampleOffset: number) => void;
1315
1745
  availableFrames: () => number;