@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,3909 @@
1
+ /**
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.
8
+ */
9
+
10
+ import type { SplitSilenceCommonWithReportResult } from './feature_core';
11
+ import type { StripMeteringOptions } from './mixer';
12
+ import type {
13
+ NoteEditInput,
14
+ NoteObject,
15
+ NoteObjectInput,
16
+ NoteSetEntry,
17
+ NoteTarget,
18
+ NoteTargetAssignResult,
19
+ NoteTargetUnmatchedPolicy,
20
+ PercussiveEvent,
21
+ PercussiveEventInput,
22
+ PitchDecompositionResult,
23
+ ProgressCallback,
24
+ SonareCapabilities,
25
+ SpectralRegionOp,
26
+ SurroundPan,
27
+ } from './public_types';
28
+
29
+ export interface SonareModuleOptions {
30
+ locateFile?: (path: string, prefix: string) => string;
31
+ wasmBinary?: ArrayBuffer | Uint8Array;
32
+ onRuntimeInitialized?: () => void;
33
+ print?: (text: string) => void;
34
+ printErr?: (text: string) => void;
35
+ }
36
+
37
+ // Result types
38
+ export interface WasmKeyResult {
39
+ root: number;
40
+ mode: number;
41
+ confidence: number;
42
+ name: string;
43
+ shortName: string;
44
+ }
45
+
46
+ export interface WasmKeyCandidateResult {
47
+ key: WasmKeyResult;
48
+ correlation: number;
49
+ }
50
+
51
+ // Flat POD mirror of SonareRealtimeVoiceChangerConfig. Keys are camelCase to
52
+ // match the Node addon getter (the underlying C ABI / Python POD is snake_case).
53
+ export interface WasmRealtimeVoiceChangerPodConfig {
54
+ inputGainDb: number;
55
+ outputGainDb: number;
56
+ wetMix: number;
57
+ retuneSemitones: number;
58
+ retuneMix: number;
59
+ retuneGrainSize: number;
60
+ formantFactor: number;
61
+ formantAmount: number;
62
+ formantBody: number;
63
+ formantBrightness: number;
64
+ formantNasal: number;
65
+ eqHighpassHz: number;
66
+ eqBodyDb: number;
67
+ eqPresenceDb: number;
68
+ eqAirDb: number;
69
+ gateThresholdDb: number;
70
+ gateAttackMs: number;
71
+ gateReleaseMs: number;
72
+ gateRangeDb: number;
73
+ compressorThresholdDb: number;
74
+ compressorRatio: number;
75
+ compressorAttackMs: number;
76
+ compressorReleaseMs: number;
77
+ compressorMakeupGainDb: number;
78
+ deesserFrequencyHz: number;
79
+ deesserThresholdDb: number;
80
+ deesserRatio: number;
81
+ deesserRangeDb: number;
82
+ reverbMix: number;
83
+ reverbTimeMs: number;
84
+ reverbDamping: number;
85
+ reverbSeed: number;
86
+ limiterCeilingDb: number;
87
+ limiterReleaseMs: number;
88
+ limiterEnableIspLimiter: boolean;
89
+ limiterIspCeilingDbtp: number;
90
+ }
91
+
92
+ export interface WasmBeatResult {
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
+ */
99
+ strength: number;
100
+ }
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
+
118
+ export interface WasmChordResult {
119
+ root: number;
120
+ bass: number;
121
+ quality: number;
122
+ start: number;
123
+ end: number;
124
+ confidence: number;
125
+ name: string;
126
+ }
127
+
128
+ export interface WasmAnalysisChordResult extends WasmChordResult {
129
+ romanNumeral: string;
130
+ }
131
+
132
+ export interface WasmSectionResult {
133
+ type: number;
134
+ start: number;
135
+ end: number;
136
+ energyLevel: number;
137
+ confidence: number;
138
+ name: string;
139
+ }
140
+
141
+ export interface WasmTimbreResult {
142
+ brightness: number;
143
+ warmth: number;
144
+ density: number;
145
+ roughness: number;
146
+ complexity: number;
147
+ }
148
+
149
+ export interface WasmDynamicsResult {
150
+ dynamicRangeDb: number;
151
+ peakDb: number;
152
+ rmsDb: number;
153
+ loudnessRangeDb: number;
154
+ crestFactor: number;
155
+ isCompressed: boolean;
156
+ }
157
+
158
+ export interface WasmRhythmResult {
159
+ syncopation: number;
160
+ grooveType: string;
161
+ patternRegularity: number;
162
+ tempoStability: number;
163
+ timeSignature: WasmTimeSignatureResult;
164
+ }
165
+
166
+ export interface WasmTimeSignatureResult {
167
+ numerator: number;
168
+ denominator: number;
169
+ confidence: number;
170
+ }
171
+
172
+ export interface WasmMelodyContourResult {
173
+ pitchRangeOctaves: number;
174
+ pitchStability: number;
175
+ meanFrequency: number;
176
+ vibratoRate: number;
177
+ pitches: WasmMelodyPoint[];
178
+ }
179
+
180
+ export interface WasmAnalysisResult {
181
+ bpm: number;
182
+ bpmConfidence: number;
183
+ bpmCandidates: WasmBpmHypothesis[];
184
+ key: WasmKeyResult;
185
+ timeSignature: WasmTimeSignatureResult;
186
+ timeSignatureCandidates: WasmTimeSignatureResult[];
187
+ beats: WasmBeatResult[];
188
+ downbeatIndices: number[];
189
+ downbeatPhase: number;
190
+ beatObservations: WasmBeatObservationsResult;
191
+ beatLocalBpm: number[];
192
+ chords: WasmAnalysisChordResult[];
193
+ sections: WasmSectionResult[];
194
+ timbre: WasmTimbreResult;
195
+ dynamics: WasmDynamicsResult;
196
+ rhythm: WasmRhythmResult;
197
+ melody: WasmMelodyContourResult;
198
+ form: string;
199
+ }
200
+
201
+ export interface WasmBpmHypothesis {
202
+ value: number;
203
+ confidence: number;
204
+ relation: 'primary' | 'half' | 'double' | 'other';
205
+ }
206
+
207
+ export interface WasmBpmCandidate {
208
+ bpm: number;
209
+ confidence: number;
210
+ }
211
+
212
+ export interface WasmBpmAnalysisResult {
213
+ bpm: number;
214
+ confidence: number;
215
+ candidates: WasmBpmCandidate[];
216
+ autocorrelation: Float32Array;
217
+ tempogram: Float32Array;
218
+ }
219
+
220
+ export interface WasmRhythmAnalysisResult {
221
+ timeSignature: WasmTimeSignatureResult;
222
+ syncopation: number;
223
+ grooveType: string;
224
+ patternRegularity: number;
225
+ tempoStability: number;
226
+ bpm: number;
227
+ beatIntervals: Float32Array;
228
+ }
229
+
230
+ export interface WasmDynamicsAnalysisResult {
231
+ dynamicRangeDb: number;
232
+ peakDb: number;
233
+ rmsDb: number;
234
+ crestFactor: number;
235
+ loudnessRangeDb: number;
236
+ isCompressed: boolean;
237
+ loudnessTimes: Float32Array;
238
+ loudnessRmsDb: Float32Array;
239
+ }
240
+
241
+ export interface WasmStreamConfigDefaults {
242
+ sampleRate: number;
243
+ nFft: number;
244
+ hopLength: number;
245
+ nMels: number;
246
+ fmin: number;
247
+ fmax: number;
248
+ tuningRefHz: number;
249
+ computeMagnitude: boolean;
250
+ computeMel: boolean;
251
+ computeChroma: boolean;
252
+ computeOnset: boolean;
253
+ computeSpectral: boolean;
254
+ emitEveryNFrames: number;
255
+ magnitudeDownsample: number;
256
+ maxPendingFrames: number;
257
+ maxProgressionEntries: number;
258
+ keyUpdateIntervalSec: number;
259
+ bpmUpdateIntervalSec: number;
260
+ window: number;
261
+ outputFormat: number;
262
+ }
263
+
264
+ export interface WasmTimbreFrameResult {
265
+ brightness: number;
266
+ warmth: number;
267
+ density: number;
268
+ roughness: number;
269
+ complexity: number;
270
+ }
271
+
272
+ export interface WasmTimbreAnalysisResult {
273
+ brightness: number;
274
+ warmth: number;
275
+ density: number;
276
+ roughness: number;
277
+ complexity: number;
278
+ spectralCentroid: Float32Array;
279
+ spectralFlatness: Float32Array;
280
+ spectralRolloff: Float32Array;
281
+ timbreOverTime: WasmTimbreFrameResult[];
282
+ }
283
+
284
+ export interface WasmChordAnalysisResult {
285
+ chords: WasmChordResult[];
286
+ }
287
+
288
+ export interface WasmAcousticResult {
289
+ rt60: number;
290
+ edt: number;
291
+ c50: number;
292
+ c80: number;
293
+ d50: number;
294
+ rt60Bands: Float32Array;
295
+ edtBands: Float32Array;
296
+ c50Bands: Float32Array;
297
+ c80Bands: Float32Array;
298
+ confidence: number;
299
+ isBlind: boolean;
300
+ }
301
+
302
+ export interface WasmRoomGeometryOptions {
303
+ lengthM?: number;
304
+ widthM?: number;
305
+ heightM?: number;
306
+ absorption?: number;
307
+ materialPreset?: number;
308
+ bandAbsorption?: Float32Array | number[];
309
+ bandScattering?: Float32Array | number[];
310
+ sourceX?: number;
311
+ sourceY?: number;
312
+ sourceZ?: number;
313
+ listenerX?: number;
314
+ listenerY?: number;
315
+ listenerZ?: number;
316
+ ismOrder?: number;
317
+ seed?: number;
318
+ maxSeconds?: number;
319
+ airAbsorptionEnabled?: boolean;
320
+ airTemperatureC?: number;
321
+ airHumidityPercent?: number;
322
+ }
323
+
324
+ export interface WasmRirSynthOptions extends WasmRoomGeometryOptions {
325
+ sampleRate?: number;
326
+ preferEyring?: boolean;
327
+ mixingTimeMs?: number;
328
+ crossfadeMs?: number;
329
+ }
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
+
343
+ export interface WasmRirResult {
344
+ rir: Float32Array;
345
+ sampleRate: number;
346
+ hasError: boolean;
347
+ errorMessage: string;
348
+ diagnostics: WasmRirDiagnostic[];
349
+ }
350
+
351
+ export interface WasmRoomEstimateOptions {
352
+ aspectHintLw?: number;
353
+ aspectHintLh?: number;
354
+ referenceAbsorption?: number;
355
+ preferEyring?: boolean;
356
+ nOctaveBands?: number;
357
+ mode?: number;
358
+ minDecayDb?: number;
359
+ noiseFloorMarginDb?: number;
360
+ }
361
+
362
+ export interface WasmRoomEstimateResult {
363
+ volume: number;
364
+ length: number;
365
+ width: number;
366
+ height: number;
367
+ drrDb: number;
368
+ confidence: number;
369
+ absorptionBands: Float32Array;
370
+ rt60Bands: Float32Array;
371
+ }
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
+
566
+ export interface WasmRoomMorphOptions extends WasmRoomGeometryOptions {
567
+ wet?: number;
568
+ sourceTailSuppression?: number;
569
+ }
570
+
571
+ export interface WasmHpssResult {
572
+ harmonic: Float32Array;
573
+ percussive: Float32Array;
574
+ sampleRate: number;
575
+ }
576
+
577
+ export interface WasmAudioFromMemoryResult {
578
+ samples: Float32Array;
579
+ sampleRate: number;
580
+ }
581
+
582
+ export interface WasmHpssWithResidualResult {
583
+ harmonic: Float32Array;
584
+ percussive: Float32Array;
585
+ residual: Float32Array;
586
+ sampleRate: number;
587
+ }
588
+
589
+ /** Row-major 2-D matrix as a flat buffer plus its dimensions. */
590
+ export interface WasmMatrix2dResult {
591
+ data: Float32Array;
592
+ rows: number;
593
+ cols: number;
594
+ }
595
+
596
+ export interface WasmSegmentMatrixResult {
597
+ rows: number;
598
+ cols: number;
599
+ values: Float32Array;
600
+ }
601
+
602
+ export interface WasmDecomposeResult {
603
+ w: Float32Array;
604
+ h: Float32Array;
605
+ }
606
+
607
+ export interface WasmStftResult {
608
+ nBins: number;
609
+ nFrames: number;
610
+ nFft: number;
611
+ hopLength: number;
612
+ sampleRate: number;
613
+ magnitude: Float32Array;
614
+ power: Float32Array;
615
+ }
616
+
617
+ export interface WasmStftDbResult {
618
+ nBins: number;
619
+ nFrames: number;
620
+ db: Float32Array;
621
+ }
622
+
623
+ export interface WasmMelResult {
624
+ nMels: number;
625
+ nFrames: number;
626
+ sampleRate: number;
627
+ hopLength: number;
628
+ power: Float32Array;
629
+ db: Float32Array;
630
+ }
631
+
632
+ export interface WasmMfccResult {
633
+ nMfcc: number;
634
+ nFrames: number;
635
+ coefficients: Float32Array;
636
+ }
637
+
638
+ export interface WasmStftPowerResult {
639
+ nBins: number;
640
+ nFrames: number;
641
+ power: Float32Array;
642
+ }
643
+
644
+ export interface WasmMelPowerResult {
645
+ nMels: number;
646
+ nFrames: number;
647
+ power: Float32Array;
648
+ }
649
+
650
+ export interface WasmChromaResult {
651
+ nChroma: number;
652
+ nFrames: number;
653
+ sampleRate: number;
654
+ hopLength: number;
655
+ features: Float32Array;
656
+ meanEnergy: number[];
657
+ }
658
+
659
+ export interface WasmPitchResult {
660
+ f0: Float32Array;
661
+ voicedProb: Float32Array;
662
+ voicedFlag: boolean[];
663
+ nFrames: number;
664
+ medianF0: number;
665
+ meanF0: number;
666
+ }
667
+
668
+ export interface WasmNoteSegment {
669
+ frameStart: number;
670
+ frameEnd: number;
671
+ startSeconds: number;
672
+ endSeconds: number;
673
+ medianCents: number;
674
+ }
675
+
676
+ export interface WasmTrimResult {
677
+ audio: Float32Array;
678
+ startSample: number;
679
+ endSample: number;
680
+ }
681
+
682
+ export interface WasmFrameResult {
683
+ nFrames: number;
684
+ frames: Float32Array;
685
+ }
686
+
687
+ export interface WasmTempogramResult {
688
+ nFrames: number;
689
+ winLength: number;
690
+ data: Float32Array;
691
+ }
692
+
693
+ export interface WasmCyclicTempogramResult {
694
+ nFrames: number;
695
+ nBins: number;
696
+ data: Float32Array;
697
+ }
698
+
699
+ export interface WasmFourierTempogramResult {
700
+ nBins: number;
701
+ nFrames: number;
702
+ data: Float32Array;
703
+ }
704
+
705
+ export interface WasmOnsetStrengthMultiResult {
706
+ nBands: number;
707
+ nFrames: number;
708
+ data: Float32Array;
709
+ }
710
+
711
+ export interface WasmNnlsChromaResult {
712
+ nChroma: number;
713
+ nFrames: number;
714
+ data: Float32Array;
715
+ }
716
+
717
+ export interface WasmMelodyPoint {
718
+ time: number;
719
+ frequency: number;
720
+ confidence: number;
721
+ }
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
+
765
+ export interface WasmMelodyResult {
766
+ points: WasmMelodyPoint[];
767
+ pitchRangeOctaves: number;
768
+ pitchStability: number;
769
+ meanFrequency: number;
770
+ vibratoRate: number;
771
+ }
772
+
773
+ export interface WasmCqtResult {
774
+ nBins: number;
775
+ nFrames: number;
776
+ hopLength: number;
777
+ sampleRate: number;
778
+ magnitude: Float32Array;
779
+ frequencies: Float32Array;
780
+ }
781
+
782
+ export interface WasmLufsResult {
783
+ integratedLufs: number;
784
+ momentaryLufs: number;
785
+ shortTermLufs: number;
786
+ maxMomentaryLufs: number;
787
+ maxShortTermLufs: number;
788
+ loudnessRange: number;
789
+ }
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
+
802
+ export interface WasmMasteringResult {
803
+ samples: Float32Array;
804
+ sampleRate: number;
805
+ inputLufs: number;
806
+ outputLufs: number;
807
+ appliedGainDb: number;
808
+ loudnessTargetLimited?: boolean;
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 WasmStageGainReduction {
833
+ stage: string;
834
+ gainReductionDb: number;
835
+ }
836
+
837
+ export interface WasmMasteringLoudnessSummary {
838
+ integratedLufs: number;
839
+ maxMomentaryLufs: number;
840
+ maxShortTermLufs: number;
841
+ truePeakDbtp: number;
842
+ loudnessRange: number;
843
+ }
844
+
845
+ export interface WasmMasteringReport {
846
+ before: WasmMasteringLoudnessSummary;
847
+ after: WasmMasteringLoudnessSummary;
848
+ appliedGainDb: number;
849
+ maxGainReductionDb: number;
850
+ loudnessTargetLimited: boolean;
851
+ bandEnergyDeltaDb: Float32Array;
852
+ }
853
+
854
+ export interface WasmMasteringChainResult extends WasmMasteringResult {
855
+ stages: string[];
856
+ outputTruePeakDbtp: number;
857
+ outputLra: number;
858
+ loudnessTargetLimited: boolean;
859
+ /**
860
+ * Samples a stage replaced with a finite in-domain one, keeping the
861
+ * output finite and in range. A non-finite sample supplied by the caller
862
+ * is rejected before any stage runs, so a replacement is always of a
863
+ * value a stage itself produced.
864
+ *
865
+ * Only the true-peak limiters replace anything, so with the maximizer's
866
+ * limiter and the loudness stage both disabled a zero here means no
867
+ * stage was able to replace anything rather than that nothing needed
868
+ * replacing. Overrides the inherited {@link WasmMasteringResult} doc,
869
+ * which describes a single named processor rather than a chain.
870
+ */
871
+ nonFiniteSubstitutionCount: number;
872
+ stageGainReductions: WasmStageGainReduction[];
873
+ report: WasmMasteringReport;
874
+ }
875
+
876
+ export interface WasmMasteringStereoChainResult {
877
+ left: Float32Array;
878
+ right: Float32Array;
879
+ sampleRate: number;
880
+ inputLufs: number;
881
+ outputLufs: number;
882
+ appliedGainDb: number;
883
+ stages: string[];
884
+ outputTruePeakDbtp: number;
885
+ outputLra: number;
886
+ loudnessTargetLimited: boolean;
887
+ /** See {@link WasmMasteringChainResult} for field semantics. Aggregated over both channels. */
888
+ nonFiniteSubstitutionCount: number;
889
+ stageGainReductions: WasmStageGainReduction[];
890
+ report: WasmMasteringReport;
891
+ }
892
+
893
+ export interface WasmMasteringStereoResult {
894
+ left: Float32Array;
895
+ right: Float32Array;
896
+ sampleRate: number;
897
+ inputLufs: number;
898
+ outputLufs: number;
899
+ appliedGainDb: number;
900
+ latencySamples: number;
901
+ loudnessTargetLimited: boolean;
902
+ /** Aggregated over both channels. */
903
+ nonFiniteSubstitutionCount: number;
904
+ }
905
+
906
+ export interface WasmMixMeterSnapshot {
907
+ peakDbL: number;
908
+ peakDbR: number;
909
+ rmsDbL: number;
910
+ rmsDbR: number;
911
+ correlation: number;
912
+ monoCompatWidth: number;
913
+ monoCompatPeak: number;
914
+ monoCompatSideRms: number;
915
+ likelyMonoCompatible: boolean;
916
+ momentaryLufs: number;
917
+ shortTermLufs: number;
918
+ integratedLufs: number;
919
+ gainReductionDb: number;
920
+ /**
921
+ * Left-channel inter-sample (true) peak in dB, from the ITU-R BS.1770-4
922
+ * polyphase reconstruction at 4x. A streaming measurement: the centered
923
+ * reconstruction stencil needs a few future samples a realtime path does not
924
+ * have, so each block's last samples read marginally low (about 0.1 dB across
925
+ * 64..8192-sample blocks on a near-Nyquist tone, always under-reading). Use
926
+ * `meteringTruePeakDb` over the whole signal for an exact dBTP number.
927
+ */
928
+ truePeakDbL: number;
929
+ /** Right-channel inter-sample (true) peak in dB. See {@link truePeakDbL}. */
930
+ truePeakDbR: number;
931
+ /** Maximum inter-sample peak across channels in dB. See {@link truePeakDbL}. */
932
+ maxTruePeakDb: number;
933
+ seq: number;
934
+ channelCount: number;
935
+ peakDb: number[];
936
+ rmsDb: number[];
937
+ /** Per-plane inter-sample peak in dB; [0]/[1] mirror {@link truePeakDbL}/R. */
938
+ truePeakDb: number[];
939
+ }
940
+
941
+ export interface WasmMixResult {
942
+ left: Float32Array;
943
+ right: Float32Array;
944
+ sampleRate: number;
945
+ meters: WasmMixMeterSnapshot[];
946
+ }
947
+
948
+ export interface WasmEngineClip {
949
+ id?: number;
950
+ trackId?: number;
951
+ channels?: Float32Array[];
952
+ startPpq: number;
953
+ lengthSamples?: number;
954
+ clipOffsetSamples?: number;
955
+ loop?: boolean;
956
+ gain?: number;
957
+ fadeInSamples?: number;
958
+ fadeOutSamples?: number;
959
+ warpMode?: 'off' | 'repitch' | 'tempo-sync' | 'time-stretch' | 0 | 1 | 2 | 3;
960
+ warpAnchors?: Array<{ warpSample: number; sourceSample: number }>;
961
+ pageProvider?: number | { readonly id: number };
962
+ }
963
+
964
+ export interface WasmEngineTrackSend {
965
+ busId: number;
966
+ levelDb?: number;
967
+ enabled?: boolean;
968
+ }
969
+
970
+ export interface WasmEngineTrackLane {
971
+ trackId: number;
972
+ sends?: WasmEngineTrackSend[];
973
+ /**
974
+ * Bus the lane's post-fader output sums into instead of the master mix
975
+ * (group/folder routing); 0 or absent keeps the lane on the master mix.
976
+ */
977
+ outputBusId?: number;
978
+ /**
979
+ * Input channel layout of the source feeding this lane (`SonareChannelLayout`:
980
+ * 0 mono, 1 stereo, 2 5.1, 3 7.1). Absent defaults to stereo.
981
+ */
982
+ sourceChannelLayout?: number;
983
+ }
984
+
985
+ export interface WasmEngineBus {
986
+ busId: number;
987
+ gainDb?: number;
988
+ channelLayout?: number;
989
+ /**
990
+ * Bus this bus's output sums into instead of the master mix; 0 or absent
991
+ * keeps it on the master mix.
992
+ */
993
+ outputBusId?: number;
994
+ /** Sends to other buses, in the same shape as a track lane's sends. */
995
+ sends?: WasmEngineTrackSend[];
996
+ }
997
+
998
+ export interface WasmClipPageRequest {
999
+ clipId: number;
1000
+ channel: number;
1001
+ sample: number;
1002
+ }
1003
+
1004
+ export interface WasmEngineParameterInfo {
1005
+ id: number;
1006
+ name: string;
1007
+ /** Display unit; omit for an empty string. */
1008
+ unit?: string;
1009
+ /** Lower end of the parameter range. Default `0`. */
1010
+ minValue?: number;
1011
+ /** Upper end of the parameter range. Default `1`. */
1012
+ maxValue?: number;
1013
+ /** Value the parameter starts at. Default `0`. */
1014
+ defaultValue?: number;
1015
+ /** Whether the parameter is safe to change from the realtime thread. Default `true`. */
1016
+ rtSafe?: boolean;
1017
+ /** Curve used by automation points that omit `curveToNext`. Default `1` (exponential). */
1018
+ defaultCurve?: number;
1019
+ }
1020
+
1021
+ export interface WasmEngineAutomationPoint {
1022
+ ppq: number;
1023
+ value: number;
1024
+ curveToNext?: number;
1025
+ }
1026
+
1027
+ export interface WasmEngineMarker {
1028
+ id: number;
1029
+ ppq: number;
1030
+ name?: string;
1031
+ kind?: number;
1032
+ keyFifths?: number;
1033
+ keyMinor?: boolean;
1034
+ }
1035
+
1036
+ export interface WasmProjectMarker {
1037
+ id: number;
1038
+ ppq: number;
1039
+ name?: string;
1040
+ kind?: number;
1041
+ keyFifths?: number;
1042
+ keyMinor?: boolean;
1043
+ }
1044
+ export interface WasmProjectTrack {
1045
+ id: number;
1046
+ kind: number;
1047
+ midiDestinationId: number;
1048
+ gain: number;
1049
+ pan: number;
1050
+ mute: boolean;
1051
+ solo: boolean;
1052
+ name: string;
1053
+ }
1054
+ export interface WasmProjectClip {
1055
+ id: number;
1056
+ trackId: number;
1057
+ sourceId: number;
1058
+ sourceKind: number;
1059
+ startPpq: number;
1060
+ lengthPpq: number;
1061
+ sourceOffsetPpq: number;
1062
+ gain: number;
1063
+ loopMode: number;
1064
+ loopLengthPpq: number;
1065
+ }
1066
+ export interface WasmProjectSource {
1067
+ id: number;
1068
+ kind: number;
1069
+ channelCount: number;
1070
+ storageHandleId: number;
1071
+ sampleRateHint: number;
1072
+ nameOrUri: string;
1073
+ /** Owning content hash for audio sources; empty for MIDI sources. */
1074
+ contentHash: string;
1075
+ /** External source-separation role for audio sources; empty for MIDI sources. */
1076
+ externalStemRole: string;
1077
+ }
1078
+
1079
+ export interface WasmEngineMetronomeConfig {
1080
+ enabled: boolean;
1081
+ beatGain?: number;
1082
+ accentGain?: number;
1083
+ /** Explicit click length in samples (0..384000). The engine caps it to one second at its sample rate. */
1084
+ clickSamples?: number;
1085
+ /** Optional click length in seconds (0..1); > 0 overrides the engine 2 ms default. */
1086
+ clickSeconds?: number;
1087
+ }
1088
+
1089
+ export interface WasmEngineGraphNode {
1090
+ id: string;
1091
+ type?: number;
1092
+ gainDb?: number;
1093
+ numPorts?: number;
1094
+ }
1095
+
1096
+ export interface WasmEngineGraphConnection {
1097
+ sourceNode: string;
1098
+ sourcePort: number;
1099
+ destNode: string;
1100
+ destPort: number;
1101
+ /**
1102
+ * Mixing intent (`0` = replace, `1` = add).
1103
+ *
1104
+ * NOTE: not currently honored — the compiled graph always sums edges into a
1105
+ * shared destination port in an order-independent way (the first edge into a
1106
+ * port overwrites, every later edge adds), regardless of this value.
1107
+ */
1108
+ mix?: number;
1109
+ }
1110
+
1111
+ export interface WasmEngineGraphParameterBinding {
1112
+ paramId: number;
1113
+ nodeId: string;
1114
+ }
1115
+
1116
+ export interface WasmEngineGraphSpec {
1117
+ nodes: WasmEngineGraphNode[];
1118
+ connections: WasmEngineGraphConnection[];
1119
+ inputNode: string;
1120
+ outputNode: string;
1121
+ numChannels: number;
1122
+ parameterBindings?: WasmEngineGraphParameterBinding[];
1123
+ }
1124
+
1125
+ export interface WasmEngineTelemetry {
1126
+ type: number;
1127
+ error: number;
1128
+ renderFrame: number;
1129
+ timelineSample: number;
1130
+ audibleTimelineSample: number;
1131
+ graphLatencySamplesQ8: number;
1132
+ value: number;
1133
+ }
1134
+
1135
+ export interface WasmEngineMeterTelemetry {
1136
+ /**
1137
+ * Telemetry tap target id: `0` master mix, `laneIndex + 1` (1..32) for track
1138
+ * lanes, `33 + busIndex` (33..40) for buses, and `0xFFFF` for the
1139
+ * input-monitor capture tap. Handle `0xFFFF` explicitly -- a naive
1140
+ * `targetId - 1` index into a 32-entry lane array runs past its end.
1141
+ */
1142
+ targetId: number;
1143
+ renderFrame: number;
1144
+ seq: number;
1145
+ peakDbL: number;
1146
+ peakDbR: number;
1147
+ rmsDbL: number;
1148
+ rmsDbR: number;
1149
+ /**
1150
+ * Left-channel inter-sample (true) peak in dB, from the ITU-R BS.1770-4
1151
+ * polyphase reconstruction at 4x. A streaming measurement: the centered
1152
+ * reconstruction stencil needs a few future samples a realtime path does not
1153
+ * have, so each block's last samples read marginally low (about 0.1 dB across
1154
+ * 64..8192-sample blocks on a near-Nyquist tone, always under-reading). Use
1155
+ * `meteringTruePeakDb` over the whole signal for an exact dBTP number.
1156
+ */
1157
+ truePeakDbL: number;
1158
+ /** Right-channel inter-sample (true) peak in dB. See {@link truePeakDbL}. */
1159
+ truePeakDbR: number;
1160
+ /** Maximum inter-sample peak across channels in dB. See {@link truePeakDbL}. */
1161
+ maxTruePeakDb: number;
1162
+ correlation: number;
1163
+ monoCompatWidth: number;
1164
+ momentaryLufs: number;
1165
+ shortTermLufs: number;
1166
+ integratedLufs: number;
1167
+ gainReductionDb: number;
1168
+ droppedRecords: number;
1169
+ }
1170
+
1171
+ export interface WasmEngineMeterTelemetryWide {
1172
+ /**
1173
+ * Telemetry tap target id: `0` master mix, `laneIndex + 1` (1..32) for track
1174
+ * lanes, `33 + busIndex` (33..40) for buses, and `0xFFFF` for the
1175
+ * input-monitor capture tap. Handle `0xFFFF` explicitly -- a naive
1176
+ * `targetId - 1` index into a 32-entry lane array runs past its end.
1177
+ */
1178
+ targetId: number;
1179
+ renderFrame: number;
1180
+ seq: number;
1181
+ channelCount: number;
1182
+ peakDb: number[];
1183
+ rmsDb: number[];
1184
+ /**
1185
+ * Per-plane inter-sample (true) peak in dB (length `channelCount`), from the
1186
+ * ITU-R BS.1770-4 polyphase reconstruction at 4x. A streaming measurement: the
1187
+ * centered reconstruction stencil needs a few future samples a realtime path
1188
+ * does not have, so each block's last samples read marginally low (about
1189
+ * 0.1 dB across 64..8192-sample blocks on a near-Nyquist tone, always
1190
+ * under-reading). Use `meteringTruePeakDb` over the whole signal for an exact
1191
+ * dBTP number.
1192
+ */
1193
+ truePeakDb: number[];
1194
+ /** Maximum inter-sample peak across channels in dB. See {@link truePeakDb}. */
1195
+ maxTruePeakDb: number;
1196
+ correlation: number;
1197
+ monoCompatWidth: number;
1198
+ momentaryLufs: number;
1199
+ shortTermLufs: number;
1200
+ integratedLufs: number;
1201
+ gainReductionDb: number;
1202
+ droppedRecords: number;
1203
+ }
1204
+
1205
+ export interface WasmEngineScopeTelemetry {
1206
+ /**
1207
+ * Telemetry tap target id: `0` master mix, `laneIndex + 1` (1..32) for track
1208
+ * lanes, `33 + busIndex` (33..40) for buses, and `0xFFFF` for the
1209
+ * input-monitor capture tap. Handle `0xFFFF` explicitly -- a naive
1210
+ * `targetId - 1` index into a 32-entry lane array runs past its end.
1211
+ */
1212
+ targetId: number;
1213
+ renderFrame: number;
1214
+ seq: number;
1215
+ droppedRecords: number;
1216
+ bands: number[];
1217
+ /**
1218
+ * Goniometer/vectorscope sample points as `{ left, right }` objects. The
1219
+ * Python surface exposes the same data as `(left, right)` tuples; this
1220
+ * representation difference is intentional, the values match.
1221
+ */
1222
+ points: { left: number; right: number }[];
1223
+ }
1224
+
1225
+ export interface WasmEngineCaptureStatus {
1226
+ capturedFrames: number;
1227
+ overflowCount: number;
1228
+ armed: boolean;
1229
+ punchEnabled: boolean;
1230
+ source: 'output' | 'input';
1231
+ recordOffsetSamples: number;
1232
+ }
1233
+
1234
+ export interface WasmEngineTransportState {
1235
+ playing: boolean;
1236
+ looping: boolean;
1237
+ renderFrame: number;
1238
+ samplePosition: number;
1239
+ ppq: number;
1240
+ bpm: number;
1241
+ loopStartPpq: number;
1242
+ loopEndPpq: number;
1243
+ sampleRate: number;
1244
+ /** PPQ of the current bar's downbeat (derived from the tempo map). */
1245
+ barStartPpq: number;
1246
+ /** Zero-based index of the current bar. */
1247
+ barCount: number;
1248
+ /** Time signature in effect at the current PPQ. */
1249
+ timeSignature: { numerator: number; denominator: number; confidence: number };
1250
+ /** One-based beat within the current bar (`barCount` is zero-based). */
1251
+ beat: number;
1252
+ /** Fractional position within the current beat, in [0, 1). */
1253
+ beatFraction: number;
1254
+ }
1255
+
1256
+ export interface WasmEngineBounceOptions {
1257
+ /**
1258
+ * Length of the bounce in frames. The whole result is held in memory, so the
1259
+ * span is capped by a 1 GiB peak budget over the full-size float buffers a
1260
+ * bounce holds at once, and exceeding it throws an `InvalidParameter`
1261
+ * `SonareError`.
1262
+ *
1263
+ * The cap is a **frame** count: inversely proportional to `numChannels`, and
1264
+ * independent of the sample rate. Stereo refuses past 44,739,242 frames, or
1265
+ * past 33,554,432 frames when `dither` is set, which adds one more copy; 5.1
1266
+ * refuses past a third of each. Read as a **duration** those two stereo counts
1267
+ * are 15 min 32 s and 11 min 39 s at 48 kHz, and half that at 96 kHz. When
1268
+ * `sourceSampleRate` and `targetSampleRate` differ both the source and the
1269
+ * resampled length are checked, so the longer of the two is what binds.
1270
+ *
1271
+ * Render longer material in chunks via `renderOffline({ finalize: false })`.
1272
+ * The cap is a fixed budget, not a probe of the module's heap, which on wasm32
1273
+ * can run out below it.
1274
+ */
1275
+ totalFrames: number;
1276
+ blockSize?: number;
1277
+ numChannels?: number;
1278
+ targetSampleRate?: number;
1279
+ sourceSampleRate?: number;
1280
+ normalizeLufs?: boolean;
1281
+ /**
1282
+ * Target integrated loudness when `normalizeLufs` is set. Omitting it, passing
1283
+ * `0`, and passing a non-finite value all mean the library default of
1284
+ * -14 LUFS: the non-finite case resolves rather than being reported, matching
1285
+ * the C ABI, because the loudness stage derives a per-sample gain from this
1286
+ * and checks nothing itself.
1287
+ */
1288
+ targetLufs?: number;
1289
+ dither?: 0 | 1 | 2 | 3;
1290
+ ditherBits?: number;
1291
+ ditherSeed?: number;
1292
+ }
1293
+
1294
+ export interface WasmEngineBounceResult {
1295
+ interleaved: Float32Array;
1296
+ frames: number;
1297
+ numChannels: number;
1298
+ sampleRate: number;
1299
+ integratedLufs: number;
1300
+ }
1301
+
1302
+ export interface WasmEngineFreezeOptions {
1303
+ totalFrames: number;
1304
+ blockSize?: number;
1305
+ numChannels?: number;
1306
+ clipId?: number;
1307
+ startPpq?: number;
1308
+ gain?: number;
1309
+ }
1310
+
1311
+ export interface WasmEngineFreezeResult {
1312
+ clipId: number;
1313
+ frames: number;
1314
+ numChannels: number;
1315
+ }
1316
+
1317
+ export interface WasmEngineProcessWithMonitorResult {
1318
+ output: Float32Array[];
1319
+ monitor: Float32Array[];
1320
+ }
1321
+
1322
+ export interface WasmEngineTempoSegment {
1323
+ startPpq: number;
1324
+ bpm: number;
1325
+ endBpm?: number;
1326
+ }
1327
+
1328
+ export interface WasmEngineTimeSignatureSegment {
1329
+ startPpq: number;
1330
+ numerator: number;
1331
+ denominator: number;
1332
+ }
1333
+
1334
+ /**
1335
+ * One external-MIDI event drained from the engine, already lowered to MIDI 1.0
1336
+ * bytes ready to write to a Web MIDI output port.
1337
+ */
1338
+ export interface WasmExternalMidiEvent {
1339
+ /**
1340
+ * Originating track lane (Track.midi_destination_id), or the transport
1341
+ * sentinel 0xFFFFFFFF for clock / start / continue / stop bytes meant for
1342
+ * every external port.
1343
+ */
1344
+ destinationId: number;
1345
+ /** Sample position within the producing block at which the event fires. */
1346
+ renderFrame: number;
1347
+ /** MIDI 1.0 status + data bytes (1..3 entries). */
1348
+ bytes: number[];
1349
+ }
1350
+
1351
+ export interface WasmRealtimeEngine {
1352
+ prepare: (
1353
+ sampleRate: number,
1354
+ maxBlockSize: number,
1355
+ commandCapacity: number,
1356
+ telemetryCapacity: number,
1357
+ ) => void;
1358
+ setParameter: (paramId: number, value: number, renderFrame?: number) => void;
1359
+ setParameterSmoothed: (paramId: number, value: number, renderFrame?: number) => void;
1360
+ setParamSmoothingMs: (smoothingMs: number) => void;
1361
+ setSoloMute: (laneIndex: number, solo: boolean, mute: boolean, renderFrame?: number) => void;
1362
+ setTrackMonitorMode: (laneIndex: number, mode: number, renderFrame?: number) => void;
1363
+ getTransportState: () => WasmEngineTransportState;
1364
+ play: (renderFrame?: number) => void;
1365
+ stop: (renderFrame?: number) => void;
1366
+ seekSample: (timelineSample: number, renderFrame?: number) => void;
1367
+ settleParameters: () => void;
1368
+ settleInsertParameters: () => void;
1369
+ flushControlCommands: () => void;
1370
+ applyCommandsDueNowPreservingFuture: () => void;
1371
+ seekPpq: (ppq: number, renderFrame?: number) => void;
1372
+ setTempo: (bpm: number) => void;
1373
+ setTempoSegments: (segments: WasmEngineTempoSegment[]) => void;
1374
+ setTimeSignature: (numerator: number, denominator: number) => void;
1375
+ setTimeSignatureSegments: (segments: WasmEngineTimeSignatureSegment[]) => void;
1376
+ sampleAtPpq: (ppq: number) => number;
1377
+ setLoop: (startPpq: number, endPpq: number, enabled: boolean) => void;
1378
+ addParameter: (info: WasmEngineParameterInfo) => void;
1379
+ parameterCount: () => number;
1380
+ parameterInfoByIndex: (index: number) => Required<WasmEngineParameterInfo>;
1381
+ parameterInfo: (id: number) => Required<WasmEngineParameterInfo>;
1382
+ setAutomationLane: (paramId: number, points: WasmEngineAutomationPoint[]) => void;
1383
+ automationLaneCount: () => number;
1384
+ setMarkers: (markers: WasmEngineMarker[]) => void;
1385
+ markerCount: () => number;
1386
+ markerByIndex: (index: number) => WasmEngineMarker;
1387
+ marker: (id: number) => WasmEngineMarker;
1388
+ seekMarker: (id: number, renderFrame?: number) => void;
1389
+ setLoopFromMarkers: (startMarkerId: number, endMarkerId: number) => void;
1390
+ setMetronome: (config: WasmEngineMetronomeConfig) => void;
1391
+ metronome: () => Required<WasmEngineMetronomeConfig>;
1392
+ countInEndSample: (startSample: number, bars: number) => number;
1393
+ setGraph: (spec: WasmEngineGraphSpec) => void;
1394
+ graphNodeCount: () => number;
1395
+ graphConnectionCount: () => number;
1396
+ setClips: (clips: WasmEngineClip[]) => void;
1397
+ prebakedClipChannels: (clipId: number) => Float32Array[] | null;
1398
+ clipCount: () => number;
1399
+ setTrackLanes: (lanes: Array<number | WasmEngineTrackLane>) => void;
1400
+ setLaneSidechain: (trackId: number, insertIndex: number, sourceTrackId: number) => void;
1401
+ setTrackBuses: (buses: WasmEngineBus[]) => void;
1402
+ setBusSidechain: (
1403
+ busId: number,
1404
+ insertIndex: number,
1405
+ sourceKind: number,
1406
+ sourceId: number,
1407
+ ) => void;
1408
+ setMasterSidechain: (insertIndex: number, sourceKind: number, sourceId: number) => void;
1409
+ setBusStripJson: (busId: number, sceneJson: string) => void;
1410
+ setTrackStripJson: (trackId: number, sceneJson: string) => void;
1411
+ setTrackStripEqBandJson: (trackId: number, bandIndex: number, bandJson: string) => void;
1412
+ setBusStripEqBandJson: (busId: number, bandIndex: number, bandJson: string) => void;
1413
+ setTrackStripInsertBypassed: (
1414
+ trackId: number,
1415
+ insertIndex: number,
1416
+ bypassed: boolean,
1417
+ resetOnBypass: boolean,
1418
+ ) => void;
1419
+ setMasterStripJson: (sceneJson: string) => void;
1420
+ setMasterStripEqBandJson: (bandIndex: number, bandJson: string) => void;
1421
+ setMasterStripInsertBypassed: (
1422
+ insertIndex: number,
1423
+ bypassed: boolean,
1424
+ resetOnBypass: boolean,
1425
+ ) => void;
1426
+ setTrackStripInsertParamByName: (
1427
+ trackId: number,
1428
+ insertIndex: number,
1429
+ paramName: string,
1430
+ value: number,
1431
+ ) => void;
1432
+ applyTrackStripInsertParamByNameNow: (
1433
+ trackId: number,
1434
+ insertIndex: number,
1435
+ paramName: string,
1436
+ value: number,
1437
+ ) => boolean;
1438
+ restoreTrackStripInsertParamByName: (
1439
+ trackId: number,
1440
+ insertIndex: number,
1441
+ paramName: string,
1442
+ value: number,
1443
+ ) => void;
1444
+ setMasterStripInsertParamByName: (insertIndex: number, paramName: string, value: number) => void;
1445
+ applyMasterStripInsertParamByNameNow: (
1446
+ insertIndex: number,
1447
+ paramName: string,
1448
+ value: number,
1449
+ ) => boolean;
1450
+ restoreMasterStripInsertParamByName: (
1451
+ insertIndex: number,
1452
+ paramName: string,
1453
+ value: number,
1454
+ ) => void;
1455
+ setBusStripInsertParamByName: (
1456
+ busId: number,
1457
+ insertIndex: number,
1458
+ paramName: string,
1459
+ value: number,
1460
+ ) => void;
1461
+ applyBusStripInsertParamByNameNow: (
1462
+ busId: number,
1463
+ insertIndex: number,
1464
+ paramName: string,
1465
+ value: number,
1466
+ ) => boolean;
1467
+ restoreBusStripInsertParamByName: (
1468
+ busId: number,
1469
+ insertIndex: number,
1470
+ paramName: string,
1471
+ value: number,
1472
+ ) => void;
1473
+ clearTrackInsertParameterBases: (trackId: number) => void;
1474
+ clearBusInsertParameterBases: (busId: number) => void;
1475
+ clearMasterInsertParameterBases: () => void;
1476
+ setBusStripInsertBypassed: (
1477
+ busId: number,
1478
+ insertIndex: number,
1479
+ bypassed: boolean,
1480
+ resetOnBypass: boolean,
1481
+ ) => void;
1482
+ resolveTrackInsertAutomationId: (
1483
+ trackId: number,
1484
+ insertIndex: number,
1485
+ paramName: string,
1486
+ ) => number;
1487
+ resolveMasterInsertAutomationId: (insertIndex: number, paramName: string) => number;
1488
+ resolveBusInsertAutomationId: (busId: number, insertIndex: number, paramName: string) => number;
1489
+ resolveInstrumentAutomationId: (destinationId: number, paramName: string) => number;
1490
+ setTrackStripPan: (trackId: number, pan: number) => void;
1491
+ setTrackStripPanLaw: (trackId: number, panLaw: number) => void;
1492
+ setTrackStripPanMode: (trackId: number, panMode: number) => void;
1493
+ setTrackStripDualPan: (trackId: number, leftPan: number, rightPan: number) => void;
1494
+ setBusStripPan: (busId: number, pan: number) => void;
1495
+ setBusStripPanLaw: (busId: number, panLaw: number) => void;
1496
+ setBusStripPanMode: (busId: number, panMode: number) => void;
1497
+ setBusStripDualPan: (busId: number, leftPan: number, rightPan: number) => void;
1498
+ setTrackStripChannelDelaySamples: (trackId: number, delaySamples: number) => void;
1499
+ createClipPageProvider: (numChannels: number, numSamples: number, pageFrames: number) => number;
1500
+ supplyClipPage: (providerId: number, pageIndex: number, channels: Float32Array[]) => void;
1501
+ clearClipPage: (providerId: number, pageIndex: number) => void;
1502
+ destroyClipPageProvider: (providerId: number) => void;
1503
+ popClipPageRequest: () => WasmClipPageRequest | null;
1504
+ popClipPageRequestToScratch: () => boolean;
1505
+ clipPageRequestScratchClipId: () => number;
1506
+ clipPageRequestScratchSample: () => number;
1507
+ clipPageRequestOverflowCount: () => number;
1508
+ warpStretchOverflowCount: () => number;
1509
+ setWarpVoiceCapacity: (voices: number) => void;
1510
+ warpVoiceCapacity: () => number;
1511
+ setClipPagePrefetchFrames: (frames: number) => void;
1512
+ clipPagePrefetchFrames: () => number;
1513
+ setCaptureBuffer: (numChannels: number, capacityFrames: number) => void;
1514
+ armCapture: (armed: boolean) => void;
1515
+ setCapturePunch: (startSample: number, endSample: number, enabled: boolean) => void;
1516
+ setCaptureSource: (source: WasmEngineCaptureStatus['source'] | number) => void;
1517
+ setRecordOffsetSamples: (offsetSamples: number) => void;
1518
+ setInputMonitor: (enabled: boolean, gain: number) => void;
1519
+ resetCapture: () => void;
1520
+ captureStatus: () => WasmEngineCaptureStatus;
1521
+ capturedAudio: () => Float32Array[];
1522
+ setMidiClips: (clips: readonly object[]) => void;
1523
+ setBuiltinInstrument: (destinationId: number, config: object) => void;
1524
+ setSynthInstrument: (destinationId: number, patch: object | string) => void;
1525
+ loadSoundFont: (data: Uint8Array) => void;
1526
+ setSf2Instrument: (destinationId: number, config: object) => void;
1527
+ clearMidiInstrument: (destinationId: number) => void;
1528
+ midiInstrumentCount: () => number;
1529
+ bindMidiCc: (
1530
+ channel: number,
1531
+ controller: number,
1532
+ paramId: number,
1533
+ minValue: number,
1534
+ maxValue: number,
1535
+ ) => void;
1536
+ bindMidiCcBinding: (binding: import('./project_types').ProjectMidiCcBinding) => void;
1537
+ clearMidiCcBindings: () => void;
1538
+ midiCcBindingCount: () => number;
1539
+ setControllerProfile: (destinationId: number, presetName: string) => void;
1540
+ bindController: (
1541
+ destinationId: number,
1542
+ binding: import('./instrument_types').ControllerBinding,
1543
+ ) => void;
1544
+ clearControllerBindings: (destinationId: number) => void;
1545
+ controllerBindingCount: (destinationId: number) => number;
1546
+ setControllerVelocityMeaningful: (destinationId: number, meaningful: boolean) => void;
1547
+ controllerVelocityMeaningful: (destinationId: number) => boolean;
1548
+ setControllerNoteTracking: (
1549
+ destinationId: number,
1550
+ dimension: import('./instrument_types').MpeDimension | number,
1551
+ tracking: import('./instrument_types').NoteTracking | number,
1552
+ ) => void;
1553
+ controllerNoteTracking: (
1554
+ destinationId: number,
1555
+ dimension: import('./instrument_types').MpeDimension | number,
1556
+ ) => import('./instrument_types').NoteTracking | number;
1557
+ setArticulation: (
1558
+ destinationId: number,
1559
+ channel: number,
1560
+ articulation: import('./instrument_types').Articulation | number,
1561
+ ) => void;
1562
+ articulation: (
1563
+ destinationId: number,
1564
+ channel: number,
1565
+ ) => import('./instrument_types').Articulation | number;
1566
+ legatoFallbackCount: (destinationId: number) => number;
1567
+ setMidiFx: (destinationId: number, configJson: string) => void;
1568
+ clearMidiFx: (destinationId: number) => void;
1569
+ setMidiInputSource: (destinationId: number) => void;
1570
+ clearMidiInputSource: () => void;
1571
+ midiInputPendingCount: () => number;
1572
+ pushMidiInputNoteOn: (
1573
+ group: number,
1574
+ channel: number,
1575
+ note: number,
1576
+ velocity: number,
1577
+ portTimeSamples: number,
1578
+ ) => void;
1579
+ pushMidiInputNoteOff: (
1580
+ group: number,
1581
+ channel: number,
1582
+ note: number,
1583
+ velocity: number,
1584
+ portTimeSamples: number,
1585
+ ) => void;
1586
+ pushMidiInputCc: (
1587
+ group: number,
1588
+ channel: number,
1589
+ controller: number,
1590
+ value: number,
1591
+ portTimeSamples: number,
1592
+ ) => void;
1593
+ pushMidiInputPitchBend: (
1594
+ group: number,
1595
+ channel: number,
1596
+ bend14: number,
1597
+ portTimeSamples: number,
1598
+ ) => void;
1599
+ pushMidiInputChannelPressure: (
1600
+ group: number,
1601
+ channel: number,
1602
+ pressure: number,
1603
+ portTimeSamples: number,
1604
+ ) => void;
1605
+ pushMidiInputPolyPressure: (
1606
+ group: number,
1607
+ channel: number,
1608
+ note: number,
1609
+ pressure: number,
1610
+ portTimeSamples: number,
1611
+ ) => void;
1612
+ pushMidiNoteOn: (
1613
+ destinationId: number,
1614
+ group: number,
1615
+ channel: number,
1616
+ note: number,
1617
+ velocity: number,
1618
+ renderFrame?: number,
1619
+ ) => void;
1620
+ pushMidiNoteOff: (
1621
+ destinationId: number,
1622
+ group: number,
1623
+ channel: number,
1624
+ note: number,
1625
+ velocity: number,
1626
+ renderFrame?: number,
1627
+ ) => void;
1628
+ pushMidiCc: (
1629
+ destinationId: number,
1630
+ group: number,
1631
+ channel: number,
1632
+ controller: number,
1633
+ value: number,
1634
+ renderFrame?: number,
1635
+ ) => void;
1636
+ pushMidiPitchBend: (
1637
+ destinationId: number,
1638
+ group: number,
1639
+ channel: number,
1640
+ bend14: number,
1641
+ renderFrame?: number,
1642
+ ) => void;
1643
+ pushMidiChannelPressure: (
1644
+ destinationId: number,
1645
+ group: number,
1646
+ channel: number,
1647
+ pressure: number,
1648
+ renderFrame?: number,
1649
+ ) => void;
1650
+ pushMidiPolyPressure: (
1651
+ destinationId: number,
1652
+ group: number,
1653
+ channel: number,
1654
+ note: number,
1655
+ pressure: number,
1656
+ renderFrame?: number,
1657
+ ) => void;
1658
+ pushMidiUmp: (
1659
+ destinationId: number,
1660
+ words: Uint32Array | readonly number[],
1661
+ renderFrame?: number,
1662
+ ) => void;
1663
+ pushMidiInputUmp: (words: Uint32Array | readonly number[], portTimeSamples: number) => void;
1664
+ pushMidiSysex: (destinationId: number, data: Uint8Array, renderFrame?: number) => void;
1665
+ pushMidiPanic: (renderFrame?: number) => void;
1666
+ setMidiDestinationExternal: (destinationId: number, external: boolean) => void;
1667
+ setExternalMidiClockEnabled: (enabled: boolean) => void;
1668
+ externalMidiDroppedCount: () => number;
1669
+ externalMidiPendingCount: () => number;
1670
+ drainExternalMidi: (maxRecords: number) => WasmExternalMidiEvent[];
1671
+ popExternalMidiToScratch: () => boolean;
1672
+ externalMidiScratchDestinationId: () => number;
1673
+ externalMidiScratchRenderFrame: () => number;
1674
+ externalMidiScratchByteWord: () => number;
1675
+ externalMidiScratchByteCount: () => number;
1676
+ consumeExternalMidiScratch: () => void;
1677
+ clearParameters: () => void;
1678
+ process: (channels: Float32Array[]) => Float32Array[];
1679
+ prepareWithChannels: (
1680
+ sampleRate: number,
1681
+ maxBlockSize: number,
1682
+ commandCapacity: number,
1683
+ telemetryCapacity: number,
1684
+ maxChannels: number,
1685
+ ) => void;
1686
+ prepareChannels: (numChannels: number, maxFrames: number) => void;
1687
+ getChannelBuffer: (channel: number, numFrames: number) => Float32Array;
1688
+ processPrepared: (numFrames: number) => void;
1689
+ prepareMonitorChannels: (numChannels: number, maxFrames: number) => void;
1690
+ getMonitorChannelBuffer: (channel: number, numFrames: number) => Float32Array;
1691
+ processPreparedWithMonitor: (numFrames: number) => void;
1692
+ processWithMonitor: (channels: Float32Array[]) => WasmEngineProcessWithMonitorResult;
1693
+ renderOffline: (channels: Float32Array[], blockSize: number, finalize: boolean) => Float32Array[];
1694
+ finishOfflineRender: () => void;
1695
+ bounceOffline: (options: WasmEngineBounceOptions) => WasmEngineBounceResult;
1696
+ freezeOffline: (options: WasmEngineFreezeOptions) => WasmEngineFreezeResult;
1697
+ drainTelemetry: (maxRecords: number) => WasmEngineTelemetry[];
1698
+ popTelemetryToScratch: () => boolean;
1699
+ telemetryScratchType: () => number;
1700
+ telemetryScratchError: () => number;
1701
+ telemetryScratchRenderFrame: () => number;
1702
+ telemetryScratchTimelineSample: () => number;
1703
+ telemetryScratchAudibleTimelineSample: () => number;
1704
+ telemetryScratchGraphLatencySamplesQ8: () => number;
1705
+ telemetryScratchValue: () => number;
1706
+ popMeterTelemetryToScratch: () => boolean;
1707
+ meterScratchTargetId: () => number;
1708
+ meterScratchRenderFrame: () => number;
1709
+ meterScratchValue: (field: number) => number;
1710
+ drainMeterTelemetry: (maxRecords: number) => WasmEngineMeterTelemetry[];
1711
+ drainMeterTelemetryWide: (maxRecords: number) => WasmEngineMeterTelemetryWide[];
1712
+ configureScopeTelemetry: (intervalFrames: number, bandCount: number) => number;
1713
+ drainScopeTelemetry: (maxRecords: number) => WasmEngineScopeTelemetry[];
1714
+ popScopeTelemetryToScratch: () => boolean;
1715
+ scopeScratchTargetId: () => number;
1716
+ scopeScratchRenderFrame: () => number;
1717
+ scopeScratchBandCount: () => number;
1718
+ scopeScratchBand: (index: number) => number;
1719
+ scopeScratchPointCount: () => number;
1720
+ scopeScratchPointLeft: (index: number) => number;
1721
+ scopeScratchPointRight: (index: number) => number;
1722
+ delete: () => void;
1723
+ }
1724
+
1725
+ export type { ProgressCallback } from './public_types';
1726
+ export type TempogramMode = 'autocorrelation' | 'auto' | 'ac' | 'cosine' | 0 | 1;
1727
+
1728
+ export interface WasmSynthEnumTables {
1729
+ engineModes: string[];
1730
+ waveforms: string[];
1731
+ builtinWaveforms: string[];
1732
+ filterModels: string[];
1733
+ filterOutputs: string[];
1734
+ bodyTypes: string[];
1735
+ modSources: string[];
1736
+ modDestinations: string[];
1737
+ controllerInputs: string[];
1738
+ controllerAxes: string[];
1739
+ articulations: string[];
1740
+ mpeDimensions: string[];
1741
+ noteTrackings: string[];
1742
+ }
1743
+
1744
+ export interface SonareModule {
1745
+ audioFromMemory: (bytes: Uint8Array) => WasmAudioFromMemoryResult;
1746
+
1747
+ // Quick API (high-level)
1748
+ detectBpm: (samples: Float32Array, sampleRate: number) => number;
1749
+ detectKey: (samples: Float32Array, sampleRate: number) => WasmKeyResult;
1750
+ _detectKeyWithOptions: (
1751
+ samples: Float32Array,
1752
+ sampleRate: number,
1753
+ nFft: number,
1754
+ hopLength: number,
1755
+ useHpss: boolean,
1756
+ loudnessWeighted: boolean,
1757
+ highPassHz: number,
1758
+ modes: number[],
1759
+ profileType: number,
1760
+ genreHint: string,
1761
+ ) => WasmKeyResult;
1762
+ _detectKeyCandidates: (
1763
+ samples: Float32Array,
1764
+ sampleRate: number,
1765
+ nFft: number,
1766
+ hopLength: number,
1767
+ useHpss: boolean,
1768
+ loudnessWeighted: boolean,
1769
+ highPassHz: number,
1770
+ modes: number[],
1771
+ profileType: number,
1772
+ genreHint: string,
1773
+ ) => WasmKeyCandidateResult[];
1774
+ detectOnsets: (samples: Float32Array, sampleRate: number, options: object) => Float32Array;
1775
+ detectBeats: (samples: Float32Array, sampleRate: number) => Float32Array;
1776
+ detectDownbeats: (samples: Float32Array, sampleRate: number) => Float32Array;
1777
+ detectChords: (
1778
+ samples: Float32Array,
1779
+ sampleRate: number,
1780
+ minDuration: number,
1781
+ smoothingWindow: number,
1782
+ threshold: number,
1783
+ useTriadsOnly: boolean,
1784
+ nFft: number,
1785
+ hopLength: number,
1786
+ useBeatSync: boolean,
1787
+ useHmm: boolean,
1788
+ hmmBeamWidth: number,
1789
+ useKeyContext: boolean,
1790
+ keyRoot: number,
1791
+ keyMode: number,
1792
+ detectInversions: boolean,
1793
+ chromaMethod: number,
1794
+ tuning: number,
1795
+ ) => WasmChordAnalysisResult;
1796
+ chordFunctionalAnalysis: (
1797
+ samples: Float32Array,
1798
+ keyRoot: number,
1799
+ keyMode: number,
1800
+ sampleRate: number,
1801
+ minDuration: number,
1802
+ smoothingWindow: number,
1803
+ threshold: number,
1804
+ useTriadsOnly: boolean,
1805
+ nFft: number,
1806
+ hopLength: number,
1807
+ useBeatSync: boolean,
1808
+ useHmm: boolean,
1809
+ hmmBeamWidth: number,
1810
+ useKeyContext: boolean,
1811
+ detectInversions: boolean,
1812
+ chromaMethod: number,
1813
+ tuning: number,
1814
+ ) => string[];
1815
+ analyze: (samples: Float32Array, sampleRate: number, options: object) => WasmAnalysisResult;
1816
+ estimateMeter: (
1817
+ beatTimes: ArrayLike<number>,
1818
+ beatStrengths: ArrayLike<number>,
1819
+ options: object,
1820
+ ) => WasmMeterEstimateResult;
1821
+ _synthEnumTables: () => WasmSynthEnumTables;
1822
+ _synthPatchRoundTrip: (patch: unknown) => unknown;
1823
+ // Arrangement surface. Present only in a build with arrangement support, like
1824
+ // the mixing and voice-changer entries elsewhere in this interface; callers
1825
+ // probe for it at runtime (see projectModule() in project_internal.ts) rather
1826
+ // than through the type. `unknown` marks the shapes the facade owns — this
1827
+ // file describes the raw module and does not depend on the facade's types.
1828
+ projectAbiVersion: () => number;
1829
+ synthPresetNames: () => string[];
1830
+ synthPresetPatch: (name: string) => unknown;
1831
+ synthGsDrumKitName: (program: number) => string | null;
1832
+ synthGsDrumKitIsVoicedApart: (program: number) => number;
1833
+ synthGsVariationIsVoicedApart: (bank: number, program: number) => number;
1834
+ controllerProfileNames: () => string[];
1835
+ midiGmInstrumentName: (program: number) => string | null;
1836
+ midiGmProgramForName: (name: string) => number;
1837
+ midiGmFamilyName: (family: number) => string | null;
1838
+ midiGmFamilyFirstProgram: (family: number) => number;
1839
+ midiGm2InstrumentName: (bankLsb: number, program: number) => string | null;
1840
+ midiGmDrumName: (note: number) => string | null;
1841
+ midiGmDrumNoteForName: (name: string) => number;
1842
+ midiGm2DrumSetName: (bankLsb: number) => string | null;
1843
+ midiGm2DrumName: (bankLsb: number, note: number) => string | null;
1844
+ midiCcName: (controller: number) => string | null;
1845
+ midiCcIndexForName: (name: string) => number;
1846
+ midiPerNoteControllerName: (index: number) => string | null;
1847
+ midiBankProgram: (
1848
+ ppq: number,
1849
+ group: number,
1850
+ channel: number,
1851
+ bankMsb: number,
1852
+ bankLsb: number,
1853
+ program: number,
1854
+ ) => unknown;
1855
+ midiRouteEvents: (events: readonly unknown[], config: unknown) => unknown;
1856
+ midiCcLearn: (
1857
+ events: readonly unknown[],
1858
+ paramId: number,
1859
+ minValue: number,
1860
+ maxValue: number,
1861
+ minMovement: number,
1862
+ ) => unknown;
1863
+ midiCcToBreakpoint: (bindings: readonly unknown[], event: unknown) => unknown;
1864
+ midiParamToCc: (
1865
+ bindings: readonly unknown[],
1866
+ paramId: number,
1867
+ unitValue: number,
1868
+ group: number,
1869
+ ppq: number,
1870
+ ) => unknown;
1871
+ transcribe: (
1872
+ samples: Float32Array,
1873
+ sampleRate: number,
1874
+ tempoBpm: number | undefined,
1875
+ config: unknown,
1876
+ ) => unknown;
1877
+ alignTakeToReference: (
1878
+ reference: Float32Array,
1879
+ take: Float32Array,
1880
+ sampleRate: number,
1881
+ config: unknown,
1882
+ ) => unknown;
1883
+ _analysisResultSchemaPaths: () => string[];
1884
+ _analysisResultSchemaFixture: () => WasmAnalysisResult;
1885
+ analyzeImpulseResponse: (
1886
+ samples: Float32Array,
1887
+ sampleRate: number,
1888
+ nOctaveBands: number,
1889
+ ) => WasmAcousticResult;
1890
+ analyzeImpulseResponseEx: (
1891
+ samples: Float32Array,
1892
+ sampleRate: number,
1893
+ nOctaveBands: number,
1894
+ minDecayDb: number,
1895
+ ) => WasmAcousticResult;
1896
+ detectAcoustic: (
1897
+ samples: Float32Array,
1898
+ sampleRate: number,
1899
+ nOctaveBands: number,
1900
+ nThirdOctaveSubbands: number,
1901
+ minDecayDb: number,
1902
+ noiseFloorMarginDb: number,
1903
+ ) => WasmAcousticResult;
1904
+ // Acoustic-simulation entry points are present only in builds compiled with
1905
+ // SONARE_WITH_ACOUSTIC_SIM; absent otherwise (the wrappers throw a clear error).
1906
+ synthesizeRir?: (options: WasmRirSynthOptions) => WasmRirResult;
1907
+ estimateRoom?: (
1908
+ samples: Float32Array,
1909
+ sampleRate: number,
1910
+ options: WasmRoomEstimateOptions,
1911
+ ) => WasmRoomEstimateResult;
1912
+ roomMorph?: (
1913
+ samples: Float32Array,
1914
+ sampleRate: number,
1915
+ options: WasmRoomMorphOptions,
1916
+ ) => WasmRoomMorphResult;
1917
+ analyzeWithProgress: (
1918
+ samples: Float32Array,
1919
+ sampleRate: number,
1920
+ options: object,
1921
+ progressCallback: ProgressCallback | null,
1922
+ cancelCallback: (() => boolean) | null,
1923
+ ) => WasmAnalysisResult;
1924
+ analyzeBpm: (
1925
+ samples: Float32Array,
1926
+ sampleRate: number,
1927
+ bpmMin: number,
1928
+ bpmMax: number,
1929
+ startBpm: number,
1930
+ nFft: number,
1931
+ hopLength: number,
1932
+ maxCandidates: number,
1933
+ ) => WasmBpmAnalysisResult;
1934
+ analyzeRhythm: (
1935
+ samples: Float32Array,
1936
+ sampleRate: number,
1937
+ bpmMin: number,
1938
+ bpmMax: number,
1939
+ startBpm: number,
1940
+ nFft: number,
1941
+ hopLength: number,
1942
+ ) => WasmRhythmAnalysisResult;
1943
+ analyzeDynamics: (
1944
+ samples: Float32Array,
1945
+ sampleRate: number,
1946
+ windowSec: number,
1947
+ hopLength: number,
1948
+ compressionThreshold: number,
1949
+ ) => WasmDynamicsAnalysisResult;
1950
+ analyzeTimbre: (
1951
+ samples: Float32Array,
1952
+ sampleRate: number,
1953
+ nFft: number,
1954
+ hopLength: number,
1955
+ nMels: number,
1956
+ nMfcc: number,
1957
+ windowSec: number,
1958
+ ) => WasmTimbreAnalysisResult;
1959
+ detectKeyCandidates: (samples: Float32Array, sampleRate: number) => WasmKeyCandidateResult[];
1960
+ hasFfmpegSupport: () => boolean;
1961
+ version: () => string;
1962
+ capabilities: () => SonareCapabilities;
1963
+ capabilityCatalog: () => string;
1964
+ abiVersion: () => number;
1965
+ engineAbiVersion: () => number;
1966
+ voiceChangerAbiVersion: () => number;
1967
+ voiceCharacterPresetId: (preset: number) => string;
1968
+ realtimeVoiceChangerPresetConfig: (preset: number) => WasmRealtimeVoiceChangerPodConfig;
1969
+
1970
+ meteringPeakDb: (samples: Float32Array, sampleRate: number) => number;
1971
+ meteringRmsDb: (samples: Float32Array, sampleRate: number) => number;
1972
+ meteringSilenceRatio: (
1973
+ samples: Float32Array,
1974
+ sampleRate: number,
1975
+ thresholdDb: number,
1976
+ frameLength: number,
1977
+ hopLength: number,
1978
+ ) => number;
1979
+ meteringCrestFactorDb: (samples: Float32Array, sampleRate: number) => number;
1980
+ meteringCrestFactorDbStereo: (
1981
+ left: Float32Array,
1982
+ right: Float32Array,
1983
+ sampleRate: number,
1984
+ ) => number;
1985
+ meteringDcOffset: (samples: Float32Array, sampleRate: number) => number;
1986
+ meteringTruePeakDb: (
1987
+ samples: Float32Array,
1988
+ sampleRate: number,
1989
+ oversampleFactor: number,
1990
+ ) => number;
1991
+ meteringDetectClipping: (
1992
+ samples: Float32Array,
1993
+ sampleRate: number,
1994
+ threshold: number,
1995
+ minRegionSamples: number,
1996
+ ) => {
1997
+ clippedSamples: number;
1998
+ clippingRatio: number;
1999
+ maxClippedPeak: number;
2000
+ regions: Array<{ startSample: number; endSample: number; length: number; peak: number }>;
2001
+ };
2002
+ meteringDynamicRange: (
2003
+ samples: Float32Array,
2004
+ sampleRate: number,
2005
+ windowSec: number,
2006
+ hopSec: number,
2007
+ lowPercentile: number,
2008
+ highPercentile: number,
2009
+ ) => {
2010
+ dynamicRangeDb: number;
2011
+ lowPercentileDb: number;
2012
+ highPercentileDb: number;
2013
+ windowRmsDb: Float32Array;
2014
+ };
2015
+
2016
+ meteringStereoCorrelation: (
2017
+ left: Float32Array,
2018
+ right: Float32Array,
2019
+ sampleRate: number,
2020
+ ) => number;
2021
+ meteringStereoWidth: (left: Float32Array, right: Float32Array, sampleRate: number) => number;
2022
+ meteringVectorscope: (
2023
+ left: Float32Array,
2024
+ right: Float32Array,
2025
+ sampleRate: number,
2026
+ ) => { mid: Float32Array; side: Float32Array };
2027
+ meteringVectorscopeDecimated: (
2028
+ left: Float32Array,
2029
+ right: Float32Array,
2030
+ sampleRate: number,
2031
+ maxPoints: number,
2032
+ ) => { mid: Float32Array; side: Float32Array };
2033
+ meteringPhaseScope: (
2034
+ left: Float32Array,
2035
+ right: Float32Array,
2036
+ sampleRate: number,
2037
+ ) => {
2038
+ mid: Float32Array;
2039
+ side: Float32Array;
2040
+ radius: Float32Array;
2041
+ angleRad: Float32Array;
2042
+ correlation: number;
2043
+ averageAbsAngleRad: number;
2044
+ maxRadius: number;
2045
+ };
2046
+ meteringPhaseScopeDecimated: (
2047
+ left: Float32Array,
2048
+ right: Float32Array,
2049
+ sampleRate: number,
2050
+ maxPoints: number,
2051
+ ) => {
2052
+ mid: Float32Array;
2053
+ side: Float32Array;
2054
+ radius: Float32Array;
2055
+ angleRad: Float32Array;
2056
+ correlation: number;
2057
+ averageAbsAngleRad: number;
2058
+ maxRadius: number;
2059
+ };
2060
+ meteringSpectrum: (
2061
+ samples: Float32Array,
2062
+ sampleRate: number,
2063
+ options: {
2064
+ nFft?: number;
2065
+ applyOctaveSmoothing?: boolean;
2066
+ octaveFraction?: number;
2067
+ dbRef?: number;
2068
+ dbAmin?: number;
2069
+ },
2070
+ ) => {
2071
+ frequencies: Float32Array;
2072
+ magnitude: Float32Array;
2073
+ power: Float32Array;
2074
+ db: Float32Array;
2075
+ nFft: number;
2076
+ sampleRate: number;
2077
+ };
2078
+ meteringSpectrumFrame: (
2079
+ samples: Float32Array,
2080
+ sampleRate: number,
2081
+ frameOffset: number,
2082
+ options: {
2083
+ nFft?: number;
2084
+ applyOctaveSmoothing?: boolean;
2085
+ octaveFraction?: number;
2086
+ dbRef?: number;
2087
+ dbAmin?: number;
2088
+ },
2089
+ ) => {
2090
+ frequencies: Float32Array;
2091
+ magnitude: Float32Array;
2092
+ power: Float32Array;
2093
+ db: Float32Array;
2094
+ nFft: number;
2095
+ sampleRate: number;
2096
+ };
2097
+ waveformPeaks: (
2098
+ samples: Float32Array,
2099
+ channels: number,
2100
+ samplesPerBucket: number,
2101
+ ) => {
2102
+ min: Float32Array;
2103
+ max: Float32Array;
2104
+ channels: number;
2105
+ bucketCount: number;
2106
+ samplesPerBucket: number;
2107
+ };
2108
+ waveformPeakPyramid: (
2109
+ samples: Float32Array,
2110
+ channels: number,
2111
+ samplesPerBucketLevels: number[],
2112
+ ) => Array<{
2113
+ min: Float32Array;
2114
+ max: Float32Array;
2115
+ channels: number;
2116
+ bucketCount: number;
2117
+ samplesPerBucket: number;
2118
+ }>;
2119
+
2120
+ scaleQuantizeMidi: (
2121
+ root: number,
2122
+ modeMask: number,
2123
+ midi: number,
2124
+ referenceMidi: number,
2125
+ ) => number;
2126
+ scaleCorrectionSemitones: (
2127
+ root: number,
2128
+ modeMask: number,
2129
+ midi: number,
2130
+ referenceMidi: number,
2131
+ ) => number;
2132
+ scalePitchClassEnabled: (root: number, modeMask: number, pitchClass: number) => boolean;
2133
+
2134
+ // Effects
2135
+ hpss: (
2136
+ samples: Float32Array,
2137
+ sampleRate: number,
2138
+ kernelHarmonic: number,
2139
+ kernelPercussive: number,
2140
+ ) => WasmHpssResult;
2141
+ hpssEx: (
2142
+ samples: Float32Array,
2143
+ sampleRate: number,
2144
+ kernelHarmonic: number,
2145
+ kernelPercussive: number,
2146
+ nFft: number,
2147
+ hopLength: number,
2148
+ hardMask: boolean,
2149
+ ) => WasmHpssResult;
2150
+ hpssWithResidual: (
2151
+ samples: Float32Array,
2152
+ sampleRate: number,
2153
+ kernelHarmonic: number,
2154
+ kernelPercussive: number,
2155
+ ) => WasmHpssWithResidualResult;
2156
+ hpssWithResidualEx: (
2157
+ samples: Float32Array,
2158
+ sampleRate: number,
2159
+ kernelHarmonic: number,
2160
+ kernelPercussive: number,
2161
+ nFft: number,
2162
+ hopLength: number,
2163
+ hardMask: boolean,
2164
+ ) => WasmHpssWithResidualResult;
2165
+ decompose: (
2166
+ s: Float32Array,
2167
+ nFeatures: number,
2168
+ nFrames: number,
2169
+ nComponents: number,
2170
+ nIter: number,
2171
+ beta: number,
2172
+ ) => WasmDecomposeResult;
2173
+ decomposeWithInit: (
2174
+ s: Float32Array,
2175
+ nFeatures: number,
2176
+ nFrames: number,
2177
+ nComponents: number,
2178
+ nIter: number,
2179
+ beta: number,
2180
+ init: string,
2181
+ ) => WasmDecomposeResult;
2182
+ nnFilter: (
2183
+ s: Float32Array,
2184
+ nFeatures: number,
2185
+ nFrames: number,
2186
+ aggregate: string,
2187
+ k: number,
2188
+ width: number,
2189
+ ) => WasmMatrix2dResult;
2190
+ remix: (
2191
+ samples: Float32Array,
2192
+ intervals: Int32Array,
2193
+ sampleRate: number,
2194
+ alignZeros: boolean,
2195
+ ) => Float32Array;
2196
+ decomposeStems: (
2197
+ samples: Float32Array,
2198
+ sampleRate: number,
2199
+ options: {
2200
+ nComponents?: number;
2201
+ nFft?: number;
2202
+ hopLength?: number;
2203
+ nIter?: number;
2204
+ beta?: number;
2205
+ init?: string;
2206
+ maskPower?: number;
2207
+ },
2208
+ ) => {
2209
+ components: Float32Array[];
2210
+ w: Float32Array;
2211
+ h: Float32Array;
2212
+ sampleRate: number;
2213
+ };
2214
+ decomposeStemsLinked: (
2215
+ channels: Float32Array[],
2216
+ sampleRate: number,
2217
+ options: {
2218
+ nComponents?: number;
2219
+ nFft?: number;
2220
+ hopLength?: number;
2221
+ nIter?: number;
2222
+ beta?: number;
2223
+ init?: string;
2224
+ maskPower?: number;
2225
+ },
2226
+ ) => {
2227
+ components: Float32Array[][];
2228
+ w: Float32Array;
2229
+ h: Float32Array;
2230
+ sampleRate: number;
2231
+ };
2232
+ remixAlignedIntervals: (
2233
+ samples: Float32Array,
2234
+ intervals: Int32Array,
2235
+ sampleRate: number,
2236
+ alignZeros: boolean,
2237
+ ) => Int32Array;
2238
+ phaseVocoder: (
2239
+ samples: Float32Array,
2240
+ sampleRate: number,
2241
+ rate: number,
2242
+ nFft: number,
2243
+ hopLength: number,
2244
+ ) => Float32Array;
2245
+ harmonic: (samples: Float32Array, sampleRate: number) => Float32Array;
2246
+ percussive: (samples: Float32Array, sampleRate: number) => Float32Array;
2247
+ timeStretch: (samples: Float32Array, sampleRate: number, rate: number) => Float32Array;
2248
+ timeStretchEx: (
2249
+ samples: Float32Array,
2250
+ sampleRate: number,
2251
+ rate: number,
2252
+ nFft: number,
2253
+ hopLength: number,
2254
+ ) => Float32Array;
2255
+ pitchShift: (samples: Float32Array, sampleRate: number, semitones: number) => Float32Array;
2256
+ pitchShiftEx: (
2257
+ samples: Float32Array,
2258
+ sampleRate: number,
2259
+ semitones: number,
2260
+ nFft: number,
2261
+ hopLength: number,
2262
+ ) => Float32Array;
2263
+ pitchCorrectToMidi: (
2264
+ samples: Float32Array,
2265
+ sampleRate: number,
2266
+ currentMidi: number,
2267
+ targetMidi: number,
2268
+ ) => Float32Array;
2269
+ pitchCorrectToMidiTimevarying: (
2270
+ samples: Float32Array,
2271
+ sampleRate: number,
2272
+ f0Hz: Float32Array,
2273
+ targetMidi: number,
2274
+ hopLength: number,
2275
+ voiced?: Float32Array,
2276
+ voicedProb?: Float32Array,
2277
+ ) => Float32Array;
2278
+ pitchCorrectTimevarying: (
2279
+ samples: Float32Array,
2280
+ sampleRate: number,
2281
+ f0Hz: Float32Array,
2282
+ hopLength: number,
2283
+ options: {
2284
+ mode?: string;
2285
+ targetMidi?: number;
2286
+ scaleRoot?: number;
2287
+ scaleModeMask?: number;
2288
+ referenceMidi?: number;
2289
+ retuneAmount?: number;
2290
+ maxCorrectionSemitones?: number;
2291
+ retuneSpeedMs?: number;
2292
+ vibratoThresholdCents?: number;
2293
+ voiced?: Float32Array;
2294
+ voicedProb?: Float32Array;
2295
+ },
2296
+ ) => Float32Array;
2297
+ noteStretch: (
2298
+ samples: Float32Array,
2299
+ sampleRate: number,
2300
+ onsetSample: number,
2301
+ offsetSample: number,
2302
+ stretchRatio: number,
2303
+ ) => Float32Array;
2304
+ noteMove: (
2305
+ samples: Float32Array,
2306
+ sampleRate: number,
2307
+ onsetSample: number,
2308
+ offsetSample: number,
2309
+ targetOnsetSample: number,
2310
+ ) => Float32Array;
2311
+ extractNotes: (
2312
+ samples: Float32Array,
2313
+ sampleRate: number,
2314
+ f0Hz: Float32Array,
2315
+ voicedProb: Float32Array | undefined,
2316
+ voiced: Float32Array | undefined,
2317
+ frameRate: number,
2318
+ options: {
2319
+ segmentationThresholdCents?: number;
2320
+ minNoteMs?: number;
2321
+ referenceHz?: number;
2322
+ voicedThreshold?: number;
2323
+ },
2324
+ ) => NoteObject[];
2325
+ renderNotes: (
2326
+ samples: Float32Array,
2327
+ sampleRate: number,
2328
+ notes: readonly NoteObjectInput[],
2329
+ options: {
2330
+ fadeMs?: number;
2331
+ f0Hz?: Float32Array;
2332
+ frameRate?: number;
2333
+ vibratoCutoffHz?: number;
2334
+ },
2335
+ ) => Float32Array;
2336
+ decomposeNotePitch: (
2337
+ f0Hz: Float32Array,
2338
+ frameRate: number,
2339
+ medianHz: number,
2340
+ vibratoCutoffHz: number,
2341
+ ) => PitchDecompositionResult;
2342
+ splitNote: (
2343
+ samples: Float32Array,
2344
+ sampleRate: number,
2345
+ f0Hz: Float32Array,
2346
+ voicedProb: Float32Array | undefined,
2347
+ voiced: Float32Array | undefined,
2348
+ frameRate: number,
2349
+ notes: readonly NoteSetEntry[],
2350
+ index: number,
2351
+ frame: number,
2352
+ options: {
2353
+ segmentationThresholdCents?: number;
2354
+ minNoteMs?: number;
2355
+ referenceHz?: number;
2356
+ voicedThreshold?: number;
2357
+ },
2358
+ ) => NoteObject[];
2359
+ mergeNotes: (
2360
+ samples: Float32Array,
2361
+ sampleRate: number,
2362
+ f0Hz: Float32Array,
2363
+ voicedProb: Float32Array | undefined,
2364
+ voiced: Float32Array | undefined,
2365
+ frameRate: number,
2366
+ notes: readonly NoteSetEntry[],
2367
+ first: number,
2368
+ last: number,
2369
+ options: {
2370
+ segmentationThresholdCents?: number;
2371
+ minNoteMs?: number;
2372
+ referenceHz?: number;
2373
+ voicedThreshold?: number;
2374
+ },
2375
+ ) => NoteObject[];
2376
+ assignNoteTargets: (
2377
+ notes: readonly NoteObject[],
2378
+ sampleRate: number,
2379
+ targets: readonly NoteTarget[],
2380
+ options: {
2381
+ unmatchedPolicy?: NoteTargetUnmatchedPolicy;
2382
+ minOverlapRatio?: number;
2383
+ maxCorrectionSemitones?: number;
2384
+ },
2385
+ ) => NoteTargetAssignResult;
2386
+ /** Absent from a build without arrangement support, which is what links the MIDI reader. */
2387
+ noteTargetsFromSmf?: (data: Uint8Array, trackIndex: number) => NoteTarget[];
2388
+ createPolyphonicAnalysis: (
2389
+ samples: Float32Array,
2390
+ sampleRate: number,
2391
+ config: Record<string, unknown>,
2392
+ ) => WasmPolyphonicAnalysis;
2393
+ extractPercussiveEvents: (
2394
+ samples: Float32Array | readonly number[],
2395
+ sampleRate: number,
2396
+ options: {
2397
+ nFft?: number;
2398
+ hopLength?: number;
2399
+ hpssKernelHarmonic?: number;
2400
+ hpssKernelPercussive?: number;
2401
+ onsetWait?: number;
2402
+ onsetDelta?: number;
2403
+ maxEventMs?: number;
2404
+ minPercussiveRatio?: number;
2405
+ },
2406
+ ) => PercussiveEvent[];
2407
+ renderPercussiveEvents: (
2408
+ samples: Float32Array | readonly number[],
2409
+ sampleRate: number,
2410
+ events: readonly PercussiveEventInput[],
2411
+ options: {
2412
+ nFft?: number;
2413
+ hopLength?: number;
2414
+ hpssKernelHarmonic?: number;
2415
+ hpssKernelPercussive?: number;
2416
+ fadeMs?: number;
2417
+ },
2418
+ ) => Float32Array;
2419
+ voiceChange: (
2420
+ samples: Float32Array,
2421
+ sampleRate: number,
2422
+ pitchSemitones: number,
2423
+ formantFactor: number,
2424
+ ) => Float32Array;
2425
+ voiceChangeRealtime: (
2426
+ samples: Float32Array,
2427
+ sampleRate: number,
2428
+ preset: string,
2429
+ channels: number,
2430
+ ) => Float32Array;
2431
+ normalize: (samples: Float32Array, sampleRate: number, targetDb: number) => Float32Array;
2432
+ normalizeEx: (
2433
+ samples: Float32Array,
2434
+ sampleRate: number,
2435
+ targetDb: number,
2436
+ mode: string,
2437
+ ) => Float32Array;
2438
+ normalizeStereo: (
2439
+ left: Float32Array,
2440
+ right: Float32Array,
2441
+ sampleRate: number,
2442
+ targetDb: number,
2443
+ mode: string,
2444
+ ) => { left: Float32Array; right: Float32Array; appliedGainDb: number };
2445
+ mastering: (
2446
+ samples: Float32Array,
2447
+ sampleRate: number,
2448
+ targetLufs: number,
2449
+ ceilingDb: number,
2450
+ truePeakOversample: number,
2451
+ releaseMs: number,
2452
+ applyGainAtInputRate: boolean,
2453
+ ) => WasmMasteringResult;
2454
+ masteringProcessorNames: () => string[];
2455
+ masteringPairProcessorNames: () => string[];
2456
+ masteringPairAnalysisNames: () => string[];
2457
+ masteringStereoAnalysisNames: () => string[];
2458
+ masteringInsertNames: () => string[];
2459
+ masteringInsertParamNames: (name: string) => string[];
2460
+ // These return JSON the facade parses; the raw module has no object shape here.
2461
+ masteringInsertParamInfo: (name: string) => string;
2462
+ masteringProcessorCatalog: () => string;
2463
+ masteringAmpPresetCatalog: () => string;
2464
+ masteringInsertTiming: (
2465
+ name: string,
2466
+ paramsJson: string,
2467
+ sampleRate: number,
2468
+ ) => { latencySamples: number; tailSamples: number };
2469
+ masteringProcess: (
2470
+ processorName: string,
2471
+ samples: Float32Array,
2472
+ sampleRate: number,
2473
+ params: Record<string, number | boolean>,
2474
+ ) => WasmMasteringResult;
2475
+ masteringProcessStereo: (
2476
+ processorName: string,
2477
+ left: Float32Array,
2478
+ right: Float32Array,
2479
+ sampleRate: number,
2480
+ params: Record<string, number | boolean>,
2481
+ ) => WasmMasteringStereoResult;
2482
+ masteringPairProcess: (
2483
+ processorName: string,
2484
+ source: Float32Array,
2485
+ reference: Float32Array,
2486
+ sampleRate: number,
2487
+ params: Record<string, number | boolean>,
2488
+ ) => WasmMasteringResult;
2489
+ masteringPairAnalyze: (
2490
+ analysisName: string,
2491
+ source: Float32Array,
2492
+ reference: Float32Array,
2493
+ sampleRate: number,
2494
+ params: Record<string, number | boolean>,
2495
+ ) => string;
2496
+ masteringAbMatchLoudness: (
2497
+ source: Float32Array,
2498
+ reference: Float32Array,
2499
+ sampleRate: number,
2500
+ ) => WasmLoudnessMatchResult;
2501
+ masteringStereoAnalyze: (
2502
+ analysisName: string,
2503
+ left: Float32Array,
2504
+ right: Float32Array,
2505
+ sampleRate: number,
2506
+ params: Record<string, number | boolean>,
2507
+ ) => string;
2508
+ masteringAssistantSuggest: (
2509
+ samples: Float32Array,
2510
+ sampleRate: number,
2511
+ params: Record<string, number | boolean | string>,
2512
+ ) => string;
2513
+ masteringAssistantSuggestChain: (
2514
+ samples: Float32Array,
2515
+ sampleRate: number,
2516
+ params: Record<string, number | boolean | string>,
2517
+ ) => Record<string, number | boolean>;
2518
+ masteringAudioProfile: (
2519
+ samples: Float32Array,
2520
+ sampleRate: number,
2521
+ params: Record<string, number | boolean>,
2522
+ ) => string;
2523
+ masteringStreamingPreview: (
2524
+ samples: Float32Array,
2525
+ sampleRate: number,
2526
+ platforms: Array<{ name: string; targetLufs: number; ceilingDb: number }>,
2527
+ ) => string;
2528
+ masteringAssistantSuggestStereo: (
2529
+ left: Float32Array,
2530
+ right: Float32Array,
2531
+ sampleRate: number,
2532
+ params: Record<string, number | boolean | string>,
2533
+ ) => string;
2534
+ masteringAssistantSuggestChainStereo: (
2535
+ left: Float32Array,
2536
+ right: Float32Array,
2537
+ sampleRate: number,
2538
+ params: Record<string, number | boolean | string>,
2539
+ ) => Record<string, number | boolean>;
2540
+ masteringAudioProfileStereo: (
2541
+ left: Float32Array,
2542
+ right: Float32Array,
2543
+ sampleRate: number,
2544
+ params: Record<string, number | boolean>,
2545
+ ) => string;
2546
+ masteringStreamingPreviewStereo: (
2547
+ left: Float32Array,
2548
+ right: Float32Array,
2549
+ sampleRate: number,
2550
+ platforms: Array<{ name: string; targetLufs: number; ceilingDb: number }>,
2551
+ ) => string;
2552
+ masteringRepairDeclick: (
2553
+ samples: Float32Array,
2554
+ sampleRate: number,
2555
+ options: object,
2556
+ ) => Float32Array;
2557
+ masteringRepairDeclickStereo: (
2558
+ left: Float32Array,
2559
+ right: Float32Array,
2560
+ sampleRate: number,
2561
+ options: object,
2562
+ ) => WasmDeclickStereoResult;
2563
+ masteringRepairDenoiseClassical: (
2564
+ samples: Float32Array,
2565
+ sampleRate: number,
2566
+ options: object,
2567
+ ) => Float32Array;
2568
+ masteringRepairDenoiseClassicalStereo: (
2569
+ left: Float32Array,
2570
+ right: Float32Array,
2571
+ sampleRate: number,
2572
+ options: object,
2573
+ ) => WasmDenoiseStereoResult;
2574
+ masteringRepairDenoiseClassicalLinked: (
2575
+ channels: Float32Array[],
2576
+ sampleRate: number,
2577
+ options: object,
2578
+ ) => WasmDenoiseLinkedResult;
2579
+ masteringRepairDeclip: (
2580
+ samples: Float32Array,
2581
+ sampleRate: number,
2582
+ options: object,
2583
+ ) => Float32Array;
2584
+ masteringRepairDeclipStereo: (
2585
+ left: Float32Array,
2586
+ right: Float32Array,
2587
+ sampleRate: number,
2588
+ options: object,
2589
+ ) => WasmDeclipStereoResult;
2590
+ masteringRepairDecrackle: (
2591
+ samples: Float32Array,
2592
+ sampleRate: number,
2593
+ options: object,
2594
+ ) => Float32Array;
2595
+ masteringRepairDecrackleStereo: (
2596
+ left: Float32Array,
2597
+ right: Float32Array,
2598
+ sampleRate: number,
2599
+ options: object,
2600
+ ) => WasmDecrackleStereoResult;
2601
+ masteringRepairDehum: (
2602
+ samples: Float32Array,
2603
+ sampleRate: number,
2604
+ options: object,
2605
+ ) => Float32Array;
2606
+ masteringRepairDehumStereo: (
2607
+ left: Float32Array,
2608
+ right: Float32Array,
2609
+ sampleRate: number,
2610
+ options: object,
2611
+ ) => WasmDehumStereoResult;
2612
+ masteringRepairDereverbClassical: (
2613
+ samples: Float32Array,
2614
+ sampleRate: number,
2615
+ options: object,
2616
+ ) => Float32Array;
2617
+ masteringRepairDereverbClassicalStereo: (
2618
+ left: Float32Array,
2619
+ right: Float32Array,
2620
+ sampleRate: number,
2621
+ options: object,
2622
+ ) => WasmDereverbStereoResult;
2623
+ masteringRepairDereverbClassicalLinked: (
2624
+ channels: Float32Array[],
2625
+ sampleRate: number,
2626
+ options: object,
2627
+ ) => WasmDereverbLinkedResult;
2628
+ masteringRepairDereverbConfigForRoom: (
2629
+ estimate: WasmRoomEstimateResult,
2630
+ options: object,
2631
+ ) => WasmDereverbClassicalConfig;
2632
+ masteringRepairTrimSilence: (
2633
+ samples: Float32Array,
2634
+ sampleRate: number,
2635
+ options: object,
2636
+ ) => Float32Array;
2637
+ masteringRepairTrimSilenceStereo: (
2638
+ left: Float32Array,
2639
+ right: Float32Array,
2640
+ sampleRate: number,
2641
+ options: object,
2642
+ ) => WasmTrimSilenceStereoResult;
2643
+ masteringRepairDetectClicks: (
2644
+ samples: Float32Array,
2645
+ sampleRate: number,
2646
+ options: object,
2647
+ ) => WasmClickDetection;
2648
+ masteringRepairDetectNoiseFloor: (
2649
+ samples: Float32Array,
2650
+ sampleRate: number,
2651
+ options: object,
2652
+ ) => WasmNoiseDetection;
2653
+ masteringRepairNoiseBandBins: (nFft: number, sampleRate: number) => Int32Array;
2654
+ masteringRepairDetectClipping: (
2655
+ samples: Float32Array,
2656
+ sampleRate: number,
2657
+ options: object,
2658
+ ) => WasmClipDetection;
2659
+ masteringRepairDetectCrackle: (
2660
+ samples: Float32Array,
2661
+ sampleRate: number,
2662
+ options: object,
2663
+ ) => WasmCrackleDetection;
2664
+ masteringRepairDetectHum: (
2665
+ samples: Float32Array,
2666
+ sampleRate: number,
2667
+ options: object,
2668
+ ) => WasmHumDetection;
2669
+ masteringRepairDetectReverb: (
2670
+ samples: Float32Array,
2671
+ sampleRate: number,
2672
+ options: object,
2673
+ ) => WasmReverbDetection;
2674
+ masteringRepairDetectTrimRange: (
2675
+ samples: Float32Array,
2676
+ sampleRate: number,
2677
+ options: object,
2678
+ ) => WasmTrimRange;
2679
+ masteringRepairDetectTrimRangeStereo: (
2680
+ left: Float32Array,
2681
+ right: Float32Array,
2682
+ sampleRate: number,
2683
+ options: object,
2684
+ ) => WasmTrimRange;
2685
+ masteringDynamicsCompressor: (
2686
+ samples: Float32Array,
2687
+ sampleRate: number,
2688
+ options: object,
2689
+ ) => { samples: Float32Array; latencySamples: number };
2690
+ masteringDynamicsGate: (
2691
+ samples: Float32Array,
2692
+ sampleRate: number,
2693
+ options: object,
2694
+ ) => { samples: Float32Array; latencySamples: number };
2695
+ masteringDynamicsTransientShaper: (
2696
+ samples: Float32Array,
2697
+ sampleRate: number,
2698
+ options: object,
2699
+ ) => { samples: Float32Array; latencySamples: number };
2700
+ masteringChain: (
2701
+ samples: Float32Array,
2702
+ sampleRate: number,
2703
+ config: Record<string, unknown>,
2704
+ ) => WasmMasteringChainResult;
2705
+ masteringChainStereo: (
2706
+ left: Float32Array,
2707
+ right: Float32Array,
2708
+ sampleRate: number,
2709
+ config: Record<string, unknown>,
2710
+ ) => WasmMasteringStereoChainResult;
2711
+ masteringChainWithProgress: (
2712
+ samples: Float32Array,
2713
+ sampleRate: number,
2714
+ config: Record<string, unknown>,
2715
+ progressCallback: ProgressCallback | null,
2716
+ cancelCallback: (() => boolean) | null,
2717
+ ) => WasmMasteringChainResult;
2718
+ masteringChainStereoWithProgress: (
2719
+ left: Float32Array,
2720
+ right: Float32Array,
2721
+ sampleRate: number,
2722
+ config: Record<string, unknown>,
2723
+ progressCallback: ProgressCallback | null,
2724
+ cancelCallback: (() => boolean) | null,
2725
+ ) => WasmMasteringStereoChainResult;
2726
+ masteringPresetNames: () => string[];
2727
+ masteringPresetParams: (preset: string) => Record<string, number | boolean>;
2728
+ masteringPlatformNames: () => string[];
2729
+ masterAudio: (
2730
+ presetName: string,
2731
+ samples: Float32Array,
2732
+ sampleRate: number,
2733
+ overrides: Record<string, number | boolean> | null,
2734
+ ) => WasmMasteringChainResult;
2735
+ masterAudioStereo: (
2736
+ presetName: string,
2737
+ left: Float32Array,
2738
+ right: Float32Array,
2739
+ sampleRate: number,
2740
+ overrides: Record<string, number | boolean> | null,
2741
+ ) => WasmMasteringStereoChainResult;
2742
+ masterAudioWithProgress: (
2743
+ presetName: string,
2744
+ samples: Float32Array,
2745
+ sampleRate: number,
2746
+ overrides: Record<string, number | boolean> | null,
2747
+ progressCallback: ProgressCallback | null,
2748
+ cancelCallback: (() => boolean) | null,
2749
+ ) => WasmMasteringChainResult;
2750
+ masterAudioStereoWithProgress: (
2751
+ presetName: string,
2752
+ left: Float32Array,
2753
+ right: Float32Array,
2754
+ sampleRate: number,
2755
+ overrides: Record<string, number | boolean> | null,
2756
+ progressCallback: ProgressCallback | null,
2757
+ cancelCallback: (() => boolean) | null,
2758
+ ) => WasmMasteringStereoChainResult;
2759
+ mixingScenePresetNames: () => string[];
2760
+ mixingScenePresetJson: (presetName: string) => string;
2761
+ mixStereo: (
2762
+ leftChannels: Float32Array[],
2763
+ rightChannels: Float32Array[],
2764
+ sampleRate: number,
2765
+ options: Record<string, unknown>,
2766
+ ) => WasmMixResult;
2767
+ mixingAssistantSuggest: (
2768
+ leftChannels: Float32Array[],
2769
+ rightChannels: (Float32Array | null)[] | null,
2770
+ trackIds: string[],
2771
+ trackNames: (string | null)[] | null,
2772
+ sampleRate: number,
2773
+ params: Record<string, number | boolean>,
2774
+ ) => string;
2775
+ mixingAssistantSuggestSceneJson: (
2776
+ leftChannels: Float32Array[],
2777
+ rightChannels: (Float32Array | null)[] | null,
2778
+ trackIds: string[],
2779
+ trackNames: (string | null)[] | null,
2780
+ sampleRate: number,
2781
+ params: Record<string, number | boolean>,
2782
+ ) => string;
2783
+ mixingAssistantSourceClassNames: () => string[];
2784
+ mixingAssistantSourceClassFromName: (name: string) => number;
2785
+ trim: (samples: Float32Array, sampleRate: number, thresholdDb: number) => Float32Array;
2786
+ trimEx: (
2787
+ samples: Float32Array,
2788
+ sampleRate: number,
2789
+ thresholdDb: number,
2790
+ frameLength: number,
2791
+ hopLength: number,
2792
+ ) => Float32Array;
2793
+ spectralEdit: (
2794
+ samples: Float32Array,
2795
+ sampleRate: number,
2796
+ ops: SpectralRegionOp[],
2797
+ options: Record<string, unknown>,
2798
+ ) => Float32Array;
2799
+
2800
+ // Features - Spectrogram
2801
+ stft: (
2802
+ samples: Float32Array,
2803
+ sampleRate: number,
2804
+ nFft: number,
2805
+ hopLength: number,
2806
+ ) => WasmStftResult;
2807
+ stftDb: (
2808
+ samples: Float32Array,
2809
+ sampleRate: number,
2810
+ nFft: number,
2811
+ hopLength: number,
2812
+ ) => WasmStftDbResult;
2813
+
2814
+ // Features - Mel Spectrogram
2815
+ melSpectrogram: (
2816
+ samples: Float32Array,
2817
+ sampleRate: number,
2818
+ nFft: number,
2819
+ hopLength: number,
2820
+ nMels: number,
2821
+ fmin: number,
2822
+ fmax: number,
2823
+ htk: boolean,
2824
+ ) => WasmMelResult;
2825
+ mfcc: (
2826
+ samples: Float32Array,
2827
+ sampleRate: number,
2828
+ nFft: number,
2829
+ hopLength: number,
2830
+ nMels: number,
2831
+ nMfcc: number,
2832
+ fmin: number,
2833
+ fmax: number,
2834
+ htk: boolean,
2835
+ lifter: number,
2836
+ ) => WasmMfccResult;
2837
+ melDelta: (
2838
+ features: Float32Array,
2839
+ nFeatures: number,
2840
+ nFrames: number,
2841
+ width: number,
2842
+ ) => Float32Array;
2843
+ reassignedSpectrogram: (
2844
+ samples: Float32Array,
2845
+ sampleRate: number,
2846
+ nFft: number,
2847
+ hopLength: number,
2848
+ refPower: number,
2849
+ fillNan: boolean,
2850
+ ) => {
2851
+ nBins: number;
2852
+ nFrames: number;
2853
+ magnitude: Float32Array;
2854
+ times: Float32Array;
2855
+ frequencies: Float32Array;
2856
+ };
2857
+ segmentCrossSimilarity: (
2858
+ x: Float32Array,
2859
+ xRows: number,
2860
+ xCols: number,
2861
+ y: Float32Array,
2862
+ yRows: number,
2863
+ yCols: number,
2864
+ k: number,
2865
+ metric: string,
2866
+ mode: string,
2867
+ ) => WasmSegmentMatrixResult;
2868
+ segmentRecurrenceMatrix: (
2869
+ data: Float32Array,
2870
+ rows: number,
2871
+ cols: number,
2872
+ k: number,
2873
+ width: number,
2874
+ sym: boolean,
2875
+ metric: string,
2876
+ mode: string,
2877
+ ) => WasmSegmentMatrixResult;
2878
+ segmentRecurrenceToLag: (
2879
+ recurrence: Float32Array,
2880
+ n: number,
2881
+ pad: boolean,
2882
+ ) => WasmSegmentMatrixResult;
2883
+ segmentLagToRecurrence: (
2884
+ lag: Float32Array,
2885
+ rows: number,
2886
+ lags: number,
2887
+ ) => WasmSegmentMatrixResult;
2888
+ segmentSubsegment: (
2889
+ data: Float32Array,
2890
+ rows: number,
2891
+ cols: number,
2892
+ boundaries: Int32Array,
2893
+ nSegments: number,
2894
+ ) => Int32Array;
2895
+ segmentAgglomerative: (
2896
+ data: Float32Array,
2897
+ rows: number,
2898
+ cols: number,
2899
+ k: number,
2900
+ linkage: string,
2901
+ ) => Int32Array;
2902
+ segmentPathEnhance: (
2903
+ recurrence: Float32Array,
2904
+ n: number,
2905
+ win: number,
2906
+ maxRatio: number,
2907
+ minRatio: number,
2908
+ nFilters: number,
2909
+ ) => WasmSegmentMatrixResult;
2910
+
2911
+ // Features - Inverse reconstruction
2912
+ melToStft: (
2913
+ melPower: Float32Array,
2914
+ nMels: number,
2915
+ nFrames: number,
2916
+ sampleRate: number,
2917
+ nFft: number,
2918
+ fmin: number,
2919
+ fmax: number,
2920
+ htk: boolean,
2921
+ ) => WasmStftPowerResult;
2922
+ melToAudio: (
2923
+ melPower: Float32Array,
2924
+ nMels: number,
2925
+ nFrames: number,
2926
+ sampleRate: number,
2927
+ nFft: number,
2928
+ hopLength: number,
2929
+ fmin: number,
2930
+ fmax: number,
2931
+ nIter: number,
2932
+ htk: boolean,
2933
+ ) => Float32Array;
2934
+ griffinLim: (
2935
+ magnitude: Float32Array,
2936
+ nBins: number,
2937
+ nFrames: number,
2938
+ sampleRate: number,
2939
+ nFft: number,
2940
+ hopLength: number,
2941
+ nIter: number,
2942
+ momentum: number,
2943
+ ) => Float32Array;
2944
+ mfccToMel: (
2945
+ mfcc: Float32Array,
2946
+ nMfcc: number,
2947
+ nFrames: number,
2948
+ nMels: number,
2949
+ lifter: number,
2950
+ ) => WasmMelPowerResult;
2951
+ mfccToAudio: (
2952
+ mfcc: Float32Array,
2953
+ nMfcc: number,
2954
+ nFrames: number,
2955
+ nMels: number,
2956
+ sampleRate: number,
2957
+ nFft: number,
2958
+ hopLength: number,
2959
+ fmin: number,
2960
+ fmax: number,
2961
+ nIter: number,
2962
+ htk: boolean,
2963
+ lifter: number,
2964
+ ) => Float32Array;
2965
+
2966
+ // Features - Chroma
2967
+ chroma: (
2968
+ samples: Float32Array,
2969
+ sampleRate: number,
2970
+ nFft: number,
2971
+ hopLength: number,
2972
+ ) => WasmChromaResult;
2973
+
2974
+ // Features - Spectral
2975
+ spectralCentroid: (
2976
+ samples: Float32Array,
2977
+ sampleRate: number,
2978
+ nFft: number,
2979
+ hopLength: number,
2980
+ ) => Float32Array;
2981
+ spectralBandwidth: (
2982
+ samples: Float32Array,
2983
+ sampleRate: number,
2984
+ nFft: number,
2985
+ hopLength: number,
2986
+ p: number,
2987
+ ) => Float32Array;
2988
+ spectralRolloff: (
2989
+ samples: Float32Array,
2990
+ sampleRate: number,
2991
+ nFft: number,
2992
+ hopLength: number,
2993
+ rollPercent: number,
2994
+ ) => Float32Array;
2995
+ spectralFlatness: (
2996
+ samples: Float32Array,
2997
+ sampleRate: number,
2998
+ nFft: number,
2999
+ hopLength: number,
3000
+ ) => Float32Array;
3001
+ spectralFlux: (
3002
+ samples: Float32Array,
3003
+ sampleRate: number,
3004
+ nFft: number,
3005
+ hopLength: number,
3006
+ lag: number,
3007
+ ) => Float32Array;
3008
+ zeroCrossingRate: (
3009
+ samples: Float32Array,
3010
+ sampleRate: number,
3011
+ frameLength: number,
3012
+ hopLength: number,
3013
+ ) => Float32Array;
3014
+ rmsEnergy: (
3015
+ samples: Float32Array,
3016
+ sampleRate: number,
3017
+ frameLength: number,
3018
+ hopLength: number,
3019
+ ) => Float32Array;
3020
+ spectralContrast: (
3021
+ samples: Float32Array,
3022
+ sampleRate: number,
3023
+ nFft: number,
3024
+ hopLength: number,
3025
+ nBands: number,
3026
+ fmin: number,
3027
+ quantile: number,
3028
+ ) => WasmMatrix2dResult;
3029
+ polyFeatures: (
3030
+ samples: Float32Array,
3031
+ sampleRate: number,
3032
+ nFft: number,
3033
+ hopLength: number,
3034
+ order: number,
3035
+ ) => WasmMatrix2dResult;
3036
+ zeroCrossings: (
3037
+ samples: Float32Array,
3038
+ threshold: number,
3039
+ refMagnitude: boolean,
3040
+ pad: boolean,
3041
+ zeroPos: boolean,
3042
+ ) => Int32Array;
3043
+ pitchTuning: (frequencies: Float32Array, resolution: number, binsPerOctave: number) => number;
3044
+ estimateTuning: (
3045
+ samples: Float32Array,
3046
+ sampleRate: number,
3047
+ nFft: number,
3048
+ hopLength: number,
3049
+ resolution: number,
3050
+ binsPerOctave: number,
3051
+ ) => number;
3052
+
3053
+ // Features - Pitch
3054
+ pitchYin: (
3055
+ samples: Float32Array,
3056
+ sampleRate: number,
3057
+ frameLength: number,
3058
+ hopLength: number,
3059
+ fmin: number,
3060
+ fmax: number,
3061
+ threshold: number,
3062
+ fillNa: boolean,
3063
+ ) => WasmPitchResult;
3064
+ pitchPyin: (
3065
+ samples: Float32Array,
3066
+ sampleRate: number,
3067
+ frameLength: number,
3068
+ hopLength: number,
3069
+ fmin: number,
3070
+ fmax: number,
3071
+ threshold: number,
3072
+ fillNa: boolean,
3073
+ ) => WasmPitchResult;
3074
+ piptrack: (
3075
+ samples: Float32Array,
3076
+ sampleRate: number,
3077
+ nFft: number,
3078
+ hopLength: number,
3079
+ fmin: number,
3080
+ fmax: number,
3081
+ threshold: number,
3082
+ ) => {
3083
+ nBins: number;
3084
+ nFrames: number;
3085
+ pitches: Float32Array;
3086
+ magnitudes: Float32Array;
3087
+ };
3088
+ noteSegments: (
3089
+ f0Hz: Float32Array,
3090
+ voicedProb: Float32Array,
3091
+ frameRate: number,
3092
+ options: {
3093
+ segmentationThresholdCents?: number;
3094
+ minNoteMs?: number;
3095
+ referenceHz?: number;
3096
+ voicedThreshold?: number;
3097
+ },
3098
+ ) => WasmNoteSegment[];
3099
+
3100
+ // Core - Conversion
3101
+ hzToMel: (hz: number) => number;
3102
+ melToHz: (mel: number) => number;
3103
+ hzToMidi: (hz: number) => number;
3104
+ midiToHz: (midi: number) => number;
3105
+ hzToNote: (hz: number) => string;
3106
+ noteToHz: (note: string) => number;
3107
+ framesToTime: (frames: number, sr: number, hopLength: number) => number;
3108
+ timeToFrames: (time: number, sr: number, hopLength: number) => number;
3109
+ framesToSamples: (frames: number, hopLength: number, nFft: number) => number;
3110
+ samplesToFrames: (samples: number, hopLength: number, nFft: number) => number;
3111
+ powerToDb: (values: Float32Array, ref: number, amin: number, topDb: number) => Float32Array;
3112
+ amplitudeToDb: (values: Float32Array, ref: number, amin: number, topDb: number) => Float32Array;
3113
+ dbToPower: (values: Float32Array, ref: number) => Float32Array;
3114
+ dbToAmplitude: (values: Float32Array, ref: number) => Float32Array;
3115
+ preemphasis: (samples: Float32Array, coef: number, zi?: number | null) => Float32Array;
3116
+ deemphasis: (samples: Float32Array, coef: number, zi?: number | null) => Float32Array;
3117
+ trimSilence: (
3118
+ samples: Float32Array,
3119
+ topDb: number,
3120
+ frameLength: number,
3121
+ hopLength: number,
3122
+ ) => WasmTrimResult;
3123
+ splitSilence: (
3124
+ samples: Float32Array,
3125
+ topDb: number,
3126
+ frameLength: number,
3127
+ hopLength: number,
3128
+ ) => Int32Array;
3129
+ splitSilenceCommon: (
3130
+ signals: Float32Array[],
3131
+ topDb: number,
3132
+ frameLength: number,
3133
+ hopLength: number,
3134
+ ) => Int32Array;
3135
+ splitSilenceCommonWithReport: (
3136
+ signals: Float32Array[],
3137
+ topDb: number,
3138
+ frameLength: number,
3139
+ hopLength: number,
3140
+ ) => SplitSilenceCommonWithReportResult;
3141
+ frameSignal: (samples: Float32Array, frameLength: number, hopLength: number) => WasmFrameResult;
3142
+ tone: (
3143
+ frequency: number,
3144
+ sampleRate: number,
3145
+ duration: number,
3146
+ phase: number,
3147
+ amplitude: number,
3148
+ ) => Float32Array;
3149
+ chirp: (
3150
+ fmin: number,
3151
+ fmax: number,
3152
+ sampleRate: number,
3153
+ duration: number,
3154
+ linear: boolean,
3155
+ ) => Float32Array;
3156
+ clicks: (
3157
+ times: Float32Array,
3158
+ sampleRate: number,
3159
+ length: number,
3160
+ frequency: number,
3161
+ clickDuration: number,
3162
+ ) => Float32Array;
3163
+ padCenter: (values: Float32Array, size: number, padValue: number) => Float32Array;
3164
+ fixLength: (values: Float32Array, size: number, padValue: number) => Float32Array;
3165
+ fixFrames: (frames: Int32Array, xMin: number, xMax: number, pad: boolean) => Int32Array;
3166
+ onsetBacktrack: (events: Int32Array, energy: Float32Array) => Int32Array;
3167
+ peakPick: (
3168
+ values: Float32Array,
3169
+ preMax: number,
3170
+ postMax: number,
3171
+ preAvg: number,
3172
+ postAvg: number,
3173
+ delta: number,
3174
+ wait: number,
3175
+ ) => Int32Array;
3176
+ vectorNormalize: (values: Float32Array, normType: number, threshold: number) => Float32Array;
3177
+ pcen: (
3178
+ values: Float32Array,
3179
+ nBins: number,
3180
+ nFrames: number,
3181
+ options?: Record<string, number> | null,
3182
+ ) => Float32Array;
3183
+ tonnetz: (chromagram: Float32Array, nChroma: number, nFrames: number) => Float32Array;
3184
+ tempogram: (
3185
+ onsetEnvelope: Float32Array,
3186
+ sampleRate: number,
3187
+ hopLength: number,
3188
+ winLength: number,
3189
+ mode: TempogramMode,
3190
+ center: boolean,
3191
+ norm: boolean,
3192
+ ) => WasmTempogramResult;
3193
+ cyclicTempogram: (
3194
+ onsetEnvelope: Float32Array,
3195
+ sampleRate: number,
3196
+ hopLength: number,
3197
+ winLength: number,
3198
+ bpmMin: number,
3199
+ nBins: number,
3200
+ ) => WasmCyclicTempogramResult;
3201
+ plp: (
3202
+ onsetEnvelope: Float32Array,
3203
+ sampleRate: number,
3204
+ hopLength: number,
3205
+ tempoMin: number,
3206
+ tempoMax: number,
3207
+ winLength: number,
3208
+ ) => Float32Array;
3209
+ chromaCens: (
3210
+ samples: Float32Array,
3211
+ sampleRate: number,
3212
+ hopLength: number,
3213
+ nChroma: number,
3214
+ binsPerOctave: number,
3215
+ ) => WasmChromaResult;
3216
+ chromaCqt: (
3217
+ samples: Float32Array,
3218
+ sampleRate: number,
3219
+ hopLength: number,
3220
+ nChroma: number,
3221
+ binsPerOctave: number,
3222
+ ) => WasmChromaResult;
3223
+ bassChroma: (
3224
+ samples: Float32Array,
3225
+ sampleRate: number,
3226
+ hopLength: number,
3227
+ nChroma: number,
3228
+ ) => WasmChromaResult;
3229
+ nnlsChroma: (
3230
+ samples: Float32Array,
3231
+ sampleRate: number,
3232
+ enableStftBlend: boolean,
3233
+ stftBlendWeight: number,
3234
+ stftBlendNFft: number,
3235
+ ) => WasmNnlsChromaResult;
3236
+ nnlsChromaEx: (
3237
+ samples: Float32Array,
3238
+ sampleRate: number,
3239
+ enableStftBlend: boolean,
3240
+ stftBlendWeight: number,
3241
+ stftBlendNFft: number,
3242
+ hopLength: number,
3243
+ ) => WasmNnlsChromaResult;
3244
+ cqt: (
3245
+ samples: Float32Array,
3246
+ sampleRate: number,
3247
+ hopLength: number,
3248
+ fmin: number,
3249
+ nBins: number,
3250
+ binsPerOctave: number,
3251
+ ) => WasmCqtResult;
3252
+ pseudoCqt: (
3253
+ samples: Float32Array,
3254
+ sampleRate: number,
3255
+ hopLength: number,
3256
+ fmin: number,
3257
+ nBins: number,
3258
+ binsPerOctave: number,
3259
+ ) => WasmCqtResult;
3260
+ hybridCqt: (
3261
+ samples: Float32Array,
3262
+ sampleRate: number,
3263
+ hopLength: number,
3264
+ fmin: number,
3265
+ nBins: number,
3266
+ binsPerOctave: number,
3267
+ ) => WasmCqtResult;
3268
+ vqt: (
3269
+ samples: Float32Array,
3270
+ sampleRate: number,
3271
+ hopLength: number,
3272
+ fmin: number,
3273
+ nBins: number,
3274
+ binsPerOctave: number,
3275
+ gamma: number,
3276
+ ) => WasmCqtResult;
3277
+ cqtToAudio: (
3278
+ magnitude: Float32Array,
3279
+ nBins: number,
3280
+ nFrames: number,
3281
+ sampleRate: number,
3282
+ hopLength: number,
3283
+ fmin: number,
3284
+ binsPerOctave: number,
3285
+ nIter: number,
3286
+ ) => Float32Array;
3287
+ vqtToAudio: (
3288
+ magnitude: Float32Array,
3289
+ nBins: number,
3290
+ nFrames: number,
3291
+ sampleRate: number,
3292
+ hopLength: number,
3293
+ fmin: number,
3294
+ binsPerOctave: number,
3295
+ gamma: number,
3296
+ nIter: number,
3297
+ ) => Float32Array;
3298
+ analyzeSections: (
3299
+ samples: Float32Array,
3300
+ sampleRate: number,
3301
+ nFft: number,
3302
+ hopLength: number,
3303
+ minSectionSec: number,
3304
+ ) => WasmSectionResult[];
3305
+ detectBoundaries: (
3306
+ samples: Float32Array,
3307
+ sampleRate: number,
3308
+ options: WasmBoundaryOptions,
3309
+ ) => WasmBoundaryResult;
3310
+ analyzeMelody: (
3311
+ samples: Float32Array,
3312
+ sampleRate: number,
3313
+ fmin: number,
3314
+ fmax: number,
3315
+ frameLength: number,
3316
+ hopLength: number,
3317
+ threshold: number,
3318
+ usePyin: boolean,
3319
+ center: boolean,
3320
+ ) => WasmMelodyResult;
3321
+ onsetEnvelope: (
3322
+ samples: Float32Array,
3323
+ sampleRate: number,
3324
+ nFft: number,
3325
+ hopLength: number,
3326
+ nMels: number,
3327
+ ) => Float32Array;
3328
+ onsetStrengthMulti: (
3329
+ samples: Float32Array,
3330
+ sampleRate: number,
3331
+ nFft: number,
3332
+ hopLength: number,
3333
+ nMels: number,
3334
+ nBands: number,
3335
+ ) => WasmOnsetStrengthMultiResult;
3336
+ fourierTempogram: (
3337
+ onsetEnvelope: Float32Array,
3338
+ sampleRate: number,
3339
+ hopLength: number,
3340
+ winLength: number,
3341
+ center: boolean,
3342
+ norm: boolean,
3343
+ ) => WasmFourierTempogramResult;
3344
+ tempogramRatio: (
3345
+ tempogramData: Float32Array,
3346
+ winLength: number,
3347
+ sampleRate: number,
3348
+ hopLength: number,
3349
+ factors?: Float32Array | number[],
3350
+ ) => Float32Array;
3351
+ lufs: (samples: Float32Array, sampleRate: number) => WasmLufsResult;
3352
+ momentaryLufs: (samples: Float32Array, sampleRate: number) => Float32Array;
3353
+ shortTermLufs: (samples: Float32Array, sampleRate: number) => Float32Array;
3354
+ lufsInterleaved: (samples: Float32Array, channels: number, sampleRate: number) => WasmLufsResult;
3355
+ lufsSeriesInterleaved: (
3356
+ samples: Float32Array,
3357
+ channels: number,
3358
+ sampleRate: number,
3359
+ ) => WasmLufsSeriesResult;
3360
+ ebur128LoudnessRange: (samples: Float32Array, sampleRate: number) => number;
3361
+
3362
+ // Core - Resample
3363
+ resample: (samples: Float32Array, srcSr: number, targetSr: number) => Float32Array;
3364
+
3365
+ // Embind-exposed enums
3366
+ PitchClass: {
3367
+ C: { value: 0 };
3368
+ Cs: { value: 1 };
3369
+ D: { value: 2 };
3370
+ Ds: { value: 3 };
3371
+ E: { value: 4 };
3372
+ F: { value: 5 };
3373
+ Fs: { value: 6 };
3374
+ G: { value: 7 };
3375
+ Gs: { value: 8 };
3376
+ A: { value: 9 };
3377
+ As: { value: 10 };
3378
+ B: { value: 11 };
3379
+ };
3380
+ Mode: {
3381
+ Major: { value: 0 };
3382
+ Minor: { value: 1 };
3383
+ };
3384
+ ChordQuality: {
3385
+ Major: { value: 0 };
3386
+ Minor: { value: 1 };
3387
+ Diminished: { value: 2 };
3388
+ Augmented: { value: 3 };
3389
+ Dominant7: { value: 4 };
3390
+ Major7: { value: 5 };
3391
+ Minor7: { value: 6 };
3392
+ Sus2: { value: 7 };
3393
+ Sus4: { value: 8 };
3394
+ Unknown: { value: 9 };
3395
+ Add9: { value: 10 };
3396
+ MinorAdd9: { value: 11 };
3397
+ Dim7: { value: 12 };
3398
+ HalfDim7: { value: 13 };
3399
+ Major9: { value: 14 };
3400
+ Dominant9: { value: 15 };
3401
+ Sus2Add4: { value: 16 };
3402
+ Major6: { value: 17 };
3403
+ Minor6: { value: 18 };
3404
+ MinorMajor7: { value: 19 };
3405
+ Dominant7Sus4: { value: 20 };
3406
+ Dominant11: { value: 21 };
3407
+ Dominant13: { value: 22 };
3408
+ Dominant7Flat9: { value: 23 };
3409
+ Dominant7Sharp9: { value: 24 };
3410
+ };
3411
+ SectionType: {
3412
+ Intro: { value: 0 };
3413
+ Verse: { value: 1 };
3414
+ PreChorus: { value: 2 };
3415
+ Chorus: { value: 3 };
3416
+ Bridge: { value: 4 };
3417
+ Instrumental: { value: 5 };
3418
+ Outro: { value: 6 };
3419
+ Unknown: { value: 7 };
3420
+ };
3421
+
3422
+ // Streaming - StreamAnalyzer
3423
+ streamAnalyzerConfigDefault: () => WasmStreamConfigDefaults;
3424
+ StreamAnalyzer: new (
3425
+ sampleRate: number,
3426
+ nFft: number,
3427
+ hopLength: number,
3428
+ nMels: number,
3429
+ fmin: number,
3430
+ fmax: number,
3431
+ tuningRefHz: number,
3432
+ computeMagnitude: boolean,
3433
+ computeMel: boolean,
3434
+ computeChroma: boolean,
3435
+ computeOnset: boolean,
3436
+ computeSpectral: boolean,
3437
+ emitEveryNFrames: number,
3438
+ magnitudeDownsample: number,
3439
+ maxPendingFrames: number,
3440
+ maxProgressionEntries: number,
3441
+ keyUpdateIntervalSec: number,
3442
+ bpmUpdateIntervalSec: number,
3443
+ window: number,
3444
+ outputFormat: number,
3445
+ ) => WasmStreamAnalyzer;
3446
+
3447
+ RealtimeEngine: new (
3448
+ sampleRate: number,
3449
+ maxBlockSize: number,
3450
+ commandCapacity: number,
3451
+ telemetryCapacity: number,
3452
+ maxChannels?: number,
3453
+ ) => WasmRealtimeEngine;
3454
+
3455
+ // Streaming - StreamingMasteringChain
3456
+ createStreamingMasteringChain: (config: Record<string, unknown>) => WasmStreamingMasteringChain;
3457
+
3458
+ // Streaming - StreamingEqualizer
3459
+ createEqualizer: (config: Record<string, unknown>) => WasmStreamingEqualizer;
3460
+
3461
+ // Streaming - StreamingRetune
3462
+ createStreamingRetune: (config: Record<string, unknown>) => WasmStreamingRetune;
3463
+ createRealtimeVoiceChanger: (
3464
+ config: Record<string, unknown> | string,
3465
+ ) => WasmRealtimeVoiceChanger;
3466
+ realtimeVoiceChangerPresetNames: () => string[];
3467
+ realtimeVoiceChangerPresetJson: (id: string) => string;
3468
+ validateRealtimeVoiceChangerPresetJson: (json: string) => {
3469
+ ok: boolean;
3470
+ normalizedJson?: string;
3471
+ error?: string;
3472
+ };
3473
+
3474
+ // Playback - renderer, HRTF set and program loudness meter
3475
+ createHrtfSet: (bytes: Uint8Array) => WasmHrtfSet;
3476
+ createPlaybackRenderer: (
3477
+ configJson: string,
3478
+ hrtf: WasmHrtfSet | null,
3479
+ sampleRate: number,
3480
+ maxBlockSize: number,
3481
+ ) => WasmPlaybackRenderer;
3482
+ createPlaybackLoudnessMeter: (channels: number, sampleRate: number) => WasmPlaybackLoudnessMeter;
3483
+ renderPlayback: (
3484
+ samples: Float32Array,
3485
+ channels: number,
3486
+ sampleRate: number,
3487
+ configJson: string,
3488
+ hrtf: WasmHrtfSet | null,
3489
+ ) => { samples: Float32Array; channels: number };
3490
+
3491
+ // Mixing - scene-based Mixer
3492
+ createMixerFromSceneJson: (json: string, sampleRate: number, blockSize: number) => WasmMixer;
3493
+
3494
+ // Decodes a thrown native exception-object pointer (emscripten classic EH
3495
+ // surfaces a C++ throw as the raw pointer number) into a structured error.
3496
+ // Consumed by the module-error wrapper in module_state.ts.
3497
+ sonareExceptionInfo: (ptr: number) => { code: number; codeName: string; message: string };
3498
+
3499
+ // Drops the reference emscripten's __cxa_throw took on the exception object
3500
+ // before rethrowing its pointer into JS. Nothing else ever drops it, so the
3501
+ // module-error wrapper releases every pointer it surfaces.
3502
+ sonareReleaseException: (ptr: number) => void;
3503
+ }
3504
+
3505
+ // The polyphonic editing analysis. `noteCount` and `frameCount` are embind
3506
+ // properties rather than methods; everything else is a call.
3507
+ export interface WasmPolyphonicAnalysis {
3508
+ readonly noteCount: number;
3509
+ readonly frameCount: number;
3510
+ notes: () => NoteObject[];
3511
+ setNoteEdit: (note: number, edit: NoteEditInput) => void;
3512
+ polyphony: () => Int32Array;
3513
+ noteF0: (note: number) => Float32Array;
3514
+ noteAmplitude: (note: number) => Float32Array;
3515
+ noteSalience: (note: number) => Float32Array;
3516
+ noteInharmonicity: () => Float32Array;
3517
+ noteEnvelope: (note: number) => Float32Array;
3518
+ render: (options: Record<string, unknown>) => Float32Array;
3519
+ delete: () => void;
3520
+ }
3521
+
3522
+ export interface WasmStreamingMasteringChain {
3523
+ prepare: (sampleRate: number, maxBlockSize: number, numChannels: number) => void;
3524
+ processMono: (samples: Float32Array) => Float32Array;
3525
+ processStereo: (
3526
+ left: Float32Array,
3527
+ right: Float32Array,
3528
+ ) => { left: Float32Array; right: Float32Array };
3529
+ flushMono: () => Float32Array;
3530
+ flushStereo: () => { left: Float32Array; right: Float32Array };
3531
+ reset: () => void;
3532
+ latencySamples: () => number;
3533
+ stageNames: () => string[];
3534
+ /** Cumulative since prepare(), which rebuilds the stages and so clears it. */
3535
+ nonFiniteSubstitutionCount: () => number;
3536
+ /** Not the same measurement as nonFiniteSubstitutionCount; see the facade. */
3537
+ nonFiniteDiscardCount: () => number;
3538
+ delete: () => void;
3539
+ }
3540
+
3541
+ export interface WasmEqSpectrumSnapshot {
3542
+ preLeft: Float32Array;
3543
+ preRight: Float32Array;
3544
+ postLeft: Float32Array;
3545
+ postRight: Float32Array;
3546
+ bandGainDb: Float32Array;
3547
+ profileDb: Float32Array;
3548
+ lastAutoGainDb: number;
3549
+ seq: number;
3550
+ }
3551
+
3552
+ export interface WasmStreamingEqualizer {
3553
+ setBand: (index: number, band: Record<string, unknown>) => void;
3554
+ clear: () => void;
3555
+ setPhaseMode: (mode: number) => void;
3556
+ setAutoGain: (enabled: boolean) => void;
3557
+ setGainScale: (scale: number) => void;
3558
+ setOutputGainDb: (gainDb: number) => void;
3559
+ setOutputPan: (pan: number) => void;
3560
+ setSidechainMono: (samples: Float32Array) => void;
3561
+ setSidechainStereo: (left: Float32Array, right: Float32Array) => void;
3562
+ clearSidechain: () => void;
3563
+ lastAutoGainDb: () => number;
3564
+ latencySamples: () => number;
3565
+ nonFiniteDiscardCount: () => number;
3566
+ processMono: (samples: Float32Array) => Float32Array;
3567
+ processStereo: (
3568
+ left: Float32Array,
3569
+ right: Float32Array,
3570
+ ) => { left: Float32Array; right: Float32Array };
3571
+ magnitudeResponse: (placement: number, frequenciesHz: Float32Array) => Float32Array;
3572
+ spectrum: () => WasmEqSpectrumSnapshot;
3573
+ match: (source: Float32Array, reference: Float32Array, options: Record<string, unknown>) => void;
3574
+ delete: () => void;
3575
+ }
3576
+
3577
+ export interface WasmStreamingRetune {
3578
+ prepare: (sampleRate: number, maxBlockSize: number) => void;
3579
+ reset: () => void;
3580
+ setConfig: (config: Record<string, unknown>) => void;
3581
+ config: () => { semitones: number; mix: number; grainSize: number };
3582
+ grainSize: () => number;
3583
+ latencySamples: () => number;
3584
+ processMono: (samples: Float32Array) => Float32Array;
3585
+ delete: () => void;
3586
+ }
3587
+
3588
+ export interface WasmRealtimeVoiceChanger {
3589
+ prepare: (sampleRate: number, maxBlockSize: number, channels: number) => void;
3590
+ reset: () => void;
3591
+ setConfig: (config: Record<string, unknown> | string) => void;
3592
+ setPodConfig: (config: WasmRealtimeVoiceChangerPodConfig) => void;
3593
+ configJson: () => string;
3594
+ latencySamples: () => number;
3595
+ nonFiniteDiscardCount: () => number;
3596
+ bufferGeneration: () => number;
3597
+ processMono: (samples: Float32Array) => Float32Array;
3598
+ processMonoInto: (samples: Float32Array, output: Float32Array) => void;
3599
+ processInterleaved: (samples: Float32Array, channels: number) => Float32Array;
3600
+ processInterleavedInto: (samples: Float32Array, channels: number, output: Float32Array) => void;
3601
+ // Zero-copy "prepared" path. The returned Float32Array is a typed_memory_view
3602
+ // backed by the WASM heap; it is only valid until the next call to a method
3603
+ // that may grow the underlying scratch buffer (i.e. another get*Buffer with a
3604
+ // larger length) or until delete().
3605
+ getMonoInputBuffer: (numSamples: number) => Float32Array;
3606
+ getMonoOutputBuffer: (numSamples: number) => Float32Array;
3607
+ processPreparedMono: (numSamples: number) => void;
3608
+ getInterleavedInputBuffer: (numFrames: number, numChannels: number) => Float32Array;
3609
+ getInterleavedOutputBuffer: (numFrames: number, numChannels: number) => Float32Array;
3610
+ processPreparedInterleaved: (numFrames: number, numChannels: number) => void;
3611
+ getPlanarChannelBuffer: (channel: number, numFrames: number) => Float32Array;
3612
+ processPreparedPlanar: (numFrames: number) => void;
3613
+ delete: () => void;
3614
+ }
3615
+
3616
+ export interface WasmHrtfSet {
3617
+ delete: () => void;
3618
+ }
3619
+
3620
+ export interface WasmPlaybackRenderer {
3621
+ processPlanar: (planes: Float32Array[]) => Float32Array[];
3622
+ processInterleaved: (samples: Float32Array, inChannels: number) => Float32Array;
3623
+ setConfig: (configJson: string) => void;
3624
+ configJson: () => string;
3625
+ setHeadOrientation: (yawDeg: number, pitchDeg: number, rollDeg: number) => void;
3626
+ reset: () => void;
3627
+ latencySamples: () => number;
3628
+ inputChannels: () => number;
3629
+ outputChannels: () => number;
3630
+ diagnosticsJson: () => string;
3631
+ nonFiniteDiscardCount: () => number;
3632
+ // AudioWorklet path: heap views allocated once at construction (they detach
3633
+ // on memory growth and are then re-acquired), and a SonareError code instead
3634
+ // of a throw for a rejected block.
3635
+ inputPlane: (channel: number) => Float32Array;
3636
+ outputPlane: (channel: number) => Float32Array;
3637
+ processPrepared: (inChannels: number, frames: number) => number;
3638
+ processPreparedSilence: (frames: number) => number;
3639
+ delete: () => void;
3640
+ }
3641
+
3642
+ export interface WasmPlaybackLoudnessMeter {
3643
+ pushInterleaved: (samples: Float32Array) => void;
3644
+ integratedLufs: () => number;
3645
+ delete: () => void;
3646
+ }
3647
+
3648
+ /** One block's worth of meter readings, all dB fields floored at -120. */
3649
+ export interface WasmMixerMeterSnapshot {
3650
+ peakDbL: number;
3651
+ peakDbR: number;
3652
+ rmsDbL: number;
3653
+ rmsDbR: number;
3654
+ correlation: number;
3655
+ /**
3656
+ * Left-channel inter-sample (true) peak in dB, from the ITU-R BS.1770-4
3657
+ * polyphase reconstruction at 4x. A streaming measurement: the centered
3658
+ * reconstruction stencil needs a few future samples a realtime path does not
3659
+ * have, so each block's last samples read marginally low (about 0.1 dB across
3660
+ * 64..8192-sample blocks on a near-Nyquist tone, always under-reading). Use
3661
+ * `meteringTruePeakDb` over the whole signal for an exact dBTP number.
3662
+ */
3663
+ truePeakDbL: number;
3664
+ /** Right-channel inter-sample (true) peak in dB. See {@link truePeakDbL}. */
3665
+ truePeakDbR: number;
3666
+ }
3667
+
3668
+ export interface WasmMixer {
3669
+ compile: () => void;
3670
+ processStereo: (
3671
+ leftChannels: Float32Array[],
3672
+ rightChannels: Float32Array[],
3673
+ ) => { left: Float32Array; right: Float32Array; sampleRate: number };
3674
+ processStereoInto: (
3675
+ leftChannels: Float32Array[],
3676
+ rightChannels: Float32Array[],
3677
+ outLeft: Float32Array,
3678
+ outRight: Float32Array,
3679
+ ) => void;
3680
+ inputLeftView: (index: number) => Float32Array;
3681
+ inputRightView: (index: number) => Float32Array;
3682
+ outputLeftView: () => Float32Array;
3683
+ outputRightView: () => Float32Array;
3684
+ processPreparedStereo: (numSamples: number) => void;
3685
+ configureMeter: (enabled: boolean, truePeakOversample: number) => void;
3686
+ meterSnapshot: () => WasmMixerMeterSnapshot;
3687
+ latchMeterSnapshot: () => boolean;
3688
+ meterScratchValue: (field: number) => number;
3689
+ stripCount: () => number;
3690
+ sceneWarnings: () => string[];
3691
+ scheduleInsertAutomation: (
3692
+ stripIndex: number,
3693
+ insertIndex: number,
3694
+ paramId: number,
3695
+ samplePos: number,
3696
+ value: number,
3697
+ curve: number,
3698
+ ) => void;
3699
+ stripById: (id: string) => number;
3700
+ setInputTrimDb: (stripIndex: number, db: number) => void;
3701
+ setFaderDb: (stripIndex: number, db: number) => void;
3702
+ setPan: (stripIndex: number, pan: number, panMode: number) => void;
3703
+ setWidth: (stripIndex: number, width: number) => void;
3704
+ settle: (stripIndex: number) => void;
3705
+ setMuted: (stripIndex: number, muted: boolean) => void;
3706
+ setSoloed: (stripIndex: number, soloed: boolean) => void;
3707
+ setSoloSafe: (stripIndex: number, soloSafe: boolean) => void;
3708
+ setPolarityInvert: (stripIndex: number, invertLeft: boolean, invertRight: boolean) => void;
3709
+ setPanLaw: (stripIndex: number, panLaw: number) => void;
3710
+ setChannelDelaySamples: (stripIndex: number, delaySamples: number) => void;
3711
+ setVcaOffsetDb: (stripIndex: number, offsetDb: number) => void;
3712
+ setDualPan: (stripIndex: number, leftPan: number, rightPan: number) => void;
3713
+ setSurroundPan: (stripIndex: number, pan: SurroundPan) => void;
3714
+ addSend: (
3715
+ stripIndex: number,
3716
+ id: string,
3717
+ destinationBusId: string,
3718
+ sendDb: number,
3719
+ timing: number,
3720
+ ) => number;
3721
+ setSendDb: (stripIndex: number, sendIndex: number, sendDb: number) => void;
3722
+ removeSend: (stripIndex: number, sendIndex: number) => void;
3723
+ meterTap: (stripIndex: number, tap: number) => WasmMixMeterSnapshot;
3724
+ stripMeter: (stripIndex: number) => WasmMixMeterSnapshot;
3725
+ busMeter: (busId: string) => WasmMixMeterSnapshot;
3726
+ stripNonFiniteDiscardCount: (stripIndex: number) => number;
3727
+ busNonFiniteDiscardCount: (busId: string) => number;
3728
+ scheduleFaderAutomation: (
3729
+ stripIndex: number,
3730
+ samplePos: number,
3731
+ faderDb: number,
3732
+ curve: number,
3733
+ ) => void;
3734
+ schedulePanAutomation: (
3735
+ stripIndex: number,
3736
+ samplePos: number,
3737
+ pan: number,
3738
+ curve: number,
3739
+ ) => void;
3740
+ scheduleWidthAutomation: (
3741
+ stripIndex: number,
3742
+ samplePos: number,
3743
+ width: number,
3744
+ curve: number,
3745
+ ) => void;
3746
+ scheduleSendAutomation: (
3747
+ stripIndex: number,
3748
+ sendIndex: number,
3749
+ samplePos: number,
3750
+ db: number,
3751
+ curve: number,
3752
+ ) => void;
3753
+ readGoniometerLatest: (stripIndex: number, maxPoints: number) => WasmGoniometerPoint[];
3754
+ addStrip: (id: string, metering: StripMeteringOptions) => void;
3755
+ addBus: (id: string, role: string) => void;
3756
+ removeBus: (id: string) => void;
3757
+ busCount: () => number;
3758
+ addVcaGroup: (id: string, gainDb: number, members: string[]) => void;
3759
+ setVcaGroupGainDb: (id: string, gainDb: number) => void;
3760
+ setVcaGroupMembers: (id: string, members: string[]) => void;
3761
+ removeVcaGroup: (id: string) => void;
3762
+ vcaGroupCount: () => number;
3763
+ toSceneJson: () => string;
3764
+ tailSamples: () => number;
3765
+ latencySamples: () => number;
3766
+ drainTailStereo: (numSamples: number) => {
3767
+ left: Float32Array;
3768
+ right: Float32Array;
3769
+ sampleRate: number;
3770
+ };
3771
+ delete: () => void;
3772
+ }
3773
+
3774
+ export interface WasmGoniometerPoint {
3775
+ left: number;
3776
+ right: number;
3777
+ }
3778
+
3779
+ // Streaming types for StreamAnalyzer
3780
+ export interface WasmChordChange {
3781
+ root: number;
3782
+ quality: number;
3783
+ startTime: number;
3784
+ confidence: number;
3785
+ }
3786
+
3787
+ export interface WasmBarChord {
3788
+ barIndex: number;
3789
+ root: number;
3790
+ quality: number;
3791
+ startTime: number;
3792
+ confidence: number;
3793
+ }
3794
+
3795
+ export interface WasmPatternScore {
3796
+ name: string;
3797
+ score: number;
3798
+ }
3799
+
3800
+ export interface WasmProgressiveEstimate {
3801
+ bpm: number;
3802
+ bpmConfidence: number;
3803
+ bpmCandidateCount: number;
3804
+ key: number;
3805
+ keyMinor: boolean;
3806
+ keyConfidence: number;
3807
+ chordRoot: number;
3808
+ chordQuality: number;
3809
+ chordConfidence: number;
3810
+ chordStartTime: number;
3811
+ chordProgression: WasmChordChange[];
3812
+ barChordProgression: WasmBarChord[];
3813
+ currentBar: number;
3814
+ barDuration: number;
3815
+ votedPattern: WasmBarChord[];
3816
+ patternLength: number;
3817
+ detectedPatternName: string;
3818
+ detectedPatternScore: number;
3819
+ allPatternScores: WasmPatternScore[];
3820
+ accumulatedSeconds: number;
3821
+ usedFrames: number;
3822
+ updated: boolean;
3823
+ }
3824
+
3825
+ export interface WasmAnalyzerStats {
3826
+ totalFrames: number;
3827
+ totalSamples: number;
3828
+ durationSeconds: number;
3829
+ pendingFrames: number;
3830
+ droppedOutputFrames: number;
3831
+ droppedChordProgressionEntries: number;
3832
+ droppedBarProgressionEntries: number;
3833
+ nonFiniteDiscardBlocks: number;
3834
+ estimate: WasmProgressiveEstimate;
3835
+ }
3836
+
3837
+ export interface WasmFrameBuffer {
3838
+ nFrames: number;
3839
+ /** Number of mel bands; flat `mel` is `[nFrames * nMels]` row-major. */
3840
+ nMels: number;
3841
+ nChroma: number;
3842
+ featureFlags: number;
3843
+ timestamps: Float32Array;
3844
+ mel: Float32Array;
3845
+ chroma: Float32Array;
3846
+ onsetStrength: Float32Array;
3847
+ rmsEnergy: Float32Array;
3848
+ spectralCentroid: Float32Array;
3849
+ spectralFlatness: Float32Array;
3850
+ chordRoot: Int32Array;
3851
+ chordQuality: Int32Array;
3852
+ chordConfidence: Float32Array;
3853
+ }
3854
+
3855
+ export interface WasmStreamFramesU8 {
3856
+ nFrames: number;
3857
+ nMels: number;
3858
+ nChroma: number;
3859
+ featureFlags: number;
3860
+ timestamps: Float32Array;
3861
+ mel: Uint8Array;
3862
+ chroma: Uint8Array;
3863
+ onsetStrength: Uint8Array;
3864
+ rmsEnergy: Uint8Array;
3865
+ spectralCentroid: Uint8Array;
3866
+ spectralFlatness: Uint8Array;
3867
+ }
3868
+
3869
+ export interface WasmStreamFramesI16 {
3870
+ nFrames: number;
3871
+ nMels: number;
3872
+ nChroma: number;
3873
+ featureFlags: number;
3874
+ timestamps: Float32Array;
3875
+ mel: Int16Array;
3876
+ chroma: Int16Array;
3877
+ onsetStrength: Int16Array;
3878
+ rmsEnergy: Int16Array;
3879
+ spectralCentroid: Int16Array;
3880
+ spectralFlatness: Int16Array;
3881
+ }
3882
+
3883
+ export interface WasmStreamAnalyzer {
3884
+ /** Throws (invalid state) when the stream was already finalized; reset first. */
3885
+ process: (samples: Float32Array) => void;
3886
+ /** Rejects a gap, a seek, a mode switch, and a chunk fed after finalize. */
3887
+ processWithOffset: (samples: Float32Array, sampleOffset: number) => void;
3888
+ /** Idempotent on success; a failed call leaves the stream un-finalized. */
3889
+ finalize: () => void;
3890
+ availableFrames: () => number;
3891
+ readFramesSoa: (maxFrames: number) => WasmFrameBuffer;
3892
+ readFramesU8: (maxFrames: number, quantizeConfig?: unknown) => WasmStreamFramesU8;
3893
+ readFramesI16: (maxFrames: number, quantizeConfig?: unknown) => WasmStreamFramesI16;
3894
+ reset: (baseSampleOffset?: number) => void;
3895
+ stats: () => WasmAnalyzerStats;
3896
+ frameCount: () => number;
3897
+ currentTime: () => number;
3898
+ sampleRate: () => number;
3899
+ setExpectedDuration: (durationSeconds: number) => void;
3900
+ /** Throws outside 0.01..100; the request is refused, never clamped. */
3901
+ setNormalizationGain: (gain: number) => void;
3902
+ /** Throws outside 220..880 Hz; the request is refused, never clamped. */
3903
+ setTuningRefHz: (refHz: number) => void;
3904
+ delete: () => void;
3905
+ }
3906
+
3907
+ declare function createModule(options?: SonareModuleOptions): Promise<SonareModule>;
3908
+
3909
+ export default createModule;