@libraz/libsonare 1.0.4 → 1.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,1332 @@
1
+ /**
2
+ * Type declarations for the Emscripten-generated WASM module with embind
3
+ */
4
+
5
+ interface SonareModuleOptions {
6
+ locateFile?: (path: string, prefix: string) => string;
7
+ onRuntimeInitialized?: () => void;
8
+ print?: (text: string) => void;
9
+ printErr?: (text: string) => void;
10
+ }
11
+
12
+ // Result types
13
+ interface WasmKeyResult {
14
+ root: number;
15
+ mode: number;
16
+ confidence: number;
17
+ name: string;
18
+ shortName: string;
19
+ }
20
+
21
+ interface WasmKeyCandidateResult {
22
+ key: WasmKeyResult;
23
+ correlation: number;
24
+ }
25
+
26
+ interface WasmBeatResult {
27
+ time: number;
28
+ strength: number;
29
+ }
30
+
31
+ interface WasmChordResult {
32
+ root: number;
33
+ bass: number;
34
+ quality: number;
35
+ start: number;
36
+ end: number;
37
+ confidence: number;
38
+ name: string;
39
+ }
40
+
41
+ interface WasmSectionResult {
42
+ type: number;
43
+ start: number;
44
+ end: number;
45
+ energyLevel: number;
46
+ confidence: number;
47
+ name: string;
48
+ }
49
+
50
+ interface WasmTimbreResult {
51
+ brightness: number;
52
+ warmth: number;
53
+ density: number;
54
+ roughness: number;
55
+ complexity: number;
56
+ }
57
+
58
+ interface WasmDynamicsResult {
59
+ dynamicRangeDb: number;
60
+ loudnessRangeDb: number;
61
+ crestFactor: number;
62
+ isCompressed: boolean;
63
+ }
64
+
65
+ interface WasmRhythmResult {
66
+ syncopation: number;
67
+ grooveType: string;
68
+ patternRegularity: number;
69
+ }
70
+
71
+ interface WasmTimeSignatureResult {
72
+ numerator: number;
73
+ denominator: number;
74
+ confidence: number;
75
+ }
76
+
77
+ interface WasmAnalysisResult {
78
+ bpm: number;
79
+ bpmConfidence: number;
80
+ key: WasmKeyResult;
81
+ timeSignature: WasmTimeSignatureResult;
82
+ beats: WasmBeatResult[];
83
+ chords: WasmChordResult[];
84
+ sections: WasmSectionResult[];
85
+ timbre: WasmTimbreResult;
86
+ dynamics: WasmDynamicsResult;
87
+ rhythm: WasmRhythmResult;
88
+ form: string;
89
+ }
90
+
91
+ interface WasmChordAnalysisResult {
92
+ chords: WasmChordResult[];
93
+ }
94
+
95
+ interface WasmAcousticResult {
96
+ rt60: number;
97
+ edt: number;
98
+ c50: number;
99
+ c80: number;
100
+ d50: number;
101
+ rt60Bands: Float32Array;
102
+ edtBands: Float32Array;
103
+ c50Bands: Float32Array;
104
+ c80Bands: Float32Array;
105
+ confidence: number;
106
+ isBlind: boolean;
107
+ }
108
+
109
+ interface WasmHpssResult {
110
+ harmonic: Float32Array;
111
+ percussive: Float32Array;
112
+ sampleRate: number;
113
+ }
114
+
115
+ interface WasmStftResult {
116
+ nBins: number;
117
+ nFrames: number;
118
+ nFft: number;
119
+ hopLength: number;
120
+ sampleRate: number;
121
+ magnitude: Float32Array;
122
+ power: Float32Array;
123
+ }
124
+
125
+ interface WasmStftDbResult {
126
+ nBins: number;
127
+ nFrames: number;
128
+ db: Float32Array;
129
+ }
130
+
131
+ interface WasmMelResult {
132
+ nMels: number;
133
+ nFrames: number;
134
+ sampleRate: number;
135
+ hopLength: number;
136
+ power: Float32Array;
137
+ db: Float32Array;
138
+ }
139
+
140
+ interface WasmMfccResult {
141
+ nMfcc: number;
142
+ nFrames: number;
143
+ coefficients: Float32Array;
144
+ }
145
+
146
+ interface WasmStftPowerResult {
147
+ nBins: number;
148
+ nFrames: number;
149
+ power: Float32Array;
150
+ }
151
+
152
+ interface WasmMelPowerResult {
153
+ nMels: number;
154
+ nFrames: number;
155
+ power: Float32Array;
156
+ }
157
+
158
+ interface WasmChromaResult {
159
+ nChroma: number;
160
+ nFrames: number;
161
+ sampleRate: number;
162
+ hopLength: number;
163
+ features: Float32Array;
164
+ meanEnergy: number[];
165
+ }
166
+
167
+ interface WasmPitchResult {
168
+ f0: Float32Array;
169
+ voicedProb: Float32Array;
170
+ voicedFlag: boolean[];
171
+ nFrames: number;
172
+ medianF0: number;
173
+ meanF0: number;
174
+ }
175
+
176
+ interface WasmTrimResult {
177
+ audio: Float32Array;
178
+ startSample: number;
179
+ endSample: number;
180
+ }
181
+
182
+ interface WasmFrameResult {
183
+ nFrames: number;
184
+ frames: Float32Array;
185
+ }
186
+
187
+ interface WasmTempogramResult {
188
+ nFrames: number;
189
+ winLength: number;
190
+ data: Float32Array;
191
+ }
192
+
193
+ interface WasmCyclicTempogramResult {
194
+ nFrames: number;
195
+ nBins: number;
196
+ data: Float32Array;
197
+ }
198
+
199
+ interface WasmFourierTempogramResult {
200
+ nBins: number;
201
+ nFrames: number;
202
+ data: Float32Array;
203
+ }
204
+
205
+ interface WasmNnlsChromaResult {
206
+ nChroma: number;
207
+ nFrames: number;
208
+ data: Float32Array;
209
+ }
210
+
211
+ interface WasmMelodyPoint {
212
+ time: number;
213
+ frequency: number;
214
+ confidence: number;
215
+ }
216
+
217
+ interface WasmMelodyResult {
218
+ points: WasmMelodyPoint[];
219
+ pitchRangeOctaves: number;
220
+ pitchStability: number;
221
+ meanFrequency: number;
222
+ vibratoRate: number;
223
+ }
224
+
225
+ interface WasmCqtResult {
226
+ nBins: number;
227
+ nFrames: number;
228
+ hopLength: number;
229
+ sampleRate: number;
230
+ magnitude: Float32Array;
231
+ frequencies: Float32Array;
232
+ }
233
+
234
+ interface WasmLufsResult {
235
+ integratedLufs: number;
236
+ momentaryLufs: number;
237
+ shortTermLufs: number;
238
+ loudnessRange: number;
239
+ }
240
+
241
+ interface WasmMasteringResult {
242
+ samples: Float32Array;
243
+ sampleRate: number;
244
+ inputLufs: number;
245
+ outputLufs: number;
246
+ appliedGainDb: number;
247
+ latencySamples?: number;
248
+ }
249
+
250
+ interface WasmMasteringChainResult extends WasmMasteringResult {
251
+ stages: string[];
252
+ }
253
+
254
+ interface WasmMasteringStereoChainResult {
255
+ left: Float32Array;
256
+ right: Float32Array;
257
+ sampleRate: number;
258
+ inputLufs: number;
259
+ outputLufs: number;
260
+ appliedGainDb: number;
261
+ stages: string[];
262
+ }
263
+
264
+ interface WasmMasteringStereoResult {
265
+ left: Float32Array;
266
+ right: Float32Array;
267
+ sampleRate: number;
268
+ inputLufs: number;
269
+ outputLufs: number;
270
+ appliedGainDb: number;
271
+ latencySamples: number;
272
+ }
273
+
274
+ interface WasmMixMeterSnapshot {
275
+ peakDbL: number;
276
+ peakDbR: number;
277
+ rmsDbL: number;
278
+ rmsDbR: number;
279
+ correlation: number;
280
+ monoCompatWidth: number;
281
+ monoCompatPeak: number;
282
+ monoCompatSideRms: number;
283
+ likelyMonoCompatible: boolean;
284
+ momentaryLufs: number;
285
+ shortTermLufs: number;
286
+ integratedLufs: number;
287
+ gainReductionDb: number;
288
+ truePeakDbL: number;
289
+ truePeakDbR: number;
290
+ maxTruePeakDb: number;
291
+ seq: number;
292
+ }
293
+
294
+ interface WasmMixResult {
295
+ left: Float32Array;
296
+ right: Float32Array;
297
+ sampleRate: number;
298
+ meters: WasmMixMeterSnapshot[];
299
+ }
300
+
301
+ interface WasmEngineClip {
302
+ id?: number;
303
+ channels: Float32Array[];
304
+ startPpq: number;
305
+ lengthSamples?: number;
306
+ clipOffsetSamples?: number;
307
+ loop?: boolean;
308
+ gain?: number;
309
+ fadeInSamples?: number;
310
+ fadeOutSamples?: number;
311
+ }
312
+
313
+ interface WasmEngineParameterInfo {
314
+ id: number;
315
+ name: string;
316
+ unit: string;
317
+ minValue: number;
318
+ maxValue: number;
319
+ defaultValue: number;
320
+ rtSafe: boolean;
321
+ defaultCurve: number;
322
+ }
323
+
324
+ interface WasmEngineAutomationPoint {
325
+ ppq: number;
326
+ value: number;
327
+ curveToNext?: number;
328
+ }
329
+
330
+ interface WasmEngineMarker {
331
+ id: number;
332
+ ppq: number;
333
+ name?: string;
334
+ }
335
+
336
+ interface WasmEngineMetronomeConfig {
337
+ enabled: boolean;
338
+ beatGain?: number;
339
+ accentGain?: number;
340
+ clickSamples?: number;
341
+ }
342
+
343
+ interface WasmEngineGraphNode {
344
+ id: string;
345
+ type?: number;
346
+ gainDb?: number;
347
+ numPorts?: number;
348
+ }
349
+
350
+ interface WasmEngineGraphConnection {
351
+ sourceNode: string;
352
+ sourcePort: number;
353
+ destNode: string;
354
+ destPort: number;
355
+ mix?: number;
356
+ }
357
+
358
+ interface WasmEngineGraphParameterBinding {
359
+ paramId: number;
360
+ nodeId: string;
361
+ }
362
+
363
+ interface WasmEngineGraphSpec {
364
+ nodes: WasmEngineGraphNode[];
365
+ connections: WasmEngineGraphConnection[];
366
+ inputNode: string;
367
+ outputNode: string;
368
+ numChannels: number;
369
+ parameterBindings?: WasmEngineGraphParameterBinding[];
370
+ }
371
+
372
+ interface WasmEngineTelemetry {
373
+ type: number;
374
+ error: number;
375
+ renderFrame: number;
376
+ timelineSample: number;
377
+ audibleTimelineSample: number;
378
+ graphLatencySamplesQ8: number;
379
+ value: number;
380
+ }
381
+
382
+ interface WasmEngineMeterTelemetry {
383
+ targetId: number;
384
+ renderFrame: number;
385
+ seq: number;
386
+ peakDbL: number;
387
+ peakDbR: number;
388
+ rmsDbL: number;
389
+ rmsDbR: number;
390
+ truePeakDbL: number;
391
+ truePeakDbR: number;
392
+ maxTruePeakDb: number;
393
+ correlation: number;
394
+ monoCompatWidth: number;
395
+ momentaryLufs: number;
396
+ shortTermLufs: number;
397
+ integratedLufs: number;
398
+ gainReductionDb: number;
399
+ droppedRecords: number;
400
+ }
401
+
402
+ interface WasmEngineCaptureStatus {
403
+ capturedFrames: number;
404
+ overflowCount: number;
405
+ armed: boolean;
406
+ punchEnabled: boolean;
407
+ }
408
+
409
+ interface WasmEngineTransportState {
410
+ playing: boolean;
411
+ looping: boolean;
412
+ renderFrame: number;
413
+ samplePosition: number;
414
+ ppq: number;
415
+ bpm: number;
416
+ loopStartPpq: number;
417
+ loopEndPpq: number;
418
+ sampleRate: number;
419
+ }
420
+
421
+ interface WasmEngineBounceOptions {
422
+ totalFrames: number;
423
+ blockSize?: number;
424
+ numChannels?: number;
425
+ targetSampleRate?: number;
426
+ sourceSampleRate?: number;
427
+ normalizeLufs?: boolean;
428
+ targetLufs?: number;
429
+ dither?: 0 | 1 | 2 | 3;
430
+ ditherBits?: number;
431
+ ditherSeed?: number;
432
+ }
433
+
434
+ interface WasmEngineBounceResult {
435
+ interleaved: Float32Array;
436
+ frames: number;
437
+ numChannels: number;
438
+ sampleRate: number;
439
+ integratedLufs: number;
440
+ }
441
+
442
+ interface WasmEngineFreezeOptions {
443
+ totalFrames: number;
444
+ blockSize?: number;
445
+ numChannels?: number;
446
+ clipId?: number;
447
+ startPpq?: number;
448
+ gain?: number;
449
+ }
450
+
451
+ interface WasmEngineFreezeResult {
452
+ clipId: number;
453
+ frames: number;
454
+ numChannels: number;
455
+ }
456
+
457
+ interface WasmEngineProcessWithMonitorResult {
458
+ output: Float32Array[];
459
+ monitor: Float32Array[];
460
+ }
461
+
462
+ interface WasmRealtimeEngine {
463
+ prepare: (
464
+ sampleRate: number,
465
+ maxBlockSize: number,
466
+ commandCapacity: number,
467
+ telemetryCapacity: number,
468
+ ) => void;
469
+ setParameter: (paramId: number, value: number, renderFrame: number) => void;
470
+ setParameterSmoothed: (paramId: number, value: number, renderFrame: number) => void;
471
+ getTransportState: () => WasmEngineTransportState;
472
+ play: (renderFrame: number) => void;
473
+ stop: (renderFrame: number) => void;
474
+ seekSample: (timelineSample: number, renderFrame: number) => void;
475
+ seekPpq: (ppq: number, renderFrame: number) => void;
476
+ setTempo: (bpm: number) => void;
477
+ setTimeSignature: (numerator: number, denominator: number) => void;
478
+ setLoop: (startPpq: number, endPpq: number, enabled: boolean) => void;
479
+ addParameter: (info: WasmEngineParameterInfo) => void;
480
+ parameterCount: () => number;
481
+ parameterInfoByIndex: (index: number) => WasmEngineParameterInfo;
482
+ parameterInfo: (id: number) => WasmEngineParameterInfo;
483
+ setAutomationLane: (paramId: number, points: WasmEngineAutomationPoint[]) => void;
484
+ automationLaneCount: () => number;
485
+ setMarkers: (markers: WasmEngineMarker[]) => void;
486
+ markerCount: () => number;
487
+ markerByIndex: (index: number) => WasmEngineMarker;
488
+ marker: (id: number) => WasmEngineMarker;
489
+ seekMarker: (id: number, renderFrame: number) => void;
490
+ setLoopFromMarkers: (startMarkerId: number, endMarkerId: number) => void;
491
+ setMetronome: (config: WasmEngineMetronomeConfig) => void;
492
+ metronome: () => Required<WasmEngineMetronomeConfig>;
493
+ countInEndSample: (startSample: number, bars: number) => number;
494
+ setGraph: (spec: WasmEngineGraphSpec) => void;
495
+ graphNodeCount: () => number;
496
+ graphConnectionCount: () => number;
497
+ setClips: (clips: WasmEngineClip[]) => void;
498
+ clipCount: () => number;
499
+ setCaptureBuffer: (numChannels: number, capacityFrames: number) => void;
500
+ armCapture: (armed: boolean) => void;
501
+ setCapturePunch: (startSample: number, endSample: number, enabled: boolean) => void;
502
+ resetCapture: () => void;
503
+ captureStatus: () => WasmEngineCaptureStatus;
504
+ capturedAudio: () => Float32Array[];
505
+ process: (channels: Float32Array[]) => Float32Array[];
506
+ processWithMonitor: (channels: Float32Array[]) => WasmEngineProcessWithMonitorResult;
507
+ renderOffline: (channels: Float32Array[], blockSize: number) => Float32Array[];
508
+ bounceOffline: (options: WasmEngineBounceOptions) => WasmEngineBounceResult;
509
+ freezeOffline: (options: WasmEngineFreezeOptions) => WasmEngineFreezeResult;
510
+ drainTelemetry: (maxRecords: number) => WasmEngineTelemetry[];
511
+ drainMeterTelemetry: (maxRecords: number) => WasmEngineMeterTelemetry[];
512
+ delete: () => void;
513
+ }
514
+
515
+ type ProgressCallback = (progress: number, stage: string) => void;
516
+ type TempogramMode = 'autocorrelation' | 'auto' | 'ac' | 'cosine' | 0 | 1;
517
+
518
+ interface SonareModule {
519
+ // Quick API (high-level)
520
+ detectBpm: (samples: Float32Array, sampleRate: number) => number;
521
+ detectKey: (samples: Float32Array, sampleRate: number) => WasmKeyResult;
522
+ _detectKeyWithOptions: (
523
+ samples: Float32Array,
524
+ sampleRate: number,
525
+ nFft: number,
526
+ hopLength: number,
527
+ useHpss: boolean,
528
+ loudnessWeighted: boolean,
529
+ highPassHz: number,
530
+ modes: number[],
531
+ profileType: number,
532
+ genreHint: string,
533
+ ) => WasmKeyResult;
534
+ _detectKeyCandidates: (
535
+ samples: Float32Array,
536
+ sampleRate: number,
537
+ nFft: number,
538
+ hopLength: number,
539
+ useHpss: boolean,
540
+ loudnessWeighted: boolean,
541
+ highPassHz: number,
542
+ modes: number[],
543
+ profileType: number,
544
+ genreHint: string,
545
+ ) => WasmKeyCandidateResult[];
546
+ detectOnsets: (samples: Float32Array, sampleRate: number) => Float32Array;
547
+ detectBeats: (samples: Float32Array, sampleRate: number) => Float32Array;
548
+ detectDownbeats: (samples: Float32Array, sampleRate: number) => Float32Array;
549
+ detectChords: (
550
+ samples: Float32Array,
551
+ sampleRate: number,
552
+ minDuration: number,
553
+ smoothingWindow: number,
554
+ threshold: number,
555
+ useTriadsOnly: boolean,
556
+ nFft: number,
557
+ hopLength: number,
558
+ useBeatSync: boolean,
559
+ useHmm: boolean,
560
+ hmmBeamWidth: number,
561
+ useKeyContext: boolean,
562
+ keyRoot: number,
563
+ keyMode: number,
564
+ detectInversions: boolean,
565
+ chromaMethod: number,
566
+ ) => WasmChordAnalysisResult;
567
+ analyze: (samples: Float32Array, sampleRate: number) => WasmAnalysisResult;
568
+ analyzeImpulseResponse: (
569
+ samples: Float32Array,
570
+ sampleRate: number,
571
+ nOctaveBands: number,
572
+ ) => WasmAcousticResult;
573
+ detectAcoustic: (
574
+ samples: Float32Array,
575
+ sampleRate: number,
576
+ nOctaveBands: number,
577
+ nThirdOctaveSubbands: number,
578
+ minDecayDb: number,
579
+ noiseFloorMarginDb: number,
580
+ ) => WasmAcousticResult;
581
+ analyzeWithProgress: (
582
+ samples: Float32Array,
583
+ sampleRate: number,
584
+ progressCallback: ProgressCallback | null,
585
+ ) => WasmAnalysisResult;
586
+ version: () => string;
587
+ engineAbiVersion: () => number;
588
+
589
+ // Effects
590
+ hpss: (
591
+ samples: Float32Array,
592
+ sampleRate: number,
593
+ kernelHarmonic: number,
594
+ kernelPercussive: number,
595
+ ) => WasmHpssResult;
596
+ harmonic: (samples: Float32Array, sampleRate: number) => Float32Array;
597
+ percussive: (samples: Float32Array, sampleRate: number) => Float32Array;
598
+ timeStretch: (samples: Float32Array, sampleRate: number, rate: number) => Float32Array;
599
+ pitchShift: (samples: Float32Array, sampleRate: number, semitones: number) => Float32Array;
600
+ pitchCorrectToMidi: (
601
+ samples: Float32Array,
602
+ sampleRate: number,
603
+ currentMidi: number,
604
+ targetMidi: number,
605
+ ) => Float32Array;
606
+ noteStretch: (
607
+ samples: Float32Array,
608
+ sampleRate: number,
609
+ onsetSample: number,
610
+ offsetSample: number,
611
+ stretchRatio: number,
612
+ ) => Float32Array;
613
+ voiceChange: (
614
+ samples: Float32Array,
615
+ sampleRate: number,
616
+ pitchSemitones: number,
617
+ formantFactor: number,
618
+ ) => Float32Array;
619
+ normalize: (samples: Float32Array, sampleRate: number, targetDb: number) => Float32Array;
620
+ mastering: (
621
+ samples: Float32Array,
622
+ sampleRate: number,
623
+ targetLufs: number,
624
+ ceilingDb: number,
625
+ truePeakOversample: number,
626
+ ) => WasmMasteringResult;
627
+ masteringProcessorNames: () => string[];
628
+ masteringPairProcessorNames: () => string[];
629
+ masteringPairAnalysisNames: () => string[];
630
+ masteringStereoAnalysisNames: () => string[];
631
+ masteringProcess: (
632
+ processorName: string,
633
+ samples: Float32Array,
634
+ sampleRate: number,
635
+ params: Record<string, number | boolean>,
636
+ ) => WasmMasteringResult;
637
+ masteringProcessStereo: (
638
+ processorName: string,
639
+ left: Float32Array,
640
+ right: Float32Array,
641
+ sampleRate: number,
642
+ params: Record<string, number | boolean>,
643
+ ) => WasmMasteringStereoResult;
644
+ masteringPairProcess: (
645
+ processorName: string,
646
+ source: Float32Array,
647
+ reference: Float32Array,
648
+ sampleRate: number,
649
+ params: Record<string, number | boolean>,
650
+ ) => WasmMasteringResult;
651
+ masteringPairAnalyze: (
652
+ analysisName: string,
653
+ source: Float32Array,
654
+ reference: Float32Array,
655
+ sampleRate: number,
656
+ params: Record<string, number | boolean>,
657
+ ) => string;
658
+ masteringStereoAnalyze: (
659
+ analysisName: string,
660
+ left: Float32Array,
661
+ right: Float32Array,
662
+ sampleRate: number,
663
+ params: Record<string, number | boolean>,
664
+ ) => string;
665
+ masteringAssistantSuggest: (
666
+ samples: Float32Array,
667
+ sampleRate: number,
668
+ params: Record<string, number | boolean>,
669
+ ) => string;
670
+ masteringAudioProfile: (
671
+ samples: Float32Array,
672
+ sampleRate: number,
673
+ params: Record<string, number | boolean>,
674
+ ) => string;
675
+ masteringStreamingPreview: (
676
+ samples: Float32Array,
677
+ sampleRate: number,
678
+ platforms: Array<{ name: string; targetLufs: number; ceilingDb: number }>,
679
+ ) => string;
680
+ masteringChain: (
681
+ samples: Float32Array,
682
+ sampleRate: number,
683
+ config: Record<string, unknown>,
684
+ ) => WasmMasteringChainResult;
685
+ masteringChainStereo: (
686
+ left: Float32Array,
687
+ right: Float32Array,
688
+ sampleRate: number,
689
+ config: Record<string, unknown>,
690
+ ) => WasmMasteringStereoChainResult;
691
+ masteringChainWithProgress: (
692
+ samples: Float32Array,
693
+ sampleRate: number,
694
+ config: Record<string, unknown>,
695
+ progressCallback: ProgressCallback | null,
696
+ ) => WasmMasteringChainResult;
697
+ masteringChainStereoWithProgress: (
698
+ left: Float32Array,
699
+ right: Float32Array,
700
+ sampleRate: number,
701
+ config: Record<string, unknown>,
702
+ progressCallback: ProgressCallback | null,
703
+ ) => WasmMasteringStereoChainResult;
704
+ masteringPresetNames: () => string[];
705
+ masterAudio: (
706
+ presetName: string,
707
+ samples: Float32Array,
708
+ sampleRate: number,
709
+ overrides: Record<string, number | boolean> | null,
710
+ ) => WasmMasteringChainResult;
711
+ masterAudioStereo: (
712
+ presetName: string,
713
+ left: Float32Array,
714
+ right: Float32Array,
715
+ sampleRate: number,
716
+ overrides: Record<string, number | boolean> | null,
717
+ ) => WasmMasteringStereoChainResult;
718
+ mixingScenePresetNames: () => string[];
719
+ mixingScenePresetJson: (presetName: string) => string;
720
+ mixStereo: (
721
+ leftChannels: Float32Array[],
722
+ rightChannels: Float32Array[],
723
+ sampleRate: number,
724
+ options: Record<string, unknown>,
725
+ ) => WasmMixResult;
726
+ trim: (samples: Float32Array, sampleRate: number, thresholdDb: number) => Float32Array;
727
+
728
+ // Features - Spectrogram
729
+ stft: (
730
+ samples: Float32Array,
731
+ sampleRate: number,
732
+ nFft: number,
733
+ hopLength: number,
734
+ ) => WasmStftResult;
735
+ stftDb: (
736
+ samples: Float32Array,
737
+ sampleRate: number,
738
+ nFft: number,
739
+ hopLength: number,
740
+ ) => WasmStftDbResult;
741
+
742
+ // Features - Mel Spectrogram
743
+ melSpectrogram: (
744
+ samples: Float32Array,
745
+ sampleRate: number,
746
+ nFft: number,
747
+ hopLength: number,
748
+ nMels: number,
749
+ ) => WasmMelResult;
750
+ mfcc: (
751
+ samples: Float32Array,
752
+ sampleRate: number,
753
+ nFft: number,
754
+ hopLength: number,
755
+ nMels: number,
756
+ nMfcc: number,
757
+ ) => WasmMfccResult;
758
+
759
+ // Features - Inverse reconstruction
760
+ melToStft: (
761
+ melPower: Float32Array,
762
+ nMels: number,
763
+ nFrames: number,
764
+ sampleRate: number,
765
+ nFft: number,
766
+ hopLength: number,
767
+ fmin: number,
768
+ fmax: number,
769
+ ) => WasmStftPowerResult;
770
+ melToAudio: (
771
+ melPower: Float32Array,
772
+ nMels: number,
773
+ nFrames: number,
774
+ sampleRate: number,
775
+ nFft: number,
776
+ hopLength: number,
777
+ nIter: number,
778
+ fmin: number,
779
+ fmax: number,
780
+ ) => Float32Array;
781
+ mfccToMel: (
782
+ mfcc: Float32Array,
783
+ nMfcc: number,
784
+ nFrames: number,
785
+ nMels: number,
786
+ ) => WasmMelPowerResult;
787
+ mfccToAudio: (
788
+ mfcc: Float32Array,
789
+ nMfcc: number,
790
+ nFrames: number,
791
+ nMels: number,
792
+ sampleRate: number,
793
+ nFft: number,
794
+ hopLength: number,
795
+ nIter: number,
796
+ fmin: number,
797
+ fmax: number,
798
+ ) => Float32Array;
799
+
800
+ // Features - Chroma
801
+ chroma: (
802
+ samples: Float32Array,
803
+ sampleRate: number,
804
+ nFft: number,
805
+ hopLength: number,
806
+ ) => WasmChromaResult;
807
+
808
+ // Features - Spectral
809
+ spectralCentroid: (
810
+ samples: Float32Array,
811
+ sampleRate: number,
812
+ nFft: number,
813
+ hopLength: number,
814
+ ) => Float32Array;
815
+ spectralBandwidth: (
816
+ samples: Float32Array,
817
+ sampleRate: number,
818
+ nFft: number,
819
+ hopLength: number,
820
+ ) => Float32Array;
821
+ spectralRolloff: (
822
+ samples: Float32Array,
823
+ sampleRate: number,
824
+ nFft: number,
825
+ hopLength: number,
826
+ rollPercent: number,
827
+ ) => Float32Array;
828
+ spectralFlatness: (
829
+ samples: Float32Array,
830
+ sampleRate: number,
831
+ nFft: number,
832
+ hopLength: number,
833
+ ) => Float32Array;
834
+ zeroCrossingRate: (
835
+ samples: Float32Array,
836
+ sampleRate: number,
837
+ frameLength: number,
838
+ hopLength: number,
839
+ ) => Float32Array;
840
+ rmsEnergy: (
841
+ samples: Float32Array,
842
+ sampleRate: number,
843
+ frameLength: number,
844
+ hopLength: number,
845
+ ) => Float32Array;
846
+
847
+ // Features - Pitch
848
+ pitchYin: (
849
+ samples: Float32Array,
850
+ sampleRate: number,
851
+ frameLength: number,
852
+ hopLength: number,
853
+ fmin: number,
854
+ fmax: number,
855
+ threshold: number,
856
+ ) => WasmPitchResult;
857
+ pitchPyin: (
858
+ samples: Float32Array,
859
+ sampleRate: number,
860
+ frameLength: number,
861
+ hopLength: number,
862
+ fmin: number,
863
+ fmax: number,
864
+ threshold: number,
865
+ ) => WasmPitchResult;
866
+
867
+ // Core - Conversion
868
+ hzToMel: (hz: number) => number;
869
+ melToHz: (mel: number) => number;
870
+ hzToMidi: (hz: number) => number;
871
+ midiToHz: (midi: number) => number;
872
+ hzToNote: (hz: number) => string;
873
+ noteToHz: (note: string) => number;
874
+ framesToTime: (frames: number, sr: number, hopLength: number) => number;
875
+ timeToFrames: (time: number, sr: number, hopLength: number) => number;
876
+ framesToSamples: (frames: number, hopLength: number, nFft: number) => number;
877
+ samplesToFrames: (samples: number, hopLength: number, nFft: number) => number;
878
+ powerToDb: (values: Float32Array, ref: number, amin: number, topDb: number) => Float32Array;
879
+ amplitudeToDb: (values: Float32Array, ref: number, amin: number, topDb: number) => Float32Array;
880
+ dbToPower: (values: Float32Array, ref: number) => Float32Array;
881
+ dbToAmplitude: (values: Float32Array, ref: number) => Float32Array;
882
+ preemphasis: (samples: Float32Array, coef: number, zi?: number | null) => Float32Array;
883
+ deemphasis: (samples: Float32Array, coef: number, zi?: number | null) => Float32Array;
884
+ trimSilence: (
885
+ samples: Float32Array,
886
+ topDb: number,
887
+ frameLength: number,
888
+ hopLength: number,
889
+ ) => WasmTrimResult;
890
+ splitSilence: (
891
+ samples: Float32Array,
892
+ topDb: number,
893
+ frameLength: number,
894
+ hopLength: number,
895
+ ) => Int32Array;
896
+ frameSignal: (samples: Float32Array, frameLength: number, hopLength: number) => WasmFrameResult;
897
+ padCenter: (values: Float32Array, size: number, padValue: number) => Float32Array;
898
+ fixLength: (values: Float32Array, size: number, padValue: number) => Float32Array;
899
+ fixFrames: (frames: Int32Array, xMin: number, xMax: number, pad: boolean) => Int32Array;
900
+ peakPick: (
901
+ values: Float32Array,
902
+ preMax: number,
903
+ postMax: number,
904
+ preAvg: number,
905
+ postAvg: number,
906
+ delta: number,
907
+ wait: number,
908
+ ) => Int32Array;
909
+ vectorNormalize: (values: Float32Array, normType: number, threshold: number) => Float32Array;
910
+ pcen: (
911
+ values: Float32Array,
912
+ nBins: number,
913
+ nFrames: number,
914
+ options?: Record<string, number> | null,
915
+ ) => Float32Array;
916
+ tonnetz: (chromagram: Float32Array, nChroma: number, nFrames: number) => Float32Array;
917
+ tempogram: (
918
+ onsetEnvelope: Float32Array,
919
+ sampleRate: number,
920
+ hopLength: number,
921
+ winLength: number,
922
+ mode: TempogramMode,
923
+ ) => WasmTempogramResult;
924
+ cyclicTempogram: (
925
+ onsetEnvelope: Float32Array,
926
+ sampleRate: number,
927
+ hopLength: number,
928
+ winLength: number,
929
+ bpmMin: number,
930
+ nBins: number,
931
+ ) => WasmCyclicTempogramResult;
932
+ plp: (
933
+ onsetEnvelope: Float32Array,
934
+ sampleRate: number,
935
+ hopLength: number,
936
+ tempoMin: number,
937
+ tempoMax: number,
938
+ winLength: number,
939
+ ) => Float32Array;
940
+ nnlsChroma: (samples: Float32Array, sampleRate: number) => WasmNnlsChromaResult;
941
+ cqt: (
942
+ samples: Float32Array,
943
+ sampleRate: number,
944
+ hopLength: number,
945
+ fmin: number,
946
+ nBins: number,
947
+ binsPerOctave: number,
948
+ ) => WasmCqtResult;
949
+ vqt: (
950
+ samples: Float32Array,
951
+ sampleRate: number,
952
+ hopLength: number,
953
+ fmin: number,
954
+ nBins: number,
955
+ binsPerOctave: number,
956
+ gamma: number,
957
+ ) => WasmCqtResult;
958
+ analyzeSections: (
959
+ samples: Float32Array,
960
+ sampleRate: number,
961
+ nFft: number,
962
+ hopLength: number,
963
+ minSectionSec: number,
964
+ ) => WasmSectionResult[];
965
+ analyzeMelody: (
966
+ samples: Float32Array,
967
+ sampleRate: number,
968
+ fmin: number,
969
+ fmax: number,
970
+ frameLength: number,
971
+ hopLength: number,
972
+ threshold: number,
973
+ ) => WasmMelodyResult;
974
+ onsetEnvelope: (
975
+ samples: Float32Array,
976
+ sampleRate: number,
977
+ nFft: number,
978
+ hopLength: number,
979
+ nMels: number,
980
+ ) => Float32Array;
981
+ fourierTempogram: (
982
+ onsetEnvelope: Float32Array,
983
+ sampleRate: number,
984
+ hopLength: number,
985
+ winLength: number,
986
+ ) => WasmFourierTempogramResult;
987
+ tempogramRatio: (
988
+ tempogramData: Float32Array,
989
+ winLength: number,
990
+ sampleRate: number,
991
+ hopLength: number,
992
+ ) => Float32Array;
993
+ lufs: (samples: Float32Array, sampleRate: number) => WasmLufsResult;
994
+ momentaryLufs: (samples: Float32Array, sampleRate: number) => Float32Array;
995
+ shortTermLufs: (samples: Float32Array, sampleRate: number) => Float32Array;
996
+
997
+ // Core - Resample
998
+ resample: (samples: Float32Array, srcSr: number, targetSr: number) => Float32Array;
999
+
1000
+ // Embind-exposed enums
1001
+ PitchClass: {
1002
+ C: { value: 0 };
1003
+ Cs: { value: 1 };
1004
+ D: { value: 2 };
1005
+ Ds: { value: 3 };
1006
+ E: { value: 4 };
1007
+ F: { value: 5 };
1008
+ Fs: { value: 6 };
1009
+ G: { value: 7 };
1010
+ Gs: { value: 8 };
1011
+ A: { value: 9 };
1012
+ As: { value: 10 };
1013
+ B: { value: 11 };
1014
+ };
1015
+ Mode: {
1016
+ Major: { value: 0 };
1017
+ Minor: { value: 1 };
1018
+ };
1019
+ ChordQuality: {
1020
+ Major: { value: 0 };
1021
+ Minor: { value: 1 };
1022
+ Diminished: { value: 2 };
1023
+ Augmented: { value: 3 };
1024
+ Dominant7: { value: 4 };
1025
+ Major7: { value: 5 };
1026
+ Minor7: { value: 6 };
1027
+ Sus2: { value: 7 };
1028
+ Sus4: { value: 8 };
1029
+ Unknown: { value: 9 };
1030
+ Add9: { value: 10 };
1031
+ MinorAdd9: { value: 11 };
1032
+ Dim7: { value: 12 };
1033
+ HalfDim7: { value: 13 };
1034
+ Major9: { value: 14 };
1035
+ Dominant9: { value: 15 };
1036
+ Sus2Add4: { value: 16 };
1037
+ };
1038
+ SectionType: {
1039
+ Intro: { value: 0 };
1040
+ Verse: { value: 1 };
1041
+ PreChorus: { value: 2 };
1042
+ Chorus: { value: 3 };
1043
+ Bridge: { value: 4 };
1044
+ Instrumental: { value: 5 };
1045
+ Outro: { value: 6 };
1046
+ Unknown: { value: 7 };
1047
+ };
1048
+
1049
+ // Streaming - StreamAnalyzer
1050
+ StreamAnalyzer: new (
1051
+ sampleRate: number,
1052
+ nFft: number,
1053
+ hopLength: number,
1054
+ nMels: number,
1055
+ fmin: number,
1056
+ fmax: number,
1057
+ tuningRefHz: number,
1058
+ computeMagnitude: boolean,
1059
+ computeMel: boolean,
1060
+ computeChroma: boolean,
1061
+ computeOnset: boolean,
1062
+ computeSpectral: boolean,
1063
+ emitEveryNFrames: number,
1064
+ magnitudeDownsample: number,
1065
+ keyUpdateIntervalSec: number,
1066
+ bpmUpdateIntervalSec: number,
1067
+ window: number,
1068
+ outputFormat: number,
1069
+ ) => WasmStreamAnalyzer;
1070
+
1071
+ RealtimeEngine: new (
1072
+ sampleRate: number,
1073
+ maxBlockSize: number,
1074
+ commandCapacity: number,
1075
+ telemetryCapacity: number,
1076
+ ) => WasmRealtimeEngine;
1077
+
1078
+ // Streaming - StreamingMasteringChain
1079
+ createStreamingMasteringChain: (config: Record<string, unknown>) => WasmStreamingMasteringChain;
1080
+
1081
+ // Streaming - StreamingEqualizer
1082
+ createEqualizer: (config: Record<string, unknown>) => WasmStreamingEqualizer;
1083
+
1084
+ // Mixing - scene-based Mixer
1085
+ createMixerFromSceneJson: (json: string, sampleRate: number, blockSize: number) => WasmMixer;
1086
+ mixerPresetJson: (presetName: string) => string;
1087
+ }
1088
+
1089
+ interface WasmStreamingMasteringChain {
1090
+ prepare: (sampleRate: number, maxBlockSize: number, numChannels: number) => void;
1091
+ processMono: (samples: Float32Array) => Float32Array;
1092
+ processStereo: (
1093
+ left: Float32Array,
1094
+ right: Float32Array,
1095
+ ) => { left: Float32Array; right: Float32Array };
1096
+ reset: () => void;
1097
+ latencySamples: () => number;
1098
+ stageNames: () => string[];
1099
+ delete: () => void;
1100
+ }
1101
+
1102
+ interface WasmEqSpectrumSnapshot {
1103
+ preLeft: Float32Array;
1104
+ preRight: Float32Array;
1105
+ postLeft: Float32Array;
1106
+ postRight: Float32Array;
1107
+ bandGainDb: Float32Array;
1108
+ profileDb: Float32Array;
1109
+ lastAutoGainDb: number;
1110
+ seq: number;
1111
+ }
1112
+
1113
+ interface WasmStreamingEqualizer {
1114
+ setBand: (index: number, band: Record<string, unknown>) => void;
1115
+ clear: () => void;
1116
+ setPhaseMode: (mode: number) => void;
1117
+ setAutoGain: (enabled: boolean) => void;
1118
+ setGainScale: (scale: number) => void;
1119
+ setOutputGainDb: (gainDb: number) => void;
1120
+ setOutputPan: (pan: number) => void;
1121
+ setSidechainMono: (samples: Float32Array) => void;
1122
+ setSidechainStereo: (left: Float32Array, right: Float32Array) => void;
1123
+ clearSidechain: () => void;
1124
+ lastAutoGainDb: () => number;
1125
+ latencySamples: () => number;
1126
+ processMono: (samples: Float32Array) => Float32Array;
1127
+ processStereo: (
1128
+ left: Float32Array,
1129
+ right: Float32Array,
1130
+ ) => { left: Float32Array; right: Float32Array };
1131
+ spectrum: () => WasmEqSpectrumSnapshot;
1132
+ match: (source: Float32Array, reference: Float32Array, options: Record<string, unknown>) => void;
1133
+ delete: () => void;
1134
+ }
1135
+
1136
+ interface WasmMixer {
1137
+ compile: () => void;
1138
+ processStereo: (
1139
+ leftChannels: Float32Array[],
1140
+ rightChannels: Float32Array[],
1141
+ ) => { left: Float32Array; right: Float32Array; sampleRate: number };
1142
+ processStereoInto: (
1143
+ leftChannels: Float32Array[],
1144
+ rightChannels: Float32Array[],
1145
+ outLeft: Float32Array,
1146
+ outRight: Float32Array,
1147
+ ) => void;
1148
+ inputLeftView: (index: number) => Float32Array;
1149
+ inputRightView: (index: number) => Float32Array;
1150
+ outputLeftView: () => Float32Array;
1151
+ outputRightView: () => Float32Array;
1152
+ processPreparedStereo: (numSamples: number) => void;
1153
+ stripCount: () => number;
1154
+ scheduleInsertAutomation: (
1155
+ stripIndex: number,
1156
+ insertIndex: number,
1157
+ paramId: number,
1158
+ samplePos: number,
1159
+ value: number,
1160
+ curve: number,
1161
+ ) => void;
1162
+ stripById: (id: string) => number;
1163
+ setSoloed: (stripIndex: number, soloed: boolean) => void;
1164
+ setSoloSafe: (stripIndex: number, soloSafe: boolean) => void;
1165
+ setPolarityInvert: (stripIndex: number, invertLeft: boolean, invertRight: boolean) => void;
1166
+ setPanLaw: (stripIndex: number, panLaw: number) => void;
1167
+ setChannelDelaySamples: (stripIndex: number, delaySamples: number) => void;
1168
+ setVcaOffsetDb: (stripIndex: number, offsetDb: number) => void;
1169
+ setDualPan: (stripIndex: number, leftPan: number, rightPan: number) => void;
1170
+ addSend: (
1171
+ stripIndex: number,
1172
+ id: string,
1173
+ destinationBusId: string,
1174
+ sendDb: number,
1175
+ timing: number,
1176
+ ) => number;
1177
+ setSendDb: (stripIndex: number, sendIndex: number, sendDb: number) => void;
1178
+ meterTap: (stripIndex: number, tap: number) => WasmMixMeterSnapshot;
1179
+ stripMeter: (stripIndex: number, tap: number) => WasmMixMeterSnapshot;
1180
+ scheduleFaderAutomation: (
1181
+ stripIndex: number,
1182
+ samplePos: number,
1183
+ faderDb: number,
1184
+ curve: number,
1185
+ ) => void;
1186
+ schedulePanAutomation: (
1187
+ stripIndex: number,
1188
+ samplePos: number,
1189
+ pan: number,
1190
+ curve: number,
1191
+ ) => void;
1192
+ scheduleWidthAutomation: (
1193
+ stripIndex: number,
1194
+ samplePos: number,
1195
+ width: number,
1196
+ curve: number,
1197
+ ) => void;
1198
+ scheduleSendAutomation: (
1199
+ stripIndex: number,
1200
+ sendIndex: number,
1201
+ samplePos: number,
1202
+ db: number,
1203
+ curve: number,
1204
+ ) => void;
1205
+ readGoniometerLatest: (stripIndex: number, maxPoints: number) => WasmGoniometerPoint[];
1206
+ addBus: (id: string, role: string) => void;
1207
+ removeBus: (id: string) => void;
1208
+ busCount: () => number;
1209
+ addVcaGroup: (id: string, gainDb: number, members: string[]) => void;
1210
+ removeVcaGroup: (id: string) => void;
1211
+ vcaGroupCount: () => number;
1212
+ toSceneJson: () => string;
1213
+ delete: () => void;
1214
+ }
1215
+
1216
+ interface WasmGoniometerPoint {
1217
+ left: number;
1218
+ right: number;
1219
+ }
1220
+
1221
+ // Streaming types for StreamAnalyzer
1222
+ interface WasmChordChange {
1223
+ root: number;
1224
+ quality: number;
1225
+ startTime: number;
1226
+ confidence: number;
1227
+ }
1228
+
1229
+ interface WasmBarChord {
1230
+ barIndex: number;
1231
+ root: number;
1232
+ quality: number;
1233
+ startTime: number;
1234
+ confidence: number;
1235
+ }
1236
+
1237
+ interface WasmPatternScore {
1238
+ name: string;
1239
+ score: number;
1240
+ }
1241
+
1242
+ interface WasmProgressiveEstimate {
1243
+ bpm: number;
1244
+ bpmConfidence: number;
1245
+ bpmCandidateCount: number;
1246
+ key: number;
1247
+ keyMinor: boolean;
1248
+ keyConfidence: number;
1249
+ chordRoot: number;
1250
+ chordQuality: number;
1251
+ chordConfidence: number;
1252
+ chordStartTime: number;
1253
+ chordProgression: WasmChordChange[];
1254
+ barChordProgression: WasmBarChord[];
1255
+ currentBar: number;
1256
+ barDuration: number;
1257
+ votedPattern: WasmBarChord[];
1258
+ patternLength: number;
1259
+ detectedPatternName: string;
1260
+ detectedPatternScore: number;
1261
+ allPatternScores: WasmPatternScore[];
1262
+ accumulatedSeconds: number;
1263
+ usedFrames: number;
1264
+ updated: boolean;
1265
+ }
1266
+
1267
+ interface WasmAnalyzerStats {
1268
+ totalFrames: number;
1269
+ totalSamples: number;
1270
+ durationSeconds: number;
1271
+ estimate: WasmProgressiveEstimate;
1272
+ }
1273
+
1274
+ interface WasmFrameBuffer {
1275
+ nFrames: number;
1276
+ timestamps: Float32Array;
1277
+ mel: Float32Array;
1278
+ chroma: Float32Array;
1279
+ onsetStrength: Float32Array;
1280
+ rmsEnergy: Float32Array;
1281
+ spectralCentroid: Float32Array;
1282
+ spectralFlatness: Float32Array;
1283
+ chordRoot: Int32Array;
1284
+ chordQuality: Int32Array;
1285
+ chordConfidence: Float32Array;
1286
+ }
1287
+
1288
+ interface WasmStreamFramesU8 {
1289
+ nFrames: number;
1290
+ nMels: number;
1291
+ timestamps: Float32Array;
1292
+ mel: Uint8Array;
1293
+ chroma: Uint8Array;
1294
+ onsetStrength: Uint8Array;
1295
+ rmsEnergy: Uint8Array;
1296
+ spectralCentroid: Uint8Array;
1297
+ spectralFlatness: Uint8Array;
1298
+ }
1299
+
1300
+ interface WasmStreamFramesI16 {
1301
+ nFrames: number;
1302
+ nMels: number;
1303
+ timestamps: Float32Array;
1304
+ mel: Int16Array;
1305
+ chroma: Int16Array;
1306
+ onsetStrength: Int16Array;
1307
+ rmsEnergy: Int16Array;
1308
+ spectralCentroid: Int16Array;
1309
+ spectralFlatness: Int16Array;
1310
+ }
1311
+
1312
+ interface WasmStreamAnalyzer {
1313
+ process: (samples: Float32Array) => void;
1314
+ processWithOffset: (samples: Float32Array, sampleOffset: number) => void;
1315
+ availableFrames: () => number;
1316
+ readFramesSoa: (maxFrames: number) => WasmFrameBuffer;
1317
+ readFramesU8: (maxFrames: number) => WasmStreamFramesU8;
1318
+ readFramesI16: (maxFrames: number) => WasmStreamFramesI16;
1319
+ reset: (baseSampleOffset?: number) => void;
1320
+ stats: () => WasmAnalyzerStats;
1321
+ frameCount: () => number;
1322
+ currentTime: () => number;
1323
+ sampleRate: () => number;
1324
+ setExpectedDuration: (durationSeconds: number) => void;
1325
+ setNormalizationGain: (gain: number) => void;
1326
+ setTuningRefHz: (refHz: number) => void;
1327
+ delete: () => void;
1328
+ }
1329
+
1330
+ declare function createModule(options?: SonareModuleOptions): Promise<SonareModule>;
1331
+
1332
+ export default createModule;