@libraz/libsonare 1.7.2 → 1.8.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.
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 +7 -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 +874 -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 +502 -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 +134 -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 +4173 -1621
  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 +483 -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 +654 -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 +528 -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 +165 -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 +893 -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 +3945 -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 +340 -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 +164 -0
  179. package/dist/worklet/engine-mixer-facade.d.ts.map +1 -0
  180. package/dist/worklet/engine-node.d.ts +83 -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 +72 -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 +75 -0
  193. package/dist/worklet/engine-strips.d.ts.map +1 -0
  194. package/dist/worklet/engine-sync.d.ts +39 -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 +418 -0
  199. package/dist/worklet/engine.d.ts.map +1 -0
  200. package/dist/worklet/guards.d.ts +53 -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 +331 -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 +3200 -541
  215. package/dist/worklet.js.map +1 -1
  216. package/package.json +23 -12
  217. package/src/_effects_common.ts +47 -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 +101 -22
  226. package/src/effects_note_ops.ts +683 -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 +388 -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 +288 -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 +441 -32
  246. package/src/mastering_dynamics.ts +22 -11
  247. package/src/metering.ts +67 -24
  248. package/src/mixer.ts +251 -22
  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 +271 -271
  259. package/src/public_types.ts +122 -3
  260. package/src/public_types_acoustic.ts +112 -3
  261. package/src/public_types_mastering.ts +275 -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 +196 -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 +491 -5
  268. package/src/quick_analysis.ts +203 -26
  269. package/src/realtime_engine.ts +773 -34
  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 +1158 -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 +202 -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 +800 -32
  287. package/src/worklet/engine-node.ts +99 -29
  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 +332 -93
  291. package/src/worklet/engine-register.ts +32 -18
  292. package/src/worklet/engine-strips.ts +275 -9
  293. package/src/worklet/engine-sync.ts +20 -7
  294. package/src/worklet/engine.ts +394 -48
  295. package/src/worklet/guards.ts +195 -44
  296. package/src/worklet/messages.ts +229 -2
  297. package/src/worklet/mixer-processor.ts +117 -48
  298. package/src/worklet/playback-processor.ts +300 -0
  299. package/src/worklet/protocol.ts +82 -11
  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
@@ -1,8 +1,25 @@
1
1
  /**
2
- * Type declarations for the Emscripten-generated WASM module with embind
2
+ * Hand-written type declarations describing the Emscripten/embind WASM module.
3
+ *
4
+ * This file is NOT generated — nothing in the build writes it. A new embind
5
+ * registration reaches TypeScript only when someone declares it here, in the
6
+ * same change as the binding, so a missing declaration is a lockstep omission
7
+ * rather than a stale artifact waiting on a rebuild.
3
8
  */
4
9
 
