@libraz/libsonare 1.7.2 → 1.8.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.
Files changed (303) hide show
  1. package/NOTICE +178 -0
  2. package/README.md +26 -203
  3. package/dist/_chain_config.d.ts +14 -0
  4. package/dist/_chain_config.d.ts.map +1 -0
  5. package/dist/_effects_common.d.ts +6 -0
  6. package/dist/_effects_common.d.ts.map +1 -0
  7. package/dist/_feature_validation.d.ts +8 -0
  8. package/dist/_feature_validation.d.ts.map +1 -0
  9. package/dist/_fft_options.d.ts +24 -0
  10. package/dist/_fft_options.d.ts.map +1 -0
  11. package/dist/align_take.d.ts +50 -0
  12. package/dist/align_take.d.ts.map +1 -0
  13. package/dist/analysis.d.ts +29 -5840
  14. package/dist/analysis.d.ts.map +1 -0
  15. package/dist/analysis.js +873 -722
  16. package/dist/analysis.js.map +1 -1
  17. package/dist/analysis_helpers.d.ts +9 -0
  18. package/dist/analysis_helpers.d.ts.map +1 -0
  19. package/dist/audio.d.ts +163 -0
  20. package/dist/audio.d.ts.map +1 -0
  21. package/dist/clip_page_streamer.d.ts +133 -0
  22. package/dist/clip_page_streamer.d.ts.map +1 -0
  23. package/dist/codes.d.ts +44 -0
  24. package/dist/codes.d.ts.map +1 -0
  25. package/dist/effects_mastering.d.ts +23 -0
  26. package/dist/effects_mastering.d.ts.map +1 -0
  27. package/dist/effects_note_ops.d.ts +477 -0
  28. package/dist/effects_note_ops.d.ts.map +1 -0
  29. package/dist/effects_percussive.d.ts +185 -0
  30. package/dist/effects_percussive.d.ts.map +1 -0
  31. package/dist/effects_separation.d.ts +65 -0
  32. package/dist/effects_separation.d.ts.map +1 -0
  33. package/dist/effects_spectral.d.ts +28 -0
  34. package/dist/effects_spectral.d.ts.map +1 -0
  35. package/dist/effects_timepitch.d.ts +129 -0
  36. package/dist/effects_timepitch.d.ts.map +1 -0
  37. package/dist/effects_voice_change.d.ts +53 -0
  38. package/dist/effects_voice_change.d.ts.map +1 -0
  39. package/dist/errors.d.ts +51 -0
  40. package/dist/errors.d.ts.map +1 -0
  41. package/dist/feature_core.d.ts +341 -0
  42. package/dist/feature_core.d.ts.map +1 -0
  43. package/dist/feature_decompose.d.ts +278 -0
  44. package/dist/feature_decompose.d.ts.map +1 -0
  45. package/dist/feature_inverse.d.ts +128 -0
  46. package/dist/feature_inverse.d.ts.map +1 -0
  47. package/dist/feature_loudness.d.ts +66 -0
  48. package/dist/feature_loudness.d.ts.map +1 -0
  49. package/dist/feature_music.d.ts +307 -0
  50. package/dist/feature_music.d.ts.map +1 -0
  51. package/dist/feature_pitch.d.ts +108 -0
  52. package/dist/feature_pitch.d.ts.map +1 -0
  53. package/dist/feature_resample.d.ts +16 -0
  54. package/dist/feature_resample.d.ts.map +1 -0
  55. package/dist/feature_spectral.d.ts +137 -0
  56. package/dist/feature_spectral.d.ts.map +1 -0
  57. package/dist/feature_spectrogram.d.ts +198 -0
  58. package/dist/feature_spectrogram.d.ts.map +1 -0
  59. package/dist/features.d.ts +10 -0
  60. package/dist/features.d.ts.map +1 -0
  61. package/dist/hrtf/default.shrf +0 -0
  62. package/dist/index.d.ts +74 -7431
  63. package/dist/index.d.ts.map +1 -0
  64. package/dist/index.js +3758 -1362
  65. package/dist/index.js.map +1 -1
  66. package/dist/instrument_types.d.ts +517 -0
  67. package/dist/instrument_types.d.ts.map +1 -0
  68. package/dist/live_audio.d.ts +35 -0
  69. package/dist/live_audio.d.ts.map +1 -0
  70. package/dist/mastering_chain.d.ts +213 -0
  71. package/dist/mastering_chain.d.ts.map +1 -0
  72. package/dist/mastering_core.d.ts +457 -0
  73. package/dist/mastering_core.d.ts.map +1 -0
  74. package/dist/mastering_dynamics.d.ts +80 -0
  75. package/dist/mastering_dynamics.d.ts.map +1 -0
  76. package/dist/metering.d.ts +287 -0
  77. package/dist/metering.d.ts.map +1 -0
  78. package/dist/mixer.d.ts +464 -0
  79. package/dist/mixer.d.ts.map +1 -0
  80. package/dist/mixing_assistant.d.ts +62 -0
  81. package/dist/mixing_assistant.d.ts.map +1 -0
  82. package/dist/mixing_oneshot.d.ts +40 -0
  83. package/dist/mixing_oneshot.d.ts.map +1 -0
  84. package/dist/module_state.d.ts +15 -0
  85. package/dist/module_state.d.ts.map +1 -0
  86. package/dist/opfs_clip_pages.d.ts +28 -0
  87. package/dist/opfs_clip_pages.d.ts.map +1 -0
  88. package/dist/playback_renderer.d.ts +128 -0
  89. package/dist/playback_renderer.d.ts.map +1 -0
  90. package/dist/polyphony.d.ts +202 -0
  91. package/dist/polyphony.d.ts.map +1 -0
  92. package/dist/project.d.ts +8 -0
  93. package/dist/project.d.ts.map +1 -0
  94. package/dist/project_class.d.ts +562 -0
  95. package/dist/project_class.d.ts.map +1 -0
  96. package/dist/project_internal.d.ts +194 -0
  97. package/dist/project_internal.d.ts.map +1 -0
  98. package/dist/project_synth.d.ts +74 -0
  99. package/dist/project_synth.d.ts.map +1 -0
  100. package/dist/project_types.d.ts +652 -0
  101. package/dist/project_types.d.ts.map +1 -0
  102. package/dist/public_types.d.ts +185 -0
  103. package/dist/public_types.d.ts.map +1 -0
  104. package/dist/public_types_acoustic.d.ts +215 -0
  105. package/dist/public_types_acoustic.d.ts.map +1 -0
  106. package/dist/public_types_mastering.d.ts +510 -0
  107. package/dist/public_types_mastering.d.ts.map +1 -0
  108. package/dist/public_types_mixing.d.ts +436 -0
  109. package/dist/public_types_mixing.d.ts.map +1 -0
  110. package/dist/public_types_music.d.ts +619 -0
  111. package/dist/public_types_music.d.ts.map +1 -0
  112. package/dist/public_types_playback.d.ts +164 -0
  113. package/dist/public_types_playback.d.ts.map +1 -0
  114. package/dist/public_types_realtime.d.ts +174 -0
  115. package/dist/public_types_realtime.d.ts.map +1 -0
  116. package/dist/public_types_repair.d.ts +424 -0
  117. package/dist/public_types_repair.d.ts.map +1 -0
  118. package/dist/public_types_spectral.d.ts +697 -0
  119. package/dist/public_types_spectral.d.ts.map +1 -0
  120. package/dist/quick_analysis.d.ts +445 -0
  121. package/dist/quick_analysis.d.ts.map +1 -0
  122. package/dist/realtime_engine.d.ts +850 -0
  123. package/dist/realtime_engine.d.ts.map +1 -0
  124. package/dist/realtime_voice_changer.d.ts +158 -0
  125. package/dist/realtime_voice_changer.d.ts.map +1 -0
  126. package/dist/repair_dereverb.d.ts +187 -0
  127. package/dist/repair_dereverb.d.ts.map +1 -0
  128. package/dist/repair_impulsive.d.ts +186 -0
  129. package/dist/repair_impulsive.d.ts.map +1 -0
  130. package/dist/repair_noise.d.ts +239 -0
  131. package/dist/repair_noise.d.ts.map +1 -0
  132. package/dist/repair_trim.d.ts +123 -0
  133. package/dist/repair_trim.d.ts.map +1 -0
  134. package/dist/sample_bank.d.ts +84 -0
  135. package/dist/sample_bank.d.ts.map +1 -0
  136. package/dist/scale.d.ts +10 -0
  137. package/dist/scale.d.ts.map +1 -0
  138. package/dist/schemas/mixer-scene.schema.json +393 -0
  139. package/dist/schemas/playback-renderer-config.schema.json +392 -0
  140. package/dist/sonare-analysis.d.ts +8 -0
  141. package/dist/sonare-analysis.js +2 -2
  142. package/dist/sonare-analysis.wasm +0 -0
  143. package/dist/sonare.d.ts +3909 -0
  144. package/dist/sonare.js +2 -2
  145. package/dist/sonare.wasm +0 -0
  146. package/dist/stream_analyzer.d.ts +163 -0
  147. package/dist/stream_analyzer.d.ts.map +1 -0
  148. package/dist/stream_types.d.ts +214 -0
  149. package/dist/stream_types.d.ts.map +1 -0
  150. package/dist/streaming_mixing.d.ts +6 -0
  151. package/dist/streaming_mixing.d.ts.map +1 -0
  152. package/dist/streaming_processors.d.ts +335 -0
  153. package/dist/streaming_processors.d.ts.map +1 -0
  154. package/dist/transcribe.d.ts +77 -0
  155. package/dist/transcribe.d.ts.map +1 -0
  156. package/dist/validation.d.ts +140 -0
  157. package/dist/validation.d.ts.map +1 -0
  158. package/dist/web_midi.d.ts +77 -0
  159. package/dist/web_midi.d.ts.map +1 -0
  160. package/dist/worker.d.ts +5 -48
  161. package/dist/worker.d.ts.map +1 -0
  162. package/dist/worker.js +94 -41
  163. package/dist/worker.js.map +1 -1
  164. package/dist/worker_client.d.ts +96 -0
  165. package/dist/worker_client.d.ts.map +1 -0
  166. package/dist/worker_protocol.d.ts +43 -0
  167. package/dist/worker_protocol.d.ts.map +1 -0
  168. package/dist/worklet/audio_types.d.ts +21 -0
  169. package/dist/worklet/audio_types.d.ts.map +1 -0
  170. package/dist/worklet/engine-automation.d.ts +29 -0
  171. package/dist/worklet/engine-automation.d.ts.map +1 -0
  172. package/dist/worklet/engine-capture-facade.d.ts +35 -0
  173. package/dist/worklet/engine-capture-facade.d.ts.map +1 -0
  174. package/dist/worklet/engine-clips.d.ts +23 -0
  175. package/dist/worklet/engine-clips.d.ts.map +1 -0
  176. package/dist/worklet/engine-markers.d.ts +40 -0
  177. package/dist/worklet/engine-markers.d.ts.map +1 -0
  178. package/dist/worklet/engine-mixer-facade.d.ts +128 -0
  179. package/dist/worklet/engine-mixer-facade.d.ts.map +1 -0
  180. package/dist/worklet/engine-node.d.ts +81 -0
  181. package/dist/worklet/engine-node.d.ts.map +1 -0
  182. package/dist/worklet/engine-offline.d.ts +81 -0
  183. package/dist/worklet/engine-offline.d.ts.map +1 -0
  184. package/dist/worklet/engine-options.d.ts +12 -0
  185. package/dist/worklet/engine-options.d.ts.map +1 -0
  186. package/dist/worklet/engine-parameter-facade.d.ts +106 -0
  187. package/dist/worklet/engine-parameter-facade.d.ts.map +1 -0
  188. package/dist/worklet/engine-processor.d.ts +68 -0
  189. package/dist/worklet/engine-processor.d.ts.map +1 -0
  190. package/dist/worklet/engine-register.d.ts +2 -0
  191. package/dist/worklet/engine-register.d.ts.map +1 -0
  192. package/dist/worklet/engine-strips.d.ts +73 -0
  193. package/dist/worklet/engine-strips.d.ts.map +1 -0
  194. package/dist/worklet/engine-sync.d.ts +37 -0
  195. package/dist/worklet/engine-sync.d.ts.map +1 -0
  196. package/dist/worklet/engine-tempo-facade.d.ts +48 -0
  197. package/dist/worklet/engine-tempo-facade.d.ts.map +1 -0
  198. package/dist/worklet/engine.d.ts +397 -0
  199. package/dist/worklet/engine.d.ts.map +1 -0
  200. package/dist/worklet/guards.d.ts +47 -0
  201. package/dist/worklet/guards.d.ts.map +1 -0
  202. package/dist/worklet/messages.d.ts +710 -0
  203. package/dist/worklet/messages.d.ts.map +1 -0
  204. package/dist/worklet/mixer-processor.d.ts +46 -0
  205. package/dist/worklet/mixer-processor.d.ts.map +1 -0
  206. package/dist/worklet/playback-processor.d.ts +62 -0
  207. package/dist/worklet/playback-processor.d.ts.map +1 -0
  208. package/dist/worklet/protocol.d.ts +323 -0
  209. package/dist/worklet/protocol.d.ts.map +1 -0
  210. package/dist/worklet/voice-changer-processor.d.ts +41 -0
  211. package/dist/worklet/voice-changer-processor.d.ts.map +1 -0
  212. package/dist/worklet.d.ts +16 -2515
  213. package/dist/worklet.d.ts.map +1 -0
  214. package/dist/worklet.js +2763 -501
  215. package/dist/worklet.js.map +1 -1
  216. package/package.json +23 -12
  217. package/src/_effects_common.ts +17 -0
  218. package/src/_feature_validation.ts +34 -0
  219. package/src/_fft_options.ts +39 -0
  220. package/src/align_take.ts +64 -0
  221. package/src/analysis.ts +56 -3
  222. package/src/analysis_helpers.ts +7 -0
  223. package/src/audio.ts +106 -3
  224. package/src/codes.ts +39 -2
  225. package/src/effects_mastering.ts +97 -22
  226. package/src/effects_note_ops.ts +635 -0
  227. package/src/effects_percussive.ts +217 -0
  228. package/src/effects_separation.ts +150 -0
  229. package/src/effects_spectral.ts +60 -0
  230. package/src/effects_timepitch.ts +377 -0
  231. package/src/errors.ts +23 -1
  232. package/src/feature_core.ts +127 -2
  233. package/src/feature_decompose.ts +633 -0
  234. package/src/feature_inverse.ts +454 -0
  235. package/src/feature_loudness.ts +125 -0
  236. package/src/feature_music.ts +107 -14
  237. package/src/feature_pitch.ts +96 -1
  238. package/src/feature_spectral.ts +16 -611
  239. package/src/feature_spectrogram.ts +63 -450
  240. package/src/features.ts +36 -22
  241. package/src/index.ts +282 -30
  242. package/src/instrument_types.ts +645 -0
  243. package/src/live_audio.ts +27 -1
  244. package/src/mastering_chain.ts +184 -0
  245. package/src/mastering_core.ts +346 -32
  246. package/src/mastering_dynamics.ts +22 -11
  247. package/src/metering.ts +67 -24
  248. package/src/mixer.ts +212 -3
  249. package/src/mixing_assistant.ts +138 -0
  250. package/src/mixing_oneshot.ts +10 -5
  251. package/src/module_state.ts +24 -2
  252. package/src/playback_renderer.ts +252 -0
  253. package/src/polyphony.ts +279 -0
  254. package/src/project.ts +61 -24
  255. package/src/project_class.ts +450 -27
  256. package/src/project_internal.ts +149 -42
  257. package/src/project_synth.ts +67 -1
  258. package/src/project_types.ts +268 -270
  259. package/src/public_types.ts +122 -3
  260. package/src/public_types_acoustic.ts +112 -3
  261. package/src/public_types_mastering.ts +254 -73
  262. package/src/public_types_mixing.ts +363 -1
  263. package/src/public_types_music.ts +312 -2
  264. package/src/public_types_playback.ts +195 -0
  265. package/src/public_types_realtime.ts +39 -7
  266. package/src/public_types_repair.ts +446 -0
  267. package/src/public_types_spectral.ts +487 -1
  268. package/src/quick_analysis.ts +203 -26
  269. package/src/realtime_engine.ts +711 -28
  270. package/src/realtime_voice_changer.ts +55 -1
  271. package/src/repair_dereverb.ts +299 -0
  272. package/src/repair_impulsive.ts +395 -0
  273. package/src/repair_noise.ts +425 -0
  274. package/src/repair_trim.ts +226 -0
  275. package/src/sample_bank.ts +113 -0
  276. package/src/sonare.js.d.ts +1122 -30
  277. package/src/stream_analyzer.ts +36 -4
  278. package/src/stream_types.ts +37 -0
  279. package/src/streaming_mixing.ts +1 -1
  280. package/src/streaming_processors.ts +194 -10
  281. package/src/transcribe.ts +89 -0
  282. package/src/validation.ts +285 -11
  283. package/src/web_midi.ts +1 -6
  284. package/src/worker.ts +18 -2
  285. package/src/worklet/audio_types.ts +37 -0
  286. package/src/worklet/engine-mixer-facade.ts +444 -10
  287. package/src/worklet/engine-node.ts +78 -26
  288. package/src/worklet/engine-offline.ts +14 -8
  289. package/src/worklet/engine-parameter-facade.ts +21 -0
  290. package/src/worklet/engine-processor.ts +272 -83
  291. package/src/worklet/engine-register.ts +32 -18
  292. package/src/worklet/engine-strips.ts +280 -9
  293. package/src/worklet/engine-sync.ts +14 -6
  294. package/src/worklet/engine.ts +365 -31
  295. package/src/worklet/guards.ts +140 -44
  296. package/src/worklet/messages.ts +227 -2
  297. package/src/worklet/mixer-processor.ts +109 -47
  298. package/src/worklet/playback-processor.ts +300 -0
  299. package/src/worklet/protocol.ts +53 -3
  300. package/src/worklet/voice-changer-processor.ts +17 -11
  301. package/src/worklet.ts +17 -0
  302. package/src/effects_transform.ts +0 -718
  303. package/src/mastering_repair.ts +0 -273
