@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.
- package/README.md +299 -2
- package/dist/index.d.ts +1649 -202
- package/dist/index.js +2101 -994
- package/dist/index.js.map +1 -1
- package/dist/sonare-rt-module.js +2 -0
- package/dist/sonare-rt.js +2 -0
- package/dist/sonare-rt.wasm +0 -0
- package/dist/sonare.js +1 -1
- package/dist/sonare.wasm +0 -0
- package/dist/worklet.d.ts +447 -0
- package/dist/worklet.js +2078 -0
- package/dist/worklet.js.map +1 -0
- package/package.json +24 -27
- package/src/index.ts +3670 -0
- package/src/public_types.ts +852 -0
- package/src/sonare-rt.d.ts +93 -0
- package/src/sonare.js.d.ts +1332 -0
- package/src/stream_types.ts +133 -0
- package/src/wasm_types.ts +1248 -0
- package/src/worklet.ts +2140 -0
- package/README.npm.md +0 -114
- package/dist/index.d.ts.map +0 -1
|
@@ -0,0 +1,852 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pitch class enum (C=0, C#=1, ..., B=11)
|
|
3
|
+
*/
|
|
4
|
+
export const PitchClass = {
|
|
5
|
+
C: 0,
|
|
6
|
+
Cs: 1,
|
|
7
|
+
D: 2,
|
|
8
|
+
Ds: 3,
|
|
9
|
+
E: 4,
|
|
10
|
+
F: 5,
|
|
11
|
+
Fs: 6,
|
|
12
|
+
G: 7,
|
|
13
|
+
Gs: 8,
|
|
14
|
+
A: 9,
|
|
15
|
+
As: 10,
|
|
16
|
+
B: 11,
|
|
17
|
+
} as const;
|
|
18
|
+
|
|
19
|
+
export type PitchClass = (typeof PitchClass)[keyof typeof PitchClass];
|
|
20
|
+
|
|
21
|
+
/**
|
|
22
|
+
* Musical mode
|
|
23
|
+
*/
|
|
24
|
+
export const Mode = {
|
|
25
|
+
Major: 0,
|
|
26
|
+
Minor: 1,
|
|
27
|
+
Dorian: 2,
|
|
28
|
+
Phrygian: 3,
|
|
29
|
+
Lydian: 4,
|
|
30
|
+
Mixolydian: 5,
|
|
31
|
+
Locrian: 6,
|
|
32
|
+
} as const;
|
|
33
|
+
|
|
34
|
+
export type Mode = (typeof Mode)[keyof typeof Mode];
|
|
35
|
+
|
|
36
|
+
export type TempogramMode = 'autocorrelation' | 'auto' | 'ac' | 'cosine' | 0 | 1;
|
|
37
|
+
|
|
38
|
+
export const KeyProfile = {
|
|
39
|
+
KrumhanslSchmuckler: 0,
|
|
40
|
+
Temperley: 1,
|
|
41
|
+
Shaath: 2,
|
|
42
|
+
FaraldoEDMT: 3,
|
|
43
|
+
FaraldoEDMA: 4,
|
|
44
|
+
FaraldoEDMM: 5,
|
|
45
|
+
BellmanBudge: 6,
|
|
46
|
+
} as const;
|
|
47
|
+
|
|
48
|
+
export type KeyProfile = (typeof KeyProfile)[keyof typeof KeyProfile];
|
|
49
|
+
|
|
50
|
+
export type KeyProfileName =
|
|
51
|
+
| 'ks'
|
|
52
|
+
| 'krumhansl'
|
|
53
|
+
| 'temperley'
|
|
54
|
+
| 'shaath'
|
|
55
|
+
| 'keyfinder'
|
|
56
|
+
| 'faraldo-edmt'
|
|
57
|
+
| 'edmt'
|
|
58
|
+
| 'faraldo-edma'
|
|
59
|
+
| 'edma'
|
|
60
|
+
| 'faraldo-edmm'
|
|
61
|
+
| 'edmm'
|
|
62
|
+
| 'bellman-budge'
|
|
63
|
+
| 'bellman';
|
|
64
|
+
|
|
65
|
+
/**
|
|
66
|
+
* Chord quality
|
|
67
|
+
*/
|
|
68
|
+
export const ChordQuality = {
|
|
69
|
+
Major: 0,
|
|
70
|
+
Minor: 1,
|
|
71
|
+
Diminished: 2,
|
|
72
|
+
Augmented: 3,
|
|
73
|
+
Dominant7: 4,
|
|
74
|
+
Major7: 5,
|
|
75
|
+
Minor7: 6,
|
|
76
|
+
Sus2: 7,
|
|
77
|
+
Sus4: 8,
|
|
78
|
+
Unknown: 9,
|
|
79
|
+
Add9: 10,
|
|
80
|
+
MinorAdd9: 11,
|
|
81
|
+
Dim7: 12,
|
|
82
|
+
HalfDim7: 13,
|
|
83
|
+
Major9: 14,
|
|
84
|
+
Dominant9: 15,
|
|
85
|
+
Sus2Add4: 16,
|
|
86
|
+
} as const;
|
|
87
|
+
|
|
88
|
+
export type ChordQuality = (typeof ChordQuality)[keyof typeof ChordQuality];
|
|
89
|
+
|
|
90
|
+
export type MasteringPreset =
|
|
91
|
+
| 'pop'
|
|
92
|
+
| 'edm'
|
|
93
|
+
| 'acoustic'
|
|
94
|
+
| 'hipHop'
|
|
95
|
+
| 'aiMusic'
|
|
96
|
+
| 'speech'
|
|
97
|
+
| 'streaming'
|
|
98
|
+
| 'youtube'
|
|
99
|
+
| 'broadcast'
|
|
100
|
+
| 'podcast'
|
|
101
|
+
| 'audiobook'
|
|
102
|
+
| 'cinema'
|
|
103
|
+
| 'jpop'
|
|
104
|
+
| 'ambient'
|
|
105
|
+
| 'lofi'
|
|
106
|
+
| 'classical'
|
|
107
|
+
| 'drumAndBass'
|
|
108
|
+
| 'techno'
|
|
109
|
+
| 'metal'
|
|
110
|
+
| 'trap'
|
|
111
|
+
| 'rnb'
|
|
112
|
+
| 'jazz'
|
|
113
|
+
| 'kpop'
|
|
114
|
+
| 'trance'
|
|
115
|
+
| 'gameOst';
|
|
116
|
+
|
|
117
|
+
export interface StreamingPlatform {
|
|
118
|
+
name: string;
|
|
119
|
+
targetLufs: number;
|
|
120
|
+
ceilingDb: number;
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
export type SoloProcessor =
|
|
124
|
+
| 'dynamics.brickwallLimiter'
|
|
125
|
+
| 'dynamics.compressor'
|
|
126
|
+
| 'dynamics.deesser'
|
|
127
|
+
| 'dynamics.expander'
|
|
128
|
+
| 'dynamics.gate'
|
|
129
|
+
| 'dynamics.limiter'
|
|
130
|
+
| 'dynamics.parallelComp'
|
|
131
|
+
| 'dynamics.sidechainRouter'
|
|
132
|
+
| 'dynamics.duckingProcessor'
|
|
133
|
+
| 'dynamics.transientShaper'
|
|
134
|
+
| 'dynamics.upwardCompressor'
|
|
135
|
+
| 'dynamics.upwardExpander'
|
|
136
|
+
| 'dynamics.vocalRider'
|
|
137
|
+
| 'eq.apiStyle'
|
|
138
|
+
| 'eq.bandPass'
|
|
139
|
+
| 'eq.cutFilter'
|
|
140
|
+
| 'eq.dynamic'
|
|
141
|
+
| 'eq.equalizer'
|
|
142
|
+
| 'eq.graphic'
|
|
143
|
+
| 'eq.linearPhase'
|
|
144
|
+
| 'eq.midSide'
|
|
145
|
+
| 'eq.minimumPhase'
|
|
146
|
+
| 'eq.parametric'
|
|
147
|
+
| 'eq.pultec'
|
|
148
|
+
| 'eq.shelving'
|
|
149
|
+
| 'eq.tilt'
|
|
150
|
+
| 'final.bitDepth'
|
|
151
|
+
| 'final.dither'
|
|
152
|
+
| 'final.outputChain'
|
|
153
|
+
| 'maximizer.adaptiveRelease'
|
|
154
|
+
| 'maximizer.loudnessOptimize'
|
|
155
|
+
| 'maximizer.maximizer'
|
|
156
|
+
| 'maximizer.softKneeMax'
|
|
157
|
+
| 'maximizer.truePeakLimiter'
|
|
158
|
+
| 'multiband.compressor'
|
|
159
|
+
| 'multiband.dynamicEq'
|
|
160
|
+
| 'multiband.expander'
|
|
161
|
+
| 'multiband.imager'
|
|
162
|
+
| 'multiband.limiter'
|
|
163
|
+
| 'multiband.saturation'
|
|
164
|
+
| 'repair.declick'
|
|
165
|
+
| 'repair.declip'
|
|
166
|
+
| 'repair.decrackle'
|
|
167
|
+
| 'repair.dehum'
|
|
168
|
+
| 'repair.denoiseClassical'
|
|
169
|
+
| 'repair.dereverbClassical'
|
|
170
|
+
| 'repair.trimSilence'
|
|
171
|
+
| 'saturation.bitcrusher'
|
|
172
|
+
| 'saturation.exciter'
|
|
173
|
+
| 'saturation.hardClipper'
|
|
174
|
+
| 'saturation.multibandExciter'
|
|
175
|
+
| 'saturation.softClipper'
|
|
176
|
+
| 'saturation.tape'
|
|
177
|
+
| 'saturation.transformer'
|
|
178
|
+
| 'saturation.tube'
|
|
179
|
+
| 'saturation.waveshaper'
|
|
180
|
+
| 'spectral.airBand'
|
|
181
|
+
| 'spectral.lowEndFocus'
|
|
182
|
+
| 'spectral.presenceEnhancer'
|
|
183
|
+
| 'spectral.spectralShaper'
|
|
184
|
+
| 'stereo.autoPan'
|
|
185
|
+
| 'stereo.haasEnhancer'
|
|
186
|
+
| 'stereo.imager'
|
|
187
|
+
| 'stereo.monoMaker'
|
|
188
|
+
| 'stereo.phaseAlign'
|
|
189
|
+
| 'stereo.stereoBalance';
|
|
190
|
+
|
|
191
|
+
export type PairProcessor =
|
|
192
|
+
| 'match.applyMatchEq'
|
|
193
|
+
| 'match.alignReferenceToSource'
|
|
194
|
+
| 'match.abSwitch'
|
|
195
|
+
| 'match.abCrossfade';
|
|
196
|
+
|
|
197
|
+
export type PairAnalysis =
|
|
198
|
+
| 'match.referenceLoudness'
|
|
199
|
+
| 'match.tonalBalance'
|
|
200
|
+
| 'match.tonalBalanceLogBands'
|
|
201
|
+
| 'match.matchEqCurve'
|
|
202
|
+
| 'match.estimateReferenceDelaySamples';
|
|
203
|
+
|
|
204
|
+
export type StereoAnalysis = 'stereo.monoCompatCheck' | 'stereo.monoCompatCheckLogBands';
|
|
205
|
+
|
|
206
|
+
/**
|
|
207
|
+
* Section type
|
|
208
|
+
*/
|
|
209
|
+
export const SectionType = {
|
|
210
|
+
Intro: 0,
|
|
211
|
+
Verse: 1,
|
|
212
|
+
PreChorus: 2,
|
|
213
|
+
Chorus: 3,
|
|
214
|
+
Bridge: 4,
|
|
215
|
+
Instrumental: 5,
|
|
216
|
+
Outro: 6,
|
|
217
|
+
Unknown: 7,
|
|
218
|
+
} as const;
|
|
219
|
+
|
|
220
|
+
export type SectionType = (typeof SectionType)[keyof typeof SectionType];
|
|
221
|
+
|
|
222
|
+
/**
|
|
223
|
+
* Detected musical key
|
|
224
|
+
*/
|
|
225
|
+
export interface Key {
|
|
226
|
+
root: PitchClass;
|
|
227
|
+
mode: Mode;
|
|
228
|
+
confidence: number;
|
|
229
|
+
name: string;
|
|
230
|
+
shortName: string;
|
|
231
|
+
}
|
|
232
|
+
|
|
233
|
+
export interface KeyDetectionOptions {
|
|
234
|
+
nFft?: number;
|
|
235
|
+
hopLength?: number;
|
|
236
|
+
useHpss?: boolean;
|
|
237
|
+
loudnessWeighted?: boolean;
|
|
238
|
+
highPassHz?: number;
|
|
239
|
+
modes?:
|
|
240
|
+
| Mode[]
|
|
241
|
+
| ('major' | 'minor' | 'dorian' | 'phrygian' | 'lydian' | 'mixolydian' | 'locrian')[]
|
|
242
|
+
| 'major-minor'
|
|
243
|
+
| 'all'
|
|
244
|
+
| 'modal';
|
|
245
|
+
profile?: KeyProfile | KeyProfileName;
|
|
246
|
+
genreHint?: 'auto' | 'edm' | 'electronic' | 'dance' | 'pop' | 'classical' | 'jazz' | string;
|
|
247
|
+
}
|
|
248
|
+
|
|
249
|
+
export interface KeyCandidate {
|
|
250
|
+
key: Key;
|
|
251
|
+
correlation: number;
|
|
252
|
+
}
|
|
253
|
+
|
|
254
|
+
export interface ChordDetectionOptions {
|
|
255
|
+
minDuration?: number;
|
|
256
|
+
smoothingWindow?: number;
|
|
257
|
+
threshold?: number;
|
|
258
|
+
useTriadsOnly?: boolean;
|
|
259
|
+
nFft?: number;
|
|
260
|
+
hopLength?: number;
|
|
261
|
+
useBeatSync?: boolean;
|
|
262
|
+
useHmm?: boolean;
|
|
263
|
+
hmmBeamWidth?: number;
|
|
264
|
+
useKeyContext?: boolean;
|
|
265
|
+
keyRoot?: PitchClass;
|
|
266
|
+
keyMode?: Mode;
|
|
267
|
+
detectInversions?: boolean;
|
|
268
|
+
chromaMethod?: 'stft' | 'nnls';
|
|
269
|
+
}
|
|
270
|
+
|
|
271
|
+
/**
|
|
272
|
+
* Detected beat
|
|
273
|
+
*/
|
|
274
|
+
export interface Beat {
|
|
275
|
+
time: number;
|
|
276
|
+
strength: number;
|
|
277
|
+
}
|
|
278
|
+
|
|
279
|
+
/**
|
|
280
|
+
* Detected chord
|
|
281
|
+
*/
|
|
282
|
+
export interface Chord {
|
|
283
|
+
root: PitchClass;
|
|
284
|
+
bass: PitchClass;
|
|
285
|
+
quality: ChordQuality;
|
|
286
|
+
start: number;
|
|
287
|
+
end: number;
|
|
288
|
+
confidence: number;
|
|
289
|
+
name: string;
|
|
290
|
+
}
|
|
291
|
+
|
|
292
|
+
export interface ChordAnalysisResult {
|
|
293
|
+
chords: Chord[];
|
|
294
|
+
}
|
|
295
|
+
|
|
296
|
+
/**
|
|
297
|
+
* Detected section
|
|
298
|
+
*/
|
|
299
|
+
export interface Section {
|
|
300
|
+
type: SectionType;
|
|
301
|
+
start: number;
|
|
302
|
+
end: number;
|
|
303
|
+
energyLevel: number;
|
|
304
|
+
confidence: number;
|
|
305
|
+
name: string;
|
|
306
|
+
}
|
|
307
|
+
|
|
308
|
+
/**
|
|
309
|
+
* A single melody contour point (mirrors the C `SonareMelodyPoint`).
|
|
310
|
+
*/
|
|
311
|
+
export interface MelodyPoint {
|
|
312
|
+
/** Frame time in seconds. */
|
|
313
|
+
time: number;
|
|
314
|
+
/** Estimated fundamental frequency in Hz (0 when unvoiced). */
|
|
315
|
+
frequency: number;
|
|
316
|
+
/** Voicing confidence in `[0, 1]`. */
|
|
317
|
+
confidence: number;
|
|
318
|
+
}
|
|
319
|
+
|
|
320
|
+
/**
|
|
321
|
+
* Melody analysis result (mirrors the C `SonareMelodyResult`).
|
|
322
|
+
*/
|
|
323
|
+
export interface MelodyResult {
|
|
324
|
+
points: MelodyPoint[];
|
|
325
|
+
pitchRangeOctaves: number;
|
|
326
|
+
pitchStability: number;
|
|
327
|
+
meanFrequency: number;
|
|
328
|
+
vibratoRate: number;
|
|
329
|
+
}
|
|
330
|
+
|
|
331
|
+
/**
|
|
332
|
+
* Constant-Q / Variable-Q transform magnitude result (mirrors the C
|
|
333
|
+
* `SonareCqtResult`).
|
|
334
|
+
*/
|
|
335
|
+
export interface CqtResult {
|
|
336
|
+
/** Number of frequency bins. */
|
|
337
|
+
nBins: number;
|
|
338
|
+
/** Number of time frames. */
|
|
339
|
+
nFrames: number;
|
|
340
|
+
/** Hop length in samples. */
|
|
341
|
+
hopLength: number;
|
|
342
|
+
/** Sample rate in Hz. */
|
|
343
|
+
sampleRate: number;
|
|
344
|
+
/** Row-major `[nBins x nFrames]` magnitude matrix. */
|
|
345
|
+
magnitude: Float32Array;
|
|
346
|
+
/** Center frequency (Hz) of each of the `nBins` bins. */
|
|
347
|
+
frequencies: Float32Array;
|
|
348
|
+
}
|
|
349
|
+
|
|
350
|
+
/**
|
|
351
|
+
* Timbre characteristics
|
|
352
|
+
*/
|
|
353
|
+
export interface Timbre {
|
|
354
|
+
brightness: number;
|
|
355
|
+
warmth: number;
|
|
356
|
+
density: number;
|
|
357
|
+
roughness: number;
|
|
358
|
+
complexity: number;
|
|
359
|
+
}
|
|
360
|
+
|
|
361
|
+
/**
|
|
362
|
+
* Dynamics characteristics
|
|
363
|
+
*/
|
|
364
|
+
export interface Dynamics {
|
|
365
|
+
dynamicRangeDb: number;
|
|
366
|
+
loudnessRangeDb: number;
|
|
367
|
+
crestFactor: number;
|
|
368
|
+
isCompressed: boolean;
|
|
369
|
+
}
|
|
370
|
+
|
|
371
|
+
/**
|
|
372
|
+
* Time signature
|
|
373
|
+
*/
|
|
374
|
+
export interface TimeSignature {
|
|
375
|
+
numerator: number;
|
|
376
|
+
denominator: number;
|
|
377
|
+
confidence: number;
|
|
378
|
+
}
|
|
379
|
+
|
|
380
|
+
/**
|
|
381
|
+
* Rhythm features
|
|
382
|
+
*/
|
|
383
|
+
export interface RhythmFeatures {
|
|
384
|
+
syncopation: number;
|
|
385
|
+
grooveType: string;
|
|
386
|
+
patternRegularity: number;
|
|
387
|
+
}
|
|
388
|
+
|
|
389
|
+
/**
|
|
390
|
+
* Complete analysis result
|
|
391
|
+
*/
|
|
392
|
+
export interface AnalysisResult {
|
|
393
|
+
bpm: number;
|
|
394
|
+
bpmConfidence: number;
|
|
395
|
+
key: Key;
|
|
396
|
+
timeSignature: TimeSignature;
|
|
397
|
+
beatTimes: Float32Array;
|
|
398
|
+
beats: Beat[];
|
|
399
|
+
chords: Chord[];
|
|
400
|
+
sections: Section[];
|
|
401
|
+
timbre: Timbre;
|
|
402
|
+
dynamics: Dynamics;
|
|
403
|
+
rhythm: RhythmFeatures;
|
|
404
|
+
form: string;
|
|
405
|
+
}
|
|
406
|
+
|
|
407
|
+
/**
|
|
408
|
+
* Room acoustic parameters from an impulse response
|
|
409
|
+
*/
|
|
410
|
+
export interface AcousticResult {
|
|
411
|
+
rt60: number;
|
|
412
|
+
edt: number;
|
|
413
|
+
c50: number;
|
|
414
|
+
c80: number;
|
|
415
|
+
d50: number;
|
|
416
|
+
rt60Bands: Float32Array;
|
|
417
|
+
edtBands: Float32Array;
|
|
418
|
+
c50Bands: Float32Array;
|
|
419
|
+
c80Bands: Float32Array;
|
|
420
|
+
confidence: number;
|
|
421
|
+
isBlind: boolean;
|
|
422
|
+
}
|
|
423
|
+
|
|
424
|
+
/**
|
|
425
|
+
* HPSS (Harmonic-Percussive Source Separation) result
|
|
426
|
+
*/
|
|
427
|
+
export interface HpssResult {
|
|
428
|
+
harmonic: Float32Array;
|
|
429
|
+
percussive: Float32Array;
|
|
430
|
+
sampleRate: number;
|
|
431
|
+
}
|
|
432
|
+
|
|
433
|
+
/**
|
|
434
|
+
* Mastering loudness/true-peak processing result
|
|
435
|
+
*/
|
|
436
|
+
export interface MasteringResult {
|
|
437
|
+
samples: Float32Array;
|
|
438
|
+
sampleRate: number;
|
|
439
|
+
inputLufs: number;
|
|
440
|
+
outputLufs: number;
|
|
441
|
+
appliedGainDb: number;
|
|
442
|
+
latencySamples?: number;
|
|
443
|
+
}
|
|
444
|
+
|
|
445
|
+
export type MasteringProcessorParams = Record<string, number | boolean>;
|
|
446
|
+
|
|
447
|
+
export type PanMode = 'balance' | 'stereoPan' | 'stereo-pan' | 'dualPan' | 'dual-pan' | number;
|
|
448
|
+
|
|
449
|
+
export interface MixOptions {
|
|
450
|
+
inputTrimDb?: number | number[];
|
|
451
|
+
faderDb?: number | number[];
|
|
452
|
+
pan?: number | number[];
|
|
453
|
+
panMode?: PanMode | PanMode[];
|
|
454
|
+
width?: number | number[];
|
|
455
|
+
muted?: boolean | boolean[];
|
|
456
|
+
}
|
|
457
|
+
|
|
458
|
+
export interface MixMeterSnapshot {
|
|
459
|
+
peakDbL: number;
|
|
460
|
+
peakDbR: number;
|
|
461
|
+
rmsDbL: number;
|
|
462
|
+
rmsDbR: number;
|
|
463
|
+
correlation: number;
|
|
464
|
+
monoCompatWidth: number;
|
|
465
|
+
monoCompatPeak: number;
|
|
466
|
+
monoCompatSideRms: number;
|
|
467
|
+
likelyMonoCompatible: boolean;
|
|
468
|
+
momentaryLufs: number;
|
|
469
|
+
shortTermLufs: number;
|
|
470
|
+
integratedLufs: number;
|
|
471
|
+
gainReductionDb: number;
|
|
472
|
+
truePeakDbL: number;
|
|
473
|
+
truePeakDbR: number;
|
|
474
|
+
maxTruePeakDb: number;
|
|
475
|
+
seq: number;
|
|
476
|
+
}
|
|
477
|
+
|
|
478
|
+
export interface MixResult {
|
|
479
|
+
left: Float32Array;
|
|
480
|
+
right: Float32Array;
|
|
481
|
+
sampleRate: number;
|
|
482
|
+
meters: MixMeterSnapshot[];
|
|
483
|
+
}
|
|
484
|
+
|
|
485
|
+
/** Mixed stereo master returned by {@link Mixer.processStereo}. */
|
|
486
|
+
export interface MixerProcessResult {
|
|
487
|
+
left: Float32Array;
|
|
488
|
+
right: Float32Array;
|
|
489
|
+
sampleRate: number;
|
|
490
|
+
}
|
|
491
|
+
|
|
492
|
+
/**
|
|
493
|
+
* Interpolation curve for scheduled automation events
|
|
494
|
+
* (see {@link Mixer.scheduleInsertAutomation}).
|
|
495
|
+
*/
|
|
496
|
+
export type AutomationCurve = 'linear' | 'exponential' | 'hold' | 's-curve';
|
|
497
|
+
|
|
498
|
+
/**
|
|
499
|
+
* Pan law applied when computing left/right gains from a pan position
|
|
500
|
+
* (see {@link Mixer.setPanLaw}). Maps to the underlying integer code.
|
|
501
|
+
*/
|
|
502
|
+
export type PanLaw = 'const3dB' | 'const4.5dB' | 'const6dB' | 'linear0dB';
|
|
503
|
+
|
|
504
|
+
/**
|
|
505
|
+
* Meter tap point for reading a strip's meter snapshot
|
|
506
|
+
* (see {@link Mixer.meterTap} and {@link Mixer.stripMeter}).
|
|
507
|
+
*/
|
|
508
|
+
export type MeterTap = 'preFader' | 'postFader';
|
|
509
|
+
|
|
510
|
+
/** Pre/post-fader send timing (see {@link Mixer.addSend}). */
|
|
511
|
+
export type SendTiming = 'preFader' | 'postFader';
|
|
512
|
+
|
|
513
|
+
/** A single goniometer (left/right) sample returned by {@link Mixer.readGoniometerLatest}. */
|
|
514
|
+
export interface GoniometerPoint {
|
|
515
|
+
left: number;
|
|
516
|
+
right: number;
|
|
517
|
+
}
|
|
518
|
+
|
|
519
|
+
export interface MasteringChainConfig {
|
|
520
|
+
repair?: {
|
|
521
|
+
denoise?: boolean;
|
|
522
|
+
nFft?: number;
|
|
523
|
+
hopLength?: number;
|
|
524
|
+
ddAlpha?: number;
|
|
525
|
+
gainFloor?: number;
|
|
526
|
+
declick?: {
|
|
527
|
+
threshold?: number;
|
|
528
|
+
neighborRatio?: number;
|
|
529
|
+
maxClickSamples?: number;
|
|
530
|
+
lpcOrder?: number;
|
|
531
|
+
residualRatio?: number;
|
|
532
|
+
};
|
|
533
|
+
dereverb?: {
|
|
534
|
+
threshold?: number;
|
|
535
|
+
attenuation?: number;
|
|
536
|
+
nFft?: number;
|
|
537
|
+
hopLength?: number;
|
|
538
|
+
t60Sec?: number;
|
|
539
|
+
lateDelayMs?: number;
|
|
540
|
+
overSubtraction?: number;
|
|
541
|
+
spectralFloor?: number;
|
|
542
|
+
wpeEnabled?: boolean;
|
|
543
|
+
wpeIterations?: number;
|
|
544
|
+
wpeTaps?: number;
|
|
545
|
+
wpeStrength?: number;
|
|
546
|
+
};
|
|
547
|
+
};
|
|
548
|
+
eq?: {
|
|
549
|
+
tiltDb?: number;
|
|
550
|
+
pivotHz?: number;
|
|
551
|
+
};
|
|
552
|
+
dynamics?: {
|
|
553
|
+
compressor?: {
|
|
554
|
+
thresholdDb?: number;
|
|
555
|
+
ratio?: number;
|
|
556
|
+
attackMs?: number;
|
|
557
|
+
releaseMs?: number;
|
|
558
|
+
kneeDb?: number;
|
|
559
|
+
makeupGainDb?: number;
|
|
560
|
+
autoMakeup?: boolean;
|
|
561
|
+
};
|
|
562
|
+
deesser?: {
|
|
563
|
+
frequencyHz?: number;
|
|
564
|
+
thresholdDb?: number;
|
|
565
|
+
ratio?: number;
|
|
566
|
+
attackMs?: number;
|
|
567
|
+
releaseMs?: number;
|
|
568
|
+
rangeDb?: number;
|
|
569
|
+
bandpassQ?: number;
|
|
570
|
+
};
|
|
571
|
+
transientShaper?: {
|
|
572
|
+
attackGainDb?: number;
|
|
573
|
+
sustainGainDb?: number;
|
|
574
|
+
fastAttackMs?: number;
|
|
575
|
+
fastReleaseMs?: number;
|
|
576
|
+
slowAttackMs?: number;
|
|
577
|
+
slowReleaseMs?: number;
|
|
578
|
+
sensitivity?: number;
|
|
579
|
+
maxGainDb?: number;
|
|
580
|
+
gainSmoothingMs?: number;
|
|
581
|
+
lookaheadMs?: number;
|
|
582
|
+
};
|
|
583
|
+
multibandComp?: {
|
|
584
|
+
lowCutoffHz?: number;
|
|
585
|
+
highCutoffHz?: number;
|
|
586
|
+
lowThresholdDb?: number;
|
|
587
|
+
lowRatio?: number;
|
|
588
|
+
lowAttackMs?: number;
|
|
589
|
+
lowReleaseMs?: number;
|
|
590
|
+
midThresholdDb?: number;
|
|
591
|
+
midRatio?: number;
|
|
592
|
+
midAttackMs?: number;
|
|
593
|
+
midReleaseMs?: number;
|
|
594
|
+
highThresholdDb?: number;
|
|
595
|
+
highRatio?: number;
|
|
596
|
+
highAttackMs?: number;
|
|
597
|
+
highReleaseMs?: number;
|
|
598
|
+
};
|
|
599
|
+
};
|
|
600
|
+
saturation?: {
|
|
601
|
+
tape?: {
|
|
602
|
+
driveDb?: number;
|
|
603
|
+
saturation?: number;
|
|
604
|
+
hysteresis?: number;
|
|
605
|
+
outputGainDb?: number;
|
|
606
|
+
speedIps?: number;
|
|
607
|
+
headBumpDb?: number;
|
|
608
|
+
bias?: number;
|
|
609
|
+
gapLoss?: number;
|
|
610
|
+
};
|
|
611
|
+
exciter?: {
|
|
612
|
+
frequencyHz?: number;
|
|
613
|
+
driveDb?: number;
|
|
614
|
+
amount?: number;
|
|
615
|
+
q?: number;
|
|
616
|
+
evenOddMix?: number;
|
|
617
|
+
};
|
|
618
|
+
};
|
|
619
|
+
spectral?: {
|
|
620
|
+
airBand?: {
|
|
621
|
+
amount?: number;
|
|
622
|
+
shelfFrequencyHz?: number;
|
|
623
|
+
dynamicThresholdDb?: number;
|
|
624
|
+
dynamicRangeDb?: number;
|
|
625
|
+
};
|
|
626
|
+
};
|
|
627
|
+
stereo?: {
|
|
628
|
+
imager?: {
|
|
629
|
+
width?: number;
|
|
630
|
+
outputGainDb?: number;
|
|
631
|
+
decorrelationAmount?: number;
|
|
632
|
+
preserveEnergy?: boolean;
|
|
633
|
+
};
|
|
634
|
+
monoMaker?: {
|
|
635
|
+
amount?: number;
|
|
636
|
+
};
|
|
637
|
+
};
|
|
638
|
+
maximizer?: {
|
|
639
|
+
truePeakLimiter?: {
|
|
640
|
+
ceilingDb?: number;
|
|
641
|
+
lookaheadMs?: number;
|
|
642
|
+
releaseMs?: number;
|
|
643
|
+
oversampleFactor?: number;
|
|
644
|
+
applyGainAtInputRate?: boolean;
|
|
645
|
+
};
|
|
646
|
+
};
|
|
647
|
+
loudness?: {
|
|
648
|
+
targetLufs?: number;
|
|
649
|
+
ceilingDb?: number;
|
|
650
|
+
truePeakOversample?: number;
|
|
651
|
+
};
|
|
652
|
+
}
|
|
653
|
+
|
|
654
|
+
export interface MasteringChainResult extends MasteringResult {
|
|
655
|
+
stages: string[];
|
|
656
|
+
}
|
|
657
|
+
|
|
658
|
+
export interface MasteringStereoChainResult {
|
|
659
|
+
left: Float32Array;
|
|
660
|
+
right: Float32Array;
|
|
661
|
+
sampleRate: number;
|
|
662
|
+
inputLufs: number;
|
|
663
|
+
outputLufs: number;
|
|
664
|
+
appliedGainDb: number;
|
|
665
|
+
stages: string[];
|
|
666
|
+
latencySamples?: number;
|
|
667
|
+
}
|
|
668
|
+
|
|
669
|
+
export interface MasteringStereoResult {
|
|
670
|
+
left: Float32Array;
|
|
671
|
+
right: Float32Array;
|
|
672
|
+
sampleRate: number;
|
|
673
|
+
inputLufs: number;
|
|
674
|
+
outputLufs: number;
|
|
675
|
+
appliedGainDb: number;
|
|
676
|
+
latencySamples: number;
|
|
677
|
+
}
|
|
678
|
+
|
|
679
|
+
/**
|
|
680
|
+
* STFT (Short-Time Fourier Transform) result
|
|
681
|
+
*/
|
|
682
|
+
export interface StftResult {
|
|
683
|
+
nBins: number;
|
|
684
|
+
nFrames: number;
|
|
685
|
+
nFft: number;
|
|
686
|
+
hopLength: number;
|
|
687
|
+
sampleRate: number;
|
|
688
|
+
magnitude: Float32Array;
|
|
689
|
+
power: Float32Array;
|
|
690
|
+
}
|
|
691
|
+
|
|
692
|
+
/**
|
|
693
|
+
* Mel spectrogram result
|
|
694
|
+
*/
|
|
695
|
+
export interface MelSpectrogramResult {
|
|
696
|
+
nMels: number;
|
|
697
|
+
nFrames: number;
|
|
698
|
+
sampleRate: number;
|
|
699
|
+
hopLength: number;
|
|
700
|
+
power: Float32Array;
|
|
701
|
+
db: Float32Array;
|
|
702
|
+
}
|
|
703
|
+
|
|
704
|
+
/**
|
|
705
|
+
* MFCC result
|
|
706
|
+
*/
|
|
707
|
+
export interface MfccResult {
|
|
708
|
+
nMfcc: number;
|
|
709
|
+
nFrames: number;
|
|
710
|
+
coefficients: Float32Array;
|
|
711
|
+
}
|
|
712
|
+
|
|
713
|
+
/**
|
|
714
|
+
* STFT power spectrogram result (from inverse Mel reconstruction)
|
|
715
|
+
*/
|
|
716
|
+
export interface StftPowerResult {
|
|
717
|
+
nBins: number;
|
|
718
|
+
nFrames: number;
|
|
719
|
+
power: Float32Array;
|
|
720
|
+
}
|
|
721
|
+
|
|
722
|
+
/**
|
|
723
|
+
* Mel power spectrogram result (from inverse MFCC reconstruction)
|
|
724
|
+
*/
|
|
725
|
+
export interface MelPowerResult {
|
|
726
|
+
nMels: number;
|
|
727
|
+
nFrames: number;
|
|
728
|
+
power: Float32Array;
|
|
729
|
+
}
|
|
730
|
+
|
|
731
|
+
/**
|
|
732
|
+
* Chroma features result
|
|
733
|
+
*/
|
|
734
|
+
export interface ChromaResult {
|
|
735
|
+
nChroma: number;
|
|
736
|
+
nFrames: number;
|
|
737
|
+
sampleRate: number;
|
|
738
|
+
hopLength: number;
|
|
739
|
+
features: Float32Array;
|
|
740
|
+
meanEnergy: number[];
|
|
741
|
+
}
|
|
742
|
+
|
|
743
|
+
/**
|
|
744
|
+
* Pitch detection result
|
|
745
|
+
*/
|
|
746
|
+
export interface PitchResult {
|
|
747
|
+
f0: Float32Array;
|
|
748
|
+
voicedProb: Float32Array;
|
|
749
|
+
voicedFlag: boolean[];
|
|
750
|
+
nFrames: number;
|
|
751
|
+
medianF0: number;
|
|
752
|
+
meanF0: number;
|
|
753
|
+
}
|
|
754
|
+
|
|
755
|
+
/**
|
|
756
|
+
* Loudness measurement result (EBU R128 / ITU-R BS.1770)
|
|
757
|
+
*/
|
|
758
|
+
export interface LufsResult {
|
|
759
|
+
integratedLufs: number;
|
|
760
|
+
momentaryLufs: number;
|
|
761
|
+
shortTermLufs: number;
|
|
762
|
+
loudnessRange: number;
|
|
763
|
+
}
|
|
764
|
+
|
|
765
|
+
/**
|
|
766
|
+
* Realtime equalizer spectrum snapshot.
|
|
767
|
+
*
|
|
768
|
+
* Mirrors the C++ `EqualizerSpectrumSnapshot`: `preLeft`/`preRight` and
|
|
769
|
+
* `postLeft`/`postRight` are the pre- and post-EQ spectrum streams (trimmed to
|
|
770
|
+
* their valid count). `bandGainDb` holds per-band applied gain (24 entries),
|
|
771
|
+
* `profileDb` the smoothed magnitude profile (16 entries), `lastAutoGainDb`
|
|
772
|
+
* the latest auto-gain compensation, and `seq` increments each time a new
|
|
773
|
+
* snapshot is published.
|
|
774
|
+
*/
|
|
775
|
+
export interface EqSpectrumSnapshot {
|
|
776
|
+
preLeft: Float32Array;
|
|
777
|
+
preRight: Float32Array;
|
|
778
|
+
postLeft: Float32Array;
|
|
779
|
+
postRight: Float32Array;
|
|
780
|
+
bandGainDb: Float32Array;
|
|
781
|
+
profileDb: Float32Array;
|
|
782
|
+
lastAutoGainDb: number;
|
|
783
|
+
seq: number;
|
|
784
|
+
}
|
|
785
|
+
|
|
786
|
+
/**
|
|
787
|
+
* Equalizer band type (string union mirroring `sonare::mastering::eq::EqBandType`).
|
|
788
|
+
*/
|
|
789
|
+
export type EqBandType =
|
|
790
|
+
| 'Peak'
|
|
791
|
+
| 'LowShelf'
|
|
792
|
+
| 'HighShelf'
|
|
793
|
+
| 'LowPass'
|
|
794
|
+
| 'HighPass'
|
|
795
|
+
| 'BandPass'
|
|
796
|
+
| 'Notch'
|
|
797
|
+
| 'TiltShelf'
|
|
798
|
+
| 'FlatTilt';
|
|
799
|
+
|
|
800
|
+
/** Biquad coefficient design mode. */
|
|
801
|
+
export type EqCoeffMode = 'Rbj' | 'Vicanek';
|
|
802
|
+
|
|
803
|
+
/** Stereo placement for an EQ band. */
|
|
804
|
+
export type EqStereoPlacement = 'Stereo' | 'Left' | 'Right' | 'Mid' | 'Side';
|
|
805
|
+
|
|
806
|
+
/** Per-band phase behaviour. */
|
|
807
|
+
export type EqBandPhase = 'Inherit' | 'ZeroLatency' | 'NaturalPhase' | 'LinearPhase';
|
|
808
|
+
|
|
809
|
+
/**
|
|
810
|
+
* Equalizer band configuration accepted by {@link StreamingEqualizer.setBand}.
|
|
811
|
+
*
|
|
812
|
+
* All fields are optional; omitted values fall back to the C++ band defaults
|
|
813
|
+
* (Peak, 1000 Hz, 0 dB gain, Butterworth Q, disabled).
|
|
814
|
+
*/
|
|
815
|
+
export interface EqBand {
|
|
816
|
+
type?: EqBandType;
|
|
817
|
+
frequencyHz?: number;
|
|
818
|
+
gainDb?: number;
|
|
819
|
+
q?: number;
|
|
820
|
+
enabled?: boolean;
|
|
821
|
+
coeffMode?: EqCoeffMode;
|
|
822
|
+
slopeDbOct?: number;
|
|
823
|
+
placement?: EqStereoPlacement;
|
|
824
|
+
phase?: EqBandPhase;
|
|
825
|
+
soloed?: boolean;
|
|
826
|
+
bypassed?: boolean;
|
|
827
|
+
proportionalQ?: boolean;
|
|
828
|
+
proportionalQStrength?: number;
|
|
829
|
+
dynamic?: boolean;
|
|
830
|
+
thresholdDb?: number;
|
|
831
|
+
autoThreshold?: boolean;
|
|
832
|
+
ratio?: number;
|
|
833
|
+
rangeDb?: number;
|
|
834
|
+
attackMs?: number;
|
|
835
|
+
releaseMs?: number;
|
|
836
|
+
lookaheadMs?: number;
|
|
837
|
+
externalSidechain?: boolean;
|
|
838
|
+
sidechainFreqHz?: number;
|
|
839
|
+
sidechainQ?: number;
|
|
840
|
+
}
|
|
841
|
+
|
|
842
|
+
/** Construction options for {@link StreamingEqualizer}. */
|
|
843
|
+
export interface StreamingEqualizerConfig {
|
|
844
|
+
sampleRate?: number;
|
|
845
|
+
maxBlockSize?: number;
|
|
846
|
+
}
|
|
847
|
+
|
|
848
|
+
/** Options for {@link StreamingEqualizer.match}. */
|
|
849
|
+
export interface EqMatchOptions {
|
|
850
|
+
sampleRate?: number;
|
|
851
|
+
maxBands?: number;
|
|
852
|
+
}
|