@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,710 @@
1
+ import type { EngineAutomationPoint, EngineBus, EngineCaptureStatus, EngineClip, EngineMarker, EngineMetronomeConfig, EngineMidiClipSchedule, EngineParameterInfo, EngineTempoSegment, EngineTimeSignatureSegment, EngineTrackLane, EngineTransportState, PlaybackDiagnostics, PlaybackRendererConfig, RealtimeVoiceChangerConfigInput, RealtimeVoiceChangerPodConfig } from '../index';
2
+ import type { AutomationCurve } from '../public_types';
3
+ import type { SonareEngineCommandRecord, SonareEngineTelemetryRecord, SonareWorkletMeterSnapshot, SonareWorkletSpectrumSnapshot } from './protocol';
4
+ export interface SonareWorkletProcessorOptions {
5
+ sceneJson: string;
6
+ sampleRate?: number;
7
+ blockSize?: number;
8
+ stripCount?: number;
9
+ meterIntervalFrames?: number;
10
+ meterSharedBuffer?: SharedArrayBuffer;
11
+ meterRingCapacity?: number;
12
+ spectrumIntervalFrames?: number;
13
+ spectrumBands?: number;
14
+ spectrumSharedBuffer?: SharedArrayBuffer;
15
+ spectrumRingCapacity?: number;
16
+ }
17
+ export interface SonareRealtimeEngineWorkletProcessorOptions {
18
+ wasmBinary?: ArrayBuffer | Uint8Array;
19
+ initialSyncMessages?: SonareEngineSyncMessage[];
20
+ initialCommands?: SonareEngineCommandRecord[];
21
+ sampleRate?: number;
22
+ blockSize?: number;
23
+ channelCount?: number;
24
+ meterIntervalFrames?: number;
25
+ commandSharedBuffer?: SharedArrayBuffer;
26
+ commandRingCapacity?: number;
27
+ telemetrySharedBuffer?: SharedArrayBuffer;
28
+ telemetryRingCapacity?: number;
29
+ meterSharedBuffer?: SharedArrayBuffer;
30
+ meterRingCapacity?: number;
31
+ scopeIntervalFrames?: number;
32
+ scopeBands?: number;
33
+ scopeSharedBuffer?: SharedArrayBuffer;
34
+ scopeRingCapacity?: number;
35
+ /**
36
+ * Lock-free SPSC queue for clip-page cache misses. Supplying this is required
37
+ * for realtime-safe OPFS streaming: it avoids both embind object creation and
38
+ * postMessage structured cloning from AudioWorklet process().
39
+ */
40
+ clipPageRequestSharedBuffer?: SharedArrayBuffer;
41
+ clipPageRequestRingCapacity?: number;
42
+ /** Lock-free worklet-to-main-thread MIDI-1 output ring. */
43
+ externalMidiSharedBuffer?: SharedArrayBuffer;
44
+ externalMidiRingCapacity?: number;
45
+ /**
46
+ * Route the PFL/AFL cue bus to the processor's SECOND output instead of
47
+ * folding it into the program output. Off by default, so an existing
48
+ * single-output host keeps its current mix sample for sample. The node must
49
+ * be constructed with two outputs for the cue to be audible.
50
+ */
51
+ cueOutput?: boolean;
52
+ }
53
+ export interface SonareRealtimeVoiceChangerWorkletProcessorOptions {
54
+ preset?: RealtimeVoiceChangerConfigInput;
55
+ sampleRate?: number;
56
+ blockSize?: number;
57
+ channelCount?: number;
58
+ }
59
+ export interface SonareRealtimeVoiceChangerSetConfigMessage {
60
+ type: 'setConfig';
61
+ /** Pre-normalized by the main thread; never JSON parsed in the worklet. */
62
+ config: RealtimeVoiceChangerPodConfig;
63
+ }
64
+ export interface SonareRealtimeVoiceChangerResetMessage {
65
+ type: 'reset';
66
+ }
67
+ export interface SonareRealtimeVoiceChangerDestroyMessage {
68
+ type: 'destroy';
69
+ }
70
+ export type SonareRealtimeVoiceChangerMessage = SonareRealtimeVoiceChangerSetConfigMessage | SonareRealtimeVoiceChangerResetMessage | SonareRealtimeVoiceChangerDestroyMessage;
71
+ export interface SonarePlaybackWorkletProcessorOptions {
72
+ /** Renderer configuration; parsed once, in the processor constructor. Default `{}`. */
73
+ config?: PlaybackRendererConfig | string;
74
+ /**
75
+ * SHRF v1 bytes, required for a headphones target (e.g. the package asset
76
+ * `./hrtf/default.shrf`). Copied into the renderer at construction.
77
+ */
78
+ hrtf?: ArrayBuffer | Uint8Array;
79
+ /** Largest render quantum the processor accepts. Default 128. */
80
+ maxBlockSize?: number;
81
+ /** Defaults to the AudioWorkletGlobalScope `sampleRate`, then 48000. */
82
+ sampleRate?: number;
83
+ }
84
+ export interface SonarePlaybackNodeOptions extends SonarePlaybackWorkletProcessorOptions {
85
+ processorName?: string;
86
+ nodeFactory?: (context: BaseAudioContext, processorName: string, options: AudioWorkletNodeOptions) => AudioWorkletNode;
87
+ }
88
+ export interface SonarePlaybackConfigMessage {
89
+ type: 'config';
90
+ /** A complete configuration document, serialized on the main thread. */
91
+ config: string;
92
+ }
93
+ export interface SonarePlaybackOrientationMessage {
94
+ type: 'orientation';
95
+ /** Degrees; see `PlaybackRenderer.setHeadOrientation`. */
96
+ yaw: number;
97
+ pitch?: number;
98
+ roll?: number;
99
+ }
100
+ /** Clears the pipeline after a seek; the handler runs between render quanta. */
101
+ export interface SonarePlaybackResetMessage {
102
+ type: 'reset';
103
+ }
104
+ /** Requests a {@link SonarePlaybackDiagnosticsReplyMessage}. */
105
+ export interface SonarePlaybackDiagnosticsRequestMessage {
106
+ type: 'diagnostics';
107
+ }
108
+ export interface SonarePlaybackDestroyMessage {
109
+ type: 'destroy';
110
+ }
111
+ export type SonarePlaybackMessage = SonarePlaybackConfigMessage | SonarePlaybackOrientationMessage | SonarePlaybackResetMessage | SonarePlaybackDiagnosticsRequestMessage | SonarePlaybackDestroyMessage;
112
+ /** The renderer's diagnostics plus the worklet's own block counter. */
113
+ export interface SonarePlaybackWorkletDiagnostics extends PlaybackDiagnostics {
114
+ /**
115
+ * Render quanta whose input channel count the renderer does not accept
116
+ * (not 1, 2, 6 or 8 under `"auto"`; not the fixed layout's count otherwise).
117
+ * Each was rendered as silence on the active input layout, so the timeline
118
+ * still advanced.
119
+ */
120
+ unsupported_input_blocks: number;
121
+ }
122
+ export interface SonarePlaybackDiagnosticsReplyMessage {
123
+ type: 'diagnostics';
124
+ diagnostics: SonarePlaybackWorkletDiagnostics;
125
+ }
126
+ /** Posted when a control message is refused (e.g. a changed prepare key). */
127
+ export interface SonarePlaybackErrorMessage {
128
+ type: 'error';
129
+ request: SonarePlaybackMessage['type'];
130
+ message: string;
131
+ }
132
+ export interface SonareRealtimeEngineNodeCapabilities {
133
+ mode: 'sab' | 'postMessage';
134
+ runtimeTarget: 'embind';
135
+ sharedArrayBuffer: boolean;
136
+ atomics: boolean;
137
+ audioWorklet: boolean;
138
+ /** True only when clip-page misses use the bounded SAB ring. */
139
+ clipPageRequestsRealtimeSafe: boolean;
140
+ /** True when external MIDI uses the SAB output ring rather than postMessage. */
141
+ externalMidiRealtimeSafe: boolean;
142
+ /**
143
+ * True when the node carries a second output fed by the PFL/AFL cue bus. When
144
+ * false the cue is folded into the program output, as it always was.
145
+ */
146
+ cueOutput: boolean;
147
+ engineAbiVersion?: number;
148
+ expectedEngineAbiVersion?: number;
149
+ abiCompatible?: boolean;
150
+ degradedReason?: string;
151
+ readyMessage?: boolean;
152
+ }
153
+ export interface SonareRealtimeEngineNodeOptions extends SonareRealtimeEngineWorkletProcessorOptions {
154
+ processorName?: string;
155
+ moduleUrl?: string | URL;
156
+ mode?: 'auto' | 'sab' | 'postMessage';
157
+ engineAbiVersion?: number;
158
+ expectedEngineAbiVersion?: number;
159
+ requireAbiCompatible?: boolean;
160
+ nodeFactory?: (context: BaseAudioContext, processorName: string, options: AudioWorkletNodeOptions) => AudioWorkletNode;
161
+ }
162
+ export interface SonareEngineTransportFacade {
163
+ play(sampleTime?: number): boolean;
164
+ stop(sampleTime?: number): boolean;
165
+ seekPpq(ppq: number, sampleTime?: number): boolean;
166
+ seekSeconds(seconds: number, sampleTime?: number): boolean;
167
+ setTempo(bpm: number): void;
168
+ setTempoSegments(segments: readonly EngineTempoSegment[]): void;
169
+ setLoop(startPpq: number, endPpq: number, enabled?: boolean): boolean;
170
+ }
171
+ export interface SonareWorkletScheduleInsertAutomationMessage {
172
+ type: 'scheduleInsertAutomation';
173
+ stripIndex: number;
174
+ insertIndex: number;
175
+ paramId: number;
176
+ value: number;
177
+ samplePos?: number;
178
+ curve?: AutomationCurve;
179
+ }
180
+ export interface SonareWorkletSetMeterIntervalMessage {
181
+ type: 'setMeterInterval';
182
+ frames: number;
183
+ }
184
+ export interface SonareWorkletDestroyMessage {
185
+ type: 'destroy';
186
+ }
187
+ export type SonareWorkletMessage = SonareWorkletScheduleInsertAutomationMessage | SonareWorkletSetMeterIntervalMessage | SonareWorkletDestroyMessage;
188
+ /** One external-MIDI event delivered to the main thread, lowered to MIDI 1.0
189
+ * bytes ready for a Web MIDI output port. */
190
+ export interface SonareWorkletExternalMidiEvent {
191
+ /** Originating track lane, or 0xFFFFFFFF for transport/clock bytes. */
192
+ destinationId: number;
193
+ /** Sample position within the producing block. */
194
+ renderFrame: number;
195
+ /** MIDI 1.0 status + data bytes (1..3 entries). */
196
+ bytes: number[];
197
+ }
198
+ /** Batch of external-MIDI events posted from the worklet once per render block. */
199
+ export interface SonareWorkletExternalMidiMessage {
200
+ type: 'externalMidi';
201
+ events: SonareWorkletExternalMidiEvent[];
202
+ }
203
+ /** A control-plane sync message that the worklet rejected without crashing. */
204
+ export interface SonareEngineSyncErrorMessage {
205
+ type: 'syncError';
206
+ /**
207
+ * Discriminant of the rejected sync. Usually a known member, but a
208
+ * `sync`-prefixed type this build does not recognize is reported here too
209
+ * rather than dropped, so the set is open. `Record<never, never>` keeps the
210
+ * known members as editor completions instead of collapsing to `string`.
211
+ */
212
+ syncType: SonareEngineSyncMessage['type'] | (string & Record<never, never>);
213
+ message: string;
214
+ }
215
+ export type SonareWorkletTransportMessage = SonareWorkletMeterSnapshot | SonareWorkletSpectrumSnapshot | SonareWorkletExternalMidiMessage | SonareEngineClipPageRequestMessage | SonareEngineTelemetryRecord;
216
+ export interface WorkletTransport {
217
+ postMessage?: (message: SonareWorkletTransportMessage | SonareEngineCaptureResponseMessageInternal | SonareEngineTransportResponseMessage | SonareEngineSyncErrorMessage, transfer?: Transferable[]) => void;
218
+ onMeter?: (meter: SonareWorkletMeterSnapshot) => void;
219
+ onSpectrum?: (spectrum: SonareWorkletSpectrumSnapshot) => void;
220
+ }
221
+ export interface ResolvedMetronomeConfig {
222
+ beatGain: number;
223
+ accentGain: number;
224
+ clickSamples: number;
225
+ clickSeconds: number;
226
+ }
227
+ export declare const DEFAULT_METRONOME_CONFIG: ResolvedMetronomeConfig;
228
+ export declare function resolveMetronomeConfig(config: EngineMetronomeConfig): ResolvedMetronomeConfig;
229
+ export interface SonareEngineSyncClipsMessage {
230
+ type: 'syncClips';
231
+ clips: EngineClip[];
232
+ }
233
+ export interface SonareEngineSyncClipsDeltaMessage {
234
+ type: 'syncClipsDelta';
235
+ upserts: EngineClip[];
236
+ removeIds: number[];
237
+ }
238
+ /** Begins a paged, pre-baked clip transfer. PCM pages follow in FIFO order. */
239
+ export interface SonareEngineSyncClipPageProviderMessage {
240
+ type: 'syncClipPageProvider';
241
+ clipId: number;
242
+ /** Omitted when an OPFS stream is primed before its clip is scheduled. */
243
+ clip?: EngineClip;
244
+ numChannels: number;
245
+ numSamples: number;
246
+ pageFrames: number;
247
+ }
248
+ /** Supplies one bounded PCM page for a pending pre-baked clip transfer. */
249
+ export interface SonareEngineSyncClipPageMessage {
250
+ type: 'syncClipPage';
251
+ clipId: number;
252
+ pageIndex: number;
253
+ channels: Float32Array[];
254
+ }
255
+ /**
256
+ * Sets the worklet engine's clip-page look-ahead window in timeline frames, so
257
+ * the audio thread reports the pages it is about to read before it reads them.
258
+ * 0 disables the look-ahead.
259
+ */
260
+ export interface SonareEngineSyncClipPagePrefetchFramesMessage {
261
+ type: 'syncClipPagePrefetchFrames';
262
+ frames: number;
263
+ }
264
+ /**
265
+ * Sets the worklet engine's concurrent time-stretch voice capacity. The
266
+ * capacity was already validated (and applied to the offline engine) by the
267
+ * caller, so the worklet side just mirrors the accepted value; the pool
268
+ * rebuild itself happens on the audio thread, at the next block boundary.
269
+ */
270
+ export interface SonareEngineSyncWarpVoiceCapacityMessage {
271
+ type: 'syncWarpVoiceCapacity';
272
+ voices: number;
273
+ }
274
+ /** Evicts one page after the main-thread sliding window advances. */
275
+ export interface SonareEngineSyncClipPageClearMessage {
276
+ type: 'syncClipPageClear';
277
+ clipId: number;
278
+ pageIndex: number;
279
+ }
280
+ /** Releases a provider whose clip was removed or whose stream was closed. */
281
+ export interface SonareEngineSyncClipPageDestroyMessage {
282
+ type: 'syncClipPageDestroy';
283
+ clipId: number;
284
+ }
285
+ /** Makes a fully supplied paged clip visible to the audio engine. */
286
+ export interface SonareEngineSyncClipPageCommitMessage {
287
+ type: 'syncClipPageCommit';
288
+ clipId: number;
289
+ /**
290
+ * Clip schedule to publish with a provider that was primed before its
291
+ * schedule was known. The original pre-baked push path supplies it on the
292
+ * provider message instead.
293
+ */
294
+ clip?: EngineClip;
295
+ }
296
+ /**
297
+ * A bounded batch of page misses emitted by the AudioWorklet. The main thread
298
+ * resolves these from OPFS and responds with `syncClipPage`; a missing page is
299
+ * silent until that response arrives.
300
+ */
301
+ export interface SonareEngineClipPageRequestMessage {
302
+ type: 'clipPageRequest';
303
+ requests: Array<{
304
+ clipId: number;
305
+ pageIndex: number;
306
+ }>;
307
+ /** Number of misses dropped because a bounded native or SAB request queue was full. */
308
+ dropped?: number;
309
+ }
310
+ export interface SonareEngineSyncMidiClipsMessage {
311
+ type: 'syncMidiClips';
312
+ clips: EngineMidiClipSchedule[];
313
+ }
314
+ export interface SonareEngineSyncMarkersMessage {
315
+ type: 'syncMarkers';
316
+ markers: EngineMarker[];
317
+ }
318
+ export interface SonareEngineSyncMetronomeMessage {
319
+ type: 'syncMetronome';
320
+ config: EngineMetronomeConfig;
321
+ }
322
+ export interface SonareEngineSyncAutomationMessage {
323
+ type: 'syncAutomation';
324
+ paramId: number;
325
+ points: EngineAutomationPoint[];
326
+ }
327
+ /** Replaces the live engine's registered custom-parameter set. */
328
+ export interface SonareEngineSyncParametersMessage {
329
+ type: 'syncParameters';
330
+ parameters: EngineParameterInfo[];
331
+ }
332
+ export interface SonareEngineSyncTempoMessage {
333
+ type: 'syncTempo';
334
+ bpm: number;
335
+ timeSignature: {
336
+ numerator: number;
337
+ denominator: number;
338
+ };
339
+ tempoSegments?: EngineTempoSegment[];
340
+ timeSignatureSegments?: EngineTimeSignatureSegment[];
341
+ }
342
+ export type SonareEngineSyncMixerInsertParamOverride = {
343
+ kind: 'track';
344
+ trackId: number;
345
+ insertIndex: number;
346
+ paramName: string;
347
+ value: number;
348
+ } | {
349
+ kind: 'bus';
350
+ busId: number;
351
+ insertIndex: number;
352
+ paramName: string;
353
+ value: number;
354
+ } | {
355
+ kind: 'master';
356
+ insertIndex: number;
357
+ paramName: string;
358
+ value: number;
359
+ };
360
+ export interface SonareEngineSyncMixerMessage {
361
+ type: 'syncMixer';
362
+ /** Apply only supplied sidechain bindings; preserve current mixer topology. */
363
+ sidechainDelta?: boolean;
364
+ lanes: EngineTrackLane[];
365
+ buses?: EngineBus[];
366
+ trackStrips?: Array<{
367
+ trackId: number;
368
+ sceneJson: string;
369
+ }>;
370
+ busStrips?: Array<{
371
+ busId: number;
372
+ sceneJson: string;
373
+ }>;
374
+ masterStripJson?: string;
375
+ /** Retained by-name insert values, applied after strip and sidechain replay. */
376
+ insertParamOverrides?: SonareEngineSyncMixerInsertParamOverride[];
377
+ /** Explicit full strip replacements that must reset retained insert state. */
378
+ forceInsertResets?: Array<{
379
+ kind: 'track';
380
+ trackId: number;
381
+ } | {
382
+ kind: 'bus';
383
+ busId: number;
384
+ } | {
385
+ kind: 'master';
386
+ }>;
387
+ /** Lane insert sidechain bindings (replayed after lanes/strips). */
388
+ laneSidechains?: Array<{
389
+ trackId: number;
390
+ insertIndex: number;
391
+ sourceTrackId: number;
392
+ }>;
393
+ /**
394
+ * Bus insert sidechain bindings (replayed after lanes/buses/strips).
395
+ * `sourceKind` is a `SonareSidechainSourceKind` ordinal (0 track / 1 bus).
396
+ */
397
+ busSidechains?: Array<{
398
+ busId: number;
399
+ insertIndex: number;
400
+ sourceKind: number;
401
+ sourceId: number;
402
+ }>;
403
+ /** Master strip insert sidechain bindings. Same `sourceKind` convention. */
404
+ masterSidechains?: Array<{
405
+ insertIndex: number;
406
+ sourceKind: number;
407
+ sourceId: number;
408
+ }>;
409
+ }
410
+ export interface SonareEngineSyncCaptureMessage {
411
+ type: 'syncCapture';
412
+ bufferFrames: number;
413
+ channels: number;
414
+ source: EngineCaptureStatus['source'];
415
+ recordOffsetSamples: number;
416
+ inputMonitor: {
417
+ enabled: boolean;
418
+ gain: number;
419
+ };
420
+ }
421
+ export interface SonareEngineSyncTrackStripEqBandMessage {
422
+ type: 'syncTrackStripEqBand';
423
+ trackId: number;
424
+ bandIndex: number;
425
+ bandJson: string;
426
+ }
427
+ export interface SonareEngineSyncMasterStripEqBandMessage {
428
+ type: 'syncMasterStripEqBand';
429
+ bandIndex: number;
430
+ bandJson: string;
431
+ }
432
+ export interface SonareEngineSyncBusStripEqBandMessage {
433
+ type: 'syncBusStripEqBand';
434
+ busId: number;
435
+ bandIndex: number;
436
+ bandJson: string;
437
+ }
438
+ export interface SonareEngineSyncTrackStripInsertBypassedMessage {
439
+ type: 'syncTrackStripInsertBypassed';
440
+ trackId: number;
441
+ insertIndex: number;
442
+ bypassed: boolean;
443
+ resetOnBypass: boolean;
444
+ }
445
+ export interface SonareEngineSyncMasterStripInsertBypassedMessage {
446
+ type: 'syncMasterStripInsertBypassed';
447
+ insertIndex: number;
448
+ bypassed: boolean;
449
+ resetOnBypass: boolean;
450
+ }
451
+ export interface SonareEngineSyncTrackStripInsertParamByNameMessage {
452
+ type: 'syncTrackStripInsertParamByName';
453
+ trackId: number;
454
+ insertIndex: number;
455
+ paramName: string;
456
+ value: number;
457
+ }
458
+ export interface SonareEngineSyncMasterStripInsertParamByNameMessage {
459
+ type: 'syncMasterStripInsertParamByName';
460
+ insertIndex: number;
461
+ paramName: string;
462
+ value: number;
463
+ }
464
+ export interface SonareEngineSyncBusStripInsertParamByNameMessage {
465
+ type: 'syncBusStripInsertParamByName';
466
+ busId: number;
467
+ insertIndex: number;
468
+ paramName: string;
469
+ value: number;
470
+ }
471
+ export interface SonareEngineSyncBusStripInsertBypassedMessage {
472
+ type: 'syncBusStripInsertBypassed';
473
+ busId: number;
474
+ insertIndex: number;
475
+ bypassed: boolean;
476
+ resetOnBypass: boolean;
477
+ }
478
+ export interface SonareEngineSyncTrackStripPanMessage {
479
+ type: 'syncTrackStripPan';
480
+ trackId: number;
481
+ pan: number;
482
+ }
483
+ export interface SonareEngineSyncTrackStripPanLawMessage {
484
+ type: 'syncTrackStripPanLaw';
485
+ trackId: number;
486
+ panLaw: number;
487
+ }
488
+ export interface SonareEngineSyncTrackStripPanModeMessage {
489
+ type: 'syncTrackStripPanMode';
490
+ trackId: number;
491
+ panMode: number;
492
+ }
493
+ export interface SonareEngineSyncTrackStripDualPanMessage {
494
+ type: 'syncTrackStripDualPan';
495
+ trackId: number;
496
+ leftPan: number;
497
+ rightPan: number;
498
+ }
499
+ export interface SonareEngineSyncBusStripPanMessage {
500
+ type: 'syncBusStripPan';
501
+ busId: number;
502
+ pan: number;
503
+ }
504
+ export interface SonareEngineSyncBusStripPanLawMessage {
505
+ type: 'syncBusStripPanLaw';
506
+ busId: number;
507
+ panLaw: number;
508
+ }
509
+ export interface SonareEngineSyncBusStripPanModeMessage {
510
+ type: 'syncBusStripPanMode';
511
+ busId: number;
512
+ panMode: number;
513
+ }
514
+ export interface SonareEngineSyncBusStripDualPanMessage {
515
+ type: 'syncBusStripDualPan';
516
+ busId: number;
517
+ leftPan: number;
518
+ rightPan: number;
519
+ }
520
+ export interface SonareEngineSyncTrackStripChannelDelaySamplesMessage {
521
+ type: 'syncTrackStripChannelDelaySamples';
522
+ trackId: number;
523
+ delaySamples: number;
524
+ }
525
+ export interface SonareEngineSyncBuiltinInstrumentMessage {
526
+ type: 'syncBuiltinInstrument';
527
+ destinationId: number;
528
+ config: {
529
+ destinationId?: number;
530
+ } & Record<string, unknown>;
531
+ }
532
+ export interface SonareEngineSyncSynthInstrumentMessage {
533
+ type: 'syncSynthInstrument';
534
+ destinationId: number;
535
+ patch: Record<string, unknown> | string;
536
+ }
537
+ export interface SonareEngineSyncSf2InstrumentMessage {
538
+ type: 'syncSf2Instrument';
539
+ destinationId: number;
540
+ config: {
541
+ destinationId?: number;
542
+ gain?: number;
543
+ polyphony?: number;
544
+ preferModelForModeledFamilies?: boolean;
545
+ clearBankRig?: boolean;
546
+ gsEfxRealization?: 'modern' | 'classic';
547
+ };
548
+ }
549
+ export interface SonareEngineSyncLoadSoundFontMessage {
550
+ type: 'syncLoadSoundFont';
551
+ data: Uint8Array;
552
+ }
553
+ export interface SonareEngineSyncMidiFxMessage {
554
+ type: 'syncMidiFx' | 'syncClearMidiFx';
555
+ destinationId: number;
556
+ /** Engine MIDI-FX config JSON; present for 'syncMidiFx', absent for a clear. */
557
+ configJson?: string;
558
+ }
559
+ export interface SonareEngineSyncMidiNoteMessage {
560
+ type: 'syncMidiNoteOn' | 'syncMidiNoteOff';
561
+ destinationId: number;
562
+ group: number;
563
+ channel: number;
564
+ note: number;
565
+ velocity: number;
566
+ renderFrame: number;
567
+ }
568
+ export interface SonareEngineSyncMidiCcMessage {
569
+ type: 'syncMidiCc';
570
+ destinationId: number;
571
+ group: number;
572
+ channel: number;
573
+ controller: number;
574
+ value: number;
575
+ renderFrame: number;
576
+ }
577
+ export interface SonareEngineSyncMidiUmpMessage {
578
+ type: 'syncMidiUmp';
579
+ destinationId: number;
580
+ word0: number;
581
+ renderFrame: number;
582
+ }
583
+ /**
584
+ * One of the three per-note expression dimensions, addressed to a destination.
585
+ * `data0`/`data1` carry the dimension's own payload the way the live-input
586
+ * message beside this one does: bend14 / 0, pressure / 0, or note / pressure.
587
+ * A bend is 14-bit, which is why these do not ride the 7-bit CC message.
588
+ */
589
+ export interface SonareEngineSyncMidiExpressionMessage {
590
+ type: 'syncMidiPitchBend' | 'syncMidiChannelPressure' | 'syncMidiPolyPressure';
591
+ destinationId: number;
592
+ group: number;
593
+ channel: number;
594
+ data0: number;
595
+ data1: number;
596
+ renderFrame: number;
597
+ }
598
+ export interface SonareEngineSyncMidiSysexMessage {
599
+ type: 'syncMidiSysex';
600
+ destinationId: number;
601
+ data: Uint8Array;
602
+ renderFrame: number;
603
+ }
604
+ export interface SonareEngineSyncMidiPanicMessage {
605
+ type: 'syncMidiPanic';
606
+ renderFrame: number;
607
+ }
608
+ export interface SonareEngineSyncMidiDestinationExternalMessage {
609
+ type: 'syncMidiDestinationExternal';
610
+ destinationId: number;
611
+ external: boolean;
612
+ }
613
+ export interface SonareEngineSyncExternalMidiClockMessage {
614
+ type: 'syncExternalMidiClock';
615
+ enabled: boolean;
616
+ }
617
+ export interface SonareEngineSyncMidiInputSourceMessage {
618
+ type: 'syncMidiInputSource' | 'syncClearMidiInputSource';
619
+ destinationId?: number;
620
+ }
621
+ export interface SonareEngineSyncMidiCcBindingMessage {
622
+ type: 'syncMidiCcBinding';
623
+ channel: number;
624
+ controller: number;
625
+ paramId: number;
626
+ minValue: number;
627
+ maxValue: number;
628
+ }
629
+ export interface SonareEngineSyncMidiInputEventMessage {
630
+ type: 'syncMidiInputNoteOn' | 'syncMidiInputNoteOff' | 'syncMidiInputCc' | 'syncMidiInputPitchBend' | 'syncMidiInputChannelPressure' | 'syncMidiInputPolyPressure';
631
+ group: number;
632
+ channel: number;
633
+ data0: number;
634
+ data1: number;
635
+ portTimeSamples: number;
636
+ }
637
+ /** Releases the realtime engine and all worklet-owned clip buffers. */
638
+ export interface SonareEngineDestroyMessage {
639
+ type: 'destroy';
640
+ }
641
+ export type SonareEngineInstrumentSyncMessage = SonareEngineSyncBuiltinInstrumentMessage | SonareEngineSyncSynthInstrumentMessage | SonareEngineSyncSf2InstrumentMessage | SonareEngineSyncLoadSoundFontMessage | SonareEngineSyncMidiFxMessage;
642
+ export type SonareEngineSyncMessage = SonareEngineSyncClipsMessage | SonareEngineSyncClipsDeltaMessage | SonareEngineSyncClipPageProviderMessage | SonareEngineSyncClipPageMessage | SonareEngineSyncClipPageClearMessage | SonareEngineSyncClipPagePrefetchFramesMessage | SonareEngineSyncWarpVoiceCapacityMessage | SonareEngineSyncClipPageCommitMessage | SonareEngineSyncClipPageDestroyMessage | SonareEngineSyncMidiClipsMessage | SonareEngineSyncMarkersMessage | SonareEngineSyncMetronomeMessage | SonareEngineSyncAutomationMessage | SonareEngineSyncParametersMessage | SonareEngineSyncTempoMessage | SonareEngineSyncMixerMessage | SonareEngineSyncCaptureMessage | SonareEngineSyncTrackStripEqBandMessage | SonareEngineSyncMasterStripEqBandMessage | SonareEngineSyncBusStripEqBandMessage | SonareEngineSyncTrackStripInsertBypassedMessage | SonareEngineSyncMasterStripInsertBypassedMessage | SonareEngineSyncTrackStripInsertParamByNameMessage | SonareEngineSyncMasterStripInsertParamByNameMessage | SonareEngineSyncBusStripInsertParamByNameMessage | SonareEngineSyncBusStripInsertBypassedMessage | SonareEngineSyncTrackStripPanMessage | SonareEngineSyncTrackStripPanLawMessage | SonareEngineSyncTrackStripPanModeMessage | SonareEngineSyncTrackStripDualPanMessage | SonareEngineSyncBusStripPanMessage | SonareEngineSyncBusStripPanLawMessage | SonareEngineSyncBusStripPanModeMessage | SonareEngineSyncBusStripDualPanMessage | SonareEngineSyncTrackStripChannelDelaySamplesMessage | SonareEngineSyncBuiltinInstrumentMessage | SonareEngineSyncSynthInstrumentMessage | SonareEngineSyncSf2InstrumentMessage | SonareEngineSyncLoadSoundFontMessage | SonareEngineSyncMidiFxMessage | SonareEngineSyncMidiNoteMessage | SonareEngineSyncMidiCcMessage | SonareEngineSyncMidiUmpMessage | SonareEngineSyncMidiExpressionMessage | SonareEngineSyncMidiSysexMessage | SonareEngineSyncMidiPanicMessage | SonareEngineSyncMidiDestinationExternalMessage | SonareEngineSyncExternalMidiClockMessage | SonareEngineSyncMidiInputSourceMessage | SonareEngineSyncMidiCcBindingMessage | SonareEngineSyncMidiInputEventMessage | SonareEngineDestroyMessage;
643
+ export interface WorkletPort {
644
+ postMessage?: (message: unknown, transfer?: Transferable[]) => void;
645
+ onmessage?: (event: {
646
+ data: unknown;
647
+ }) => void;
648
+ addEventListener?: (type: 'message', listener: (event: {
649
+ data: unknown;
650
+ }) => void) => void;
651
+ start?: () => void;
652
+ }
653
+ export interface SonareEngineCaptureRequestMessage {
654
+ type: 'captureRequest';
655
+ requestId: number;
656
+ op: 'status' | 'read' | 'reset';
657
+ }
658
+ /**
659
+ * Public capture response shape retained for source compatibility.
660
+ *
661
+ * The worklet wire protocol is stricter than this legacy structural type; use
662
+ * `SonareEngineCaptureResponseMessageInternal` inside the implementation.
663
+ */
664
+ export interface SonareEngineCaptureResponseMessage {
665
+ type: 'captureResponse';
666
+ requestId: number;
667
+ ok: boolean;
668
+ status?: EngineCaptureStatus;
669
+ channels?: Float32Array[] | number[][];
670
+ error?: string;
671
+ }
672
+ interface SonareEngineCaptureStatusResponseMessageInternal {
673
+ type: 'captureResponse';
674
+ requestId: number;
675
+ ok: true;
676
+ status: EngineCaptureStatus;
677
+ }
678
+ interface SonareEngineCaptureReadResponseMessageInternal {
679
+ type: 'captureResponse';
680
+ requestId: number;
681
+ ok: true;
682
+ channels: Float32Array[];
683
+ }
684
+ interface SonareEngineCaptureResetResponseMessageInternal {
685
+ type: 'captureResponse';
686
+ requestId: number;
687
+ ok: true;
688
+ }
689
+ interface SonareEngineCaptureErrorResponseMessageInternal {
690
+ type: 'captureResponse';
691
+ requestId: number;
692
+ ok: false;
693
+ error: string;
694
+ }
695
+ /** Strict wire response type used only by the worklet implementation. */
696
+ export type SonareEngineCaptureResponseMessageInternal = SonareEngineCaptureStatusResponseMessageInternal | SonareEngineCaptureReadResponseMessageInternal | SonareEngineCaptureResetResponseMessageInternal | SonareEngineCaptureErrorResponseMessageInternal;
697
+ export interface SonareEngineTransportRequestMessage {
698
+ type: 'transportRequest';
699
+ requestId: number;
700
+ op: 'state';
701
+ }
702
+ export interface SonareEngineTransportResponseMessage {
703
+ type: 'transportResponse';
704
+ requestId: number;
705
+ ok: boolean;
706
+ state?: EngineTransportState;
707
+ error?: string;
708
+ }
709
+ export {};
710
+ //# sourceMappingURL=messages.d.ts.map