@@ -0,0 +1,510 @@
1
+ /**
2
+ * Built-in mastering presets. The restoration presets — `vinyl`, `tapeHiss`,
3
+ * `fieldRecording`, `voiceMemo` and `shellac78` — enable repair stages only and
4
+ * leave level alone. Every other preset carries an integrated-loudness target
5
+ * and a true-peak ceiling, which are not equally binding: the ceiling always
6
+ * holds, while the loudness target is what one normalization pass aims at.
7
+ *
8
+ * Reaching a target above the input's loudness costs gain the input's peak
9
+ * headroom may not have, so the stage drives its true-peak limiter up to
10
+ * `loudness.maxLimiterGainReductionDb` (12 dB by default) to close the distance
11
+ * and stops there. Material needing more limiting than that — and material where
12
+ * the limiter's own gain reduction takes back part of the applied gain, which a
13
+ * single pass does not re-measure — finishes below target with
14
+ * `loudnessTargetLimited` set on the result. Peak-normalized input, whose
15
+ * headroom is ~0 dB, is the common case for both. Read `outputLufs` for what was
16
+ * achieved rather than assuming the preset's target.
17
+ *
18
+ * The restoration presets' repair stages, like every classical denoise
19
+ * configuration, can mistake a steady tone -- a calibration tone, a drone, a
20
+ * long held note -- for noise and pull it down by the configured reduction
21
+ * depth. Check for musical sustained tones before applying one.
22
+ */
23
+ export type MasteringPreset = 'pop' | 'edm' | 'acoustic' | 'hipHop' | 'aiMusic' | 'speech' | 'streaming' | 'youtube' | 'broadcast' | 'podcast' | 'audiobook' | 'cinema' | 'jpop' | 'ambient' | 'lofi' | 'classical' | 'drumAndBass' | 'techno' | 'metal' | 'trap' | 'rnb' | 'jazz' | 'kpop' | 'trance' | 'gameOst' | 'vinyl' | 'tapeHiss' | 'fieldRecording' | 'voiceMemo' | 'shellac78';
24
+ export interface StreamingPlatform {
25
+ name: string;
26
+ targetLufs: number;
27
+ ceilingDb: number;
28
+ }
29
+ /**
30
+ * Every processor name `masteringProcessorNames()` can return, and therefore
31
+ * every name `masteringProcess` / `masteringProcessStereo` accept.
32
+ */
33
+ export declare const SOLO_PROCESSORS: readonly ["dynamics.brickwallLimiter", "dynamics.compressor", "dynamics.deesser", "dynamics.duckingProcessor", "dynamics.expander", "dynamics.gate", "dynamics.limiter", "dynamics.parallelComp", "dynamics.sidechainRouter", "dynamics.transientShaper", "dynamics.upwardCompressor", "dynamics.upwardExpander", "dynamics.vocalRider", "effects.acoustic.roomMorph", "effects.delay.stereo", "effects.filter.vowel", "effects.modulation.autoWah", "effects.modulation.chorus", "effects.modulation.ensemble", "effects.modulation.flanger", "effects.modulation.phaser", "effects.modulation.pitchShifter", "effects.modulation.ringModulator", "effects.modulation.rotary", "effects.modulation.wah", "effects.reverb.convolution", "effects.reverb.dattorro", "effects.reverb.fdn", "effects.reverb.plate", "effects.reverb.room", "effects.reverb.velvet", "eq.apiStyle", "eq.bandPass", "eq.cutFilter", "eq.dynamic", "eq.equalizer", "eq.graphic", "eq.linearPhase", "eq.midSide", "eq.minimumPhase", "eq.parametric", "eq.pultec", "eq.shelving", "eq.tilt", "final.bitDepth", "final.dither", "final.outputChain", "maximizer.adaptiveRelease", "maximizer.loudnessOptimize", "maximizer.maximizer", "maximizer.softKneeMax", "maximizer.truePeakLimiter", "multiband.compressor", "multiband.dynamicEq", "multiband.expander", "multiband.imager", "multiband.limiter", "multiband.saturation", "repair.declick", "repair.declip", "repair.decrackle", "repair.dehum", "repair.denoiseClassical", "repair.dereverbClassical", "repair.trimSilence", "saturation.ampSim", "saturation.bitcrusher", "saturation.exciter", "saturation.hardClipper", "saturation.multibandExciter", "saturation.softClipper", "saturation.tape", "saturation.transformer", "saturation.tube", "saturation.waveshaper", "spectral.airBand", "spectral.lowEndFocus", "spectral.presenceEnhancer", "spectral.spectralShaper", "stereo.autoPan", "stereo.binaural", "stereo.haasEnhancer", "stereo.imager", "stereo.monoMaker", "stereo.phaseAlign", "stereo.stereoBalance", "utility.gain"];
34
+ export type SoloProcessor = (typeof SOLO_PROCESSORS)[number];
35
+ export type PairProcessor = 'match.applyMatchEq' | 'match.alignReferenceToSource' | 'match.abSwitch' | 'match.abCrossfade';
36
+ export type PairAnalysis = 'match.referenceLoudness' | 'match.tonalBalance' | 'match.tonalBalanceLogBands' | 'match.matchEqCurve' | 'match.estimateReferenceDelaySamples';
37
+ export type StereoAnalysis = 'stereo.monoCompatCheck' | 'stereo.monoCompatCheckLogBands';
38
+ /** Options for `mastering`. All fields are optional. */
39
+ export interface MasteringOptions {
40
+ /** Target integrated LUFS. Default -14. */
41
+ targetLufs?: number;
42
+ /** True/sample peak ceiling in dBFS. Default -1. */
43
+ ceilingDb?: number;
44
+ /** Oversampling factor used for peak estimation. Default 4. */
45
+ truePeakOversample?: number;
46
+ /** Post true-peak limiter release in ms. Default 0 => library default (50 ms). */
47
+ releaseMs?: number;
48
+ /** Apply the static loudness gain at the input (pre-oversample) rate. Default false. */
49
+ applyGainAtInputRate?: boolean;
50
+ }
51
+ /** What gain-matching one take to another's loudness took, and produced. */
52
+ export interface LoudnessMatchResult {
53
+ /** The source take at the reference's loudness. */
54
+ samples: Float32Array;
55
+ sampleRate: number;
56
+ /**
57
+ * The reference take's BS.1770 integrated loudness. Non-finite for a silent
58
+ * or below-gate take — the documented outcome, not a failure.
59
+ */
60
+ referenceLufs: number;
61
+ /** The matched take's, before the gain. Non-finite in the same case. */
62
+ sourceLufs: number;
63
+ /**
64
+ * `referenceLufs - sourceLufs`. Applied with no upper bound, and 0 whenever
65
+ * either loudness is non-finite.
66
+ */
67
+ appliedGainDb: number;
68
+ /**
69
+ * The matched take's true peak after the gain, in dBTP.
70
+ *
71
+ * The match does not cap the gain, so this can sit above 0 dBTP: clamping to
72
+ * headroom would leave a near-full-scale source at its own loudness, which is
73
+ * the one thing a loudness match must not do. Limit downstream if the peak
74
+ * matters more than the match.
75
+ */
76
+ matchedTruePeakDbtp: number;
77
+ }
78
+ /**
79
+ * Mastering loudness/true-peak processing result
80
+ */
81
+ export interface MasteringResult {
82
+ samples: Float32Array;
83
+ sampleRate: number;
84
+ inputLufs: number;
85
+ outputLufs: number;
86
+ appliedGainDb: number;
87
+ /** True when peak headroom prevented the requested LUFS target. */
88
+ loudnessTargetLimited?: boolean;
89
+ latencySamples?: number;
90
+ /**
91
+ * Samples the named processor replaced with a finite in-domain one,
92
+ * keeping the output finite and in range.
93
+ *
94
+ * A non-finite sample supplied by the caller is rejected before the
95
+ * processor runs, so a replacement is always of a value the processor
96
+ * itself produced.
97
+ *
98
+ * Whether this can be non-zero depends on which processor was named: one
99
+ * that does not substitute reports zero because it has nothing to replace
100
+ * with, not because nothing needed replacing. The counter saturates rather
101
+ * than wrapping, because a wrapped total could read as the one value zero
102
+ * is reserved for.
103
+ *
104
+ * @example
105
+ * ```ts
106
+ * const result = masteringProcess({
107
+ * processorName: 'maximizer.truePeakLimiter',
108
+ * samples,
109
+ * sampleRate,
110
+ * });
111
+ * if (result.nonFiniteSubstitutionCount > 0) {
112
+ * // `result.samples` is not derived from `samples` everywhere
113
+ * }
114
+ * ```
115
+ */
116
+ nonFiniteSubstitutionCount: number;
117
+ }
118
+ export type MasteringProcessorParams = Record<string, number | boolean>;
119
+ /**
120
+ * Params accepted by the assistant entry points. Every key is numeric except
121
+ * two NAMES: `targetPlatform`, a delivery target (`'broadcast'`, `'podcast'`,
122
+ * `'club'`, ...), and `preset`, the mastering preset the suggestion starts from
123
+ * (default `'streaming'`; restoration presets are refused). The assistant never
124
+ * picks a preset from the audio. A number is rejected for either: the numeric
125
+ * index the C ABI carries is a transport detail for callers that cannot pass a
126
+ * string, not part of the JavaScript vocabulary.
127
+ */
128
+ export type MasteringAssistantParams = Record<string, number | boolean | string>;
129
+ /**
130
+ * Nested mastering-chain configuration. A boolean toggles a module/processor's
131
+ * `enabled` flag; setting any field implicitly enables its module unless
132
+ * `enabled: false` is also given.
133
+ *
134
+ * Exception — color stages as `masterAudio` overrides: the `saturation.tape`
135
+ * and `saturation.exciter` stages are engaged from an override only when you
136
+ * pass `enabled: true` explicitly. On a preset where they are off, adjusting a
137
+ * parameter alone (e.g. `saturation: { tape: { driveDb: 6 } }`) has no audible
138
+ * effect; use `saturation: { tape: { enabled: true, driveDb: 6 } }`.
139
+ */
140
+ export interface MasteringChainConfig {
141
+ repair?: {
142
+ /** `boolean` is retained as a deprecated shorthand for `{ enabled }`. */
143
+ denoise?: boolean | {
144
+ enabled?: boolean;
145
+ /** 0 = log-MMSE, 1 = MMSE-STSA, 2 = spectral subtraction. */
146
+ mode?: number;
147
+ /** 0 = quantile, 1 = MCRA, 2 = IMCRA, 3 = speech-presence probability. */
148
+ noiseEstimator?: number;
149
+ nFft?: number;
150
+ hopLength?: number;
151
+ ddAlpha?: number;
152
+ reductionDb?: number;
153
+ /** @deprecated Use `reductionDb`; converted to it (dB = -20*log10(gainFloor)). */
154
+ gainFloor?: number;
155
+ overSubtraction?: number;
156
+ spectralFloor?: number;
157
+ noiseEstimationQuantile?: number;
158
+ speechPresenceGain?: boolean;
159
+ gainSmoothing?: boolean;
160
+ };
161
+ nFft?: number;
162
+ hopLength?: number;
163
+ ddAlpha?: number;
164
+ reductionDb?: number;
165
+ /** @deprecated Use `denoise.reductionDb`; converted to it (dB = -20*log10(gainFloor)). */
166
+ gainFloor?: number;
167
+ declip?: {
168
+ enabled?: boolean;
169
+ clipThreshold?: number;
170
+ lpcOrder?: number;
171
+ iterations?: number;
172
+ lpcBlend?: number;
173
+ };
174
+ decrackle?: {
175
+ enabled?: boolean;
176
+ threshold?: number;
177
+ /** 0 = median, 1 = wavelet shrinkage. */
178
+ mode?: number;
179
+ levels?: number;
180
+ };
181
+ dehum?: {
182
+ enabled?: boolean;
183
+ fundamentalHz?: number;
184
+ harmonics?: number;
185
+ q?: number;
186
+ adaptive?: boolean;
187
+ searchRangeHz?: number;
188
+ adaptation?: number;
189
+ frameSize?: number;
190
+ pllBandwidth?: number;
191
+ /** 0 = subtract the tracked harmonics, 1 = cascaded notches. */
192
+ mode?: number;
193
+ };
194
+ declick?: {
195
+ enabled?: boolean;
196
+ threshold?: number;
197
+ neighborRatio?: number;
198
+ maxClickSamples?: number;
199
+ lpcOrder?: number;
200
+ residualRatio?: number;
201
+ };
202
+ dereverb?: {
203
+ enabled?: boolean;
204
+ threshold?: number;
205
+ attenuation?: number;
206
+ nFft?: number;
207
+ hopLength?: number;
208
+ t60Sec?: number;
209
+ lateDelayMs?: number;
210
+ overSubtraction?: number;
211
+ spectralFloor?: number;
212
+ wpeEnabled?: boolean;
213
+ wpeIterations?: number;
214
+ wpeTaps?: number;
215
+ wpeStrength?: number;
216
+ };
217
+ };
218
+ eq?: {
219
+ /** Canonical nested tilt stage. */
220
+ tilt?: {
221
+ enabled?: boolean;
222
+ tiltDb?: number;
223
+ pivotHz?: number;
224
+ };
225
+ /** @deprecated Use `eq.tilt.tiltDb`. */
226
+ tiltDb?: number;
227
+ /** @deprecated Use `eq.tilt.pivotHz`. */
228
+ pivotHz?: number;
229
+ };
230
+ dynamics?: {
231
+ compressor?: {
232
+ enabled?: boolean;
233
+ thresholdDb?: number;
234
+ ratio?: number;
235
+ attackMs?: number;
236
+ releaseMs?: number;
237
+ kneeDb?: number;
238
+ makeupGainDb?: number;
239
+ autoMakeup?: boolean;
240
+ };
241
+ deesser?: {
242
+ enabled?: boolean;
243
+ frequencyHz?: number;
244
+ thresholdDb?: number;
245
+ ratio?: number;
246
+ attackMs?: number;
247
+ releaseMs?: number;
248
+ rangeDb?: number;
249
+ bandpassQ?: number;
250
+ };
251
+ transientShaper?: {
252
+ enabled?: boolean;
253
+ attackGainDb?: number;
254
+ sustainGainDb?: number;
255
+ fastAttackMs?: number;
256
+ fastReleaseMs?: number;
257
+ slowAttackMs?: number;
258
+ slowReleaseMs?: number;
259
+ sensitivity?: number;
260
+ maxGainDb?: number;
261
+ gainSmoothingMs?: number;
262
+ lookaheadMs?: number;
263
+ };
264
+ multibandComp?: {
265
+ enabled?: boolean;
266
+ lowCutoffHz?: number;
267
+ highCutoffHz?: number;
268
+ lowThresholdDb?: number;
269
+ lowRatio?: number;
270
+ lowAttackMs?: number;
271
+ lowReleaseMs?: number;
272
+ midThresholdDb?: number;
273
+ midRatio?: number;
274
+ midAttackMs?: number;
275
+ midReleaseMs?: number;
276
+ highThresholdDb?: number;
277
+ highRatio?: number;
278
+ highAttackMs?: number;
279
+ highReleaseMs?: number;
280
+ };
281
+ };
282
+ saturation?: {
283
+ tape?: {
284
+ enabled?: boolean;
285
+ driveDb?: number;
286
+ saturation?: number;
287
+ hysteresis?: number;
288
+ outputGainDb?: number;
289
+ speedIps?: number;
290
+ headBumpDb?: number;
291
+ bias?: number;
292
+ gapLoss?: number;
293
+ /** Jiles-Atherton core oversampling: 1 (default), 2, or 4. */
294
+ oversampleFactor?: number;
295
+ };
296
+ exciter?: {
297
+ enabled?: boolean;
298
+ frequencyHz?: number;
299
+ driveDb?: number;
300
+ amount?: number;
301
+ q?: number;
302
+ evenOddMix?: number;
303
+ /**
304
+ * Antialiasing mode ordinal: 0 = none, 3 = 4x oversampling. The ADAA
305
+ * modes (1, 2) name a member the exciter does not implement and are
306
+ * rejected; an ordinal outside 0-3 is rejected as out of range.
307
+ */
308
+ aliasing?: number;
309
+ };
310
+ };
311
+ spectral?: {
312
+ airBand?: {
313
+ enabled?: boolean;
314
+ amount?: number;
315
+ shelfFrequencyHz?: number;
316
+ dynamicThresholdDb?: number;
317
+ dynamicRangeDb?: number;
318
+ };
319
+ };
320
+ stereo?: {
321
+ imager?: {
322
+ enabled?: boolean;
323
+ width?: number;
324
+ outputGainDb?: number;
325
+ decorrelationAmount?: number;
326
+ preserveEnergy?: boolean;
327
+ };
328
+ monoMaker?: {
329
+ enabled?: boolean;
330
+ amount?: number;
331
+ frequencyHz?: number;
332
+ };
333
+ };
334
+ maximizer?: {
335
+ truePeakLimiter?: {
336
+ enabled?: boolean;
337
+ ceilingDb?: number;
338
+ lookaheadMs?: number;
339
+ releaseMs?: number;
340
+ oversampleFactor?: number;
341
+ applyGainAtInputRate?: boolean;
342
+ };
343
+ };
344
+ loudness?: {
345
+ enabled?: boolean;
346
+ targetLufs?: number;
347
+ ceilingDb?: number;
348
+ truePeakOversample?: number;
349
+ releaseMs?: number;
350
+ applyGainAtInputRate?: boolean;
351
+ /**
352
+ * How deep, in dB, the stage may drive its post-gain true-peak limiter to
353
+ * reach {@link targetLufs}. Default 12. The static normalization gain may
354
+ * exceed the peak headroom toward `ceilingDb` by this much; `0` restores a
355
+ * strict headroom clamp, under which peak-normalized input keeps its input
356
+ * loudness whatever target is asked for. `ceilingDb` holds at every setting.
357
+ */
358
+ maxLimiterGainReductionDb?: number;
359
+ };
360
+ /**
361
+ * Dot-notation spelling of any leaf above, e.g. `'loudness.targetLufs': -20`
362
+ * beside or instead of `loudness: { targetLufs: -20 }`. It is the form the C
363
+ * ABI carries parameters in, so a caller assembling overrides dynamically can
364
+ * emit it directly; the core validates the key and rejects an unknown one.
365
+ * The nested spelling is canonical — prefer it in hand-written code, where it
366
+ * is checked field by field while a dotted key is only checked at run time.
367
+ */
368
+ [flatKey: `${string}.${string}`]: number | boolean | undefined;
369
+ }
370
+ /**
371
+ * Configuration for the block-by-block {@link StreamingMasteringChain}.
372
+ *
373
+ * Extends {@link MasteringChainConfig} with optional precomputed loudness
374
+ * parameters. The streaming chain cannot measure whole-signal integrated LUFS,
375
+ * so an enabled `loudness` stage normally throws at construction. To let a
376
+ * preset's streaming preview match its offline render, the caller may
377
+ * precompute the loudness normalization gain offline (e.g.
378
+ * `targetLufs - measuredIntegratedLufs`) and supply it here.
379
+ */
380
+ export interface StreamingMasteringChainConfig extends MasteringChainConfig {
381
+ /**
382
+ * Precomputed static loudness gain in dB. When omitted (the default), an
383
+ * enabled `loudness` stage still throws. When provided and `loudness.enabled`
384
+ * is set, the chain applies this fixed gain per block before the loudness
385
+ * stage's true-peak limiter instead of throwing.
386
+ */
387
+ loudnessStaticGainDb?: number;
388
+ /**
389
+ * Offline-measured true-peak (dBFS) of the source the static gain was
390
+ * computed for. When provided, the static gain is clamped to
391
+ * `(loudness.ceilingDb - loudnessStaticGainPeakDb) +
392
+ * max(loudness.maxLimiterGainReductionDb, 0)` so the streaming preview
393
+ * does not drive the loudness limiter harder than the offline chain. When
394
+ * omitted (the default) the static gain is applied verbatim.
395
+ */
396
+ loudnessStaticGainPeakDb?: number;
397
+ }
398
+ /** Gain reduction reported by a single dynamics/maximizer chain stage. */
399
+ export interface StageGainReduction {
400
+ /** Stage identifier, e.g. `"dynamics.compressor"`. */
401
+ stage: string;
402
+ /**
403
+ * Most recent (typically last-block) gain reduction in dB (negative or
404
+ * zero); for multiband stages it is the most-reduced band.
405
+ */
406
+ gainReductionDb: number;
407
+ }
408
+ /** Existing EBU R128 measurements captured before or after mastering. */
409
+ export interface MasteringLoudnessSummary {
410
+ integratedLufs: number;
411
+ maxMomentaryLufs: number;
412
+ maxShortTermLufs: number;
413
+ truePeakDbtp: number;
414
+ loudnessRange: number;
415
+ }
416
+ /** Compact explanation of how an offline mastering chain changed a program. */
417
+ export interface MasteringReport {
418
+ before: MasteringLoudnessSummary;
419
+ after: MasteringLoudnessSummary;
420
+ appliedGainDb: number;
421
+ maxGainReductionDb: number;
422
+ loudnessTargetLimited: boolean;
423
+ /** 32 logarithmically-spaced after-minus-before spectral energy deltas (dB). */
424
+ bandEnergyDeltaDb: Float32Array;
425
+ }
426
+ export interface MasteringChainResult {
427
+ /** Latency-compensated offline output; no separate latency field is reported. */
428
+ samples: Float32Array;
429
+ sampleRate: number;
430
+ inputLufs: number;
431
+ outputLufs: number;
432
+ appliedGainDb: number;
433
+ stages: string[];
434
+ /**
435
+ * ITU-R BS.1770-4 true peak of the output (dBTP). Lets callers verify a
436
+ * preset ceiling was met without a second oversampled scan.
437
+ *
438
+ * The oversample factor follows the peak-limiting stage the chain actually
439
+ * applied, so it is not fixed: the loudness stage's true-peak oversample
440
+ * (default 4x) when loudness is enabled, and the maximizer true-peak
441
+ * limiter's own oversample factor when loudness is disabled but that stage
442
+ * ran. The two disagree by roughly 0.02 dB between 4x and 8x, so comparing
443
+ * this against an independently measured peak needs the same factor.
444
+ */
445
+ outputTruePeakDbtp: number;
446
+ /** EBU Tech 3342 Loudness Range of the output (LU). */
447
+ outputLra: number;
448
+ /** True when peak headroom prevented the requested LUFS target. */
449
+ loudnessTargetLimited: boolean;
450
+ /**
451
+ * Samples a stage replaced with a finite in-domain one, keeping the
452
+ * output finite and in range.
453
+ *
454
+ * A non-finite sample supplied by the caller is rejected before any stage
455
+ * runs, so a replacement is always of a value a stage itself produced.
456
+ *
457
+ * Only the true-peak limiters replace anything, so with the maximizer's
458
+ * limiter and the loudness stage both disabled a zero here means no stage
459
+ * was able to replace anything rather than that nothing needed replacing.
460
+ * Aggregated, so it does not identify which one substituted; run a limiter
461
+ * individually through {@link masteringProcess} to attribute a non-zero count.
462
+ */
463
+ nonFiniteSubstitutionCount: number;
464
+ /** Per-stage gain reductions for the dynamics/maximizer stages (a subset of `stages`). */
465
+ stageGainReductions: StageGainReduction[];
466
+ report: MasteringReport;
467
+ }
468
+ export interface MasteringChainStereoResult {
469
+ left: Float32Array;
470
+ right: Float32Array;
471
+ sampleRate: number;
472
+ inputLufs: number;
473
+ outputLufs: number;
474
+ appliedGainDb: number;
475
+ stages: string[];
476
+ /** See {@link MasteringChainResult} for field semantics. */
477
+ outputTruePeakDbtp: number;
478
+ outputLra: number;
479
+ loudnessTargetLimited: boolean;
480
+ /**
481
+ * See {@link MasteringChainResult.nonFiniteSubstitutionCount}. Aggregated
482
+ * over both channels, so it does not identify which channel substituted.
483
+ */
484
+ nonFiniteSubstitutionCount: number;
485
+ stageGainReductions: StageGainReduction[];
486
+ report: MasteringReport;
487
+ }
488
+ /**
489
+ * @deprecated Use {@link MasteringChainStereoResult}. Retained as an alias for
490
+ * source compatibility; the canonical name matches the Node and Python
491
+ * bindings (`MasteringChainStereoResult`).
492
+ */
493
+ export type MasteringStereoChainResult = MasteringChainStereoResult;
494
+ export interface MasteringStereoResult {
495
+ left: Float32Array;
496
+ right: Float32Array;
497
+ sampleRate: number;
498
+ inputLufs: number;
499
+ outputLufs: number;
500
+ appliedGainDb: number;
501
+ latencySamples: number;
502
+ /** True when peak headroom prevented the requested LUFS target. */
503
+ loudnessTargetLimited: boolean;
504
+ /**
505
+ * See {@link MasteringResult.nonFiniteSubstitutionCount}. Aggregated over both
506
+ * channels, so it does not identify which channel substituted.
507
+ */
508
+ nonFiniteSubstitutionCount: number;
509
+ }
510
+ //# sourceMappingURL=public_types_mastering.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"public_types_mastering.d.ts","sourceRoot":"","sources":["../src/public_types_mastering.ts"],"names":[],"mappings":"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"}