10
+ import type { SplitSilenceCommonWithReportResult } from './feature_core';
11
+ import type { StripMeteringOptions } from './mixer';
5
12
  import type {
13
+ NoteEditInput,
14
+ NoteObject,
15
+ NoteObjectInput,
16
+ NoteSetEntry,
17
+ NoteTarget,
18
+ NoteTargetAssignResult,
19
+ NoteTargetUnmatchedPolicy,
20
+ PercussiveEvent,
21
+ PercussiveEventInput,
22
+ PitchDecompositionResult,
6
23
  ProgressCallback,
7
24
  SonareCapabilities,
8
25
  SpectralRegionOp,
@@ -74,9 +91,30 @@ export interface WasmRealtimeVoiceChangerPodConfig {
74
91
 
75
92
  export interface WasmBeatResult {
76
93
  time: number;
94
+ /**
95
+ * Onset-envelope value sampled at the beat's frame — a single raw frame, not
96
+ * a normalized or relative salience. Use
97
+ * `WasmBeatObservationsResult.onsetStrength` for accent scoring.
98
+ */
77
99
  strength: number;
78
100
  }
79
101
 
102
+ /** Beat-level evidence behind the downbeat and meter decisions. */
103
+ export interface WasmBeatObservationsResult {
104
+ onsetStrength: number[];
105
+ lowFrequencyEnergy: number[];
106
+ chordChange: number[];
107
+ }
108
+
109
+ export interface WasmMeterEstimateResult {
110
+ timeSignature: WasmTimeSignatureResult;
111
+ downbeatPhase: number;
112
+ searched: boolean;
113
+ grouping: number[];
114
+ candidateScores: number[];
115
+ candidates: WasmTimeSignatureResult[];
116
+ }
117
+
80
118
  export interface WasmChordResult {
81
119
  root: number;
82
120
  bass: number;
@@ -87,6 +125,10 @@ export interface WasmChordResult {
87
125
  name: string;
88
126
  }
89
127
 
128
+ export interface WasmAnalysisChordResult extends WasmChordResult {
129
+ romanNumeral: string;
130
+ }
131
+
90
132
  export interface WasmSectionResult {
91
133
  type: number;
92
134
  start: number;
@@ -143,7 +185,11 @@ export interface WasmAnalysisResult {
143
185
  timeSignature: WasmTimeSignatureResult;
144
186
  timeSignatureCandidates: WasmTimeSignatureResult[];
145
187
  beats: WasmBeatResult[];
146
- chords: WasmChordResult[];
188
+ downbeatIndices: number[];
189
+ downbeatPhase: number;
190
+ beatObservations: WasmBeatObservationsResult;
191
+ beatLocalBpm: number[];
192
+ chords: WasmAnalysisChordResult[];
147
193
  sections: WasmSectionResult[];
148
194
  timbre: WasmTimbreResult;
149
195
  dynamics: WasmDynamicsResult;
@@ -270,6 +316,9 @@ export interface WasmRoomGeometryOptions {
270
316
  ismOrder?: number;
271
317
  seed?: number;
272
318
  maxSeconds?: number;
319
+ airAbsorptionEnabled?: boolean;
320
+ airTemperatureC?: number;
321
+ airHumidityPercent?: number;
273
322
  }
274
323
 
275
324
  export interface WasmRirSynthOptions extends WasmRoomGeometryOptions {
@@ -279,10 +328,24 @@ export interface WasmRirSynthOptions extends WasmRoomGeometryOptions {
279
328
  crossfadeMs?: number;
280
329
  }
281
330
 
331
+ export interface WasmRirDiagnostic {
332
+ code: string;
333
+ message: string;
334
+ severity: 'info' | 'warning' | 'error';
335
+ }
336
+
337
+ export interface WasmRoomMorphResult {
338
+ audio: Float32Array;
339
+ sampleRate: number;
340
+ diagnostics: WasmRirDiagnostic[];
341
+ }
342
+
282
343
  export interface WasmRirResult {
283
344
  rir: Float32Array;
284
345
  sampleRate: number;
285
346
  hasError: boolean;
347
+ errorMessage: string;
348
+ diagnostics: WasmRirDiagnostic[];
286
349
  }
287
350
 
288
351
  export interface WasmRoomEstimateOptions {
@@ -307,6 +370,199 @@ export interface WasmRoomEstimateResult {
307
370
  rt60Bands: Float32Array;
308
371
  }
309
372
 
373
+ /** Every field of a dereverb config, as `masteringRepairDereverbConfigForRoom` returns it. */
374
+ export interface WasmDereverbClassicalConfig {
375
+ threshold: number;
376
+ attenuation: number;
377
+ nFft: number;
378
+ hopLength: number;
379
+ t60Sec: number;
380
+ lateDelayMs: number;
381
+ overSubtraction: number;
382
+ spectralFloor: number;
383
+ wpeEnabled: boolean;
384
+ wpeIterations: number;
385
+ wpeTaps: number;
386
+ wpeStrength: number;
387
+ }
388
+
389
+ /** What a declick analysis found in one channel, as `masteringRepairDeclickStereo` returns it. Runs, not samples. */
390
+ export interface WasmClickDetection {
391
+ count: number;
392
+ rejected: number;
393
+ longestRunSamples: number;
394
+ perSecond: number;
395
+ }
396
+
397
+ /** What a declick pass found in one channel of a stereo declick and what it did to it. */
398
+ export interface WasmDeclickReport {
399
+ detected: WasmClickDetection;
400
+ repairedRuns: number;
401
+ repairedSamples: number;
402
+ linkedRuns: number;
403
+ lpcModelUsed: boolean;
404
+ }
405
+
406
+ export interface WasmDeclickStereoResult {
407
+ left: Float32Array;
408
+ right: Float32Array;
409
+ leftReport: WasmDeclickReport;
410
+ rightReport: WasmDeclickReport;
411
+ }
412
+
413
+ /** What a declip analysis found in one channel, as `masteringRepairDeclipStereo` returns it. */
414
+ export interface WasmClipDetection {
415
+ sampleCount: number;
416
+ sampleFraction: number;
417
+ runCount: number;
418
+ longestRunSamples: number;
419
+ flatRunCount: number;
420
+ longestFlatRunSamples: number;
421
+ flatSampleCount: number;
422
+ flatLevel: number;
423
+ }
424
+
425
+ /** What a declip pass found in one channel of a stereo declip and what it did to it. */
426
+ export interface WasmDeclipReport {
427
+ detected: WasmClipDetection;
428
+ lpcReconstructedRuns: number;
429
+ interpolatedRuns: number;
430
+ repairedSamples: number;
431
+ linkedRuns: number;
432
+ }
433
+
434
+ export interface WasmDeclipStereoResult {
435
+ left: Float32Array;
436
+ right: Float32Array;
437
+ leftReport: WasmDeclipReport;
438
+ rightReport: WasmDeclipReport;
439
+ }
440
+
441
+ /** What a decrackle analysis found in one channel, as `masteringRepairDecrackleStereo` returns it. */
442
+ export interface WasmCrackleDetection {
443
+ sampleCount: number;
444
+ sampleFraction: number;
445
+ perSecond: number;
446
+ }
447
+
448
+ /** What a decrackle pass found in one channel of a stereo decrackle and what it did to it. */
449
+ export interface WasmDecrackleReport {
450
+ detected: WasmCrackleDetection;
451
+ replacedSamples: number;
452
+ detailCoefficients: number;
453
+ shrunkCoefficients: number;
454
+ noiseSigma: number;
455
+ }
456
+
457
+ export interface WasmDecrackleStereoResult {
458
+ left: Float32Array;
459
+ right: Float32Array;
460
+ leftReport: WasmDecrackleReport;
461
+ rightReport: WasmDecrackleReport;
462
+ }
463
+
464
+ /** What a dehum analysis found in one channel, as `masteringRepairDehumStereo` returns it. */
465
+ export interface WasmHumDetection {
466
+ fundamentalHz: number;
467
+ fundamentalProminence: number;
468
+ harmonics: number;
469
+ harmonicDbfs: Float32Array;
470
+ }
471
+
472
+ /** What a dehum pass found in one channel of a stereo dehum and what it did to it. */
473
+ export interface WasmDehumReport {
474
+ detected: WasmHumDetection;
475
+ notchedHarmonics: number;
476
+ appliedFundamentalHz: number;
477
+ fundamentalDriftHz: number;
478
+ }
479
+
480
+ export interface WasmDehumStereoResult {
481
+ left: Float32Array;
482
+ right: Float32Array;
483
+ leftReport: WasmDehumReport;
484
+ rightReport: WasmDehumReport;
485
+ }
486
+
487
+ /** What a denoise analysis found, as `masteringRepairDenoiseClassicalStereo` returns it. */
488
+ export interface WasmNoiseDetection {
489
+ floorDbfs: number;
490
+ bandFloorDbfs: Float32Array;
491
+ }
492
+
493
+ /** What a stereo denoise pass found and what it removed. */
494
+ export interface WasmDenoiseReport {
495
+ detected: WasmNoiseDetection;
496
+ meanReductionDb: number;
497
+ maxReductionDb: number;
498
+ floorLimitedFraction: number;
499
+ }
500
+
501
+ /** One `report`, not a per-channel pair: the gain mask is one array applied to both channels. */
502
+ export interface WasmDenoiseStereoResult {
503
+ left: Float32Array;
504
+ right: Float32Array;
505
+ report: WasmDenoiseReport;
506
+ }
507
+
508
+ /** The N-channel form: one mask over the set, and one report whose `detected` is the set's. */
509
+ export interface WasmDenoiseLinkedResult {
510
+ channels: Float32Array[];
511
+ report: WasmDenoiseReport;
512
+ }
513
+
514
+ /** What a dereverb analysis found, as `masteringRepairDereverbClassicalStereo` returns it. */
515
+ export interface WasmReverbDetection {
516
+ lateDecayRatioDb: number;
517
+ latePredictability: number;
518
+ }
519
+
520
+ /** What a stereo dereverb pass found and what it removed. */
521
+ export interface WasmDereverbReport {
522
+ detected: WasmReverbDetection;
523
+ meanReductionDb: number;
524
+ suppressedFraction: number;
525
+ wpePredictorNorm: number;
526
+ }
527
+
528
+ /** One `report`, not a per-channel pair: the mask and the WPE predictor set are each one
529
+ * object applied to both channels. */
530
+ export interface WasmDereverbStereoResult {
531
+ left: Float32Array;
532
+ right: Float32Array;
533
+ report: WasmDereverbReport;
534
+ }
535
+
536
+ /** The N-channel form: one mask and one WPE predictor set over the whole channel set. */
537
+ export interface WasmDereverbLinkedResult {
538
+ channels: Float32Array[];
539
+ report: WasmDereverbReport;
540
+ }
541
+
542
+ /** One half-open input-buffer range, as a trim pass reports it. */
543
+ export interface WasmTrimRange {
544
+ first: number;
545
+ lastExclusive: number;
546
+ }
547
+
548
+ /** What a trim pass kept and what it dropped. */
549
+ export interface WasmTrimReport {
550
+ range: WasmTrimRange;
551
+ removedHeadSamples: number;
552
+ removedTailSamples: number;
553
+ }
554
+
555
+ /** Arrays SHORTER than the input, and empty when neither channel carries signal. `report.range`
556
+ * is the union applied to both channels; the two per-channel ranges are what it was formed
557
+ * from. */
558
+ export interface WasmTrimSilenceStereoResult {
559
+ left: Float32Array;
560
+ right: Float32Array;
561
+ report: WasmTrimReport;
562
+ leftRange: WasmTrimRange;
563
+ rightRange: WasmTrimRange;
564
+ }
565
+
310
566
  export interface WasmRoomMorphOptions extends WasmRoomGeometryOptions {
311
567
  wet?: number;
312
568
  sourceTailSuppression?: number;
@@ -464,6 +720,48 @@ export interface WasmMelodyPoint {
464
720
  confidence: number;
465
721
  }
466
722
 
723
+ /**
724
+ * Boundary options as the embind wrapper reads them. Every field is optional
725
+ * because the wrapper seeds the bag from `BoundaryConfig`, so an omitted one
726
+ * takes the core's own default.
727
+ *
728
+ * Declaring them required is what obliged the facade to spell all ten defaults
729
+ * before the call, which made those literals the effective defaults on npm and
730
+ * put the core's out of reach. That shape did buy one thing — a field name
731
+ * drifting from the embind reader failed to compile instead of falling back in
732
+ * silence — and the typed-options test carries it instead: it sends a
733
+ * wrong-typed value for each of the ten keys and requires the module to refuse,
734
+ * which stops happening the moment the reader stops reading one of them.
735
+ */
736
+ export interface WasmBoundaryOptions {
737
+ nFft?: number;
738
+ hopLength?: number;
739
+ kernelSize?: number;
740
+ threshold?: number;
741
+ absoluteThreshold?: number;
742
+ nMfcc?: number;
743
+ nChroma?: number;
744
+ peakDistance?: number;
745
+ useMfcc?: boolean;
746
+ useChroma?: boolean;
747
+ }
748
+
749
+ export interface WasmBoundary {
750
+ time: number;
751
+ frame: number;
752
+ strength: number;
753
+ }
754
+
755
+ export interface WasmBoundaryResult {
756
+ boundaries: WasmBoundary[];
757
+ noveltyCurve: Float32Array;
758
+ noveltyPeak: number;
759
+ sampleRate: number;
760
+ hopLength: number;
761
+ nFrames: number;
762
+ frameStride: number;
763
+ }
764
+
467
765
  export interface WasmMelodyResult {
468
766
  points: WasmMelodyPoint[];
469
767
  pitchRangeOctaves: number;
@@ -490,6 +788,17 @@ export interface WasmLufsResult {
490
788
  loudnessRange: number;
491
789
  }
492
790
 
791
+ /**
792
+ * The two per-block loudness series a multi-channel measurement builds, in
793
+ * LUFS. A signal shorter than a window yields an empty series for it.
794
+ */
795
+ export interface WasmLufsSeriesResult {
796
+ /** 400 ms momentary series. */
797
+ momentary: Float32Array;
798
+ /** 3 s short-term series. */
799
+ shortTerm: Float32Array;
800
+ }
801
+
493
802
  export interface WasmMasteringResult {
494
803
  samples: Float32Array;
495
804
  sampleRate: number;
@@ -498,6 +807,31 @@ export interface WasmMasteringResult {
498
807
  appliedGainDb: number;
499
808
  loudnessTargetLimited?: boolean;
500
809
  latencySamples?: number;
810
+ /**
811
+ * Samples the named processor replaced with a finite in-domain one,
812
+ * keeping the output finite and in range. A non-finite sample supplied by
813
+ * the caller is rejected before the processor runs, so a replacement is
814
+ * always of a value the processor itself produced.
815
+ *
816
+ * Whether this can be non-zero depends on which processor was named: one
817
+ * that does not substitute reports zero because it has nothing to replace
818
+ * with, not because nothing needed replacing.
819
+ */
820
+ nonFiniteSubstitutionCount: number;
821
+ }
822
+
823
+ export interface WasmLoudnessMatchResult {
824
+ samples: Float32Array;
825
+ sampleRate: number;
826
+ referenceLufs: number;
827
+ sourceLufs: number;
828
+ appliedGainDb: number;
829
+ matchedTruePeakDbtp: number;
830
+ }
831
+
832
+ export interface WasmLoudnessMatchStereoResult extends Omit<WasmLoudnessMatchResult, 'samples'> {
833
+ left: Float32Array;
834
+ right: Float32Array;
501
835
  }
502
836
 
503
837
  export interface WasmStageGainReduction {
@@ -527,6 +861,19 @@ export interface WasmMasteringChainResult extends WasmMasteringResult {
527
861
  outputTruePeakDbtp: number;
528
862
  outputLra: number;
529
863
  loudnessTargetLimited: boolean;
864
+ /**
865
+ * Samples a stage replaced with a finite in-domain one, keeping the
866
+ * output finite and in range. A non-finite sample supplied by the caller
867
+ * is rejected before any stage runs, so a replacement is always of a
868
+ * value a stage itself produced.
869
+ *
870
+ * Only the true-peak limiters replace anything, so with the maximizer's
871
+ * limiter and the loudness stage both disabled a zero here means no
872
+ * stage was able to replace anything rather than that nothing needed
873
+ * replacing. Overrides the inherited {@link WasmMasteringResult} doc,
874
+ * which describes a single named processor rather than a chain.
875
+ */
876
+ nonFiniteSubstitutionCount: number;
530
877
  stageGainReductions: WasmStageGainReduction[];
531
878
  report: WasmMasteringReport;
532
879
  }
@@ -542,6 +889,8 @@ export interface WasmMasteringStereoChainResult {
542
889
  outputTruePeakDbtp: number;
543
890
  outputLra: number;
544
891
  loudnessTargetLimited: boolean;
892
+ /** See {@link WasmMasteringChainResult} for field semantics. Aggregated over both channels. */
893
+ nonFiniteSubstitutionCount: number;
545
894
  stageGainReductions: WasmStageGainReduction[];
546
895
  report: WasmMasteringReport;
547
896
  }
@@ -554,6 +903,9 @@ export interface WasmMasteringStereoResult {
554
903
  outputLufs: number;
555
904
  appliedGainDb: number;
556
905
  latencySamples: number;
906
+ loudnessTargetLimited: boolean;
907
+ /** Aggregated over both channels. */
908
+ nonFiniteSubstitutionCount: number;
557
909
  }
558
910
 
559
911
  export interface WasmMixMeterSnapshot {
@@ -570,13 +922,24 @@ export interface WasmMixMeterSnapshot {
570
922
  shortTermLufs: number;
571
923
  integratedLufs: number;
572
924
  gainReductionDb: number;
925
+ /**
926
+ * Left-channel inter-sample (true) peak in dB, from the ITU-R BS.1770-4
927
+ * polyphase reconstruction at 4x. A streaming measurement: the centered
928
+ * reconstruction stencil needs a few future samples a realtime path does not
929
+ * have, so each block's last samples read marginally low (about 0.1 dB across
930
+ * 64..8192-sample blocks on a near-Nyquist tone, always under-reading). Use
931
+ * `meteringTruePeakDb` over the whole signal for an exact dBTP number.
932
+ */
573
933
  truePeakDbL: number;
934
+ /** Right-channel inter-sample (true) peak in dB. See {@link truePeakDbL}. */
574
935
  truePeakDbR: number;
936
+ /** Maximum inter-sample peak across channels in dB. See {@link truePeakDbL}. */
575
937
  maxTruePeakDb: number;
576
938
  seq: number;
577
939
  channelCount: number;
578
940
  peakDb: number[];
579
941
  rmsDb: number[];
942
+ /** Per-plane inter-sample peak in dB; [0]/[1] mirror {@link truePeakDbL}/R. */
580
943
  truePeakDb: number[];
581
944
  }
582
945
 
@@ -598,7 +961,7 @@ export interface WasmEngineClip {
598
961
  gain?: number;
599
962
  fadeInSamples?: number;
600
963
  fadeOutSamples?: number;
601
- warpMode?: 'off' | 'repitch' | 'tempo-sync' | 0 | 1 | 2;
964
+ warpMode?: 'off' | 'repitch' | 'tempo-sync' | 'time-stretch' | 0 | 1 | 2 | 3;
602
965
  warpAnchors?: Array<{ warpSample: number; sourceSample: number }>;
603
966
  pageProvider?: number | { readonly id: number };
604
967
  }
@@ -607,6 +970,8 @@ export interface WasmEngineTrackSend {
607
970
  busId: number;
608
971
  levelDb?: number;
609
972
  enabled?: boolean;
973
+ /** Native send tap: 0 post-fader (default), 1 pre-fader. */
974
+ sendTiming?: number;
610
975
  }
611
976
 
612
977
  export interface WasmEngineTrackLane {
@@ -628,6 +993,13 @@ export interface WasmEngineBus {
628
993
  busId: number;
629
994
  gainDb?: number;
630
995
  channelLayout?: number;
996
+ /**
997
+ * Bus this bus's output sums into instead of the master mix; 0 or absent
998
+ * keeps it on the master mix.
999
+ */
1000
+ outputBusId?: number;
1001
+ /** Sends to other buses, in the same shape as a track lane's sends. */
1002
+ sends?: WasmEngineTrackSend[];
631
1003
  }
632
1004
 
633
1005
  export interface WasmClipPageRequest {
@@ -639,12 +1011,18 @@ export interface WasmClipPageRequest {
639
1011
  export interface WasmEngineParameterInfo {
640
1012
  id: number;
641
1013
  name: string;
642
- unit: string;
643
- minValue: number;
644
- maxValue: number;
645
- defaultValue: number;
646
- rtSafe: boolean;
647
- defaultCurve: number;
1014
+ /** Display unit; omit for an empty string. */
1015
+ unit?: string;
1016
+ /** Lower end of the parameter range. Default `0`. */
1017
+ minValue?: number;
1018
+ /** Upper end of the parameter range. Default `1`. */
1019
+ maxValue?: number;
1020
+ /** Value the parameter starts at. Default `0`. */
1021
+ defaultValue?: number;
1022
+ /** Whether the parameter is safe to change from the realtime thread. Default `true`. */
1023
+ rtSafe?: boolean;
1024
+ /** Curve used by automation points that omit `curveToNext`. Default `1` (exponential). */
1025
+ defaultCurve?: number;
648
1026
  }
649
1027
 
650
1028
  export interface WasmEngineAutomationPoint {
@@ -727,6 +1105,13 @@ export interface WasmEngineGraphConnection {
727
1105
  sourcePort: number;
728
1106
  destNode: string;
729
1107
  destPort: number;
1108
+ /**
1109
+ * Mixing intent (`0` = replace, `1` = add).
1110
+ *
1111
+ * NOTE: not currently honored — the compiled graph always sums edges into a
1112
+ * shared destination port in an order-independent way (the first edge into a
1113
+ * port overwrites, every later edge adds), regardless of this value.
1114
+ */
730
1115
  mix?: number;
731
1116
  }
732
1117
 
@@ -755,6 +1140,12 @@ export interface WasmEngineTelemetry {
755
1140
  }
756
1141
 
757
1142
  export interface WasmEngineMeterTelemetry {
1143
+ /**
1144
+ * Telemetry tap target id: `0` master mix, `laneIndex + 1` (1..32) for track
1145
+ * lanes, `33 + busIndex` (33..40) for buses, and `0xFFFF` for the
1146
+ * input-monitor capture tap. Handle `0xFFFF` explicitly -- a naive
1147
+ * `targetId - 1` index into a 32-entry lane array runs past its end.
1148
+ */
758
1149
  targetId: number;
759
1150
  renderFrame: number;
760
1151
  seq: number;
@@ -762,8 +1153,18 @@ export interface WasmEngineMeterTelemetry {
762
1153
  peakDbR: number;
763
1154
  rmsDbL: number;
764
1155
  rmsDbR: number;
1156
+ /**
1157
+ * Left-channel inter-sample (true) peak in dB, from the ITU-R BS.1770-4
1158
+ * polyphase reconstruction at 4x. A streaming measurement: the centered
1159
+ * reconstruction stencil needs a few future samples a realtime path does not
1160
+ * have, so each block's last samples read marginally low (about 0.1 dB across
1161
+ * 64..8192-sample blocks on a near-Nyquist tone, always under-reading). Use
1162
+ * `meteringTruePeakDb` over the whole signal for an exact dBTP number.
1163
+ */
765
1164
  truePeakDbL: number;
1165
+ /** Right-channel inter-sample (true) peak in dB. See {@link truePeakDbL}. */
766
1166
  truePeakDbR: number;
1167
+ /** Maximum inter-sample peak across channels in dB. See {@link truePeakDbL}. */
767
1168
  maxTruePeakDb: number;
768
1169
  correlation: number;
769
1170
  monoCompatWidth: number;
@@ -771,17 +1172,37 @@ export interface WasmEngineMeterTelemetry {
771
1172
  shortTermLufs: number;
772
1173
  integratedLufs: number;
773
1174
  gainReductionDb: number;
1175
+ /** Maximum pre-trim input peak for the left channel, in dBFS. */
1176
+ inputPeakDbL: number;
1177
+ /** Maximum pre-trim input peak for the right channel, in dBFS. */
1178
+ inputPeakDbR: number;
774
1179
  droppedRecords: number;
775
1180
  }
776
1181
 
777
1182
  export interface WasmEngineMeterTelemetryWide {
1183
+ /**
1184
+ * Telemetry tap target id: `0` master mix, `laneIndex + 1` (1..32) for track
1185
+ * lanes, `33 + busIndex` (33..40) for buses, and `0xFFFF` for the
1186
+ * input-monitor capture tap. Handle `0xFFFF` explicitly -- a naive
1187
+ * `targetId - 1` index into a 32-entry lane array runs past its end.
1188
+ */
778
1189
  targetId: number;
779
1190
  renderFrame: number;
780
1191
  seq: number;
781
1192
  channelCount: number;
782
1193
  peakDb: number[];
783
1194
  rmsDb: number[];
1195
+ /**
1196
+ * Per-plane inter-sample (true) peak in dB (length `channelCount`), from the
1197
+ * ITU-R BS.1770-4 polyphase reconstruction at 4x. A streaming measurement: the
1198
+ * centered reconstruction stencil needs a few future samples a realtime path
1199
+ * does not have, so each block's last samples read marginally low (about
1200
+ * 0.1 dB across 64..8192-sample blocks on a near-Nyquist tone, always
1201
+ * under-reading). Use `meteringTruePeakDb` over the whole signal for an exact
1202
+ * dBTP number.
1203
+ */
784
1204
  truePeakDb: number[];
1205
+ /** Maximum inter-sample peak across channels in dB. See {@link truePeakDb}. */
785
1206
  maxTruePeakDb: number;
786
1207
  correlation: number;
787
1208
  monoCompatWidth: number;
@@ -789,10 +1210,18 @@ export interface WasmEngineMeterTelemetryWide {
789
1210
  shortTermLufs: number;
790
1211
  integratedLufs: number;
791
1212
  gainReductionDb: number;
1213
+ /** Pre-trim input peak for each valid plane, in dBFS. */
1214
+ inputPeakDb: number[];
792
1215
  droppedRecords: number;
793
1216
  }
794
1217
 
795
1218
  export interface WasmEngineScopeTelemetry {
1219
+ /**
1220
+ * Telemetry tap target id: `0` master mix, `laneIndex + 1` (1..32) for track
1221
+ * lanes, `33 + busIndex` (33..40) for buses, and `0xFFFF` for the
1222
+ * input-monitor capture tap. Handle `0xFFFF` explicitly -- a naive
1223
+ * `targetId - 1` index into a 32-entry lane array runs past its end.
1224
+ */
796
1225
  targetId: number;
797
1226
  renderFrame: number;
798
1227
  seq: number;
@@ -838,12 +1267,37 @@ export interface WasmEngineTransportState {
838
1267
  }
839
1268
 
840
1269
  export interface WasmEngineBounceOptions {
1270
+ /**
1271
+ * Length of the bounce in frames. The whole result is held in memory, so the
1272
+ * span is capped by a 1 GiB peak budget over the full-size float buffers a
1273
+ * bounce holds at once, and exceeding it throws an `InvalidParameter`
1274
+ * `SonareError`.
1275
+ *
1276
+ * The cap is a **frame** count: inversely proportional to `numChannels`, and
1277
+ * independent of the sample rate. Stereo refuses past 44,739,242 frames, or
1278
+ * past 33,554,432 frames when `dither` is set, which adds one more copy; 5.1
1279
+ * refuses past a third of each. Read as a **duration** those two stereo counts
1280
+ * are 15 min 32 s and 11 min 39 s at 48 kHz, and half that at 96 kHz. When
1281
+ * `sourceSampleRate` and `targetSampleRate` differ both the source and the
1282
+ * resampled length are checked, so the longer of the two is what binds.
1283
+ *
1284
+ * Render longer material in chunks via `renderOffline({ finalize: false })`.
1285
+ * The cap is a fixed budget, not a probe of the module's heap, which on wasm32
1286
+ * can run out below it.
1287
+ */
841
1288
  totalFrames: number;
842
1289
  blockSize?: number;
843
1290
  numChannels?: number;
844
1291
  targetSampleRate?: number;
845
1292
  sourceSampleRate?: number;
846
1293
  normalizeLufs?: boolean;
1294
+ /**
1295
+ * Target integrated loudness when `normalizeLufs` is set. Omitting it, passing
1296
+ * `0`, and passing a non-finite value all mean the library default of
1297
+ * -14 LUFS: the non-finite case resolves rather than being reported, matching
1298
+ * the C ABI, because the loudness stage derives a per-sample gain from this
1299
+ * and checks nothing itself.
1300
+ */
847
1301
  targetLufs?: number;
848
1302
  dither?: 0 | 1 | 2 | 3;
849
1303
  ditherBits?: number;
@@ -914,18 +1368,22 @@ export interface WasmRealtimeEngine {
914
1368
  commandCapacity: number,
915
1369
  telemetryCapacity: number,
916
1370
  ) => void;
917
- setParameter: (paramId: number, value: number, renderFrame: number) => void;
918
- setParameterSmoothed: (paramId: number, value: number, renderFrame: number) => void;
1371
+ setParameter: (paramId: number, value: number, renderFrame?: number) => void;
1372
+ setParameterSmoothed: (paramId: number, value: number, renderFrame?: number) => void;
919
1373
  setParamSmoothingMs: (smoothingMs: number) => void;
920
- setSoloMute: (laneIndex: number, solo: boolean, mute: boolean, renderFrame: number) => void;
921
- setTrackMonitorMode: (laneIndex: number, mode: number, renderFrame: number) => void;
1374
+ setSoloMute: (laneIndex: number, solo: boolean, mute: boolean, renderFrame?: number) => void;
1375
+ setTrackMonitorMode: (laneIndex: number, mode: number, renderFrame?: number) => void;
922
1376
  getTransportState: () => WasmEngineTransportState;
923
- play: (renderFrame: number) => void;
924
- stop: (renderFrame: number) => void;
925
- seekSample: (timelineSample: number, renderFrame: number) => void;
1377
+ play: (renderFrame?: number) => void;
1378
+ stop: (renderFrame?: number) => void;
1379
+ resetMasterLoudnessMeter: (renderFrame?: number) => void;
1380
+ insertParameterConstructedValue: (paramId: number) => number;
1381
+ seekSample: (timelineSample: number, renderFrame?: number) => void;
926
1382
  settleParameters: () => void;
1383
+ settleInsertParameters: () => void;
927
1384
  flushControlCommands: () => void;
928
- seekPpq: (ppq: number, renderFrame: number) => void;
1385
+ applyCommandsDueNowPreservingFuture: () => void;
1386
+ seekPpq: (ppq: number, renderFrame?: number) => void;
929
1387
  setTempo: (bpm: number) => void;
930
1388
  setTempoSegments: (segments: WasmEngineTempoSegment[]) => void;
931
1389
  setTimeSignature: (numerator: number, denominator: number) => void;
@@ -934,15 +1392,15 @@ export interface WasmRealtimeEngine {
934
1392
  setLoop: (startPpq: number, endPpq: number, enabled: boolean) => void;
935
1393
  addParameter: (info: WasmEngineParameterInfo) => void;
936
1394
  parameterCount: () => number;
937
- parameterInfoByIndex: (index: number) => WasmEngineParameterInfo;
938
- parameterInfo: (id: number) => WasmEngineParameterInfo;
1395
+ parameterInfoByIndex: (index: number) => Required<WasmEngineParameterInfo>;
1396
+ parameterInfo: (id: number) => Required<WasmEngineParameterInfo>;
939
1397
  setAutomationLane: (paramId: number, points: WasmEngineAutomationPoint[]) => void;
940
1398
  automationLaneCount: () => number;
941
1399
  setMarkers: (markers: WasmEngineMarker[]) => void;
942
1400
  markerCount: () => number;
943
1401
  markerByIndex: (index: number) => WasmEngineMarker;
944
1402
  marker: (id: number) => WasmEngineMarker;
945
- seekMarker: (id: number, renderFrame: number) => void;
1403
+ seekMarker: (id: number, renderFrame?: number) => void;
946
1404
  setLoopFromMarkers: (startMarkerId: number, endMarkerId: number) => void;
947
1405
  setMetronome: (config: WasmEngineMetronomeConfig) => void;
948
1406
  metronome: () => Required<WasmEngineMetronomeConfig>;
@@ -956,9 +1414,17 @@ export interface WasmRealtimeEngine {
956
1414
  setTrackLanes: (lanes: Array<number | WasmEngineTrackLane>) => void;
957
1415
  setLaneSidechain: (trackId: number, insertIndex: number, sourceTrackId: number) => void;
958
1416
  setTrackBuses: (buses: WasmEngineBus[]) => void;
1417
+ setBusSidechain: (
1418
+ busId: number,
1419
+ insertIndex: number,
1420
+ sourceKind: number,
1421
+ sourceId: number,
1422
+ ) => void;
1423
+ setMasterSidechain: (insertIndex: number, sourceKind: number, sourceId: number) => void;
959
1424
  setBusStripJson: (busId: number, sceneJson: string) => void;
960
1425
  setTrackStripJson: (trackId: number, sceneJson: string) => void;
961
1426
  setTrackStripEqBandJson: (trackId: number, bandIndex: number, bandJson: string) => void;
1427
+ setBusStripEqBandJson: (busId: number, bandIndex: number, bandJson: string) => void;
962
1428
  setTrackStripInsertBypassed: (
963
1429
  trackId: number,
964
1430
  insertIndex: number,
@@ -978,13 +1444,50 @@ export interface WasmRealtimeEngine {
978
1444
  paramName: string,
979
1445
  value: number,
980
1446
  ) => void;
1447
+ applyTrackStripInsertParamByNameNow: (
1448
+ trackId: number,
1449
+ insertIndex: number,
1450
+ paramName: string,
1451
+ value: number,
1452
+ ) => boolean;
1453
+ restoreTrackStripInsertParamByName: (
1454
+ trackId: number,
1455
+ insertIndex: number,
1456
+ paramName: string,
1457
+ value: number,
1458
+ ) => void;
981
1459
  setMasterStripInsertParamByName: (insertIndex: number, paramName: string, value: number) => void;
1460
+ applyMasterStripInsertParamByNameNow: (
1461
+ insertIndex: number,
1462
+ paramName: string,
1463
+ value: number,
1464
+ ) => boolean;
1465
+ restoreMasterStripInsertParamByName: (
1466
+ insertIndex: number,
1467
+ paramName: string,
1468
+ value: number,
1469
+ ) => void;
982
1470
  setBusStripInsertParamByName: (
983
1471
  busId: number,
984
1472
  insertIndex: number,
985
1473
  paramName: string,
986
1474
  value: number,
987
1475
  ) => void;
1476
+ applyBusStripInsertParamByNameNow: (
1477
+ busId: number,
1478
+ insertIndex: number,
1479
+ paramName: string,
1480
+ value: number,
1481
+ ) => boolean;
1482
+ restoreBusStripInsertParamByName: (
1483
+ busId: number,
1484
+ insertIndex: number,
1485
+ paramName: string,
1486
+ value: number,
1487
+ ) => void;
1488
+ clearTrackInsertParameterBases: (trackId: number) => void;
1489
+ clearBusInsertParameterBases: (busId: number) => void;
1490
+ clearMasterInsertParameterBases: () => void;
988
1491
  setBusStripInsertBypassed: (
989
1492
  busId: number,
990
1493
  insertIndex: number,
@@ -998,10 +1501,15 @@ export interface WasmRealtimeEngine {
998
1501
  ) => number;
999
1502
  resolveMasterInsertAutomationId: (insertIndex: number, paramName: string) => number;
1000
1503
  resolveBusInsertAutomationId: (busId: number, insertIndex: number, paramName: string) => number;
1504
+ resolveInstrumentAutomationId: (destinationId: number, paramName: string) => number;
1001
1505
  setTrackStripPan: (trackId: number, pan: number) => void;
1002
1506
  setTrackStripPanLaw: (trackId: number, panLaw: number) => void;
1003
1507
  setTrackStripPanMode: (trackId: number, panMode: number) => void;
1004
1508
  setTrackStripDualPan: (trackId: number, leftPan: number, rightPan: number) => void;
1509
+ setBusStripPan: (busId: number, pan: number) => void;
1510
+ setBusStripPanLaw: (busId: number, panLaw: number) => void;
1511
+ setBusStripPanMode: (busId: number, panMode: number) => void;
1512
+ setBusStripDualPan: (busId: number, leftPan: number, rightPan: number) => void;
1005
1513
  setTrackStripChannelDelaySamples: (trackId: number, delaySamples: number) => void;
1006
1514
  createClipPageProvider: (numChannels: number, numSamples: number, pageFrames: number) => number;
1007
1515
  supplyClipPage: (providerId: number, pageIndex: number, channels: Float32Array[]) => void;
@@ -1012,6 +1520,11 @@ export interface WasmRealtimeEngine {
1012
1520
  clipPageRequestScratchClipId: () => number;
1013
1521
  clipPageRequestScratchSample: () => number;
1014
1522
  clipPageRequestOverflowCount: () => number;
1523
+ warpStretchOverflowCount: () => number;
1524
+ setWarpVoiceCapacity: (voices: number) => void;
1525
+ warpVoiceCapacity: () => number;
1526
+ setClipPagePrefetchFrames: (frames: number) => void;
1527
+ clipPagePrefetchFrames: () => number;
1015
1528
  setCaptureBuffer: (numChannels: number, capacityFrames: number) => void;
1016
1529
  armCapture: (armed: boolean) => void;
1017
1530
  setCapturePunch: (startSample: number, endSample: number, enabled: boolean) => void;
@@ -1038,6 +1551,34 @@ export interface WasmRealtimeEngine {
1038
1551
  bindMidiCcBinding: (binding: import('./project_types').ProjectMidiCcBinding) => void;
1039
1552
  clearMidiCcBindings: () => void;
1040
1553
  midiCcBindingCount: () => number;
1554
+ setControllerProfile: (destinationId: number, presetName: string) => void;
1555
+ bindController: (
1556
+ destinationId: number,
1557
+ binding: import('./instrument_types').ControllerBinding,
1558
+ ) => void;
1559
+ clearControllerBindings: (destinationId: number) => void;
1560
+ controllerBindingCount: (destinationId: number) => number;
1561
+ setControllerVelocityMeaningful: (destinationId: number, meaningful: boolean) => void;
1562
+ controllerVelocityMeaningful: (destinationId: number) => boolean;
1563
+ setControllerNoteTracking: (
1564
+ destinationId: number,
1565
+ dimension: import('./instrument_types').MpeDimension | number,
1566
+ tracking: import('./instrument_types').NoteTracking | number,
1567
+ ) => void;
1568
+ controllerNoteTracking: (
1569
+ destinationId: number,
1570
+ dimension: import('./instrument_types').MpeDimension | number,
1571
+ ) => import('./instrument_types').NoteTracking | number;
1572
+ setArticulation: (
1573
+ destinationId: number,
1574
+ channel: number,
1575
+ articulation: import('./instrument_types').Articulation | number,
1576
+ ) => void;
1577
+ articulation: (
1578
+ destinationId: number,
1579
+ channel: number,
1580
+ ) => import('./instrument_types').Articulation | number;
1581
+ legatoFallbackCount: (destinationId: number) => number;
1041
1582
  setMidiFx: (destinationId: number, configJson: string) => void;
1042
1583
  clearMidiFx: (destinationId: number) => void;
1043
1584
  setMidiInputSource: (destinationId: number) => void;
@@ -1064,13 +1605,32 @@ export interface WasmRealtimeEngine {
1064
1605
  value: number,
1065
1606
  portTimeSamples: number,
1066
1607
  ) => void;
1608
+ pushMidiInputPitchBend: (
1609
+ group: number,
1610
+ channel: number,
1611
+ bend14: number,
1612
+ portTimeSamples: number,
1613
+ ) => void;
1614
+ pushMidiInputChannelPressure: (
1615
+ group: number,
1616
+ channel: number,
1617
+ pressure: number,
1618
+ portTimeSamples: number,
1619
+ ) => void;
1620
+ pushMidiInputPolyPressure: (
1621
+ group: number,
1622
+ channel: number,
1623
+ note: number,
1624
+ pressure: number,
1625
+ portTimeSamples: number,
1626
+ ) => void;
1067
1627
  pushMidiNoteOn: (
1068
1628
  destinationId: number,
1069
1629
  group: number,
1070
1630
  channel: number,
1071
1631
  note: number,
1072
1632
  velocity: number,
1073
- renderFrame: number,
1633
+ renderFrame?: number,
1074
1634
  ) => void;
1075
1635
  pushMidiNoteOff: (
1076
1636
  destinationId: number,
@@ -1078,7 +1638,7 @@ export interface WasmRealtimeEngine {
1078
1638
  channel: number,
1079
1639
  note: number,
1080
1640
  velocity: number,
1081
- renderFrame: number,
1641
+ renderFrame?: number,
1082
1642
  ) => void;
1083
1643
  pushMidiCc: (
1084
1644
  destinationId: number,
@@ -1086,11 +1646,38 @@ export interface WasmRealtimeEngine {
1086
1646
  channel: number,
1087
1647
  controller: number,
1088
1648
  value: number,
1089
- renderFrame: number,
1649
+ renderFrame?: number,
1090
1650
  ) => void;
1091
- pushMidiUmp: (destinationId: number, word0: number, renderFrame: number) => void;
1092
- pushMidiSysex: (destinationId: number, data: Uint8Array, renderFrame: number) => void;
1093
- pushMidiPanic: (renderFrame: number) => void;
1651
+ pushMidiPitchBend: (
1652
+ destinationId: number,
1653
+ group: number,
1654
+ channel: number,
1655
+ bend14: number,
1656
+ renderFrame?: number,
1657
+ ) => void;
1658
+ pushMidiChannelPressure: (
1659
+ destinationId: number,
1660
+ group: number,
1661
+ channel: number,
1662
+ pressure: number,
1663
+ renderFrame?: number,
1664
+ ) => void;
1665
+ pushMidiPolyPressure: (
1666
+ destinationId: number,
1667
+ group: number,
1668
+ channel: number,
1669
+ note: number,
1670
+ pressure: number,
1671
+ renderFrame?: number,
1672
+ ) => void;
1673
+ pushMidiUmp: (
1674
+ destinationId: number,
1675
+ words: Uint32Array | readonly number[],
1676
+ renderFrame?: number,
1677
+ ) => void;
1678
+ pushMidiInputUmp: (words: Uint32Array | readonly number[], portTimeSamples: number) => void;
1679
+ pushMidiSysex: (destinationId: number, data: Uint8Array, renderFrame?: number) => void;
1680
+ pushMidiPanic: (renderFrame?: number) => void;
1094
1681
  setMidiDestinationExternal: (destinationId: number, external: boolean) => void;
1095
1682
  setExternalMidiClockEnabled: (enabled: boolean) => void;
1096
1683
  externalMidiDroppedCount: () => number;
@@ -1118,7 +1705,8 @@ export interface WasmRealtimeEngine {
1118
1705
  getMonitorChannelBuffer: (channel: number, numFrames: number) => Float32Array;
1119
1706
  processPreparedWithMonitor: (numFrames: number) => void;
1120
1707
  processWithMonitor: (channels: Float32Array[]) => WasmEngineProcessWithMonitorResult;
1121
- renderOffline: (channels: Float32Array[], blockSize: number) => Float32Array[];
1708
+ renderOffline: (channels: Float32Array[], blockSize: number, finalize: boolean) => Float32Array[];
1709
+ finishOfflineRender: () => void;
1122
1710
  bounceOffline: (options: WasmEngineBounceOptions) => WasmEngineBounceResult;
1123
1711
  freezeOffline: (options: WasmEngineFreezeOptions) => WasmEngineFreezeResult;
1124
1712
  drainTelemetry: (maxRecords: number) => WasmEngineTelemetry[];
@@ -1134,6 +1722,8 @@ export interface WasmRealtimeEngine {
1134
1722
  meterScratchTargetId: () => number;
1135
1723
  meterScratchRenderFrame: () => number;
1136
1724
  meterScratchValue: (field: number) => number;
1725
+ meterScratchInputPeakDbL: () => number;
1726
+ meterScratchInputPeakDbR: () => number;
1137
1727
  drainMeterTelemetry: (maxRecords: number) => WasmEngineMeterTelemetry[];
1138
1728
  drainMeterTelemetryWide: (maxRecords: number) => WasmEngineMeterTelemetryWide[];
1139
1729
  configureScopeTelemetry: (intervalFrames: number, bandCount: number) => number;
@@ -1161,6 +1751,11 @@ export interface WasmSynthEnumTables {
1161
1751
  bodyTypes: string[];
1162
1752
  modSources: string[];
1163
1753
  modDestinations: string[];
1754
+ controllerInputs: string[];
1755
+ controllerAxes: string[];
1756
+ articulations: string[];
1757
+ mpeDimensions: string[];
1758
+ noteTrackings: string[];
1164
1759
  }
1165
1760
 
1166
1761
  export interface SonareModule {
@@ -1213,6 +1808,7 @@ export interface SonareModule {
1213
1808
  keyMode: number,
1214
1809
  detectInversions: boolean,
1215
1810
  chromaMethod: number,
1811
+ tuning: number,
1216
1812
  ) => WasmChordAnalysisResult;
1217
1813
  chordFunctionalAnalysis: (
1218
1814
  samples: Float32Array,
@@ -1231,10 +1827,76 @@ export interface SonareModule {
1231
1827
  useKeyContext: boolean,
1232
1828
  detectInversions: boolean,
1233
1829
  chromaMethod: number,
1830
+ tuning: number,
1234
1831
  ) => string[];
1235
1832
  analyze: (samples: Float32Array, sampleRate: number, options: object) => WasmAnalysisResult;
1833
+ estimateMeter: (
1834
+ beatTimes: ArrayLike<number>,
1835
+ beatStrengths: ArrayLike<number>,
1836
+ options: object,
1837
+ ) => WasmMeterEstimateResult;
1236
1838
  _synthEnumTables: () => WasmSynthEnumTables;
1237
1839
  _synthPatchRoundTrip: (patch: unknown) => unknown;
1840
+ // Arrangement surface. Present only in a build with arrangement support, like
1841
+ // the mixing and voice-changer entries elsewhere in this interface; callers
1842
+ // probe for it at runtime (see projectModule() in project_internal.ts) rather
1843
+ // than through the type. `unknown` marks the shapes the facade owns — this
1844
+ // file describes the raw module and does not depend on the facade's types.
1845
+ projectAbiVersion: () => number;
1846
+ synthPresetNames: () => string[];
1847
+ synthPresetPatch: (name: string) => unknown;
1848
+ synthGsDrumKitName: (program: number) => string | null;
1849
+ synthGsDrumKitIsVoicedApart: (program: number) => number;
1850
+ synthGsVariationIsVoicedApart: (bank: number, program: number) => number;
1851
+ controllerProfileNames: () => string[];
1852
+ midiGmInstrumentName: (program: number) => string | null;
1853
+ midiGmProgramForName: (name: string) => number;
1854
+ midiGmFamilyName: (family: number) => string | null;
1855
+ midiGmFamilyFirstProgram: (family: number) => number;
1856
+ midiGm2InstrumentName: (bankLsb: number, program: number) => string | null;
1857
+ midiGmDrumName: (note: number) => string | null;
1858
+ midiGmDrumNoteForName: (name: string) => number;
1859
+ midiGm2DrumSetName: (bankLsb: number) => string | null;
1860
+ midiGm2DrumName: (bankLsb: number, note: number) => string | null;
1861
+ midiCcName: (controller: number) => string | null;
1862
+ midiCcIndexForName: (name: string) => number;
1863
+ midiPerNoteControllerName: (index: number) => string | null;
1864
+ midiBankProgram: (
1865
+ ppq: number,
1866
+ group: number,
1867
+ channel: number,
1868
+ bankMsb: number,
1869
+ bankLsb: number,
1870
+ program: number,
1871
+ ) => unknown;
1872
+ midiRouteEvents: (events: readonly unknown[], config: unknown) => unknown;
1873
+ midiCcLearn: (
1874
+ events: readonly unknown[],
1875
+ paramId: number,
1876
+ minValue: number,
1877
+ maxValue: number,
1878
+ minMovement: number,
1879
+ ) => unknown;
1880
+ midiCcToBreakpoint: (bindings: readonly unknown[], event: unknown) => unknown;
1881
+ midiParamToCc: (
1882
+ bindings: readonly unknown[],
1883
+ paramId: number,
1884
+ unitValue: number,
1885
+ group: number,
1886
+ ppq: number,
1887
+ ) => unknown;
1888
+ transcribe: (
1889
+ samples: Float32Array,
1890
+ sampleRate: number,
1891
+ tempoBpm: number | undefined,
1892
+ config: unknown,
1893
+ ) => unknown;
1894
+ alignTakeToReference: (
1895
+ reference: Float32Array,
1896
+ take: Float32Array,
1897
+ sampleRate: number,
1898
+ config: unknown,
1899
+ ) => unknown;
1238
1900
  _analysisResultSchemaPaths: () => string[];
1239
1901
  _analysisResultSchemaFixture: () => WasmAnalysisResult;
1240
1902
  analyzeImpulseResponse: (
@@ -1268,10 +1930,11 @@ export interface SonareModule {
1268
1930
  samples: Float32Array,
1269
1931
  sampleRate: number,
1270
1932
  options: WasmRoomMorphOptions,
1271
- ) => Float32Array;
1933
+ ) => WasmRoomMorphResult;
1272
1934
  analyzeWithProgress: (
1273
1935
  samples: Float32Array,
1274
1936
  sampleRate: number,
1937
+ options: object,
1275
1938
  progressCallback: ProgressCallback | null,
1276
1939
  cancelCallback: (() => boolean) | null,
1277
1940
  ) => WasmAnalysisResult;
@@ -1547,6 +2210,48 @@ export interface SonareModule {
1547
2210
  sampleRate: number,
1548
2211
  alignZeros: boolean,
1549
2212
  ) => Float32Array;
2213
+ decomposeStems: (
2214
+ samples: Float32Array,
2215
+ sampleRate: number,
2216
+ options: {
2217
+ nComponents?: number;
2218
+ nFft?: number;
2219
+ hopLength?: number;
2220
+ nIter?: number;
2221
+ beta?: number;
2222
+ init?: string;
2223
+ maskPower?: number;
2224
+ },
2225
+ ) => {
2226
+ components: Float32Array[];
2227
+ w: Float32Array;
2228
+ h: Float32Array;
2229
+ sampleRate: number;
2230
+ };
2231
+ decomposeStemsLinked: (
2232
+ channels: Float32Array[],
2233
+ sampleRate: number,
2234
+ options: {
2235
+ nComponents?: number;
2236
+ nFft?: number;
2237
+ hopLength?: number;
2238
+ nIter?: number;
2239
+ beta?: number;
2240
+ init?: string;
2241
+ maskPower?: number;
2242
+ },
2243
+ ) => {
2244
+ components: Float32Array[][];
2245
+ w: Float32Array;
2246
+ h: Float32Array;
2247
+ sampleRate: number;
2248
+ };
2249
+ remixAlignedIntervals: (
2250
+ samples: Float32Array,
2251
+ intervals: Int32Array,
2252
+ sampleRate: number,
2253
+ alignZeros: boolean,
2254
+ ) => Int32Array;
1550
2255
  phaseVocoder: (
1551
2256
  samples: Float32Array,
1552
2257
  sampleRate: number,
@@ -1620,6 +2325,116 @@ export interface SonareModule {
1620
2325
  offsetSample: number,
1621
2326
  targetOnsetSample: number,
1622
2327
  ) => Float32Array;
2328
+ extractNotes: (
2329
+ samples: Float32Array,
2330
+ sampleRate: number,
2331
+ f0Hz: Float32Array,
2332
+ voicedProb: Float32Array | undefined,
2333
+ voiced: Float32Array | undefined,
2334
+ frameRate: number,
2335
+ options: {
2336
+ segmentationThresholdCents?: number;
2337
+ minNoteMs?: number;
2338
+ referenceHz?: number;
2339
+ voicedThreshold?: number;
2340
+ },
2341
+ ) => NoteObject[];
2342
+ renderNotes: (
2343
+ samples: Float32Array,
2344
+ sampleRate: number,
2345
+ notes: readonly NoteObjectInput[],
2346
+ options: {
2347
+ fadeMs?: number;
2348
+ f0Hz?: Float32Array;
2349
+ voiced?: Float32Array;
2350
+ frameRate?: number;
2351
+ vibratoCutoffHz?: number;
2352
+ },
2353
+ ) => Float32Array;
2354
+ decomposeNotePitch: (
2355
+ f0Hz: Float32Array,
2356
+ voiced: Float32Array | undefined,
2357
+ frameRate: number,
2358
+ medianHz: number,
2359
+ vibratoCutoffHz: number,
2360
+ ) => PitchDecompositionResult;
2361
+ splitNote: (
2362
+ samples: Float32Array,
2363
+ sampleRate: number,
2364
+ f0Hz: Float32Array,
2365
+ voicedProb: Float32Array | undefined,
2366
+ voiced: Float32Array | undefined,
2367
+ frameRate: number,
2368
+ notes: readonly NoteSetEntry[],
2369
+ index: number,
2370
+ frame: number,
2371
+ options: {
2372
+ segmentationThresholdCents?: number;
2373
+ minNoteMs?: number;
2374
+ referenceHz?: number;
2375
+ voicedThreshold?: number;
2376
+ },
2377
+ ) => NoteObject[];
2378
+ mergeNotes: (
2379
+ samples: Float32Array,
2380
+ sampleRate: number,
2381
+ f0Hz: Float32Array,
2382
+ voicedProb: Float32Array | undefined,
2383
+ voiced: Float32Array | undefined,
2384
+ frameRate: number,
2385
+ notes: readonly NoteSetEntry[],
2386
+ first: number,
2387
+ last: number,
2388
+ options: {
2389
+ segmentationThresholdCents?: number;
2390
+ minNoteMs?: number;
2391
+ referenceHz?: number;
2392
+ voicedThreshold?: number;
2393
+ },
2394
+ ) => NoteObject[];
2395
+ assignNoteTargets: (
2396
+ notes: readonly NoteObject[],
2397
+ sampleRate: number,
2398
+ targets: readonly NoteTarget[],
2399
+ options: {
2400
+ unmatchedPolicy?: NoteTargetUnmatchedPolicy;
2401
+ minOverlapRatio?: number;
2402
+ maxCorrectionSemitones?: number;
2403
+ },
2404
+ ) => NoteTargetAssignResult;
2405
+ /** Absent from a build without arrangement support, which is what links the MIDI reader. */
2406
+ noteTargetsFromSmf?: (data: Uint8Array, trackIndex: number) => NoteTarget[];
2407
+ createPolyphonicAnalysis: (
2408
+ samples: Float32Array,
2409
+ sampleRate: number,
2410
+ config: Record<string, unknown>,
2411
+ ) => WasmPolyphonicAnalysis;
2412
+ extractPercussiveEvents: (
2413
+ samples: Float32Array | readonly number[],
2414
+ sampleRate: number,
2415
+ options: {
2416
+ nFft?: number;
2417
+ hopLength?: number;
2418
+ hpssKernelHarmonic?: number;
2419
+ hpssKernelPercussive?: number;
2420
+ onsetWait?: number;
2421
+ onsetDelta?: number;
2422
+ maxEventMs?: number;
2423
+ minPercussiveRatio?: number;
2424
+ },
2425
+ ) => PercussiveEvent[];
2426
+ renderPercussiveEvents: (
2427
+ samples: Float32Array | readonly number[],
2428
+ sampleRate: number,
2429
+ events: readonly PercussiveEventInput[],
2430
+ options: {
2431
+ nFft?: number;
2432
+ hopLength?: number;
2433
+ hpssKernelHarmonic?: number;
2434
+ hpssKernelPercussive?: number;
2435
+ fadeMs?: number;
2436
+ },
2437
+ ) => Float32Array;
1623
2438
  voiceChange: (
1624
2439
  samples: Float32Array,
1625
2440
  sampleRate: number,
@@ -1639,6 +2454,13 @@ export interface SonareModule {
1639
2454
  targetDb: number,
1640
2455
  mode: string,
1641
2456
  ) => Float32Array;
2457
+ normalizeStereo: (
2458
+ left: Float32Array,
2459
+ right: Float32Array,
2460
+ sampleRate: number,
2461
+ targetDb: number,
2462
+ mode: string,
2463
+ ) => { left: Float32Array; right: Float32Array; appliedGainDb: number };
1642
2464
  mastering: (
1643
2465
  samples: Float32Array,
1644
2466
  sampleRate: number,
@@ -1652,6 +2474,17 @@ export interface SonareModule {
1652
2474
  masteringPairProcessorNames: () => string[];
1653
2475
  masteringPairAnalysisNames: () => string[];
1654
2476
  masteringStereoAnalysisNames: () => string[];
2477
+ masteringInsertNames: () => string[];
2478
+ masteringInsertParamNames: (name: string) => string[];
2479
+ // These return JSON the facade parses; the raw module has no object shape here.
2480
+ masteringInsertParamInfo: (name: string) => string;
2481
+ masteringProcessorCatalog: () => string;
2482
+ masteringAmpPresetCatalog: () => string;
2483
+ masteringInsertTiming: (
2484
+ name: string,
2485
+ paramsJson: string,
2486
+ sampleRate: number,
2487
+ ) => { latencySamples: number; tailSamples: number };
1655
2488
  masteringProcess: (
1656
2489
  processorName: string,
1657
2490
  samples: Float32Array,
@@ -1679,6 +2512,27 @@ export interface SonareModule {
1679
2512
  sampleRate: number,
1680
2513
  params: Record<string, number | boolean>,
1681
2514
  ) => string;
2515
+ masteringPairProcessStereo: (
2516
+ processorName: string,
2517
+ sourceLeft: Float32Array,
2518
+ sourceRight: Float32Array,
2519
+ referenceLeft: Float32Array,
2520
+ referenceRight: Float32Array,
2521
+ sampleRate: number,
2522
+ params: Record<string, number | boolean>,
2523
+ ) => WasmMasteringStereoResult;
2524
+ masteringAbMatchLoudness: (
2525
+ source: Float32Array,
2526
+ reference: Float32Array,
2527
+ sampleRate: number,
2528
+ ) => WasmLoudnessMatchResult;
2529
+ masteringAbMatchLoudnessStereo: (
2530
+ sourceLeft: Float32Array,
2531
+ sourceRight: Float32Array,
2532
+ referenceLeft: Float32Array,
2533
+ referenceRight: Float32Array,
2534
+ sampleRate: number,
2535
+ ) => WasmLoudnessMatchStereoResult;
1682
2536
  masteringStereoAnalyze: (
1683
2537
  analysisName: string,
1684
2538
  left: Float32Array,
@@ -1689,8 +2543,13 @@ export interface SonareModule {
1689
2543
  masteringAssistantSuggest: (
1690
2544
  samples: Float32Array,
1691
2545
  sampleRate: number,
1692
- params: Record<string, number | boolean>,
2546
+ params: Record<string, number | boolean | string>,
1693
2547
  ) => string;
2548
+ masteringAssistantSuggestChain: (
2549
+ samples: Float32Array,
2550
+ sampleRate: number,
2551
+ params: Record<string, number | boolean | string>,
2552
+ ) => Record<string, number | boolean>;
1694
2553
  masteringAudioProfile: (
1695
2554
  samples: Float32Array,
1696
2555
  sampleRate: number,
@@ -1705,8 +2564,14 @@ export interface SonareModule {
1705
2564
  left: Float32Array,
1706
2565
  right: Float32Array,
1707
2566
  sampleRate: number,
1708
- params: Record<string, number | boolean>,
2567
+ params: Record<string, number | boolean | string>,
1709
2568
  ) => string;
2569
+ masteringAssistantSuggestChainStereo: (
2570
+ left: Float32Array,
2571
+ right: Float32Array,
2572
+ sampleRate: number,
2573
+ params: Record<string, number | boolean | string>,
2574
+ ) => Record<string, number | boolean>;
1710
2575
  masteringAudioProfileStereo: (
1711
2576
  left: Float32Array,
1712
2577
  right: Float32Array,
@@ -1724,36 +2589,134 @@ export interface SonareModule {
1724
2589
  sampleRate: number,
1725
2590
  options: object,
1726
2591
  ) => Float32Array;
2592
+ masteringRepairDeclickStereo: (
2593
+ left: Float32Array,
2594
+ right: Float32Array,
2595
+ sampleRate: number,
2596
+ options: object,
2597
+ ) => WasmDeclickStereoResult;
1727
2598
  masteringRepairDenoiseClassical: (
1728
2599
  samples: Float32Array,
1729
2600
  sampleRate: number,
1730
2601
  options: object,
1731
2602
  ) => Float32Array;
2603
+ masteringRepairDenoiseClassicalStereo: (
2604
+ left: Float32Array,
2605
+ right: Float32Array,
2606
+ sampleRate: number,
2607
+ options: object,
2608
+ ) => WasmDenoiseStereoResult;
2609
+ masteringRepairDenoiseClassicalLinked: (
2610
+ channels: Float32Array[],
2611
+ sampleRate: number,
2612
+ options: object,
2613
+ ) => WasmDenoiseLinkedResult;
1732
2614
  masteringRepairDeclip: (
1733
2615
  samples: Float32Array,
1734
2616
  sampleRate: number,
1735
2617
  options: object,
1736
2618
  ) => Float32Array;
2619
+ masteringRepairDeclipStereo: (
2620
+ left: Float32Array,
2621
+ right: Float32Array,
2622
+ sampleRate: number,
2623
+ options: object,
2624
+ ) => WasmDeclipStereoResult;
1737
2625
  masteringRepairDecrackle: (
1738
2626
  samples: Float32Array,
1739
2627
  sampleRate: number,
1740
2628
  options: object,
1741
2629
  ) => Float32Array;
2630
+ masteringRepairDecrackleStereo: (
2631
+ left: Float32Array,
2632
+ right: Float32Array,
2633
+ sampleRate: number,
2634
+ options: object,
2635
+ ) => WasmDecrackleStereoResult;
1742
2636
  masteringRepairDehum: (
1743
2637
  samples: Float32Array,
1744
2638
  sampleRate: number,
1745
2639
  options: object,
1746
2640
  ) => Float32Array;
2641
+ masteringRepairDehumStereo: (
2642
+ left: Float32Array,
2643
+ right: Float32Array,
2644
+ sampleRate: number,
2645
+ options: object,
2646
+ ) => WasmDehumStereoResult;
1747
2647
  masteringRepairDereverbClassical: (
1748
2648
  samples: Float32Array,
1749
2649
  sampleRate: number,
1750
2650
  options: object,
1751
2651
  ) => Float32Array;
2652
+ masteringRepairDereverbClassicalStereo: (
2653
+ left: Float32Array,
2654
+ right: Float32Array,
2655
+ sampleRate: number,
2656
+ options: object,
2657
+ ) => WasmDereverbStereoResult;
2658
+ masteringRepairDereverbClassicalLinked: (
2659
+ channels: Float32Array[],
2660
+ sampleRate: number,
2661
+ options: object,
2662
+ ) => WasmDereverbLinkedResult;
2663
+ masteringRepairDereverbConfigForRoom: (
2664
+ estimate: WasmRoomEstimateResult,
2665
+ options: object,
2666
+ ) => WasmDereverbClassicalConfig;
1752
2667
  masteringRepairTrimSilence: (
1753
2668
  samples: Float32Array,
1754
2669
  sampleRate: number,
1755
2670
  options: object,
1756
2671
  ) => Float32Array;
2672
+ masteringRepairTrimSilenceStereo: (
2673
+ left: Float32Array,
2674
+ right: Float32Array,
2675
+ sampleRate: number,
2676
+ options: object,
2677
+ ) => WasmTrimSilenceStereoResult;
2678
+ masteringRepairDetectClicks: (
2679
+ samples: Float32Array,
2680
+ sampleRate: number,
2681
+ options: object,
2682
+ ) => WasmClickDetection;
2683
+ masteringRepairDetectNoiseFloor: (
2684
+ samples: Float32Array,
2685
+ sampleRate: number,
2686
+ options: object,
2687
+ ) => WasmNoiseDetection;
2688
+ masteringRepairNoiseBandBins: (nFft: number, sampleRate: number) => Int32Array;
2689
+ masteringRepairDetectClipping: (
2690
+ samples: Float32Array,
2691
+ sampleRate: number,
2692
+ options: object,
2693
+ ) => WasmClipDetection;
2694
+ masteringRepairDetectCrackle: (
2695
+ samples: Float32Array,
2696
+ sampleRate: number,
2697
+ options: object,
2698
+ ) => WasmCrackleDetection;
2699
+ masteringRepairDetectHum: (
2700
+ samples: Float32Array,
2701
+ sampleRate: number,
2702
+ options: object,
2703
+ ) => WasmHumDetection;
2704
+ masteringRepairDetectReverb: (
2705
+ samples: Float32Array,
2706
+ sampleRate: number,
2707
+ options: object,
2708
+ ) => WasmReverbDetection;
2709
+ masteringRepairDetectTrimRange: (
2710
+ samples: Float32Array,
2711
+ sampleRate: number,
2712
+ options: object,
2713
+ ) => WasmTrimRange;
2714
+ masteringRepairDetectTrimRangeStereo: (
2715
+ left: Float32Array,
2716
+ right: Float32Array,
2717
+ sampleRate: number,
2718
+ options: object,
2719
+ ) => WasmTrimRange;
1757
2720
  masteringDynamicsCompressor: (
1758
2721
  samples: Float32Array,
1759
2722
  sampleRate: number,
@@ -1796,6 +2759,8 @@ export interface SonareModule {
1796
2759
  cancelCallback: (() => boolean) | null,
1797
2760
  ) => WasmMasteringStereoChainResult;
1798
2761
  masteringPresetNames: () => string[];
2762
+ masteringPresetParams: (preset: string) => Record<string, number | boolean>;
2763
+ masteringPlatformNames: () => string[];
1799
2764
  masterAudio: (
1800
2765
  presetName: string,
1801
2766
  samples: Float32Array,
@@ -1834,6 +2799,24 @@ export interface SonareModule {
1834
2799
  sampleRate: number,
1835
2800
  options: Record<string, unknown>,
1836
2801
  ) => WasmMixResult;
2802
+ mixingAssistantSuggest: (
2803
+ leftChannels: Float32Array[],
2804
+ rightChannels: (Float32Array | null)[] | null,
2805
+ trackIds: string[],
2806
+ trackNames: (string | null)[] | null,
2807
+ sampleRate: number,
2808
+ params: Record<string, number | boolean>,
2809
+ ) => string;
2810
+ mixingAssistantSuggestSceneJson: (
2811
+ leftChannels: Float32Array[],
2812
+ rightChannels: (Float32Array | null)[] | null,
2813
+ trackIds: string[],
2814
+ trackNames: (string | null)[] | null,
2815
+ sampleRate: number,
2816
+ params: Record<string, number | boolean>,
2817
+ ) => string;
2818
+ mixingAssistantSourceClassNames: () => string[];
2819
+ mixingAssistantSourceClassFromName: (name: string) => number;
1837
2820
  trim: (samples: Float32Array, sampleRate: number, thresholdDb: number) => Float32Array;
1838
2821
  trimEx: (
1839
2822
  samples: Float32Array,
@@ -2145,6 +3128,7 @@ export interface SonareModule {
2145
3128
  segmentationThresholdCents?: number;
2146
3129
  minNoteMs?: number;
2147
3130
  referenceHz?: number;
3131
+ voicedThreshold?: number;
2148
3132
  },
2149
3133
  ) => WasmNoteSegment[];
2150
3134
 
@@ -2177,6 +3161,18 @@ export interface SonareModule {
2177
3161
  frameLength: number,
2178
3162
  hopLength: number,
2179
3163
  ) => Int32Array;
3164
+ splitSilenceCommon: (
3165
+ signals: Float32Array[],
3166
+ topDb: number,
3167
+ frameLength: number,
3168
+ hopLength: number,
3169
+ ) => Int32Array;
3170
+ splitSilenceCommonWithReport: (
3171
+ signals: Float32Array[],
3172
+ topDb: number,
3173
+ frameLength: number,
3174
+ hopLength: number,
3175
+ ) => SplitSilenceCommonWithReportResult;
2180
3176
  frameSignal: (samples: Float32Array, frameLength: number, hopLength: number) => WasmFrameResult;
2181
3177
  tone: (
2182
3178
  frequency: number,
@@ -2341,6 +3337,11 @@ export interface SonareModule {
2341
3337
  hopLength: number,
2342
3338
  minSectionSec: number,
2343
3339
  ) => WasmSectionResult[];
3340
+ detectBoundaries: (
3341
+ samples: Float32Array,
3342
+ sampleRate: number,
3343
+ options: WasmBoundaryOptions,
3344
+ ) => WasmBoundaryResult;
2344
3345
  analyzeMelody: (
2345
3346
  samples: Float32Array,
2346
3347
  sampleRate: number,
@@ -2386,6 +3387,11 @@ export interface SonareModule {
2386
3387
  momentaryLufs: (samples: Float32Array, sampleRate: number) => Float32Array;
2387
3388
  shortTermLufs: (samples: Float32Array, sampleRate: number) => Float32Array;
2388
3389
  lufsInterleaved: (samples: Float32Array, channels: number, sampleRate: number) => WasmLufsResult;
3390
+ lufsSeriesInterleaved: (
3391
+ samples: Float32Array,
3392
+ channels: number,
3393
+ sampleRate: number,
3394
+ ) => WasmLufsSeriesResult;
2389
3395
  ebur128LoudnessRange: (samples: Float32Array, sampleRate: number) => number;
2390
3396
 
2391
3397
  // Core - Resample
@@ -2428,6 +3434,14 @@ export interface SonareModule {
2428
3434
  Major9: { value: 14 };
2429
3435
  Dominant9: { value: 15 };
2430
3436
  Sus2Add4: { value: 16 };
3437
+ Major6: { value: 17 };
3438
+ Minor6: { value: 18 };
3439
+ MinorMajor7: { value: 19 };
3440
+ Dominant7Sus4: { value: 20 };
3441
+ Dominant11: { value: 21 };
3442
+ Dominant13: { value: 22 };
3443
+ Dominant7Flat9: { value: 23 };
3444
+ Dominant7Sharp9: { value: 24 };
2431
3445
  };
2432
3446
  SectionType: {
2433
3447
  Intro: { value: 0 };
@@ -2492,6 +3506,23 @@ export interface SonareModule {
2492
3506
  error?: string;
2493
3507
  };
2494
3508
 
3509
+ // Playback - renderer, HRTF set and program loudness meter
3510
+ createHrtfSet: (bytes: Uint8Array) => WasmHrtfSet;
3511
+ createPlaybackRenderer: (
3512
+ configJson: string,
3513
+ hrtf: WasmHrtfSet | null,
3514
+ sampleRate: number,
3515
+ maxBlockSize: number,
3516
+ ) => WasmPlaybackRenderer;
3517
+ createPlaybackLoudnessMeter: (channels: number, sampleRate: number) => WasmPlaybackLoudnessMeter;
3518
+ renderPlayback: (
3519
+ samples: Float32Array,
3520
+ channels: number,
3521
+ sampleRate: number,
3522
+ configJson: string,
3523
+ hrtf: WasmHrtfSet | null,
3524
+ ) => { samples: Float32Array; channels: number };
3525
+
2495
3526
  // Mixing - scene-based Mixer
2496
3527
  createMixerFromSceneJson: (json: string, sampleRate: number, blockSize: number) => WasmMixer;
2497
3528
 
@@ -2499,10 +3530,33 @@ export interface SonareModule {
2499
3530
  // surfaces a C++ throw as the raw pointer number) into a structured error.
2500
3531
  // Consumed by the module-error wrapper in module_state.ts.
2501
3532
  sonareExceptionInfo: (ptr: number) => { code: number; codeName: string; message: string };
3533
+
3534
+ // Drops the reference emscripten's __cxa_throw took on the exception object
3535
+ // before rethrowing its pointer into JS. Nothing else ever drops it, so the
3536
+ // module-error wrapper releases every pointer it surfaces.
3537
+ sonareReleaseException: (ptr: number) => void;
3538
+ }
3539
+
3540
+ // The polyphonic editing analysis. `noteCount` and `frameCount` are embind
3541
+ // properties rather than methods; everything else is a call.
3542
+ export interface WasmPolyphonicAnalysis {
3543
+ readonly noteCount: number;
3544
+ readonly frameCount: number;
3545
+ notes: () => NoteObject[];
3546
+ setNoteEdit: (note: number, edit: NoteEditInput) => void;
3547
+ polyphony: () => Int32Array;
3548
+ noteF0: (note: number) => Float32Array;
3549
+ noteAmplitude: (note: number) => Float32Array;
3550
+ noteSalience: (note: number) => Float32Array;
3551
+ noteInharmonicity: () => Float32Array;
3552
+ noteEnvelope: (note: number) => Float32Array;
3553
+ render: (options: Record<string, unknown>) => Float32Array;
3554
+ delete: () => void;
2502
3555
  }
2503
3556
 
2504
3557
  export interface WasmStreamingMasteringChain {
2505
3558
  prepare: (sampleRate: number, maxBlockSize: number, numChannels: number) => void;
3559
+ setParameter: (key: string, value: number) => void;
2506
3560
  processMono: (samples: Float32Array) => Float32Array;
2507
3561
  processStereo: (
2508
3562
  left: Float32Array,
@@ -2513,6 +3567,10 @@ export interface WasmStreamingMasteringChain {
2513
3567
  reset: () => void;
2514
3568
  latencySamples: () => number;
2515
3569
  stageNames: () => string[];
3570
+ /** Cumulative since prepare(), which rebuilds the stages and so clears it. */
3571
+ nonFiniteSubstitutionCount: () => number;
3572
+ /** Not the same measurement as nonFiniteSubstitutionCount; see the facade. */
3573
+ nonFiniteDiscardCount: () => number;
2516
3574
  delete: () => void;
2517
3575
  }
2518
3576
 
@@ -2540,11 +3598,13 @@ export interface WasmStreamingEqualizer {
2540
3598
  clearSidechain: () => void;
2541
3599
  lastAutoGainDb: () => number;
2542
3600
  latencySamples: () => number;
3601
+ nonFiniteDiscardCount: () => number;
2543
3602
  processMono: (samples: Float32Array) => Float32Array;
2544
3603
  processStereo: (
2545
3604
  left: Float32Array,
2546
3605
  right: Float32Array,
2547
3606
  ) => { left: Float32Array; right: Float32Array };
3607
+ magnitudeResponse: (placement: number, frequenciesHz: Float32Array) => Float32Array;
2548
3608
  spectrum: () => WasmEqSpectrumSnapshot;
2549
3609
  match: (source: Float32Array, reference: Float32Array, options: Record<string, unknown>) => void;
2550
3610
  delete: () => void;
@@ -2556,6 +3616,7 @@ export interface WasmStreamingRetune {
2556
3616
  setConfig: (config: Record<string, unknown>) => void;
2557
3617
  config: () => { semitones: number; mix: number; grainSize: number };
2558
3618
  grainSize: () => number;
3619
+ latencySamples: () => number;
2559
3620
  processMono: (samples: Float32Array) => Float32Array;
2560
3621
  delete: () => void;
2561
3622
  }
@@ -2567,6 +3628,7 @@ export interface WasmRealtimeVoiceChanger {
2567
3628
  setPodConfig: (config: WasmRealtimeVoiceChangerPodConfig) => void;
2568
3629
  configJson: () => string;
2569
3630
  latencySamples: () => number;
3631
+ nonFiniteDiscardCount: () => number;
2570
3632
  bufferGeneration: () => number;
2571
3633
  processMono: (samples: Float32Array) => Float32Array;
2572
3634
  processMonoInto: (samples: Float32Array, output: Float32Array) => void;
@@ -2587,6 +3649,58 @@ export interface WasmRealtimeVoiceChanger {
2587
3649
  delete: () => void;
2588
3650
  }
2589
3651
 
3652
+ export interface WasmHrtfSet {
3653
+ delete: () => void;
3654
+ }
3655
+
3656
+ export interface WasmPlaybackRenderer {
3657
+ processPlanar: (planes: Float32Array[]) => Float32Array[];
3658
+ processInterleaved: (samples: Float32Array, inChannels: number) => Float32Array;
3659
+ setConfig: (configJson: string) => void;
3660
+ configJson: () => string;
3661
+ setHeadOrientation: (yawDeg: number, pitchDeg: number, rollDeg: number) => void;
3662
+ reset: () => void;
3663
+ latencySamples: () => number;
3664
+ inputChannels: () => number;
3665
+ outputChannels: () => number;
3666
+ diagnosticsJson: () => string;
3667
+ nonFiniteDiscardCount: () => number;
3668
+ // AudioWorklet path: heap views allocated once at construction (they detach
3669
+ // on memory growth and are then re-acquired), and a SonareError code instead
3670
+ // of a throw for a rejected block.
3671
+ inputPlane: (channel: number) => Float32Array;
3672
+ outputPlane: (channel: number) => Float32Array;
3673
+ processPrepared: (inChannels: number, frames: number) => number;
3674
+ processPreparedSilence: (frames: number) => number;
3675
+ delete: () => void;
3676
+ }
3677
+
3678
+ export interface WasmPlaybackLoudnessMeter {
3679
+ pushInterleaved: (samples: Float32Array) => void;
3680
+ integratedLufs: () => number;
3681
+ delete: () => void;
3682
+ }
3683
+
3684
+ /** One block's worth of meter readings, all dB fields floored at -120. */
3685
+ export interface WasmMixerMeterSnapshot {
3686
+ peakDbL: number;
3687
+ peakDbR: number;
3688
+ rmsDbL: number;
3689
+ rmsDbR: number;
3690
+ correlation: number;
3691
+ /**
3692
+ * Left-channel inter-sample (true) peak in dB, from the ITU-R BS.1770-4
3693
+ * polyphase reconstruction at 4x. A streaming measurement: the centered
3694
+ * reconstruction stencil needs a few future samples a realtime path does not
3695
+ * have, so each block's last samples read marginally low (about 0.1 dB across
3696
+ * 64..8192-sample blocks on a near-Nyquist tone, always under-reading). Use
3697
+ * `meteringTruePeakDb` over the whole signal for an exact dBTP number.
3698
+ */
3699
+ truePeakDbL: number;
3700
+ /** Right-channel inter-sample (true) peak in dB. See {@link truePeakDbL}. */
3701
+ truePeakDbR: number;
3702
+ }
3703
+
2590
3704
  export interface WasmMixer {
2591
3705
  compile: () => void;
2592
3706
  processStereo: (
@@ -2604,6 +3718,10 @@ export interface WasmMixer {
2604
3718
  outputLeftView: () => Float32Array;
2605
3719
  outputRightView: () => Float32Array;
2606
3720
  processPreparedStereo: (numSamples: number) => void;
3721
+ configureMeter: (enabled: boolean, truePeakOversample: number) => void;
3722
+ meterSnapshot: () => WasmMixerMeterSnapshot;
3723
+ latchMeterSnapshot: () => boolean;
3724
+ meterScratchValue: (field: number) => number;
2607
3725
  stripCount: () => number;
2608
3726
  sceneWarnings: () => string[];
2609
3727
  scheduleInsertAutomation: (
@@ -2619,6 +3737,7 @@ export interface WasmMixer {
2619
3737
  setFaderDb: (stripIndex: number, db: number) => void;
2620
3738
  setPan: (stripIndex: number, pan: number, panMode: number) => void;
2621
3739
  setWidth: (stripIndex: number, width: number) => void;
3740
+ settle: (stripIndex: number) => void;
2622
3741
  setMuted: (stripIndex: number, muted: boolean) => void;
2623
3742
  setSoloed: (stripIndex: number, soloed: boolean) => void;
2624
3743
  setSoloSafe: (stripIndex: number, soloSafe: boolean) => void;
@@ -2640,6 +3759,8 @@ export interface WasmMixer {
2640
3759
  meterTap: (stripIndex: number, tap: number) => WasmMixMeterSnapshot;
2641
3760
  stripMeter: (stripIndex: number) => WasmMixMeterSnapshot;
2642
3761
  busMeter: (busId: string) => WasmMixMeterSnapshot;
3762
+ stripNonFiniteDiscardCount: (stripIndex: number) => number;
3763
+ busNonFiniteDiscardCount: (busId: string) => number;
2643
3764
  scheduleFaderAutomation: (
2644
3765
  stripIndex: number,
2645
3766
  samplePos: number,
@@ -2666,6 +3787,7 @@ export interface WasmMixer {
2666
3787
  curve: number,
2667
3788
  ) => void;
2668
3789
  readGoniometerLatest: (stripIndex: number, maxPoints: number) => WasmGoniometerPoint[];
3790
+ addStrip: (id: string, metering: StripMeteringOptions) => void;
2669
3791
  addBus: (id: string, role: string) => void;
2670
3792
  removeBus: (id: string) => void;
2671
3793
  busCount: () => number;
@@ -2744,6 +3866,7 @@ export interface WasmAnalyzerStats {
2744
3866
  droppedOutputFrames: number;
2745
3867
  droppedChordProgressionEntries: number;
2746
3868
  droppedBarProgressionEntries: number;
3869
+ nonFiniteDiscardBlocks: number;
2747
3870
  estimate: WasmProgressiveEstimate;
2748
3871
  }
2749
3872
 
@@ -2794,8 +3917,11 @@ export interface WasmStreamFramesI16 {
2794
3917
  }
2795
3918
 
2796
3919
  export interface WasmStreamAnalyzer {
3920
+ /** Throws (invalid state) when the stream was already finalized; reset first. */
2797
3921
  process: (samples: Float32Array) => void;
3922
+ /** Rejects a gap, a seek, a mode switch, and a chunk fed after finalize. */
2798
3923
  processWithOffset: (samples: Float32Array, sampleOffset: number) => void;
3924
+ /** Idempotent on success; a failed call leaves the stream un-finalized. */
2799
3925
  finalize: () => void;
2800
3926
  availableFrames: () => number;
2801
3927
  readFramesSoa: (maxFrames: number) => WasmFrameBuffer;
@@ -2807,7 +3933,9 @@ export interface WasmStreamAnalyzer {
2807
3933
  currentTime: () => number;
2808
3934
  sampleRate: () => number;
2809
3935
  setExpectedDuration: (durationSeconds: number) => void;
3936
+ /** Throws outside 0.01..100; the request is refused, never clamped. */
2810
3937
  setNormalizationGain: (gain: number) => void;
3938
+ /** Throws outside 220..880 Hz; the request is refused, never clamped. */
2811
3939
  setTuningRefHz: (refHz: number) => void;
2812
3940
  delete: () => void;
2813
3941
  }