@libraz/libsonare 1.0.3 → 1.1.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,624 @@
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 WasmBeatResult {
22
+ time: number;
23
+ strength: number;
24
+ }
25
+
26
+ interface WasmChordResult {
27
+ root: number;
28
+ quality: number;
29
+ start: number;
30
+ end: number;
31
+ confidence: number;
32
+ name: string;
33
+ }
34
+
35
+ interface WasmSectionResult {
36
+ type: number;
37
+ start: number;
38
+ end: number;
39
+ energyLevel: number;
40
+ confidence: number;
41
+ name: string;
42
+ }
43
+
44
+ interface WasmTimbreResult {
45
+ brightness: number;
46
+ warmth: number;
47
+ density: number;
48
+ roughness: number;
49
+ complexity: number;
50
+ }
51
+
52
+ interface WasmDynamicsResult {
53
+ dynamicRangeDb: number;
54
+ loudnessRangeDb: number;
55
+ crestFactor: number;
56
+ isCompressed: boolean;
57
+ }
58
+
59
+ interface WasmRhythmResult {
60
+ syncopation: number;
61
+ grooveType: string;
62
+ patternRegularity: number;
63
+ }
64
+
65
+ interface WasmTimeSignatureResult {
66
+ numerator: number;
67
+ denominator: number;
68
+ confidence: number;
69
+ }
70
+
71
+ interface WasmAnalysisResult {
72
+ bpm: number;
73
+ bpmConfidence: number;
74
+ key: WasmKeyResult;
75
+ timeSignature: WasmTimeSignatureResult;
76
+ beats: WasmBeatResult[];
77
+ chords: WasmChordResult[];
78
+ sections: WasmSectionResult[];
79
+ timbre: WasmTimbreResult;
80
+ dynamics: WasmDynamicsResult;
81
+ rhythm: WasmRhythmResult;
82
+ form: string;
83
+ }
84
+
85
+ interface WasmHpssResult {
86
+ harmonic: Float32Array;
87
+ percussive: Float32Array;
88
+ sampleRate: number;
89
+ }
90
+
91
+ interface WasmStftResult {
92
+ nBins: number;
93
+ nFrames: number;
94
+ nFft: number;
95
+ hopLength: number;
96
+ sampleRate: number;
97
+ magnitude: Float32Array;
98
+ power: Float32Array;
99
+ }
100
+
101
+ interface WasmStftDbResult {
102
+ nBins: number;
103
+ nFrames: number;
104
+ db: Float32Array;
105
+ }
106
+
107
+ interface WasmMelResult {
108
+ nMels: number;
109
+ nFrames: number;
110
+ sampleRate: number;
111
+ hopLength: number;
112
+ power: Float32Array;
113
+ db: Float32Array;
114
+ }
115
+
116
+ interface WasmMfccResult {
117
+ nMfcc: number;
118
+ nFrames: number;
119
+ coefficients: Float32Array;
120
+ }
121
+
122
+ interface WasmChromaResult {
123
+ nChroma: number;
124
+ nFrames: number;
125
+ sampleRate: number;
126
+ hopLength: number;
127
+ features: Float32Array;
128
+ meanEnergy: number[];
129
+ }
130
+
131
+ interface WasmPitchResult {
132
+ f0: Float32Array;
133
+ voicedProb: Float32Array;
134
+ voicedFlag: boolean[];
135
+ nFrames: number;
136
+ medianF0: number;
137
+ meanF0: number;
138
+ }
139
+
140
+ interface WasmTrimResult {
141
+ audio: Float32Array;
142
+ startSample: number;
143
+ endSample: number;
144
+ }
145
+
146
+ interface WasmFrameResult {
147
+ nFrames: number;
148
+ frames: Float32Array;
149
+ }
150
+
151
+ interface WasmTempogramResult {
152
+ nFrames: number;
153
+ winLength: number;
154
+ data: Float32Array;
155
+ }
156
+
157
+ interface WasmMasteringResult {
158
+ samples: Float32Array;
159
+ sampleRate: number;
160
+ inputLufs: number;
161
+ outputLufs: number;
162
+ appliedGainDb: number;
163
+ latencySamples?: number;
164
+ }
165
+
166
+ interface WasmMasteringChainResult extends WasmMasteringResult {
167
+ stages: string[];
168
+ }
169
+
170
+ interface WasmMasteringStereoChainResult {
171
+ left: Float32Array;
172
+ right: Float32Array;
173
+ sampleRate: number;
174
+ inputLufs: number;
175
+ outputLufs: number;
176
+ appliedGainDb: number;
177
+ stages: string[];
178
+ }
179
+
180
+ interface WasmMasteringStereoResult {
181
+ left: Float32Array;
182
+ right: Float32Array;
183
+ sampleRate: number;
184
+ inputLufs: number;
185
+ outputLufs: number;
186
+ appliedGainDb: number;
187
+ latencySamples: number;
188
+ }
189
+
190
+ type ProgressCallback = (progress: number, stage: string) => void;
191
+
192
+ interface SonareModule {
193
+ // Quick API (high-level)
194
+ detectBpm: (samples: Float32Array, sampleRate: number) => number;
195
+ detectKey: (samples: Float32Array, sampleRate: number) => WasmKeyResult;
196
+ detectOnsets: (samples: Float32Array, sampleRate: number) => Float32Array;
197
+ detectBeats: (samples: Float32Array, sampleRate: number) => Float32Array;
198
+ analyze: (samples: Float32Array, sampleRate: number) => WasmAnalysisResult;
199
+ analyzeWithProgress: (
200
+ samples: Float32Array,
201
+ sampleRate: number,
202
+ progressCallback: ProgressCallback | null,
203
+ ) => WasmAnalysisResult;
204
+ version: () => string;
205
+
206
+ // Effects
207
+ hpss: (
208
+ samples: Float32Array,
209
+ sampleRate: number,
210
+ kernelHarmonic: number,
211
+ kernelPercussive: number,
212
+ ) => WasmHpssResult;
213
+ harmonic: (samples: Float32Array, sampleRate: number) => Float32Array;
214
+ percussive: (samples: Float32Array, sampleRate: number) => Float32Array;
215
+ timeStretch: (samples: Float32Array, sampleRate: number, rate: number) => Float32Array;
216
+ pitchShift: (samples: Float32Array, sampleRate: number, semitones: number) => Float32Array;
217
+ normalize: (samples: Float32Array, sampleRate: number, targetDb: number) => Float32Array;
218
+ mastering: (
219
+ samples: Float32Array,
220
+ sampleRate: number,
221
+ targetLufs: number,
222
+ ceilingDb: number,
223
+ truePeakOversample: number,
224
+ ) => WasmMasteringResult;
225
+ masteringProcessorNames: () => string[];
226
+ masteringPairProcessorNames: () => string[];
227
+ masteringPairAnalysisNames: () => string[];
228
+ masteringStereoAnalysisNames: () => string[];
229
+ masteringProcess: (
230
+ processorName: string,
231
+ samples: Float32Array,
232
+ sampleRate: number,
233
+ params: Record<string, number | boolean>,
234
+ ) => WasmMasteringResult;
235
+ masteringProcessStereo: (
236
+ processorName: string,
237
+ left: Float32Array,
238
+ right: Float32Array,
239
+ sampleRate: number,
240
+ params: Record<string, number | boolean>,
241
+ ) => WasmMasteringStereoResult;
242
+ masteringPairProcess: (
243
+ processorName: string,
244
+ source: Float32Array,
245
+ reference: Float32Array,
246
+ sampleRate: number,
247
+ params: Record<string, number | boolean>,
248
+ ) => WasmMasteringResult;
249
+ masteringPairAnalyze: (
250
+ analysisName: string,
251
+ source: Float32Array,
252
+ reference: Float32Array,
253
+ sampleRate: number,
254
+ params: Record<string, number | boolean>,
255
+ ) => string;
256
+ masteringStereoAnalyze: (
257
+ analysisName: string,
258
+ left: Float32Array,
259
+ right: Float32Array,
260
+ sampleRate: number,
261
+ params: Record<string, number | boolean>,
262
+ ) => string;
263
+ masteringChain: (
264
+ samples: Float32Array,
265
+ sampleRate: number,
266
+ config: Record<string, unknown>,
267
+ ) => WasmMasteringChainResult;
268
+ masteringChainStereo: (
269
+ left: Float32Array,
270
+ right: Float32Array,
271
+ sampleRate: number,
272
+ config: Record<string, unknown>,
273
+ ) => WasmMasteringStereoChainResult;
274
+ masteringChainWithProgress: (
275
+ samples: Float32Array,
276
+ sampleRate: number,
277
+ config: Record<string, unknown>,
278
+ progressCallback: ProgressCallback | null,
279
+ ) => WasmMasteringChainResult;
280
+ masteringChainStereoWithProgress: (
281
+ left: Float32Array,
282
+ right: Float32Array,
283
+ sampleRate: number,
284
+ config: Record<string, unknown>,
285
+ progressCallback: ProgressCallback | null,
286
+ ) => WasmMasteringStereoChainResult;
287
+ masteringPresetNames: () => string[];
288
+ masterAudio: (
289
+ presetName: string,
290
+ samples: Float32Array,
291
+ sampleRate: number,
292
+ overrides: Record<string, number | boolean> | null,
293
+ ) => WasmMasteringChainResult;
294
+ masterAudioStereo: (
295
+ presetName: string,
296
+ left: Float32Array,
297
+ right: Float32Array,
298
+ sampleRate: number,
299
+ overrides: Record<string, number | boolean> | null,
300
+ ) => WasmMasteringStereoChainResult;
301
+ trim: (samples: Float32Array, sampleRate: number, thresholdDb: number) => Float32Array;
302
+
303
+ // Features - Spectrogram
304
+ stft: (
305
+ samples: Float32Array,
306
+ sampleRate: number,
307
+ nFft: number,
308
+ hopLength: number,
309
+ ) => WasmStftResult;
310
+ stftDb: (
311
+ samples: Float32Array,
312
+ sampleRate: number,
313
+ nFft: number,
314
+ hopLength: number,
315
+ ) => WasmStftDbResult;
316
+
317
+ // Features - Mel Spectrogram
318
+ melSpectrogram: (
319
+ samples: Float32Array,
320
+ sampleRate: number,
321
+ nFft: number,
322
+ hopLength: number,
323
+ nMels: number,
324
+ ) => WasmMelResult;
325
+ mfcc: (
326
+ samples: Float32Array,
327
+ sampleRate: number,
328
+ nFft: number,
329
+ hopLength: number,
330
+ nMels: number,
331
+ nMfcc: number,
332
+ ) => WasmMfccResult;
333
+
334
+ // Features - Chroma
335
+ chroma: (
336
+ samples: Float32Array,
337
+ sampleRate: number,
338
+ nFft: number,
339
+ hopLength: number,
340
+ ) => WasmChromaResult;
341
+
342
+ // Features - Spectral
343
+ spectralCentroid: (
344
+ samples: Float32Array,
345
+ sampleRate: number,
346
+ nFft: number,
347
+ hopLength: number,
348
+ ) => Float32Array;
349
+ spectralBandwidth: (
350
+ samples: Float32Array,
351
+ sampleRate: number,
352
+ nFft: number,
353
+ hopLength: number,
354
+ ) => Float32Array;
355
+ spectralRolloff: (
356
+ samples: Float32Array,
357
+ sampleRate: number,
358
+ nFft: number,
359
+ hopLength: number,
360
+ rollPercent: number,
361
+ ) => Float32Array;
362
+ spectralFlatness: (
363
+ samples: Float32Array,
364
+ sampleRate: number,
365
+ nFft: number,
366
+ hopLength: number,
367
+ ) => Float32Array;
368
+ zeroCrossingRate: (
369
+ samples: Float32Array,
370
+ sampleRate: number,
371
+ frameLength: number,
372
+ hopLength: number,
373
+ ) => Float32Array;
374
+ rmsEnergy: (
375
+ samples: Float32Array,
376
+ sampleRate: number,
377
+ frameLength: number,
378
+ hopLength: number,
379
+ ) => Float32Array;
380
+
381
+ // Features - Pitch
382
+ pitchYin: (
383
+ samples: Float32Array,
384
+ sampleRate: number,
385
+ frameLength: number,
386
+ hopLength: number,
387
+ fmin: number,
388
+ fmax: number,
389
+ threshold: number,
390
+ ) => WasmPitchResult;
391
+ pitchPyin: (
392
+ samples: Float32Array,
393
+ sampleRate: number,
394
+ frameLength: number,
395
+ hopLength: number,
396
+ fmin: number,
397
+ fmax: number,
398
+ threshold: number,
399
+ ) => WasmPitchResult;
400
+
401
+ // Core - Conversion
402
+ hzToMel: (hz: number) => number;
403
+ melToHz: (mel: number) => number;
404
+ hzToMidi: (hz: number) => number;
405
+ midiToHz: (midi: number) => number;
406
+ hzToNote: (hz: number) => string;
407
+ noteToHz: (note: string) => number;
408
+ framesToTime: (frames: number, sr: number, hopLength: number) => number;
409
+ timeToFrames: (time: number, sr: number, hopLength: number) => number;
410
+ framesToSamples: (frames: number, hopLength: number, nFft: number) => number;
411
+ samplesToFrames: (samples: number, hopLength: number, nFft: number) => number;
412
+ powerToDb: (values: Float32Array, ref: number, amin: number, topDb: number) => Float32Array;
413
+ amplitudeToDb: (values: Float32Array, ref: number, amin: number, topDb: number) => Float32Array;
414
+ dbToPower: (values: Float32Array, ref: number) => Float32Array;
415
+ dbToAmplitude: (values: Float32Array, ref: number) => Float32Array;
416
+ preemphasis: (samples: Float32Array, coef: number, zi?: number | null) => Float32Array;
417
+ deemphasis: (samples: Float32Array, coef: number, zi?: number | null) => Float32Array;
418
+ trimSilence: (
419
+ samples: Float32Array,
420
+ topDb: number,
421
+ frameLength: number,
422
+ hopLength: number,
423
+ ) => WasmTrimResult;
424
+ splitSilence: (
425
+ samples: Float32Array,
426
+ topDb: number,
427
+ frameLength: number,
428
+ hopLength: number,
429
+ ) => Int32Array;
430
+ frameSignal: (samples: Float32Array, frameLength: number, hopLength: number) => WasmFrameResult;
431
+ padCenter: (values: Float32Array, size: number, padValue: number) => Float32Array;
432
+ fixLength: (values: Float32Array, size: number, padValue: number) => Float32Array;
433
+ fixFrames: (frames: Int32Array, xMin: number, xMax: number, pad: boolean) => Int32Array;
434
+ peakPick: (
435
+ values: Float32Array,
436
+ preMax: number,
437
+ postMax: number,
438
+ preAvg: number,
439
+ postAvg: number,
440
+ delta: number,
441
+ wait: number,
442
+ ) => Int32Array;
443
+ vectorNormalize: (values: Float32Array, normType: number, threshold: number) => Float32Array;
444
+ pcen: (
445
+ values: Float32Array,
446
+ nBins: number,
447
+ nFrames: number,
448
+ options?: Record<string, number> | null,
449
+ ) => Float32Array;
450
+ tonnetz: (chromagram: Float32Array, nChroma: number, nFrames: number) => Float32Array;
451
+ tempogram: (
452
+ onsetEnvelope: Float32Array,
453
+ sampleRate: number,
454
+ hopLength: number,
455
+ winLength: number,
456
+ ) => WasmTempogramResult;
457
+ plp: (
458
+ onsetEnvelope: Float32Array,
459
+ sampleRate: number,
460
+ hopLength: number,
461
+ tempoMin: number,
462
+ tempoMax: number,
463
+ winLength: number,
464
+ ) => Float32Array;
465
+
466
+ // Core - Resample
467
+ resample: (samples: Float32Array, srcSr: number, targetSr: number) => Float32Array;
468
+
469
+ // Embind-exposed enums
470
+ PitchClass: {
471
+ C: { value: 0 };
472
+ Cs: { value: 1 };
473
+ D: { value: 2 };
474
+ Ds: { value: 3 };
475
+ E: { value: 4 };
476
+ F: { value: 5 };
477
+ Fs: { value: 6 };
478
+ G: { value: 7 };
479
+ Gs: { value: 8 };
480
+ A: { value: 9 };
481
+ As: { value: 10 };
482
+ B: { value: 11 };
483
+ };
484
+ Mode: {
485
+ Major: { value: 0 };
486
+ Minor: { value: 1 };
487
+ };
488
+ ChordQuality: {
489
+ Major: { value: 0 };
490
+ Minor: { value: 1 };
491
+ Diminished: { value: 2 };
492
+ Augmented: { value: 3 };
493
+ Dominant7: { value: 4 };
494
+ Major7: { value: 5 };
495
+ Minor7: { value: 6 };
496
+ Sus2: { value: 7 };
497
+ Sus4: { value: 8 };
498
+ };
499
+ SectionType: {
500
+ Intro: { value: 0 };
501
+ Verse: { value: 1 };
502
+ PreChorus: { value: 2 };
503
+ Chorus: { value: 3 };
504
+ Bridge: { value: 4 };
505
+ Instrumental: { value: 5 };
506
+ Outro: { value: 6 };
507
+ };
508
+
509
+ // Streaming - StreamAnalyzer
510
+ StreamAnalyzer: new (
511
+ sampleRate: number,
512
+ nFft: number,
513
+ hopLength: number,
514
+ nMels: number,
515
+ computeMel: boolean,
516
+ computeChroma: boolean,
517
+ computeOnset: boolean,
518
+ emitEveryNFrames: number,
519
+ ) => WasmStreamAnalyzer;
520
+
521
+ // Streaming - StreamingMasteringChain
522
+ createStreamingMasteringChain: (config: Record<string, unknown>) => WasmStreamingMasteringChain;
523
+ }
524
+
525
+ interface WasmStreamingMasteringChain {
526
+ prepare: (sampleRate: number, maxBlockSize: number, numChannels: number) => void;
527
+ processMono: (samples: Float32Array) => Float32Array;
528
+ processStereo: (
529
+ left: Float32Array,
530
+ right: Float32Array,
531
+ ) => { left: Float32Array; right: Float32Array };
532
+ reset: () => void;
533
+ latencySamples: () => number;
534
+ stageNames: () => string[];
535
+ delete: () => void;
536
+ }
537
+
538
+ // Streaming types for StreamAnalyzer
539
+ interface WasmChordChange {
540
+ root: number;
541
+ quality: number;
542
+ startTime: number;
543
+ confidence: number;
544
+ }
545
+
546
+ interface WasmBarChord {
547
+ barIndex: number;
548
+ root: number;
549
+ quality: number;
550
+ startTime: number;
551
+ confidence: number;
552
+ }
553
+
554
+ interface WasmPatternScore {
555
+ name: string;
556
+ score: number;
557
+ }
558
+
559
+ interface WasmProgressiveEstimate {
560
+ bpm: number;
561
+ bpmConfidence: number;
562
+ bpmCandidateCount: number;
563
+ key: number;
564
+ keyMinor: boolean;
565
+ keyConfidence: number;
566
+ chordRoot: number;
567
+ chordQuality: number;
568
+ chordConfidence: number;
569
+ chordProgression: WasmChordChange[];
570
+ barChordProgression: WasmBarChord[];
571
+ currentBar: number;
572
+ barDuration: number;
573
+ votedPattern: WasmBarChord[];
574
+ patternLength: number;
575
+ detectedPatternName: string;
576
+ detectedPatternScore: number;
577
+ allPatternScores: WasmPatternScore[];
578
+ accumulatedSeconds: number;
579
+ usedFrames: number;
580
+ updated: boolean;
581
+ }
582
+
583
+ interface WasmAnalyzerStats {
584
+ totalFrames: number;
585
+ totalSamples: number;
586
+ durationSeconds: number;
587
+ estimate: WasmProgressiveEstimate;
588
+ }
589
+
590
+ interface WasmFrameBuffer {
591
+ nFrames: number;
592
+ timestamps: Float32Array;
593
+ mel: Float32Array;
594
+ chroma: Float32Array;
595
+ onsetStrength: Float32Array;
596
+ rmsEnergy: Float32Array;
597
+ spectralCentroid: Float32Array;
598
+ spectralFlatness: Float32Array;
599
+ chordRoot: Int32Array;
600
+ chordQuality: Int32Array;
601
+ chordConfidence: Float32Array;
602
+ }
603
+
604
+ interface WasmStreamAnalyzer {
605
+ process: (samples: Float32Array) => void;
606
+ processWithOffset: (samples: Float32Array, sampleOffset: number) => void;
607
+ availableFrames: () => number;
608
+ readFramesSoa: (maxFrames: number) => WasmFrameBuffer;
609
+ readFramesU8: (maxFrames: number) => unknown;
610
+ readFramesI16: (maxFrames: number) => unknown;
611
+ reset: (baseSampleOffset?: number) => void;
612
+ stats: () => WasmAnalyzerStats;
613
+ frameCount: () => number;
614
+ currentTime: () => number;
615
+ sampleRate: () => number;
616
+ setExpectedDuration: (durationSeconds: number) => void;
617
+ setNormalizationGain: (gain: number) => void;
618
+ setTuningRefHz: (refHz: number) => void;
619
+ delete: () => void;
620
+ }
621
+
622
+ declare function createModule(options?: SonareModuleOptions): Promise<SonareModule>;
623
+
624
+ export default createModule;
@@ -0,0 +1,98 @@
1
+ import type { ChordQuality, PitchClass } from './public_types';
2
+
3
+ /**
4
+ * A detected chord change in the progression
5
+ */
6
+ export interface ChordChange {
7
+ root: PitchClass;
8
+ quality: ChordQuality;
9
+ startTime: number;
10
+ confidence: number;
11
+ }
12
+
13
+ /**
14
+ * A chord detected at bar boundary (beat-synchronized)
15
+ */
16
+ export interface BarChord {
17
+ barIndex: number;
18
+ root: PitchClass;
19
+ quality: ChordQuality;
20
+ startTime: number;
21
+ confidence: number;
22
+ }
23
+
24
+ /**
25
+ * Pattern score for known chord progressions
26
+ */
27
+ export interface PatternScore {
28
+ name: string;
29
+ score: number;
30
+ }
31
+
32
+ /**
33
+ * Progressive estimation results for BPM, Key, and Chord
34
+ */
35
+ export interface ProgressiveEstimate {
36
+ bpm: number;
37
+ bpmConfidence: number;
38
+ bpmCandidateCount: number;
39
+ key: PitchClass;
40
+ keyMinor: boolean;
41
+ keyConfidence: number;
42
+ chordRoot: PitchClass;
43
+ chordQuality: ChordQuality;
44
+ chordConfidence: number;
45
+ chordProgression: ChordChange[];
46
+ barChordProgression: BarChord[];
47
+ currentBar: number;
48
+ barDuration: number;
49
+ votedPattern: BarChord[];
50
+ patternLength: number;
51
+ detectedPatternName: string;
52
+ detectedPatternScore: number;
53
+ allPatternScores: PatternScore[];
54
+ accumulatedSeconds: number;
55
+ usedFrames: number;
56
+ updated: boolean;
57
+ }
58
+
59
+ /**
60
+ * Statistics and current state of the analyzer
61
+ */
62
+ export interface AnalyzerStats {
63
+ totalFrames: number;
64
+ totalSamples: number;
65
+ durationSeconds: number;
66
+ estimate: ProgressiveEstimate;
67
+ }
68
+
69
+ /**
70
+ * Frame buffer with analysis results
71
+ */
72
+ export interface FrameBuffer {
73
+ nFrames: number;
74
+ timestamps: Float32Array;
75
+ mel: Float32Array;
76
+ chroma: Float32Array;
77
+ onsetStrength: Float32Array;
78
+ rmsEnergy: Float32Array;
79
+ spectralCentroid: Float32Array;
80
+ spectralFlatness: Float32Array;
81
+ chordRoot: Int32Array;
82
+ chordQuality: Int32Array;
83
+ chordConfidence: Float32Array;
84
+ }
85
+
86
+ /**
87
+ * Configuration for StreamAnalyzer
88
+ */
89
+ export interface StreamConfig {
90
+ sampleRate: number;
91
+ nFft?: number;
92
+ hopLength?: number;
93
+ nMels?: number;
94
+ computeMel?: boolean;
95
+ computeChroma?: boolean;
96
+ computeOnset?: boolean;
97
+ emitEveryNFrames?: number;
98
+ }