@libraz/libsonare 1.4.1 → 1.5.1
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 +51 -20
- package/dist/index.d.ts +5416 -1
- package/dist/index.js +938 -583
- package/dist/index.js.map +1 -1
- package/dist/sonare.js +2 -2
- package/dist/sonare.wasm +0 -0
- package/dist/worklet.d.ts +1083 -5227
- package/dist/worklet.js +2683 -2451
- package/dist/worklet.js.map +1 -1
- package/package.json +4 -9
- package/src/clip_page_streamer.ts +298 -0
- package/src/effects_mastering.ts +85 -1089
- package/src/effects_transform.ts +286 -0
- package/src/effects_voice_change.ts +118 -0
- package/src/feature_music.ts +5 -2
- package/src/feature_spectrogram.ts +42 -2
- package/src/features.ts +1 -0
- package/src/index.ts +23 -0
- package/src/mastering_chain.ts +200 -0
- package/src/mastering_core.ts +248 -0
- package/src/mastering_dynamics.ts +105 -0
- package/src/mastering_repair.ts +161 -0
- package/src/mixer.ts +8 -0
- package/src/mixing_oneshot.ts +54 -0
- package/src/module_state.ts +1 -2
- package/src/project.ts +71 -1712
- package/src/project_class.ts +871 -0
- package/src/project_internal.ts +333 -0
- package/src/project_synth.ts +43 -0
- package/src/project_types.ts +570 -0
- package/src/public_types.ts +6 -1221
- package/src/public_types_acoustic.ts +115 -0
- package/src/public_types_mastering.ts +333 -0
- package/src/public_types_mixing.ts +97 -0
- package/src/public_types_music.ts +352 -0
- package/src/public_types_realtime.ts +163 -0
- package/src/public_types_spectral.ts +194 -0
- package/src/realtime_engine.ts +94 -0
- package/src/sonare.js.d.ts +117 -38
- package/src/stream_analyzer.ts +3 -0
- package/src/stream_types.ts +4 -0
- package/src/worklet/engine-automation.ts +73 -0
- package/src/worklet/engine-capture-facade.ts +80 -0
- package/src/worklet/engine-clips.ts +71 -0
- package/src/worklet/engine-markers.ts +93 -0
- package/src/worklet/engine-mixer-facade.ts +186 -0
- package/src/worklet/engine-node.ts +451 -0
- package/src/worklet/engine-offline.ts +162 -0
- package/src/worklet/engine-options.ts +13 -0
- package/src/worklet/engine-parameter-facade.ts +172 -0
- package/src/worklet/engine-processor.ts +764 -0
- package/src/worklet/engine-register.ts +136 -0
- package/src/worklet/engine-strips.ts +315 -0
- package/src/worklet/engine-sync.ts +94 -0
- package/src/worklet/engine-tempo-facade.ts +141 -0
- package/src/worklet/engine.ts +998 -0
- package/src/worklet/guards.ts +14 -1
- package/src/worklet/messages.ts +60 -20
- package/src/worklet/mixer-processor.ts +368 -0
- package/src/worklet/protocol.ts +3 -0
- package/src/worklet/voice-changer-processor.ts +246 -0
- package/src/worklet.ts +20 -3549
- package/dist/sonare-rt-module.js +0 -2
- package/dist/sonare-rt.js +0 -2
- package/dist/sonare-rt.wasm +0 -0
- package/src/sonare-rt.d.ts +0 -93
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
import type { ValidateOptions } from './validation';
|
|
2
|
+
|
|
3
|
+
/** Options for `detectAcoustic`. All fields are optional. */
|
|
4
|
+
export interface AcousticOptions extends ValidateOptions {
|
|
5
|
+
/** Number of octave bands. Default 6. */
|
|
6
|
+
nOctaveBands?: number;
|
|
7
|
+
/** Number of 1/3-octave sub-bands. Default 24. */
|
|
8
|
+
nThirdOctaveSubbands?: number;
|
|
9
|
+
/** Minimum decay range (dB) for a valid RT60 fit. Default 30. */
|
|
10
|
+
minDecayDb?: number;
|
|
11
|
+
/** Margin (dB) above the noise floor for the decay fit. Default 10. */
|
|
12
|
+
noiseFloorMarginDb?: number;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* Room acoustic parameters from an impulse response
|
|
17
|
+
*/
|
|
18
|
+
export interface AcousticResult {
|
|
19
|
+
rt60: number;
|
|
20
|
+
edt: number;
|
|
21
|
+
c50: number;
|
|
22
|
+
c80: number;
|
|
23
|
+
d50: number;
|
|
24
|
+
rt60Bands: Float32Array;
|
|
25
|
+
edtBands: Float32Array;
|
|
26
|
+
c50Bands: Float32Array;
|
|
27
|
+
c80Bands: Float32Array;
|
|
28
|
+
confidence: number;
|
|
29
|
+
isBlind: boolean;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
/** Shoebox geometry + placement shared by RIR synthesis and the room morph. */
|
|
33
|
+
export interface RoomGeometryOptions {
|
|
34
|
+
lengthM?: number;
|
|
35
|
+
widthM?: number;
|
|
36
|
+
heightM?: number;
|
|
37
|
+
/** Uniform wall absorption, clamped to [0, 0.999] (the back-compat scalar). */
|
|
38
|
+
absorption?: number;
|
|
39
|
+
/**
|
|
40
|
+
* Optional per-octave-band wall absorption (125/250/500/1k/2k/4k.. Hz). When
|
|
41
|
+
* provided it overrides `absorption` unless `materialPreset` is set.
|
|
42
|
+
*/
|
|
43
|
+
bandAbsorption?: Float32Array | number[];
|
|
44
|
+
/** Optional per-band wall scattering; missing bands default to 0. */
|
|
45
|
+
bandScattering?: Float32Array | number[];
|
|
46
|
+
/**
|
|
47
|
+
* Named wall-material preset (0 none; 1 concrete, 2 wood, 3 curtain,
|
|
48
|
+
* 4 carpet, 5 glass). A non-zero preset wins over `bandAbsorption`/`absorption`.
|
|
49
|
+
*/
|
|
50
|
+
materialPreset?: number;
|
|
51
|
+
sourceX?: number;
|
|
52
|
+
sourceY?: number;
|
|
53
|
+
sourceZ?: number;
|
|
54
|
+
listenerX?: number;
|
|
55
|
+
listenerY?: number;
|
|
56
|
+
listenerZ?: number;
|
|
57
|
+
ismOrder?: number;
|
|
58
|
+
seed?: number;
|
|
59
|
+
maxSeconds?: number;
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
export interface RirSynthOptions extends RoomGeometryOptions {
|
|
63
|
+
sampleRate?: number;
|
|
64
|
+
/** Use the Eyring statistical late-tail model (default true); false = Sabine. */
|
|
65
|
+
preferEyring?: boolean;
|
|
66
|
+
/** Early/late crossover in ms (0 = auto, ~sqrt(V) ms). */
|
|
67
|
+
mixingTimeMs?: number;
|
|
68
|
+
/** Equal-power crossfade width around the mixing time in ms (0 = default). */
|
|
69
|
+
crossfadeMs?: number;
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
export interface RirResult {
|
|
73
|
+
rir: Float32Array;
|
|
74
|
+
sampleRate: number;
|
|
75
|
+
hasError: boolean;
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
export interface RoomEstimateOptions {
|
|
79
|
+
aspectHintLw?: number;
|
|
80
|
+
aspectHintLh?: number;
|
|
81
|
+
referenceAbsorption?: number;
|
|
82
|
+
preferEyring?: boolean;
|
|
83
|
+
nOctaveBands?: number;
|
|
84
|
+
/** Analyzer routing: 0 = auto, 1 = blind, 2 = impulse-response. */
|
|
85
|
+
mode?: number;
|
|
86
|
+
/** Analyzer decay-fit span in dB (0 = library default). */
|
|
87
|
+
minDecayDb?: number;
|
|
88
|
+
/** Analyzer noise-floor margin in dB (0 = library default). */
|
|
89
|
+
noiseFloorMarginDb?: number;
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
export interface RoomEstimateResult {
|
|
93
|
+
volume: number;
|
|
94
|
+
length: number;
|
|
95
|
+
width: number;
|
|
96
|
+
height: number;
|
|
97
|
+
drrDb: number;
|
|
98
|
+
confidence: number;
|
|
99
|
+
absorptionBands: Float32Array;
|
|
100
|
+
rt60Bands: Float32Array;
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
export interface RoomMorphOptions extends RoomGeometryOptions {
|
|
104
|
+
wet?: number;
|
|
105
|
+
sourceTailSuppression?: number;
|
|
106
|
+
/**
|
|
107
|
+
* Use the Eyring statistical late-tail model for the target room (default
|
|
108
|
+
* true); false = Sabine. Matches {@link RirSynthOptions.preferEyring}.
|
|
109
|
+
*/
|
|
110
|
+
preferEyring?: boolean;
|
|
111
|
+
/** Early/late crossover in ms (0 = auto, ~sqrt(V) ms). */
|
|
112
|
+
mixingTimeMs?: number;
|
|
113
|
+
/** Equal-power crossfade width around the mixing time in ms (0 = default). */
|
|
114
|
+
crossfadeMs?: number;
|
|
115
|
+
}
|
|
@@ -0,0 +1,333 @@
|
|
|
1
|
+
export type MasteringPreset =
|
|
2
|
+
| 'pop'
|
|
3
|
+
| 'edm'
|
|
4
|
+
| 'acoustic'
|
|
5
|
+
| 'hipHop'
|
|
6
|
+
| 'aiMusic'
|
|
7
|
+
| 'speech'
|
|
8
|
+
| 'streaming'
|
|
9
|
+
| 'youtube'
|
|
10
|
+
| 'broadcast'
|
|
11
|
+
| 'podcast'
|
|
12
|
+
| 'audiobook'
|
|
13
|
+
| 'cinema'
|
|
14
|
+
| 'jpop'
|
|
15
|
+
| 'ambient'
|
|
16
|
+
| 'lofi'
|
|
17
|
+
| 'classical'
|
|
18
|
+
| 'drumAndBass'
|
|
19
|
+
| 'techno'
|
|
20
|
+
| 'metal'
|
|
21
|
+
| 'trap'
|
|
22
|
+
| 'rnb'
|
|
23
|
+
| 'jazz'
|
|
24
|
+
| 'kpop'
|
|
25
|
+
| 'trance'
|
|
26
|
+
| 'gameOst';
|
|
27
|
+
|
|
28
|
+
export interface StreamingPlatform {
|
|
29
|
+
name: string;
|
|
30
|
+
targetLufs: number;
|
|
31
|
+
ceilingDb: number;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
export type SoloProcessor =
|
|
35
|
+
| 'dynamics.brickwallLimiter'
|
|
36
|
+
| 'dynamics.compressor'
|
|
37
|
+
| 'dynamics.deesser'
|
|
38
|
+
| 'dynamics.expander'
|
|
39
|
+
| 'dynamics.gate'
|
|
40
|
+
| 'dynamics.limiter'
|
|
41
|
+
| 'dynamics.parallelComp'
|
|
42
|
+
| 'dynamics.sidechainRouter'
|
|
43
|
+
| 'dynamics.duckingProcessor'
|
|
44
|
+
| 'dynamics.transientShaper'
|
|
45
|
+
| 'dynamics.upwardCompressor'
|
|
46
|
+
| 'dynamics.upwardExpander'
|
|
47
|
+
| 'dynamics.vocalRider'
|
|
48
|
+
| 'eq.apiStyle'
|
|
49
|
+
| 'eq.bandPass'
|
|
50
|
+
| 'eq.cutFilter'
|
|
51
|
+
| 'eq.dynamic'
|
|
52
|
+
| 'eq.equalizer'
|
|
53
|
+
| 'eq.graphic'
|
|
54
|
+
| 'eq.linearPhase'
|
|
55
|
+
| 'eq.midSide'
|
|
56
|
+
| 'eq.minimumPhase'
|
|
57
|
+
| 'eq.parametric'
|
|
58
|
+
| 'eq.pultec'
|
|
59
|
+
| 'eq.shelving'
|
|
60
|
+
| 'eq.tilt'
|
|
61
|
+
| 'final.bitDepth'
|
|
62
|
+
| 'final.dither'
|
|
63
|
+
| 'final.outputChain'
|
|
64
|
+
| 'maximizer.adaptiveRelease'
|
|
65
|
+
| 'maximizer.loudnessOptimize'
|
|
66
|
+
| 'maximizer.maximizer'
|
|
67
|
+
| 'maximizer.softKneeMax'
|
|
68
|
+
| 'maximizer.truePeakLimiter'
|
|
69
|
+
| 'multiband.compressor'
|
|
70
|
+
| 'multiband.dynamicEq'
|
|
71
|
+
| 'multiband.expander'
|
|
72
|
+
| 'multiband.imager'
|
|
73
|
+
| 'multiband.limiter'
|
|
74
|
+
| 'multiband.saturation'
|
|
75
|
+
| 'repair.declick'
|
|
76
|
+
| 'repair.declip'
|
|
77
|
+
| 'repair.decrackle'
|
|
78
|
+
| 'repair.dehum'
|
|
79
|
+
| 'repair.denoiseClassical'
|
|
80
|
+
| 'repair.dereverbClassical'
|
|
81
|
+
| 'repair.trimSilence'
|
|
82
|
+
| 'saturation.bitcrusher'
|
|
83
|
+
| 'saturation.exciter'
|
|
84
|
+
| 'saturation.hardClipper'
|
|
85
|
+
| 'saturation.multibandExciter'
|
|
86
|
+
| 'saturation.ampSim'
|
|
87
|
+
| 'saturation.softClipper'
|
|
88
|
+
| 'saturation.tape'
|
|
89
|
+
| 'saturation.transformer'
|
|
90
|
+
| 'saturation.tube'
|
|
91
|
+
| 'saturation.waveshaper'
|
|
92
|
+
| 'spectral.airBand'
|
|
93
|
+
| 'spectral.lowEndFocus'
|
|
94
|
+
| 'spectral.presenceEnhancer'
|
|
95
|
+
| 'spectral.spectralShaper'
|
|
96
|
+
| 'stereo.autoPan'
|
|
97
|
+
| 'stereo.haasEnhancer'
|
|
98
|
+
| 'stereo.imager'
|
|
99
|
+
| 'stereo.monoMaker'
|
|
100
|
+
| 'stereo.phaseAlign'
|
|
101
|
+
| 'stereo.stereoBalance';
|
|
102
|
+
|
|
103
|
+
export type PairProcessor =
|
|
104
|
+
| 'match.applyMatchEq'
|
|
105
|
+
| 'match.alignReferenceToSource'
|
|
106
|
+
| 'match.abSwitch'
|
|
107
|
+
| 'match.abCrossfade';
|
|
108
|
+
|
|
109
|
+
export type PairAnalysis =
|
|
110
|
+
| 'match.referenceLoudness'
|
|
111
|
+
| 'match.tonalBalance'
|
|
112
|
+
| 'match.tonalBalanceLogBands'
|
|
113
|
+
| 'match.matchEqCurve'
|
|
114
|
+
| 'match.estimateReferenceDelaySamples';
|
|
115
|
+
|
|
116
|
+
export type StereoAnalysis = 'stereo.monoCompatCheck' | 'stereo.monoCompatCheckLogBands';
|
|
117
|
+
|
|
118
|
+
/** Options for `mastering`. All fields are optional. */
|
|
119
|
+
export interface MasteringOptions {
|
|
120
|
+
/** Target integrated LUFS. Default -14. */
|
|
121
|
+
targetLufs?: number;
|
|
122
|
+
/** True/sample peak ceiling in dBFS. Default -1. */
|
|
123
|
+
ceilingDb?: number;
|
|
124
|
+
/** Oversampling factor used for peak estimation. Default 4. */
|
|
125
|
+
truePeakOversample?: number;
|
|
126
|
+
/** Post true-peak limiter release in ms. Default 0 => library default (50 ms). */
|
|
127
|
+
releaseMs?: number;
|
|
128
|
+
/** Apply the static loudness gain at the input (pre-oversample) rate. Default false. */
|
|
129
|
+
applyGainAtInputRate?: boolean;
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
/**
|
|
133
|
+
* Mastering loudness/true-peak processing result
|
|
134
|
+
*/
|
|
135
|
+
export interface MasteringResult {
|
|
136
|
+
samples: Float32Array;
|
|
137
|
+
sampleRate: number;
|
|
138
|
+
inputLufs: number;
|
|
139
|
+
outputLufs: number;
|
|
140
|
+
appliedGainDb: number;
|
|
141
|
+
latencySamples?: number;
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
export type MasteringProcessorParams = Record<string, number | boolean>;
|
|
145
|
+
|
|
146
|
+
export interface MasteringChainConfig {
|
|
147
|
+
repair?: {
|
|
148
|
+
denoise?: boolean;
|
|
149
|
+
nFft?: number;
|
|
150
|
+
hopLength?: number;
|
|
151
|
+
ddAlpha?: number;
|
|
152
|
+
gainFloor?: number;
|
|
153
|
+
declick?: {
|
|
154
|
+
threshold?: number;
|
|
155
|
+
neighborRatio?: number;
|
|
156
|
+
maxClickSamples?: number;
|
|
157
|
+
lpcOrder?: number;
|
|
158
|
+
residualRatio?: number;
|
|
159
|
+
};
|
|
160
|
+
dereverb?: {
|
|
161
|
+
threshold?: number;
|
|
162
|
+
attenuation?: number;
|
|
163
|
+
nFft?: number;
|
|
164
|
+
hopLength?: number;
|
|
165
|
+
t60Sec?: number;
|
|
166
|
+
lateDelayMs?: number;
|
|
167
|
+
overSubtraction?: number;
|
|
168
|
+
spectralFloor?: number;
|
|
169
|
+
wpeEnabled?: boolean;
|
|
170
|
+
wpeIterations?: number;
|
|
171
|
+
wpeTaps?: number;
|
|
172
|
+
wpeStrength?: number;
|
|
173
|
+
};
|
|
174
|
+
};
|
|
175
|
+
eq?: {
|
|
176
|
+
tiltDb?: number;
|
|
177
|
+
pivotHz?: number;
|
|
178
|
+
};
|
|
179
|
+
dynamics?: {
|
|
180
|
+
compressor?: {
|
|
181
|
+
thresholdDb?: number;
|
|
182
|
+
ratio?: number;
|
|
183
|
+
attackMs?: number;
|
|
184
|
+
releaseMs?: number;
|
|
185
|
+
kneeDb?: number;
|
|
186
|
+
makeupGainDb?: number;
|
|
187
|
+
autoMakeup?: boolean;
|
|
188
|
+
};
|
|
189
|
+
deesser?: {
|
|
190
|
+
frequencyHz?: number;
|
|
191
|
+
thresholdDb?: number;
|
|
192
|
+
ratio?: number;
|
|
193
|
+
attackMs?: number;
|
|
194
|
+
releaseMs?: number;
|
|
195
|
+
rangeDb?: number;
|
|
196
|
+
bandpassQ?: number;
|
|
197
|
+
};
|
|
198
|
+
transientShaper?: {
|
|
199
|
+
attackGainDb?: number;
|
|
200
|
+
sustainGainDb?: number;
|
|
201
|
+
fastAttackMs?: number;
|
|
202
|
+
fastReleaseMs?: number;
|
|
203
|
+
slowAttackMs?: number;
|
|
204
|
+
slowReleaseMs?: number;
|
|
205
|
+
sensitivity?: number;
|
|
206
|
+
maxGainDb?: number;
|
|
207
|
+
gainSmoothingMs?: number;
|
|
208
|
+
lookaheadMs?: number;
|
|
209
|
+
};
|
|
210
|
+
multibandComp?: {
|
|
211
|
+
lowCutoffHz?: number;
|
|
212
|
+
highCutoffHz?: number;
|
|
213
|
+
lowThresholdDb?: number;
|
|
214
|
+
lowRatio?: number;
|
|
215
|
+
lowAttackMs?: number;
|
|
216
|
+
lowReleaseMs?: number;
|
|
217
|
+
midThresholdDb?: number;
|
|
218
|
+
midRatio?: number;
|
|
219
|
+
midAttackMs?: number;
|
|
220
|
+
midReleaseMs?: number;
|
|
221
|
+
highThresholdDb?: number;
|
|
222
|
+
highRatio?: number;
|
|
223
|
+
highAttackMs?: number;
|
|
224
|
+
highReleaseMs?: number;
|
|
225
|
+
};
|
|
226
|
+
};
|
|
227
|
+
saturation?: {
|
|
228
|
+
tape?: {
|
|
229
|
+
driveDb?: number;
|
|
230
|
+
saturation?: number;
|
|
231
|
+
hysteresis?: number;
|
|
232
|
+
outputGainDb?: number;
|
|
233
|
+
speedIps?: number;
|
|
234
|
+
headBumpDb?: number;
|
|
235
|
+
bias?: number;
|
|
236
|
+
gapLoss?: number;
|
|
237
|
+
};
|
|
238
|
+
exciter?: {
|
|
239
|
+
frequencyHz?: number;
|
|
240
|
+
driveDb?: number;
|
|
241
|
+
amount?: number;
|
|
242
|
+
q?: number;
|
|
243
|
+
evenOddMix?: number;
|
|
244
|
+
};
|
|
245
|
+
};
|
|
246
|
+
spectral?: {
|
|
247
|
+
airBand?: {
|
|
248
|
+
amount?: number;
|
|
249
|
+
shelfFrequencyHz?: number;
|
|
250
|
+
dynamicThresholdDb?: number;
|
|
251
|
+
dynamicRangeDb?: number;
|
|
252
|
+
};
|
|
253
|
+
};
|
|
254
|
+
stereo?: {
|
|
255
|
+
imager?: {
|
|
256
|
+
width?: number;
|
|
257
|
+
outputGainDb?: number;
|
|
258
|
+
decorrelationAmount?: number;
|
|
259
|
+
preserveEnergy?: boolean;
|
|
260
|
+
};
|
|
261
|
+
monoMaker?: {
|
|
262
|
+
amount?: number;
|
|
263
|
+
};
|
|
264
|
+
};
|
|
265
|
+
maximizer?: {
|
|
266
|
+
truePeakLimiter?: {
|
|
267
|
+
ceilingDb?: number;
|
|
268
|
+
lookaheadMs?: number;
|
|
269
|
+
releaseMs?: number;
|
|
270
|
+
oversampleFactor?: number;
|
|
271
|
+
applyGainAtInputRate?: boolean;
|
|
272
|
+
};
|
|
273
|
+
};
|
|
274
|
+
loudness?: {
|
|
275
|
+
targetLufs?: number;
|
|
276
|
+
ceilingDb?: number;
|
|
277
|
+
truePeakOversample?: number;
|
|
278
|
+
};
|
|
279
|
+
}
|
|
280
|
+
|
|
281
|
+
/**
|
|
282
|
+
* Configuration for the block-by-block {@link StreamingMasteringChain}.
|
|
283
|
+
*
|
|
284
|
+
* Extends {@link MasteringChainConfig} with optional precomputed loudness
|
|
285
|
+
* parameters. The streaming chain cannot measure whole-signal integrated LUFS,
|
|
286
|
+
* so an enabled `loudness` stage normally throws at construction. To let a
|
|
287
|
+
* preset's streaming preview match its offline render, the caller may
|
|
288
|
+
* precompute the loudness normalization gain offline (e.g.
|
|
289
|
+
* `targetLufs - measuredIntegratedLufs`) and supply it here.
|
|
290
|
+
*/
|
|
291
|
+
export interface StreamingMasteringChainConfig extends MasteringChainConfig {
|
|
292
|
+
/**
|
|
293
|
+
* Precomputed static loudness gain in dB. When omitted (the default), an
|
|
294
|
+
* enabled `loudness` stage still throws. When provided and `loudness.enabled`
|
|
295
|
+
* is set, the chain applies this fixed gain per block before the loudness
|
|
296
|
+
* stage's true-peak limiter instead of throwing.
|
|
297
|
+
*/
|
|
298
|
+
loudnessStaticGainDb?: number;
|
|
299
|
+
|
|
300
|
+
/**
|
|
301
|
+
* Offline-measured true-peak (dBFS) of the source the static gain was
|
|
302
|
+
* computed for. When provided, the static gain is clamped to
|
|
303
|
+
* `loudness.ceilingDb - loudnessStaticGainPeakDb` so the streaming preview
|
|
304
|
+
* does not drive the loudness limiter harder than the offline chain. When
|
|
305
|
+
* omitted (the default) the static gain is applied verbatim.
|
|
306
|
+
*/
|
|
307
|
+
loudnessStaticGainPeakDb?: number;
|
|
308
|
+
}
|
|
309
|
+
|
|
310
|
+
export interface MasteringChainResult extends MasteringResult {
|
|
311
|
+
stages: string[];
|
|
312
|
+
}
|
|
313
|
+
|
|
314
|
+
export interface MasteringStereoChainResult {
|
|
315
|
+
left: Float32Array;
|
|
316
|
+
right: Float32Array;
|
|
317
|
+
sampleRate: number;
|
|
318
|
+
inputLufs: number;
|
|
319
|
+
outputLufs: number;
|
|
320
|
+
appliedGainDb: number;
|
|
321
|
+
stages: string[];
|
|
322
|
+
latencySamples?: number;
|
|
323
|
+
}
|
|
324
|
+
|
|
325
|
+
export interface MasteringStereoResult {
|
|
326
|
+
left: Float32Array;
|
|
327
|
+
right: Float32Array;
|
|
328
|
+
sampleRate: number;
|
|
329
|
+
inputLufs: number;
|
|
330
|
+
outputLufs: number;
|
|
331
|
+
appliedGainDb: number;
|
|
332
|
+
latencySamples: number;
|
|
333
|
+
}
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
export type PanMode = 'balance' | 'stereoPan' | 'stereo-pan' | 'dualPan' | 'dual-pan' | number;
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Surround pan position for a strip feeding a >2-channel bus. Phase 1 honors
|
|
5
|
+
* `azimuth`/`divergence`/`lfe`; `elevation`/`distance` are reserved. All fields
|
|
6
|
+
* are optional and default to a centered point source.
|
|
7
|
+
*/
|
|
8
|
+
export interface SurroundPan {
|
|
9
|
+
/** -180..180 deg, 0 = front-center, positive = right. */
|
|
10
|
+
azimuth?: number;
|
|
11
|
+
/** Reserved (no height beds in phase 1). */
|
|
12
|
+
elevation?: number;
|
|
13
|
+
/** 0 = point source, 1 = spread across the front. */
|
|
14
|
+
divergence?: number;
|
|
15
|
+
/** 0..1 scalar send into the LFE plane. */
|
|
16
|
+
lfe?: number;
|
|
17
|
+
/** Reserved (focus/spread), defaults to 1. */
|
|
18
|
+
distance?: number;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
export interface MixOptions {
|
|
22
|
+
inputTrimDb?: number | number[];
|
|
23
|
+
faderDb?: number | number[];
|
|
24
|
+
pan?: number | number[];
|
|
25
|
+
panMode?: PanMode | PanMode[];
|
|
26
|
+
width?: number | number[];
|
|
27
|
+
muted?: boolean | boolean[];
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
export interface MixMeterSnapshot {
|
|
31
|
+
peakDbL: number;
|
|
32
|
+
peakDbR: number;
|
|
33
|
+
rmsDbL: number;
|
|
34
|
+
rmsDbR: number;
|
|
35
|
+
correlation: number;
|
|
36
|
+
monoCompatWidth: number;
|
|
37
|
+
monoCompatPeak: number;
|
|
38
|
+
monoCompatSideRms: number;
|
|
39
|
+
likelyMonoCompatible: boolean;
|
|
40
|
+
momentaryLufs: number;
|
|
41
|
+
shortTermLufs: number;
|
|
42
|
+
integratedLufs: number;
|
|
43
|
+
gainReductionDb: number;
|
|
44
|
+
truePeakDbL: number;
|
|
45
|
+
truePeakDbR: number;
|
|
46
|
+
maxTruePeakDb: number;
|
|
47
|
+
seq: number;
|
|
48
|
+
/** Number of valid surround planes (5.1/7.1); 0 before the meter sees audio. */
|
|
49
|
+
channelCount: number;
|
|
50
|
+
/** Per-plane peak dB, length channelCount; [0]/[1] mirror peakDbL/peakDbR. */
|
|
51
|
+
peakDb: number[];
|
|
52
|
+
/** Per-plane RMS dB, length channelCount; [0]/[1] mirror rmsDbL/rmsDbR. */
|
|
53
|
+
rmsDb: number[];
|
|
54
|
+
/** Per-plane true-peak dB, length channelCount; [0]/[1] mirror truePeakDbL/R. */
|
|
55
|
+
truePeakDb: number[];
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
export interface MixResult {
|
|
59
|
+
left: Float32Array;
|
|
60
|
+
right: Float32Array;
|
|
61
|
+
sampleRate: number;
|
|
62
|
+
meters: MixMeterSnapshot[];
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
/** Mixed stereo master returned by {@link Mixer.processStereo}. */
|
|
66
|
+
export interface MixerProcessResult {
|
|
67
|
+
left: Float32Array;
|
|
68
|
+
right: Float32Array;
|
|
69
|
+
sampleRate: number;
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
/**
|
|
73
|
+
* Interpolation curve for scheduled automation events
|
|
74
|
+
* (see {@link Mixer.scheduleInsertAutomation}).
|
|
75
|
+
*/
|
|
76
|
+
export type AutomationCurve = 'linear' | 'exponential' | 'hold' | 's-curve';
|
|
77
|
+
|
|
78
|
+
/**
|
|
79
|
+
* Pan law applied when computing left/right gains from a pan position
|
|
80
|
+
* (see {@link Mixer.setPanLaw}). Maps to the underlying integer code.
|
|
81
|
+
*/
|
|
82
|
+
export type PanLaw = 'const3dB' | 'const4.5dB' | 'const6dB' | 'linear0dB';
|
|
83
|
+
|
|
84
|
+
/**
|
|
85
|
+
* Meter tap point for reading a strip's meter snapshot
|
|
86
|
+
* (see {@link Mixer.meterTap} and {@link Mixer.stripMeter}).
|
|
87
|
+
*/
|
|
88
|
+
export type MeterTap = 'preFader' | 'postFader';
|
|
89
|
+
|
|
90
|
+
/** Pre/post-fader send timing (see {@link Mixer.addSend}). */
|
|
91
|
+
export type SendTiming = 'preFader' | 'postFader';
|
|
92
|
+
|
|
93
|
+
/** A single goniometer (left/right) sample returned by {@link Mixer.readGoniometerLatest}. */
|
|
94
|
+
export interface GoniometerPoint {
|
|
95
|
+
left: number;
|
|
96
|
+
right: number;
|
|
97
|
+
}
|