@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,185 @@
1
+ export * from './public_types_acoustic';
2
+ export * from './public_types_mastering';
3
+ export * from './public_types_mixing';
4
+ export * from './public_types_music';
5
+ export * from './public_types_playback';
6
+ export * from './public_types_realtime';
7
+ export * from './public_types_repair';
8
+ export * from './public_types_spectral';
9
+ /** Runtime capabilities reported by the loaded libsonare build. */
10
+ export interface SonareCapabilities {
11
+ version: string;
12
+ abi: {
13
+ project: number;
14
+ engine: number;
15
+ };
16
+ platform: string;
17
+ features: {
18
+ mastering: boolean;
19
+ mixing: boolean;
20
+ /**
21
+ * True when the offline mixing assistant is compiled in. Separate from
22
+ * `mixing` because it can be dropped on its own — the analysis-only bundle
23
+ * has it off — and its entry points stay registered either way, throwing
24
+ * rather than disappearing, so probing for the function tells a host
25
+ * nothing.
26
+ */
27
+ mixingAssistant: boolean;
28
+ fx: boolean;
29
+ ffmpeg: boolean;
30
+ /**
31
+ * True when hosted instruments expose continuously automatable
32
+ * parameters (`RealtimeEngine.resolveInstrumentAutomationId`).
33
+ */
34
+ instrumentParamAutomation: boolean;
35
+ /**
36
+ * The four below name the remaining build options that change which
37
+ * commands and entry points a binary answers. Without them a caller can
38
+ * observe that a capability is missing but not that it was never built.
39
+ */
40
+ arrangement: boolean;
41
+ acousticSim: boolean;
42
+ pitchEditor: boolean;
43
+ voiceChanger: boolean;
44
+ /** True when the playback renderer (upmix, binaural, speaker output) is compiled in. */
45
+ playback: boolean;
46
+ };
47
+ decode: {
48
+ builtin: string[];
49
+ ffmpeg: string[];
50
+ };
51
+ simd: string;
52
+ hardwareConcurrency: number;
53
+ }
54
+ /** One named value an enum- or closed-integer-typed insert param accepts. */
55
+ export interface MasteringInsertParamChoice {
56
+ /** Display/identification name (lowerCamelCase); never accepted as input. */
57
+ name: string;
58
+ /** The numeric wire value construction reads for this choice. */
59
+ value: number;
60
+ }
61
+ /**
62
+ * A group of an insert's keys that exists only under a condition: an EQ band,
63
+ * a multiband crossover band, or a dynamic sub-band inside one. A parameter
64
+ * belongs to the slot its `slot` field names.
65
+ */
66
+ export interface MasteringInsertSlot {
67
+ /** Key prefix without the trailing dot, e.g. `midBand3` or `band1.dyn2`. */
68
+ name: string;
69
+ /**
70
+ * Enclosing slot, which has to exist for this one to; null for a top-level
71
+ * slot. A parent is always listed before the slots naming it.
72
+ */
73
+ parent: string | null;
74
+ /**
75
+ * `anyKey`: the slot exists once any one of its keys is supplied, so an EQ
76
+ * band is built as soon as a host sends any of its keys. `always`: it exists
77
+ * without any of its keys, subject to `minCrossoverCutoffs`.
78
+ */
79
+ activation: 'anyKey' | 'always';
80
+ /**
81
+ * Crossover cutoffs (`cutoff<i>Hz` keys) the insert needs in effect for the
82
+ * slot to exist; 0 when it needs none. With no cutoff key supplied, the
83
+ * default split applies: the cutoffs that publish a non-null default.
84
+ */
85
+ minCrossoverCutoffs: number;
86
+ }
87
+ /**
88
+ * One parameter descriptor in the cross-surface capability catalog, covering
89
+ * every key a processor's construction reads. Entries come in two runs: first
90
+ * the processor's realtime automation targets in id order (`id` non-null),
91
+ * then, sorted by name, every other construction key with `id` null and
92
+ * `rtSafe` false.
93
+ *
94
+ * `type` is `"enum"` when `choices` names every declared enumerator
95
+ * construction accepts (sent as the number in its `choices` entry), or
96
+ * `"string"` / `"array"` for a construction-only key (an embedded impulse
97
+ * response, a per-band list) that reports null for `min`, `max`, `default`
98
+ * and `choices`.
99
+ *
100
+ * `default` is the value the processor uses when the key is absent, read from
101
+ * the config struct's own field initializer, an enum as its number; it is
102
+ * null for a param id with no construction key, a `"string"` / `"array"` key,
103
+ * or a construction key with no fallback.
104
+ *
105
+ * `min` and `max` are the range construction ACCEPTS, measured by handing
106
+ * candidate values to the same code path a caller would use. They are a hard
107
+ * constraint, not a recommended UI range — a value outside them is an error,
108
+ * while an unvalidated control (most gains) reports null on both, meaning
109
+ * "this catalog states no limit" rather than "unknown". Non-null only when
110
+ * `choices` is null: `choices` non-null names the closed accepted set instead
111
+ * (every declared enumerator, or a `"number"` key whose accepted integers
112
+ * have holes), and then both bounds are null. Three properties to plan for: a
113
+ * bound is measured with every other parameter at its default, so two
114
+ * parameters that constrain each other each report the other's default; a
115
+ * sample-rate-derived bound reflects the un-prepared processor and rises once
116
+ * the insert is prepared at a higher rate; and an exclusive bound is reported
117
+ * as its limit value, so a control requiring `> 0` reports `min` 0 and still
118
+ * rejects 0.
119
+ */
120
+ export interface CapabilityCatalogParameter {
121
+ name: string;
122
+ id: number | null;
123
+ rtSafe: boolean;
124
+ type: 'boolean' | 'number' | 'enum' | 'string' | 'array';
125
+ min: number | null;
126
+ max: number | null;
127
+ default: boolean | number | null;
128
+ unit: string | null;
129
+ choices: MasteringInsertParamChoice[] | null;
130
+ /**
131
+ * The {@link MasteringInsertSlot} this key belongs to, or null for a key that
132
+ * always exists.
133
+ */
134
+ slot: string | null;
135
+ }
136
+ /** One named mastering processor and its host-facing capabilities. */
137
+ export interface CapabilityCatalogProcessor {
138
+ id: string;
139
+ kind: 'realtime' | 'offline' | 'pair';
140
+ realtimeInsertable: boolean;
141
+ stereoOnly: boolean;
142
+ latencySamples: number;
143
+ tailSamples: number;
144
+ /** Coarse realtime work estimate, or null when the processor is not an insert. */
145
+ realtimeCost: 'low' | 'moderate' | 'high' | null;
146
+ channelPolicy: 'multichannel' | 'stereoPairOnly' | 'perChannel' | 'passthrough';
147
+ category: string;
148
+ params: CapabilityCatalogParameter[];
149
+ /**
150
+ * The insert's conditional key groups in declaration order, named by each
151
+ * parameter's `slot`. Empty for entries that are not realtime-insertable.
152
+ */
153
+ slots: MasteringInsertSlot[];
154
+ }
155
+ /** Built-in preset names grouped by feature family. */
156
+ export interface CapabilityCatalogPresets {
157
+ mastering: string[];
158
+ synth: string[];
159
+ mixingScene: string[];
160
+ voiceChanger: string[];
161
+ playbackRoom: string[];
162
+ }
163
+ /**
164
+ * One entry of {@link CapabilityCatalog.masteringPresets}. The restoration
165
+ * kind's three loudness values are null: its repair stages leave level alone,
166
+ * so it carries no loudness target, ceiling or limiter allowance.
167
+ */
168
+ export interface CapabilityCatalogMasteringPreset {
169
+ name: string;
170
+ kind: 'mastering' | 'restoration';
171
+ targetLufs: number | null;
172
+ truePeakCeilingDb: number | null;
173
+ maxLimiterGainReductionDb: number | null;
174
+ }
175
+ /** Complete runtime catalog exposed by {@link capabilityCatalog}. */
176
+ export interface CapabilityCatalog {
177
+ version: string;
178
+ abi: SonareCapabilities['abi'];
179
+ processors: CapabilityCatalogProcessor[];
180
+ presets: CapabilityCatalogPresets;
181
+ masteringPresets: CapabilityCatalogMasteringPreset[];
182
+ }
183
+ /** Synchronous progress callback for offline operations. Its return value is ignored. */
184
+ export type ProgressCallback = (progress: number, stage: string) => void;
185
+ //# sourceMappingURL=public_types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"public_types.d.ts","sourceRoot":"","sources":["../src/public_types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,215 @@
1
+ import type { ValidateOptions } from './validation';
2
+ /** Options for `detectAcoustic`. All fields are optional. */
3
+ export interface AcousticOptions extends ValidateOptions {
4
+ /** Number of octave bands. Default 6. */
5
+ nOctaveBands?: number;
6
+ /** Number of 1/3-octave sub-bands. Default 24. */
7
+ nThirdOctaveSubbands?: number;
8
+ /** Minimum decay range (dB) for a valid RT60 fit. Default 30. */
9
+ minDecayDb?: number;
10
+ /** Margin (dB) above the noise floor for the decay fit. Default 10. */
11
+ noiseFloorMarginDb?: number;
12
+ }
13
+ /**
14
+ * Room acoustic parameters from a blind recording or a measured impulse
15
+ * response (`isBlind` distinguishes the two).
16
+ *
17
+ * Only `rt60` (and `rt60Bands`) is estimated in both modes. `c50`/`c80`/`d50`
18
+ * and `edt` require a known direct-sound arrival time, which only a measured
19
+ * impulse response provides, so they are NaN when `isBlind` is true -- `edt`
20
+ * measures the 0 to -10 dB decay and the blind estimator only fits the late
21
+ * decay `rt60` comes from.
22
+ *
23
+ * A band array that was not computed is EMPTY, never zero-filled: a zero-filled
24
+ * clarity array is indistinguishable from a genuine 0 dB measurement. So
25
+ * `c50Bands` and `c80Bands` have length 0 when `isBlind` is true. `edtBands` is
26
+ * the exception -- it keeps its full length and is all NaN, so it can be indexed
27
+ * by the same band index as `rt60Bands`.
28
+ */
29
+ export interface AcousticResult {
30
+ rt60: number;
31
+ edt: number;
32
+ c50: number;
33
+ c80: number;
34
+ d50: number;
35
+ rt60Bands: Float32Array;
36
+ edtBands: Float32Array;
37
+ c50Bands: Float32Array;
38
+ c80Bands: Float32Array;
39
+ confidence: number;
40
+ isBlind: boolean;
41
+ }
42
+ /** Shoebox geometry + placement shared by RIR synthesis and the room morph. */
43
+ export interface RoomGeometryOptions {
44
+ lengthM?: number;
45
+ widthM?: number;
46
+ heightM?: number;
47
+ /**
48
+ * Uniform wall absorption, clamped to [0, 0.999] (the back-compat scalar).
49
+ * Defaults to 0.2. Higher absorption shortens RT60, so it changes both the
50
+ * rendered content and the tail length rather than only the timbre.
51
+ */
52
+ absorption?: number;
53
+ /**
54
+ * Optional per-octave-band wall absorption (125/250/500/1k/2k/4k.. Hz). When
55
+ * provided it overrides `absorption` unless `materialPreset` is set.
56
+ *
57
+ * The late tail's decay time runs continuously between octave centres, so
58
+ * where absorption (a preset's included) changes steeply from one octave to
59
+ * the next, the octave-band RT60 measured back from the result leans toward
60
+ * the slower neighbour, as it does for a real room. The design value holds
61
+ * at the octave centre.
62
+ */
63
+ bandAbsorption?: Float32Array | number[];
64
+ /**
65
+ * Optional per-band wall scattering; missing bands default to 0. Independent
66
+ * of `bandAbsorption` and `materialPreset` — it applies to whichever material
67
+ * the absorption precedence selected, so a preset or a scalar-absorption room
68
+ * can still be given rough walls.
69
+ */
70
+ bandScattering?: Float32Array | number[];
71
+ /**
72
+ * Named wall-material preset (0 none; 1 concrete, 2 wood, 3 curtain,
73
+ * 4 carpet, 5 glass). A non-zero preset wins over `bandAbsorption`/`absorption`.
74
+ */
75
+ materialPreset?: number;
76
+ sourceX?: number;
77
+ sourceY?: number;
78
+ sourceZ?: number;
79
+ listenerX?: number;
80
+ listenerY?: number;
81
+ listenerZ?: number;
82
+ ismOrder?: number;
83
+ seed?: number;
84
+ maxSeconds?: number;
85
+ /**
86
+ * Add the ISO 9613-1 atmospheric-absorption term to the late tail's per-band
87
+ * RT60. Off by default so the RIR is unchanged; it mainly shortens the high
88
+ * bands of a large room.
89
+ */
90
+ airAbsorptionEnabled?: boolean;
91
+ /**
92
+ * Air temperature in degrees Celsius; 0 (or omitted) selects the ISO
93
+ * reference climate's 20 degC. A literal 0 degC is therefore not
94
+ * distinguishable from unset -- use 0.01 for a freezing room, which absorbs
95
+ * identically.
96
+ */
97
+ airTemperatureC?: number;
98
+ /**
99
+ * Relative humidity in percent; 0 (or omitted) selects the ISO reference
100
+ * climate's 50 %. Both climate values are read only while
101
+ * `airAbsorptionEnabled` is set.
102
+ */
103
+ airHumidityPercent?: number;
104
+ }
105
+ export interface RirSynthOptions extends RoomGeometryOptions {
106
+ sampleRate?: number;
107
+ /** Use the Eyring statistical late-tail model (default true); false = Sabine. */
108
+ preferEyring?: boolean;
109
+ /** Early/late crossover in ms (0 = auto, ~sqrt(V) ms). */
110
+ mixingTimeMs?: number;
111
+ /** Equal-power crossfade width around the mixing time in ms (0 = default). */
112
+ crossfadeMs?: number;
113
+ }
114
+ /** One diagnostic reported by the RIR synthesizer. */
115
+ export interface RirDiagnostic {
116
+ /** Stable machine-readable id, e.g. `acoustic.source_outside_room`. */
117
+ code: string;
118
+ message: string;
119
+ severity: 'info' | 'warning' | 'error';
120
+ }
121
+ export interface RirResult {
122
+ rir: Float32Array;
123
+ sampleRate: number;
124
+ hasError: boolean;
125
+ /**
126
+ * First error diagnostic as `code: message`, empty when `hasError` is false.
127
+ * Matches the string the C ABI leaves in `sonare_last_error_message()`.
128
+ */
129
+ errorMessage: string;
130
+ /**
131
+ * Every diagnostic the synthesizer reported, in order. Warnings appear here on
132
+ * successful calls too — a `maxSeconds` clamp that cut the tail is a warning,
133
+ * not an error, and is otherwise indistinguishable from an untruncated RIR.
134
+ */
135
+ diagnostics: RirDiagnostic[];
136
+ }
137
+ export interface RoomEstimateOptions {
138
+ aspectHintLw?: number;
139
+ aspectHintLh?: number;
140
+ /**
141
+ * Mean-absorption prior anchoring the volume scale (0 = library default,
142
+ * 0.15). Clamped into `[0.01, 0.99]` rather than refused: a value outside that
143
+ * range still returns a successful estimate, computed from the clamped prior.
144
+ * The reported volume scales with the cube of the prior, so the substitution
145
+ * is worth three orders of magnitude at the low end.
146
+ */
147
+ referenceAbsorption?: number;
148
+ preferEyring?: boolean;
149
+ nOctaveBands?: number;
150
+ /** Analyzer routing: 0 = auto, 1 = blind, 2 = impulse-response. */
151
+ mode?: number;
152
+ /** Analyzer decay-fit span in dB (0 = library default). */
153
+ minDecayDb?: number;
154
+ /** Analyzer noise-floor margin in dB (0 = library default). */
155
+ noiseFloorMarginDb?: number;
156
+ }
157
+ export interface RoomEstimateResult {
158
+ /**
159
+ * Equivalent volume (m^3) and representative dimensions (m). NaN, with
160
+ * `confidence` 0, when the recording has no measurable broadband decay
161
+ * (silence, or an RT60 the analyzer could not fit) — the acoustic family's
162
+ * "not measurable", as in `rt60Bands`.
163
+ */
164
+ volume: number;
165
+ length: number;
166
+ width: number;
167
+ height: number;
168
+ drrDb: number;
169
+ confidence: number;
170
+ absorptionBands: Float32Array;
171
+ rt60Bands: Float32Array;
172
+ }
173
+ export interface RoomMorphOptions extends RoomGeometryOptions {
174
+ wet?: number;
175
+ sourceTailSuppression?: number;
176
+ /**
177
+ * Use the Eyring statistical late-tail model for the target room (default
178
+ * true); false = Sabine. Matches {@link RirSynthOptions.preferEyring}.
179
+ */
180
+ preferEyring?: boolean;
181
+ /** Early/late crossover in ms (0 = auto, ~sqrt(V) ms). */
182
+ mixingTimeMs?: number;
183
+ /** Equal-power crossfade width around the mixing time in ms (0 = default). */
184
+ crossfadeMs?: number;
185
+ }
186
+ /**
187
+ * Morphed audio and what the target-room synthesis had to change to make it.
188
+ *
189
+ * Shaped like {@link RirResult} because the same synthesis runs underneath.
190
+ * There is no `hasError` / `errorMessage` counterpart: an unusable morph throws,
191
+ * so every entry in {@link RoomMorphResult.diagnostics} is a warning.
192
+ */
193
+ export interface RoomMorphResult {
194
+ /** Morphed samples: input length plus the target room's reverb tail. */
195
+ audio: Float32Array;
196
+ sampleRate: number;
197
+ /**
198
+ * Every diagnostic the target-room synthesis reported, in order. Each says the
199
+ * morph went through a room other than the one requested — an image-source
200
+ * order reduced to the safe maximum (`acoustic.ism_order_clamped`), a tail cut
201
+ * against `maxSeconds` (`acoustic.rir_length_clamped`), a `maxSeconds` shorter
202
+ * than the direct sound's flight time and extended to fit it
203
+ * (`acoustic.rir_length_floored`), a `maxSeconds` shorter than the longest
204
+ * band's RT60, which cuts that band before it decays by 60 dB so its
205
+ * reverberation time cannot be measured from the RIR
206
+ * (`acoustic.rir_tail_truncated`), a request that produced no diffuse tail
207
+ * (`acoustic.no_late_tail`) — and is otherwise invisible.
208
+ *
209
+ * These are the five codes the synthesis can emit here, so a `switch` over
210
+ * them needs no fall-through case. `roomMorph` forwards `maxSeconds`
211
+ * unchanged, which is why the floored one reaches a morph at all.
212
+ */
213
+ diagnostics: RirDiagnostic[];
214
+ }
215
+ //# sourceMappingURL=public_types_acoustic.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"public_types_acoustic.d.ts","sourceRoot":"","sources":["../src/public_types_acoustic.ts"],"names":[],"mappings":"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"}