@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,401 @@
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
+ } as const;
28
+
29
+ export type Mode = (typeof Mode)[keyof typeof Mode];
30
+
31
+ /**
32
+ * Chord quality
33
+ */
34
+ export const ChordQuality = {
35
+ Major: 0,
36
+ Minor: 1,
37
+ Diminished: 2,
38
+ Augmented: 3,
39
+ Dominant7: 4,
40
+ Major7: 5,
41
+ Minor7: 6,
42
+ Sus2: 7,
43
+ Sus4: 8,
44
+ } as const;
45
+
46
+ export type ChordQuality = (typeof ChordQuality)[keyof typeof ChordQuality];
47
+
48
+ /**
49
+ * Section type
50
+ */
51
+ export const SectionType = {
52
+ Intro: 0,
53
+ Verse: 1,
54
+ PreChorus: 2,
55
+ Chorus: 3,
56
+ Bridge: 4,
57
+ Instrumental: 5,
58
+ Outro: 6,
59
+ } as const;
60
+
61
+ export type SectionType = (typeof SectionType)[keyof typeof SectionType];
62
+
63
+ /**
64
+ * Detected musical key
65
+ */
66
+ export interface Key {
67
+ root: PitchClass;
68
+ mode: Mode;
69
+ confidence: number;
70
+ name: string;
71
+ shortName: string;
72
+ }
73
+
74
+ /**
75
+ * Detected beat
76
+ */
77
+ export interface Beat {
78
+ time: number;
79
+ strength: number;
80
+ }
81
+
82
+ /**
83
+ * Detected chord
84
+ */
85
+ export interface Chord {
86
+ root: PitchClass;
87
+ quality: ChordQuality;
88
+ start: number;
89
+ end: number;
90
+ confidence: number;
91
+ name: string;
92
+ }
93
+
94
+ /**
95
+ * Detected section
96
+ */
97
+ export interface Section {
98
+ type: SectionType;
99
+ start: number;
100
+ end: number;
101
+ energyLevel: number;
102
+ confidence: number;
103
+ name: string;
104
+ }
105
+
106
+ /**
107
+ * Timbre characteristics
108
+ */
109
+ export interface Timbre {
110
+ brightness: number;
111
+ warmth: number;
112
+ density: number;
113
+ roughness: number;
114
+ complexity: number;
115
+ }
116
+
117
+ /**
118
+ * Dynamics characteristics
119
+ */
120
+ export interface Dynamics {
121
+ dynamicRangeDb: number;
122
+ loudnessRangeDb: number;
123
+ crestFactor: number;
124
+ isCompressed: boolean;
125
+ }
126
+
127
+ /**
128
+ * Time signature
129
+ */
130
+ export interface TimeSignature {
131
+ numerator: number;
132
+ denominator: number;
133
+ confidence: number;
134
+ }
135
+
136
+ /**
137
+ * Rhythm features
138
+ */
139
+ export interface RhythmFeatures {
140
+ syncopation: number;
141
+ grooveType: string;
142
+ patternRegularity: number;
143
+ }
144
+
145
+ /**
146
+ * Complete analysis result
147
+ */
148
+ export interface AnalysisResult {
149
+ bpm: number;
150
+ bpmConfidence: number;
151
+ key: Key;
152
+ timeSignature: TimeSignature;
153
+ beatTimes: Float32Array;
154
+ beats: Beat[];
155
+ chords: Chord[];
156
+ sections: Section[];
157
+ timbre: Timbre;
158
+ dynamics: Dynamics;
159
+ rhythm: RhythmFeatures;
160
+ form: string;
161
+ }
162
+
163
+ /**
164
+ * HPSS (Harmonic-Percussive Source Separation) result
165
+ */
166
+ export interface HpssResult {
167
+ harmonic: Float32Array;
168
+ percussive: Float32Array;
169
+ sampleRate: number;
170
+ }
171
+
172
+ /**
173
+ * Mastering loudness/true-peak processing result
174
+ */
175
+ export interface MasteringResult {
176
+ samples: Float32Array;
177
+ sampleRate: number;
178
+ inputLufs: number;
179
+ outputLufs: number;
180
+ appliedGainDb: number;
181
+ latencySamples?: number;
182
+ }
183
+
184
+ export type MasteringProcessorParams = Record<string, number | boolean>;
185
+
186
+ export interface MasteringChainConfig {
187
+ repair?: {
188
+ denoise?: boolean;
189
+ nFft?: number;
190
+ hopLength?: number;
191
+ ddAlpha?: number;
192
+ gainFloor?: number;
193
+ declick?: {
194
+ threshold?: number;
195
+ neighborRatio?: number;
196
+ maxClickSamples?: number;
197
+ lpcOrder?: number;
198
+ residualRatio?: number;
199
+ };
200
+ dereverb?: {
201
+ threshold?: number;
202
+ attenuation?: number;
203
+ nFft?: number;
204
+ hopLength?: number;
205
+ t60Sec?: number;
206
+ lateDelayMs?: number;
207
+ overSubtraction?: number;
208
+ spectralFloor?: number;
209
+ wpeEnabled?: boolean;
210
+ wpeIterations?: number;
211
+ wpeTaps?: number;
212
+ wpeStrength?: number;
213
+ };
214
+ };
215
+ eq?: {
216
+ tiltDb?: number;
217
+ pivotHz?: number;
218
+ };
219
+ dynamics?: {
220
+ compressor?: {
221
+ thresholdDb?: number;
222
+ ratio?: number;
223
+ attackMs?: number;
224
+ releaseMs?: number;
225
+ kneeDb?: number;
226
+ makeupGainDb?: number;
227
+ autoMakeup?: boolean;
228
+ };
229
+ deesser?: {
230
+ frequencyHz?: number;
231
+ thresholdDb?: number;
232
+ ratio?: number;
233
+ attackMs?: number;
234
+ releaseMs?: number;
235
+ rangeDb?: number;
236
+ };
237
+ transientShaper?: {
238
+ attackGainDb?: number;
239
+ sustainGainDb?: number;
240
+ fastAttackMs?: number;
241
+ fastReleaseMs?: number;
242
+ slowAttackMs?: number;
243
+ slowReleaseMs?: number;
244
+ sensitivity?: number;
245
+ maxGainDb?: number;
246
+ gainSmoothingMs?: number;
247
+ lookaheadMs?: number;
248
+ };
249
+ multibandComp?: {
250
+ lowCutoffHz?: number;
251
+ highCutoffHz?: number;
252
+ lowThresholdDb?: number;
253
+ lowRatio?: number;
254
+ lowAttackMs?: number;
255
+ lowReleaseMs?: number;
256
+ midThresholdDb?: number;
257
+ midRatio?: number;
258
+ midAttackMs?: number;
259
+ midReleaseMs?: number;
260
+ highThresholdDb?: number;
261
+ highRatio?: number;
262
+ highAttackMs?: number;
263
+ highReleaseMs?: number;
264
+ };
265
+ };
266
+ saturation?: {
267
+ tape?: {
268
+ driveDb?: number;
269
+ saturation?: number;
270
+ hysteresis?: number;
271
+ outputGainDb?: number;
272
+ speedIps?: number;
273
+ headBumpDb?: number;
274
+ bias?: number;
275
+ gapLoss?: number;
276
+ };
277
+ exciter?: {
278
+ frequencyHz?: number;
279
+ driveDb?: number;
280
+ amount?: number;
281
+ q?: number;
282
+ evenOddMix?: number;
283
+ };
284
+ };
285
+ spectral?: {
286
+ airBand?: {
287
+ amount?: number;
288
+ shelfFrequencyHz?: number;
289
+ dynamicThresholdDb?: number;
290
+ dynamicRangeDb?: number;
291
+ };
292
+ };
293
+ stereo?: {
294
+ imager?: {
295
+ width?: number;
296
+ outputGainDb?: number;
297
+ decorrelationAmount?: number;
298
+ preserveEnergy?: boolean;
299
+ };
300
+ monoMaker?: {
301
+ amount?: number;
302
+ };
303
+ };
304
+ maximizer?: {
305
+ truePeakLimiter?: {
306
+ ceilingDb?: number;
307
+ lookaheadMs?: number;
308
+ releaseMs?: number;
309
+ oversampleFactor?: number;
310
+ applyGainAtInputRate?: boolean;
311
+ };
312
+ };
313
+ loudness?: {
314
+ targetLufs?: number;
315
+ ceilingDb?: number;
316
+ truePeakOversample?: number;
317
+ };
318
+ }
319
+
320
+ export interface MasteringChainResult extends MasteringResult {
321
+ stages: string[];
322
+ }
323
+
324
+ export interface MasteringStereoChainResult {
325
+ left: Float32Array;
326
+ right: Float32Array;
327
+ sampleRate: number;
328
+ inputLufs: number;
329
+ outputLufs: number;
330
+ appliedGainDb: number;
331
+ stages: string[];
332
+ latencySamples?: number;
333
+ }
334
+
335
+ export interface MasteringStereoResult {
336
+ left: Float32Array;
337
+ right: Float32Array;
338
+ sampleRate: number;
339
+ inputLufs: number;
340
+ outputLufs: number;
341
+ appliedGainDb: number;
342
+ latencySamples: number;
343
+ }
344
+
345
+ /**
346
+ * STFT (Short-Time Fourier Transform) result
347
+ */
348
+ export interface StftResult {
349
+ nBins: number;
350
+ nFrames: number;
351
+ nFft: number;
352
+ hopLength: number;
353
+ sampleRate: number;
354
+ magnitude: Float32Array;
355
+ power: Float32Array;
356
+ }
357
+
358
+ /**
359
+ * Mel spectrogram result
360
+ */
361
+ export interface MelSpectrogramResult {
362
+ nMels: number;
363
+ nFrames: number;
364
+ sampleRate: number;
365
+ hopLength: number;
366
+ power: Float32Array;
367
+ db: Float32Array;
368
+ }
369
+
370
+ /**
371
+ * MFCC result
372
+ */
373
+ export interface MfccResult {
374
+ nMfcc: number;
375
+ nFrames: number;
376
+ coefficients: Float32Array;
377
+ }
378
+
379
+ /**
380
+ * Chroma features result
381
+ */
382
+ export interface ChromaResult {
383
+ nChroma: number;
384
+ nFrames: number;
385
+ sampleRate: number;
386
+ hopLength: number;
387
+ features: Float32Array;
388
+ meanEnergy: number[];
389
+ }
390
+
391
+ /**
392
+ * Pitch detection result
393
+ */
394
+ export interface PitchResult {
395
+ f0: Float32Array;
396
+ voicedProb: Float32Array;
397
+ voicedFlag: boolean[];
398
+ nFrames: number;
399
+ medianF0: number;
400
+ meanF0: number;
401
+ }