@ultrst-armada/kloks 0.0.0-stage → 1.0.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 (109) hide show
  1. package/README.md +2 -3
  2. package/index.d.ts +5 -0
  3. package/index.js +5 -0
  4. package/package.json +122 -4
  5. package/packages/audio-midi/dist/audioClipEngine-BOT33JKI.js +9 -0
  6. package/packages/audio-midi/dist/audioInputManager-BLDGGLAR.js +12 -0
  7. package/packages/audio-midi/dist/chunk-3GRGELA4.js +2533 -0
  8. package/packages/audio-midi/dist/chunk-N55BWOC6.js +439 -0
  9. package/packages/audio-midi/dist/index.d.ts +988 -0
  10. package/packages/audio-midi/dist/index.js +2591 -0
  11. package/packages/audio-midi/kloks.manifest.json +69 -0
  12. package/packages/audio-midi/package.json +33 -0
  13. package/packages/backend/dist/BaseAccountProvider-DduKf5HG.d.ts +66 -0
  14. package/packages/backend/dist/BaseStorageAdapter-tosOoSUg.d.ts +67 -0
  15. package/packages/backend/dist/IdempotencyManager-B5MjK871.d.ts +16 -0
  16. package/packages/backend/dist/WebSocketTransport-CxUzUfwl.d.ts +255 -0
  17. package/packages/backend/dist/api/index.d.ts +32 -0
  18. package/packages/backend/dist/api/index.js +12 -0
  19. package/packages/backend/dist/auth/index.d.ts +56 -0
  20. package/packages/backend/dist/auth/index.js +22 -0
  21. package/packages/backend/dist/chunk-25Y7AVTP.js +55 -0
  22. package/packages/backend/dist/chunk-3EPY34R6.js +67 -0
  23. package/packages/backend/dist/chunk-4QEMALXF.js +90 -0
  24. package/packages/backend/dist/chunk-4ZFXEFOE.js +265 -0
  25. package/packages/backend/dist/chunk-53WQNION.js +278 -0
  26. package/packages/backend/dist/chunk-5MUQSPG4.js +149 -0
  27. package/packages/backend/dist/chunk-FZKBTF34.js +15 -0
  28. package/packages/backend/dist/chunk-G3ZOSXUR.js +31 -0
  29. package/packages/backend/dist/chunk-J2J24JVC.js +731 -0
  30. package/packages/backend/dist/chunk-KPUGS64G.js +221 -0
  31. package/packages/backend/dist/chunk-KTLD7Z4L.js +124 -0
  32. package/packages/backend/dist/chunk-LS3HWJBX.js +0 -0
  33. package/packages/backend/dist/chunk-MN54ZIKZ.js +336 -0
  34. package/packages/backend/dist/chunk-NIP22V2G.js +828 -0
  35. package/packages/backend/dist/chunk-QGHDJGYS.js +92 -0
  36. package/packages/backend/dist/chunk-RCCQ7IRM.js +139 -0
  37. package/packages/backend/dist/chunk-T3NYNBDC.js +618 -0
  38. package/packages/backend/dist/chunk-TWCEVES2.js +93 -0
  39. package/packages/backend/dist/chunk-UPFKBBQI.js +138 -0
  40. package/packages/backend/dist/chunk-VQEFULWT.js +88 -0
  41. package/packages/backend/dist/client/index.d.ts +22 -0
  42. package/packages/backend/dist/client/index.js +30 -0
  43. package/packages/backend/dist/connectivity/index.d.ts +237 -0
  44. package/packages/backend/dist/connectivity/index.js +50 -0
  45. package/packages/backend/dist/control-plane/index.d.ts +56 -0
  46. package/packages/backend/dist/control-plane/index.js +16 -0
  47. package/packages/backend/dist/execution/index.d.ts +124 -0
  48. package/packages/backend/dist/execution/index.js +20 -0
  49. package/packages/backend/dist/index.d.ts +692 -0
  50. package/packages/backend/dist/index.js +3299 -0
  51. package/packages/backend/dist/krnl-services.d.ts +82 -0
  52. package/packages/backend/dist/krnl-services.js +38 -0
  53. package/packages/backend/dist/services/index.d.ts +66 -0
  54. package/packages/backend/dist/services/index.js +17 -0
  55. package/packages/backend/dist/srkl/index.d.ts +191 -0
  56. package/packages/backend/dist/srkl/index.js +19 -0
  57. package/packages/backend/dist/storage/index.d.ts +124 -0
  58. package/packages/backend/dist/storage/index.js +43 -0
  59. package/packages/backend/dist/types-BERZJ93O.d.ts +110 -0
  60. package/packages/backend/dist/workspace/index.d.ts +111 -0
  61. package/packages/backend/dist/workspace/index.js +16 -0
  62. package/packages/backend/kloks.manifest.json +195 -0
  63. package/packages/backend/package.json +125 -0
  64. package/packages/functions/dist/index.d.ts +388 -0
  65. package/packages/functions/dist/index.js +1201 -0
  66. package/packages/functions/kloks.manifest.json +20 -0
  67. package/packages/functions/package.json +33 -0
  68. package/packages/orchestrations/dist/index.d.ts +53 -0
  69. package/packages/orchestrations/dist/index.js +211 -0
  70. package/packages/orchestrations/kloks.manifest.json +23 -0
  71. package/packages/orchestrations/package.json +35 -0
  72. package/packages/services/dist/index.d.ts +334 -0
  73. package/packages/services/dist/index.js +1597 -0
  74. package/packages/services/kloks.manifest.json +59 -0
  75. package/packages/services/package.json +33 -0
  76. package/packages/state-graph/dist/BaseConnection-CMRrL6Fe.d.ts +43 -0
  77. package/packages/state-graph/dist/BaseGraph-Bl2f7Pqx.d.ts +98 -0
  78. package/packages/state-graph/dist/BaseNode-1HCEqmap.d.ts +123 -0
  79. package/packages/state-graph/dist/CompatibilityMatrix-DX307_vS.d.ts +29 -0
  80. package/packages/state-graph/dist/TraceEngine-CJVpUb80.d.ts +18 -0
  81. package/packages/state-graph/dist/chunk-3RG5ZIWI.js +10 -0
  82. package/packages/state-graph/dist/chunk-4UVGXFEM.js +465 -0
  83. package/packages/state-graph/dist/chunk-ISFNY7EZ.js +61 -0
  84. package/packages/state-graph/dist/chunk-KG6QYS26.js +167 -0
  85. package/packages/state-graph/dist/chunk-OV4JVTNY.js +147 -0
  86. package/packages/state-graph/dist/chunk-OYN4ZEZC.js +54 -0
  87. package/packages/state-graph/dist/chunk-Q5I42UX7.js +0 -0
  88. package/packages/state-graph/dist/chunk-QN74PLMF.js +241 -0
  89. package/packages/state-graph/dist/chunk-S22PMERU.js +223 -0
  90. package/packages/state-graph/dist/chunk-SHIBCPGQ.js +269 -0
  91. package/packages/state-graph/dist/chunk-YTWCH6P2.js +109 -0
  92. package/packages/state-graph/dist/chunk-ZTHBPV24.js +267 -0
  93. package/packages/state-graph/dist/domain/index.d.ts +117 -0
  94. package/packages/state-graph/dist/domain/index.js +45 -0
  95. package/packages/state-graph/dist/execution/index.d.ts +152 -0
  96. package/packages/state-graph/dist/execution/index.js +16 -0
  97. package/packages/state-graph/dist/index-CiekWEH3.d.ts +272 -0
  98. package/packages/state-graph/dist/index.d.ts +3170 -0
  99. package/packages/state-graph/dist/index.js +9574 -0
  100. package/packages/state-graph/dist/rules/index.d.ts +86 -0
  101. package/packages/state-graph/dist/rules/index.js +17 -0
  102. package/packages/state-graph/dist/spatial/index.d.ts +55 -0
  103. package/packages/state-graph/dist/spatial/index.js +21 -0
  104. package/packages/state-graph/dist/state/index.d.ts +109 -0
  105. package/packages/state-graph/dist/state/index.js +20 -0
  106. package/packages/state-graph/dist/store/index.d.ts +6 -0
  107. package/packages/state-graph/dist/store/index.js +15 -0
  108. package/packages/state-graph/kloks.manifest.json +40 -0
  109. package/packages/state-graph/package.json +73 -0
@@ -0,0 +1,988 @@
1
+ import * as _dinilmusick_krnl from '@dinilmusick/krnl';
2
+ import { ServiceDefinition, IService } from '@dinilmusick/krnl';
3
+ import { INodeVisuals, SpaceNode, NodeConnection, MidiNote, SynthPreset, ContainerNode, PlayerNode, SamplePresetType, AudioTrackData, HardwareChannelInfo, NamedAudioBus, AudioDeviceInfo, ConnectionsConfig, MidiInputDevice, StoredPacket, RecorderNode, CurveTrackData, CurvePoint, EffectNode, CompressorEffectConfig, MultibandCompressorEffectConfig } from '@ultrst-armada/kloks/state-graph';
4
+
5
+ /**
6
+ * Pro-Audio Hardware Input/Output Manager (Named Bus Architecture)
7
+ * Enforces raw pro-audio streams, channel splitting, output sink routing, and hot-plugging.
8
+ */
9
+ interface AudioDeviceDescriptor {
10
+ deviceId: string;
11
+ label: string;
12
+ kind: MediaDeviceKind;
13
+ groupId: string;
14
+ }
15
+ interface AudioBusConfig {
16
+ name: string;
17
+ targetDeviceId?: string;
18
+ channelCount?: number;
19
+ sampleRate?: number;
20
+ }
21
+ interface AudioHardwareState {
22
+ isInitialized: boolean;
23
+ activeDeviceId: string | null;
24
+ channelCount: number;
25
+ availableDevices: AudioDeviceDescriptor[];
26
+ sampleRate: number;
27
+ state: AudioContextState;
28
+ }
29
+ type AudioStateListener = (state: AudioHardwareState) => void;
30
+ declare class AudioInputManager$1 {
31
+ private audioCtx;
32
+ private mediaStream;
33
+ private sourceNode;
34
+ private channelSplitter;
35
+ private namedBuses;
36
+ private listeners;
37
+ private availableDevices;
38
+ private activeDeviceId;
39
+ private isDeviceChangeBound;
40
+ constructor();
41
+ /**
42
+ * Initializes audio hardware. MUST be gated behind explicit user gesture.
43
+ */
44
+ initialize(config?: AudioBusConfig): Promise<void>;
45
+ /**
46
+ * Connects raw pro-audio input stream strictly disabling consumer audio processing.
47
+ */
48
+ connectAudioStream(config: AudioBusConfig): Promise<void>;
49
+ /**
50
+ * Accesses a discrete physical channel output from the channel splitter.
51
+ */
52
+ getChannelOutput(channelIndex: number, busName?: string): AudioNode;
53
+ /**
54
+ * Routes audio element output to a specific device sinkId (monitors/headphones).
55
+ */
56
+ routeOutputSink(audioElement: HTMLMediaElement, deviceId: string): Promise<void>;
57
+ /**
58
+ * Enumerates audio input and output devices.
59
+ */
60
+ refreshDeviceList(): Promise<AudioDeviceDescriptor[]>;
61
+ getNamedBus(name: string): AudioNode | undefined;
62
+ getAudioContext(): AudioContext | null;
63
+ getState(): AudioHardwareState;
64
+ subscribe(listener: AudioStateListener): () => void;
65
+ dispose(): Promise<void>;
66
+ private handleDeviceChange;
67
+ private notifyListeners;
68
+ private assertIframePermissions;
69
+ private handleAudioError;
70
+ }
71
+
72
+ /**
73
+ * Pro-MIDI Subsystem (Reactive Port Binding & Virtual Loopback)
74
+ * Translates raw byte arrays into high-level MidiEventPayloads, handles hot-plugging and virtual emitting.
75
+ */
76
+ type MidiCommandType = 'NOTE_ON' | 'NOTE_OFF' | 'CONTROL_CHANGE' | 'PITCH_BEND' | 'PROGRAM_CHANGE' | 'CHANNEL_PRESSURE' | 'POLY_PRESSURE' | 'CLOCK' | 'START' | 'STOP' | 'CONTINUE' | 'SYSEX' | 'UNKNOWN';
77
+ interface MidiEventPayload$1 {
78
+ command: MidiCommandType;
79
+ channel: number;
80
+ note?: number;
81
+ velocity?: number;
82
+ controller?: number;
83
+ value?: number;
84
+ rawBytes: Uint8Array;
85
+ timestamp: number;
86
+ sourceId: string;
87
+ sourceName: string;
88
+ }
89
+ interface MidiPortDescriptor {
90
+ id: string;
91
+ name: string;
92
+ manufacturer?: string;
93
+ type: 'input' | 'output';
94
+ state: string;
95
+ connection: string;
96
+ }
97
+ interface MidiSubsystemState {
98
+ isSupported: boolean;
99
+ isInitialized: boolean;
100
+ inputs: MidiPortDescriptor[];
101
+ outputs: MidiPortDescriptor[];
102
+ sysexEnabled: boolean;
103
+ }
104
+ type MidiEventListener = (event: MidiEventPayload$1) => void;
105
+ type MidiStateListener = (state: MidiSubsystemState) => void;
106
+ declare class MidiManager$1 {
107
+ private midiAccess;
108
+ private eventListeners;
109
+ private stateListeners;
110
+ private boundInputs;
111
+ private isInitialized;
112
+ constructor();
113
+ /**
114
+ * Initializes Web MIDI access. MUST be gated behind explicit user gesture.
115
+ */
116
+ initialize(options?: {
117
+ sysex?: boolean;
118
+ software?: boolean;
119
+ }): Promise<void>;
120
+ /**
121
+ * Reactive hot-plug port binding handler.
122
+ */
123
+ private handleStateChange;
124
+ /**
125
+ * Binds all existing input ports upon initialization.
126
+ */
127
+ private bindExistingPorts;
128
+ /**
129
+ * Binds onmidimessage handler to a specific MIDIInput port.
130
+ */
131
+ bindMidiPort(port: MIDIInput): void;
132
+ /**
133
+ * Virtual MIDI Loopback: On-screen UI components (virtual keyboards, sequencers)
134
+ * can trigger the exact same event streams as physical hardware.
135
+ */
136
+ emitVirtualMidi(payload: Partial<MidiEventPayload$1> & {
137
+ command: MidiCommandType;
138
+ }): void;
139
+ /**
140
+ * Translates raw byte arrays into high-level MidiEventPayload.
141
+ */
142
+ parseRawMidiBytes(bytes: Uint8Array, sourceId: string, sourceName: string, timestamp: number): MidiEventPayload$1;
143
+ private synthesizeRawBytes;
144
+ subscribeEvents(listener: MidiEventListener): () => void;
145
+ subscribeState(listener: MidiStateListener): () => void;
146
+ getState(): MidiSubsystemState;
147
+ dispose(): void;
148
+ private dispatchEvent;
149
+ private notifyState;
150
+ private assertIframePermissions;
151
+ private handleMidiError;
152
+ }
153
+
154
+ interface AudioEngineConfig {
155
+ sampleRate: number;
156
+ bufferSize: number;
157
+ }
158
+
159
+ declare class SynthEngine {
160
+ private ctx;
161
+ private masterGain;
162
+ private delayNode;
163
+ private delayFeedback;
164
+ private delayGain;
165
+ private reverbNode;
166
+ private reverbGain;
167
+ analyser: AnalyserNode | null;
168
+ analyserL: AnalyserNode | null;
169
+ analyserR: AnalyserNode | null;
170
+ private analyserBuffer;
171
+ private analyserBufferL;
172
+ private analyserBufferR;
173
+ masterSplitter: ChannelSplitterNode | null;
174
+ nodeVisuals: INodeVisuals | null;
175
+ private isInitialized;
176
+ private nodeActiveUntilMap;
177
+ private audioEngineConfig;
178
+ private graphNodeMap;
179
+ private loadAudioConfig;
180
+ getAudioEngineConfig(): AudioEngineConfig;
181
+ updateAudioSettings(newConfig: Partial<AudioEngineConfig>): Promise<void>;
182
+ reinitContext(): Promise<void>;
183
+ activeNodes: SpaceNode[];
184
+ activeConnections: NodeConnection[];
185
+ lastPlayedMidiNote: {
186
+ note: number;
187
+ velocity: number;
188
+ timestamp: number;
189
+ } | null;
190
+ updateActiveGraph(nodes: SpaceNode[], connections: NodeConnection[]): void;
191
+ /**
192
+ * Evaluates reachability from a given nodeId to an active, unmuted AudioOutputNode.
193
+ * Traverses activeConnections, effect/routing chains, and module boundaries.
194
+ */
195
+ checkGraphReachabilityToOutput(nodeId: string): boolean;
196
+ /**
197
+ * Authority Check:
198
+ * Queries the BaseAudioGraphNode instance. Structural rule enforces that no node
199
+ * is allowed to emit sound to master unless authorized via an active connection to AudioOutputNode.
200
+ */
201
+ isNodeConnectedToOutput(nodeId: string): boolean;
202
+ init(forceRecreate?: boolean): void;
203
+ playAuditionTestPulse(): void;
204
+ getAudioLevel(): number;
205
+ getStereoLevels(): {
206
+ left: number;
207
+ right: number;
208
+ };
209
+ isNodeActive(nodeId: string): boolean;
210
+ markNodeActive(nodeId: string, durationSec?: number): void;
211
+ private audioInputLevelProvider;
212
+ registerAudioInputLevelProvider(provider: (busId: string) => number): void;
213
+ getWireSignalLevel(sourceNode: any, fromPort?: string): {
214
+ left: number;
215
+ right: number;
216
+ };
217
+ setOutputRouting(routingId: string): void;
218
+ setOutputDevice(deviceId: string): Promise<boolean>;
219
+ setMasterVolume(vol: number): void;
220
+ getContext(): AudioContext;
221
+ getMasterNode(): GainNode;
222
+ getGainAndPanForNode(nodeId: string): {
223
+ volumeScale: number;
224
+ panOffset: number;
225
+ effectIds: string[];
226
+ };
227
+ /**
228
+ * Chains audio through all active DSP effect nodes (EQ, Compressor, Multiband, Limiter, Reverb, Delay, Saturation)
229
+ * and fans out to any compressors/multiband compressors that have sidechain active with this node as source.
230
+ */
231
+ routeAudioThroughNodeEffects(audioNode: AudioNode, nodeId?: string): AudioNode;
232
+ playNote(note: MidiNote, preset: SynthPreset, startTimeOffset?: number, containerId?: string): void;
233
+ private playSamplerNote;
234
+ private playInstrumentNote;
235
+ }
236
+ declare const synthEngine: SynthEngine;
237
+
238
+ declare class SequencerEngine {
239
+ bpm: number;
240
+ isPlaying: boolean;
241
+ currentBeat: number;
242
+ private timerId;
243
+ private lastTickTime;
244
+ nodeVisuals: INodeVisuals | null;
245
+ private activeContainerPlayheads;
246
+ nodes: SpaceNode[];
247
+ connections: NodeConnection[];
248
+ syncNodesAndConnections(nodes: SpaceNode[], connections: NodeConnection[]): void;
249
+ start(nodes: SpaceNode[], connections: NodeConnection[], onTriggerFired?: (triggerId: string, targetContainerIds: string[]) => void): void;
250
+ stop(): void;
251
+ private processStep;
252
+ private processTriggerWiresWithEffects;
253
+ handleContainerPlayStop(container: ContainerNode): void;
254
+ handleContainerPlayPause(container: ContainerNode): void;
255
+ toggleContainerRecord(container: ContainerNode): void;
256
+ fireTrigger(trig: SpaceNode, connections: NodeConnection[], containerMap: Map<string, ContainerNode>, onTriggerFired?: (triggerId: string, targetContainerIds: string[]) => void, allNodes?: SpaceNode[]): void;
257
+ handlePlayerStart(player: PlayerNode, container?: ContainerNode | null): void;
258
+ handlePlayerStop(player: PlayerNode): void;
259
+ manualTriggerContainer(container: ContainerNode): void;
260
+ }
261
+ declare const sequencerEngine: SequencerEngine;
262
+
263
+ declare function playContainerNoteWithEffects(container: ContainerNode, note: any, nodes: SpaceNode[], connections: NodeConnection[], bpm: number, isPlaying: boolean, nodeVisuals: INodeVisuals | null): void;
264
+ declare function processActiveContainers(activeContainerPlayheads: Map<string, {
265
+ startBeat: number;
266
+ pausedOffset?: number;
267
+ }>, containerMap: Map<string, ContainerNode>, prevBeat: number, currBeat: number, nodes: SpaceNode[], connections: NodeConnection[], bpm: number, isPlaying: boolean, nodeVisuals: INodeVisuals | null): void;
268
+
269
+ interface ActiveTrackPlayback {
270
+ trackId?: string;
271
+ source?: AudioBufferSourceNode;
272
+ sourceNode?: AudioBufferSourceNode;
273
+ gainNode?: GainNode;
274
+ startTime: number;
275
+ startSec?: number;
276
+ duration?: number;
277
+ playDuration: number;
278
+ secPerBeat: number;
279
+ loop?: boolean;
280
+ [key: string]: any;
281
+ }
282
+ interface ActiveAuditionPlayback {
283
+ url?: string;
284
+ source: AudioBufferSourceNode;
285
+ sourceNode?: AudioBufferSourceNode;
286
+ gainNode?: GainNode;
287
+ startTime: number;
288
+ duration: number;
289
+ [key: string]: any;
290
+ }
291
+
292
+ declare class AudioClipEngine {
293
+ private bufferCache;
294
+ private maxCacheSize;
295
+ private loadingPromises;
296
+ private activeSources;
297
+ private activePlaybacks;
298
+ private activeAudition;
299
+ getContext(): AudioContext;
300
+ private setBufferCacheEntry;
301
+ getOrCreatePresetBuffer(sampleType: SamplePresetType): AudioBuffer;
302
+ extractWaveformData(buffer: AudioBuffer, numPoints?: number): number[];
303
+ loadSampleFromUrl(url: string): Promise<{
304
+ buffer: AudioBuffer;
305
+ peaks: number[];
306
+ }>;
307
+ getOrLoadBuffer(sampleType: SamplePresetType, customUrl?: string): Promise<AudioBuffer>;
308
+ auditionSampleUrl(url: string, onEnded?: () => void): Promise<void>;
309
+ stopAudition(): void;
310
+ getAuditionProgress(): {
311
+ isPlaying: boolean;
312
+ progress: number;
313
+ };
314
+ playAudioTrack(track: AudioTrackData, bpm: number, destination?: AudioNode, containerId?: string, offsetBeats?: number, volumeScale?: number, panOffset?: number): Promise<void>;
315
+ getTrackPlaybackProgress(trackId: string): {
316
+ isPlaying: boolean;
317
+ progress: number;
318
+ currentBeat: number;
319
+ elapsedSec: number;
320
+ };
321
+ stopAudioTrack(trackId: string): void;
322
+ loadAudioFile(file: File): Promise<{
323
+ buffer: AudioBuffer;
324
+ peaks: number[];
325
+ url: string;
326
+ }>;
327
+ startRecording(node: any, currentBeat: number, onUpdateNode?: (updated: any) => void): void;
328
+ stopRecordingToContainer(node: any, targetContainer: any | any[] | null, onUpdateNode?: (updated: any) => void): void;
329
+ }
330
+ declare const audioClipEngine: AudioClipEngine;
331
+
332
+ interface HardwareProfileResult {
333
+ detectedInputChannels: number;
334
+ detectedOutputChannels: number;
335
+ interfaceModelName: string;
336
+ isKnownInterface: boolean;
337
+ channelDescriptions: Record<number, string>;
338
+ outputDescriptions: Record<string, string>;
339
+ }
340
+ interface OutputChannelInfo {
341
+ id: string;
342
+ label: string;
343
+ shortLabel: string;
344
+ isStereo: boolean;
345
+ channels: number[];
346
+ }
347
+ declare function detectHardwareProfile(inputLabel: string, outputLabel: string, trackSettings?: MediaTrackSettings, trackCapabilities?: any, destMaxChannels?: number): HardwareProfileResult;
348
+ declare function buildInputChannelList(totalChannels: number, descriptions?: Record<number, string>): HardwareChannelInfo[];
349
+ declare function buildOutputChannelList(totalChannels: number, descriptions?: Record<string, string>): OutputChannelInfo[];
350
+
351
+ declare const DEFAULT_NAMED_BUSSES: NamedAudioBus[];
352
+
353
+ declare const DEFAULT_NAMED_INPUTS: NamedAudioBus[];
354
+ declare class AudioInputManager {
355
+ private audioCtx;
356
+ mediaStream: MediaStream | null;
357
+ private sourceNode;
358
+ private busDriver;
359
+ private isListening;
360
+ private listeners;
361
+ namedInputs: NamedAudioBus[];
362
+ selectedDeviceId: string;
363
+ selectedOutputDeviceId: string;
364
+ hardwareChannelCount: number;
365
+ detectedTrackChannelCount: number;
366
+ isHardwareAutoDetected: boolean;
367
+ detectedInterfaceName: string;
368
+ activeProfile: HardwareProfileResult | null;
369
+ availableDevices: AudioDeviceInfo[];
370
+ availableOutputDevices: AudioDeviceInfo[];
371
+ lastError: string | null;
372
+ constructor();
373
+ private registerWithSynthEngine;
374
+ private initDeviceChangeListener;
375
+ subscribe(listener: () => void): () => void;
376
+ notifyListeners(): void;
377
+ isConnected(): boolean;
378
+ get isAudioActive(): boolean;
379
+ loadConfig(): ConnectionsConfig;
380
+ saveConfig(config?: Partial<ConnectionsConfig>): void;
381
+ enumerateAudioDevices(): Promise<{
382
+ inputs: AudioDeviceInfo[];
383
+ outputs: AudioDeviceInfo[];
384
+ }>;
385
+ refreshHardwareProfile(): void;
386
+ selectNativeAudioOutput(): Promise<boolean>;
387
+ getLastError(): string | null;
388
+ clearError(): void;
389
+ initAudioStream(deviceId?: string): Promise<boolean>;
390
+ reconnectStream(): Promise<void>;
391
+ setOutputDevice(deviceId: string): Promise<boolean>;
392
+ getAvailableInputChannels(): HardwareChannelInfo[];
393
+ getAvailableOutputChannels(): OutputChannelInfo[];
394
+ getActiveDeviceLabel(): string;
395
+ getActiveOutputDeviceLabel(): string;
396
+ getChannelLevel(channel: number): number;
397
+ syncEndpointsToRegistry(): void;
398
+ getBusLevel(busId: string): number;
399
+ getInputLevel(inputId: string): number;
400
+ setNamedInputs(inputs: NamedAudioBus[]): void;
401
+ addNamedBus(bus: NamedAudioBus): void;
402
+ addNamedInput(input: NamedAudioBus): void;
403
+ addInputBus(): NamedAudioBus;
404
+ addOutputBus(): NamedAudioBus;
405
+ updateNamedInput(updated: NamedAudioBus): void;
406
+ deleteNamedInput(id: string): void;
407
+ updateMonitoringConnections(nodes: SpaceNode[], connections: NodeConnection[]): void;
408
+ stopStream(): void;
409
+ }
410
+ declare const audioInputManager: AudioInputManager;
411
+
412
+ interface MidiEventPayload {
413
+ type: 'noteon' | 'noteoff' | 'cc' | 'pitchbend' | 'aftertouch' | 'programchange';
414
+ note: number;
415
+ noteName: string;
416
+ velocity: number;
417
+ channel: number;
418
+ deviceId?: string;
419
+ deviceName?: string;
420
+ controller?: number;
421
+ value?: number;
422
+ timestamp: number;
423
+ }
424
+ type MidiStatus = 'uninitialized' | 'requesting' | 'connected' | 'denied' | 'unsupported';
425
+ type MidiListener = (event: MidiEventPayload) => void;
426
+ type DeviceListener = (devices: MidiInputDevice[]) => void;
427
+ type StatusListener = (status: MidiStatus, message: string) => void;
428
+
429
+ declare class MidiManager {
430
+ private midiAccess;
431
+ private listeners;
432
+ private deviceListeners;
433
+ private statusListeners;
434
+ isSupported: boolean;
435
+ status: MidiStatus;
436
+ statusMessage: string;
437
+ devices: MidiInputDevice[];
438
+ lastEvent: MidiEventPayload | null;
439
+ private isRequesting;
440
+ init(userTriggered?: boolean): Promise<boolean>;
441
+ refreshDevices(): void;
442
+ private handleMidiMessage;
443
+ emitVirtualMidi(payload: MidiEventPayload): void;
444
+ addListener(fn: MidiListener): () => void;
445
+ addMessageListener(fn: MidiListener): () => void;
446
+ sendControlChange(channel: number, controller: number, value: number, outputId?: string): void;
447
+ sendNoteOn(channel: number, note: number, velocity?: number, outputId?: string): void;
448
+ sendNoteOff(channel: number, note: number, outputId?: string): void;
449
+ addDeviceListener(fn: DeviceListener): () => void;
450
+ addStatusListener(fn: StatusListener): () => void;
451
+ private setStatus;
452
+ }
453
+ declare const midiManager: MidiManager;
454
+
455
+ interface BufferedMidiEvent {
456
+ note: number;
457
+ name: string;
458
+ velocity: number;
459
+ beat: number;
460
+ duration: number;
461
+ cycleIndex: number;
462
+ timestamp: number;
463
+ }
464
+ interface BufferedAudioPeak {
465
+ beat: number;
466
+ peakL: number;
467
+ peakR: number;
468
+ cycleIndex: number;
469
+ timestamp: number;
470
+ }
471
+ interface BufferedCurvePoint {
472
+ id: string;
473
+ x: number;
474
+ y: number;
475
+ tension: number;
476
+ cycleIndex: number;
477
+ beat: number;
478
+ }
479
+ interface RetrospectiveCycleInfo {
480
+ bufferBeats: number;
481
+ currentCycleIndex: number;
482
+ beatInCurrentCycle: number;
483
+ cycleProgress: number;
484
+ captureBoundaryBeats: number;
485
+ captureBoundaryRatio: number;
486
+ isAfterBoundary: boolean;
487
+ targetedCycleIndex: number;
488
+ isPreviousCycleAvailable: boolean;
489
+ activeEventsInCurrentCycle: number;
490
+ activeEventsInPreviousCycle: number;
491
+ }
492
+ type SnapshotListener = (recorderId: string, packet: StoredPacket, containerId?: string) => void;
493
+
494
+ declare class RetrospectiveBufferEngine {
495
+ private midiHistory;
496
+ private audioHistory;
497
+ private curveHistory;
498
+ private snapshotListeners;
499
+ /**
500
+ * Subscribes to capture snapshots for visual feedback
501
+ */
502
+ onSnapshotCaptured(listener: SnapshotListener): () => void;
503
+ private notifySnapshotCaptured;
504
+ /**
505
+ * Calculates effective buffer duration entirely in musical clock units:
506
+ * buffer_length = bars * 4 + beats + (beat_fractions / 64)
507
+ */
508
+ getEffectiveBufferLengthBeats(node: RecorderNode): number;
509
+ /**
510
+ * Calculates capture boundary in beats within a cycle
511
+ */
512
+ getCaptureBoundaryBeats(node: RecorderNode, bufferBeats: number): number;
513
+ /**
514
+ * Evaluates the rolling ring-buffer cycle state and boundary determination for a recorder
515
+ */
516
+ getCycleInfo(node: RecorderNode, currentBeat: number): RetrospectiveCycleInfo;
517
+ /**
518
+ * Ingests continuous live audio peak into the continuous rolling ring buffer
519
+ */
520
+ recordAudioPeak(recorderId: string, peakL: number, peakR: number, currentBeat: number, bufferBeats?: number): void;
521
+ /**
522
+ * Gets live audio peaks for circular ring display
523
+ */
524
+ getAudioPeaksForRecorder(recorderId: string): BufferedAudioPeak[];
525
+ /**
526
+ * Ingests a live MIDI note event into the continuous rolling ring buffer
527
+ */
528
+ recordMidiEvent(recorderId: string, evt: MidiEventPayload, currentBeat: number, durationBeats?: number, bufferBeats?: number): void;
529
+ /**
530
+ * Gets live MIDI events for circular ring display
531
+ */
532
+ getMidiEventsForRecorder(recorderId: string): BufferedMidiEvent[];
533
+ /**
534
+ * Ingests a live CV curve point into the continuous rolling ring buffer
535
+ */
536
+ recordCurvePoint(recorderId: string, value: number, currentBeat: number, bufferBeats?: number): void;
537
+ /**
538
+ * Captures a quantized snapshot take from the continuous ring buffer
539
+ * and pushes it to connected Containers, replacing their previous packet.
540
+ * Ring buffer CONTINUES operating normally without stopping or clearing.
541
+ */
542
+ captureSnapshot(node: RecorderNode, targetContainers: ContainerNode | ContainerNode[] | null, triggerBeat: number, bpm?: number, onUpdateNode?: (updated: RecorderNode) => void, onUpdateContainer?: (updated: ContainerNode) => void): {
543
+ packet: StoredPacket;
544
+ updatedNode: RecorderNode;
545
+ updatedContainers: ContainerNode[];
546
+ };
547
+ /**
548
+ * Resets buffer history for a recorder (if removed or reset manually)
549
+ */
550
+ clearBuffer(recorderId: string): void;
551
+ }
552
+ declare const retrospectiveBufferEngine: RetrospectiveBufferEngine;
553
+
554
+ /**
555
+ * ============================================================================
556
+ * Audio Graph Node Authority & Inheritance Hierarchy
557
+ * ============================================================================
558
+ *
559
+ * STRICT ARCHITECTURAL INVARIANT:
560
+ * No individual node in the graph (MIDI Instruments, Samplers, Audio Containers,
561
+ * Synthesizers, Inputs, Effects) has direct access or authority to emit audio
562
+ * directly into the application's master audio output (speakers / AudioContext.destination).
563
+ *
564
+ * Direct emission capability is structurally disabled (`canEmitDirectlyToMaster() === false`)
565
+ * on the base class and all standard node subclasses.
566
+ *
567
+ * The ONLY class in this entire hierarchy permitted to emit to the hardware master output
568
+ * is `MasterAudioOutputGraphNode`.
569
+ *
570
+ * For all other nodes, audio emission is STRUCTURALLY IMPOSSIBLE unless an active, unmuted,
571
+ * valid graph path connects the node's output to an active `MasterAudioOutputGraphNode`.
572
+ */
573
+ declare abstract class BaseAudioGraphNode {
574
+ abstract readonly id: string;
575
+ abstract readonly nodeType: string;
576
+ /**
577
+ * Root capability flag.
578
+ * By rule, base nodes CANNOT emit directly to the master output.
579
+ */
580
+ canEmitDirectlyToMaster(): boolean;
581
+ /**
582
+ * Evaluates if this node is structurally authorized to emit audio.
583
+ * Standard nodes must prove reachability to a MasterAudioOutputGraphNode
584
+ * through the active graph connection topology.
585
+ */
586
+ isAuthorizedToEmit(graphReachabilityChecker: (nodeId: string) => boolean): boolean;
587
+ }
588
+ /**
589
+ * Master Audio Output Graph Node (Output Strip)
590
+ * The ONLY class in the graph authorized to emit directly to master hardware output.
591
+ */
592
+ declare class MasterAudioOutputGraphNode extends BaseAudioGraphNode {
593
+ readonly id: string;
594
+ active: boolean;
595
+ readonly nodeType = "output_strip";
596
+ constructor(id: string, active?: boolean);
597
+ canEmitDirectlyToMaster(): boolean;
598
+ }
599
+ /**
600
+ * Base class for all audio source nodes (signal producers).
601
+ */
602
+ declare abstract class BaseSourceAudioGraphNode extends BaseAudioGraphNode {
603
+ readonly isSourceNode = true;
604
+ }
605
+ /**
606
+ * MIDI Instrument VST Node (Plugin Nexus)
607
+ * STRICT RULE: Cannot emit audio directly to master output without a connection to AudioOutputNode.
608
+ */
609
+ declare class MidiInstrumentGraphNode extends BaseSourceAudioGraphNode {
610
+ readonly id: string;
611
+ readonly pluginId: string;
612
+ volume: number;
613
+ readonly nodeType = "instrument";
614
+ constructor(id: string, pluginId?: string, volume?: number);
615
+ }
616
+ /**
617
+ * Audio Container Node (Recorded / Sample Audio Clips)
618
+ * STRICT RULE: Cannot emit audio directly to master output without a connection to AudioOutputNode.
619
+ */
620
+ declare class AudioContainerGraphNode extends BaseSourceAudioGraphNode {
621
+ readonly id: string;
622
+ readonly audioFormat: 'mono' | 'stereo';
623
+ readonly nodeType = "audio";
624
+ constructor(id: string, audioFormat?: 'mono' | 'stereo');
625
+ }
626
+ /**
627
+ * MIDI Synth Container Node
628
+ * STRICT RULE: Cannot emit audio directly to master output without a connection to AudioOutputNode.
629
+ */
630
+ declare class MidiContainerGraphNode extends BaseSourceAudioGraphNode {
631
+ readonly id: string;
632
+ readonly nodeType = "midi";
633
+ constructor(id: string);
634
+ }
635
+ /**
636
+ * Base class for all audio processor / DSP nodes (Effects, Combiners, Multiplexers, Converters).
637
+ */
638
+ declare abstract class BaseProcessorAudioGraphNode extends BaseAudioGraphNode {
639
+ readonly isProcessorNode = true;
640
+ }
641
+ /**
642
+ * Effect DSP Node (Delay, Reverb, Repeater, Gain, etc.)
643
+ */
644
+ declare class EffectProcessorGraphNode extends BaseProcessorAudioGraphNode {
645
+ readonly id: string;
646
+ readonly effectType: string;
647
+ active: boolean;
648
+ readonly nodeType = "effect";
649
+ constructor(id: string, effectType: string, active?: boolean);
650
+ }
651
+ /**
652
+ * Signal Router Node (Combiner / Multiplexer / Converter)
653
+ */
654
+ declare class SignalRouterGraphNode extends BaseProcessorAudioGraphNode {
655
+ readonly id: string;
656
+ active: boolean;
657
+ readonly nodeType: 'combiner' | 'multiplexer' | 'converter';
658
+ constructor(id: string, type: 'combiner' | 'multiplexer' | 'converter', active?: boolean);
659
+ }
660
+ /**
661
+ * Factory to construct the corresponding strongly-typed graph node instance
662
+ * for any generic SpaceNode.
663
+ */
664
+ declare function createAudioGraphNode(node: SpaceNode): BaseAudioGraphNode;
665
+
666
+ declare function generatePresetAudioBuffer(ctx: AudioContext, sampleType: SamplePresetType): AudioBuffer;
667
+
668
+ declare class CurveEngine {
669
+ evaluateCurve(curve: CurveTrackData, currentBeat: number): number;
670
+ generatePresetPoints(type: 'sine' | 'triangle' | 'saw_up' | 'saw_down' | 'exp_rise' | 'exp_fall' | 'step', lengthInBeats: number): CurvePoint[];
671
+ applyModulation(curve: CurveTrackData, valNorm: number, nodes: SpaceNode[], onUpdateNode?: (node: SpaceNode) => void): void;
672
+ }
673
+ declare const curveEngine: CurveEngine;
674
+
675
+ interface KnownDevicePattern {
676
+ pattern: RegExp;
677
+ name: string;
678
+ inChannels: number;
679
+ outChannels: number;
680
+ inNames?: Record<number, string>;
681
+ outNames?: Record<string, string>;
682
+ }
683
+ declare const KNOWN_PATTERNS: KnownDevicePattern[];
684
+
685
+ declare class MultiChannelOutputRouter {
686
+ private ctx;
687
+ private mergerNode;
688
+ private splitterNode;
689
+ private routeGainL;
690
+ private routeGainR;
691
+ private currentChannelRouting;
692
+ private maxChannels;
693
+ init(ctx: AudioContext, initialChannels?: number): void;
694
+ private setupMerger;
695
+ connectInput(sourceNode: AudioNode): void;
696
+ setMaxChannels(channels: number): void;
697
+ applyRouting(routingId: string): void;
698
+ setOutputSinkId(deviceId: string): Promise<boolean>;
699
+ }
700
+ declare const multiChannelOutputRouter: MultiChannelOutputRouter;
701
+
702
+ declare function createCosmicImpulseBuffer(ctx: AudioContext, duration: number, decay: number): AudioBuffer;
703
+ declare function playSyntheticDrumVoice(ctx: AudioContext, masterGain: GainNode, noteNumber: number, vel: number, time: number): void;
704
+
705
+ /**
706
+ * 3-Band Crossover Filter Network for Multiband Dynamic Processing
707
+ */
708
+ interface CrossoverBandNodes {
709
+ input: GainNode;
710
+ lowOutput: AudioNode;
711
+ midOutput: AudioNode;
712
+ highOutput: AudioNode;
713
+ sumOutput: GainNode;
714
+ setFrequencies: (lowFreq: number, highFreq: number) => void;
715
+ dispose: () => void;
716
+ }
717
+ declare function create3BandCrossover(ctx: AudioContext, initialLowFreq?: number, initialHighFreq?: number): CrossoverBandNodes;
718
+
719
+ interface AudioEffectProcessorInstance {
720
+ input: AudioNode;
721
+ output: AudioNode;
722
+ sidechainInput?: GainNode;
723
+ updateEffect: (effect: EffectNode) => void;
724
+ getReductionDb: () => number | {
725
+ low: number;
726
+ mid: number;
727
+ high: number;
728
+ };
729
+ dispose: () => void;
730
+ }
731
+
732
+ /**
733
+ * Unified DSP Audio Effect Processor Factory
734
+ * Instantiates real Web Audio graph pipelines for EQ, Compressor, Multiband, Limiter, Reverb, Delay, Saturation.
735
+ */
736
+ declare function createAudioEffectProcessor(ctx: AudioContext, effect: EffectNode): AudioEffectProcessorInstance;
737
+
738
+ /**
739
+ * Algorithmic Stereo Impulse Response Generator for ConvolverNode Reverb
740
+ */
741
+ declare function generateReverbImpulse(ctx: AudioContext, durationSec?: number, decayFactor?: number, dampingFreq?: number): AudioBuffer;
742
+
743
+ /**
744
+ * Saturation & Distortion Non-Linear Transfer Curves for Web Audio WaveShaperNode
745
+ */
746
+ declare function generateSaturationCurve(type: 'tape' | 'tube' | 'soft_clip' | 'hard_clip' | 'foldback', drive?: number, samples?: number): Float32Array;
747
+
748
+ /**
749
+ * Sidechain Compressor Engine for Web Audio
750
+ * Supports standard dynamic compression as well as external sidechain key ducking.
751
+ */
752
+
753
+ interface SidechainCompressorInstance {
754
+ input: GainNode;
755
+ output: GainNode;
756
+ sidechainInput: GainNode;
757
+ compressorNode: DynamicsCompressorNode;
758
+ updateConfig: (config: CompressorEffectConfig) => void;
759
+ getReductionDb: () => number;
760
+ dispose: () => void;
761
+ }
762
+ declare function createSidechainCompressor(ctx: AudioContext, initialConfig?: CompressorEffectConfig): SidechainCompressorInstance;
763
+
764
+ /**
765
+ * 3-Band Multiband Compressor with Frequency Crossover & Selective Sidechaining
766
+ */
767
+
768
+ interface MultibandCompressorInstance {
769
+ input: GainNode;
770
+ output: GainNode;
771
+ sidechainInput: GainNode;
772
+ updateConfig: (config: MultibandCompressorEffectConfig) => void;
773
+ getReductionDb: () => {
774
+ low: number;
775
+ mid: number;
776
+ high: number;
777
+ };
778
+ dispose: () => void;
779
+ }
780
+ declare function createMultibandCompressor(ctx: AudioContext, initialConfig?: MultibandCompressorEffectConfig): MultibandCompressorInstance;
781
+
782
+ interface SynthEngineState {
783
+ ctx: AudioContext | null;
784
+ masterGain: GainNode | null;
785
+ delayNode: DelayNode | null;
786
+ delayFeedback: GainNode | null;
787
+ delayGain: GainNode | null;
788
+ reverbNode: ConvolverNode | null;
789
+ reverbGain: GainNode | null;
790
+ analyser: AnalyserNode | null;
791
+ analyserL: AnalyserNode | null;
792
+ analyserR: AnalyserNode | null;
793
+ masterSplitter: ChannelSplitterNode | null;
794
+ nodeVisuals: INodeVisuals | null;
795
+ isInitialized: boolean;
796
+ nodeActiveUntilMap: Map<string, number>;
797
+ graphNodeMap: Map<string, BaseAudioGraphNode>;
798
+ activeNodes: SpaceNode[];
799
+ activeConnections: NodeConnection[];
800
+ lastPlayedMidiNote: {
801
+ note: number;
802
+ velocity: number;
803
+ timestamp: number;
804
+ } | null;
805
+ }
806
+
807
+ declare class AudioContextManager {
808
+ private configManager;
809
+ initContext(state: SynthEngineState): void;
810
+ }
811
+
812
+ declare class SynthConfigManager {
813
+ private config;
814
+ private loadAudioConfig;
815
+ getConfig(): AudioEngineConfig;
816
+ updateConfig(newConfig: Partial<AudioEngineConfig>): void;
817
+ }
818
+
819
+ declare const STORAGE_KEY_AUDIO_CONFIG = "celestial_audio_engine_config";
820
+ declare const DEFAULT_AUDIO_CONFIG: AudioEngineConfig;
821
+
822
+ /**
823
+ * @role skeleton
824
+ * AudioEffects Entity Orchestrator
825
+ * Groups, orchestrates, and manages audio effect DSP lifecycles and domain events.
826
+ */
827
+
828
+ interface AudioEffectsState {
829
+ activeEffectIds: string[];
830
+ processors: Map<string, AudioEffectProcessorInstance>;
831
+ }
832
+ declare class AudioEffects {
833
+ private state;
834
+ private eventListeners;
835
+ on(event: string, listener: (payload: any) => void): () => void;
836
+ off(event: string, listener: (payload: any) => void): void;
837
+ emit(event: string, payload?: any): void;
838
+ getOrCreateProcessor(ctx: AudioContext, effect: EffectNode): AudioEffectProcessorInstance;
839
+ removeProcessor(effectId: string): void;
840
+ getActiveEffectIds(): string[];
841
+ getReductionDb(effectId: string): number | {
842
+ low: number;
843
+ mid: number;
844
+ high: number;
845
+ };
846
+ disposeAll(): void;
847
+ }
848
+ declare const audioEffectsEntity: AudioEffects;
849
+
850
+ interface OscMessage {
851
+ address: string;
852
+ args: Array<number | string | boolean>;
853
+ timestamp: number;
854
+ sourceDeviceId?: string;
855
+ sourceDeviceName?: string;
856
+ }
857
+ type OscDeviceType = 'network_udp' | 'websocket_bridge' | 'touchosc' | 'lemur' | 'max_msp' | 'puredata' | 'supercollider' | 'vrchat';
858
+ interface OscDevice {
859
+ id: string;
860
+ name: string;
861
+ type: OscDeviceType;
862
+ host: string;
863
+ port: number;
864
+ status: 'connected' | 'listening' | 'disconnected' | 'simulated';
865
+ enabled: boolean;
866
+ isCustom?: boolean;
867
+ }
868
+ type OscListener = (message: OscMessage) => void;
869
+ type OscDeviceListener = (devices: OscDevice[]) => void;
870
+ declare const DEFAULT_OSC_DEVICES: OscDevice[];
871
+
872
+ declare class OscManager {
873
+ private listeners;
874
+ private addressListeners;
875
+ private deviceListeners;
876
+ devices: OscDevice[];
877
+ lastMessage: OscMessage | null;
878
+ messageLog: OscMessage[];
879
+ isLearning: boolean;
880
+ private learningCallback;
881
+ init(): void;
882
+ receiveOscMessage(message: OscMessage): void;
883
+ sendOscMessage(address: string, args?: Array<number | string | boolean>, targetDeviceId?: string): OscMessage;
884
+ startLearn(callback: (msg: OscMessage) => void): () => void;
885
+ addDevice(device: Omit<OscDevice, 'id'>): OscDevice;
886
+ updateDevice(id: string, updates: Partial<OscDevice>): void;
887
+ removeDevice(id: string): void;
888
+ toggleDevice(id: string): void;
889
+ addListener(fn: OscListener): () => void;
890
+ addAddressListener(pattern: string, fn: OscListener): () => void;
891
+ addDeviceListener(fn: OscDeviceListener): () => void;
892
+ private notifyDeviceListeners;
893
+ private matchesPattern;
894
+ }
895
+ declare const oscManager: OscManager;
896
+
897
+ declare const SynthEngineServiceDefinition: ServiceDefinition;
898
+ declare const SynthEngineServiceFacade: {
899
+ id: string;
900
+ name: string;
901
+ version: string;
902
+ runtime: "client";
903
+ deployment: "local";
904
+ definition: ServiceDefinition<Record<string, unknown>, Record<string, unknown>>;
905
+ engine: SynthEngine;
906
+ createInstance: () => _dinilmusick_krnl.ServiceInstance<Record<string, unknown>, Record<string, unknown>>;
907
+ execute: <TIn = unknown, TOut = unknown>(op: string, input?: TIn) => Promise<TOut>;
908
+ };
909
+ declare const SequencerEngineServiceDefinition: ServiceDefinition;
910
+ declare const SequencerEngineServiceFacade: {
911
+ id: string;
912
+ name: string;
913
+ version: string;
914
+ runtime: "client";
915
+ deployment: "local";
916
+ definition: ServiceDefinition<Record<string, unknown>, Record<string, unknown>>;
917
+ engine: SequencerEngine;
918
+ createInstance: () => _dinilmusick_krnl.ServiceInstance<Record<string, unknown>, Record<string, unknown>>;
919
+ execute: <TIn = unknown, TOut = unknown>(op: string, input?: TIn) => Promise<TOut>;
920
+ };
921
+ declare const OscServiceDefinition: ServiceDefinition;
922
+ declare const OscServiceFacade: {
923
+ id: string;
924
+ name: string;
925
+ version: string;
926
+ runtime: "client";
927
+ deployment: "local";
928
+ definition: ServiceDefinition<Record<string, unknown>, Record<string, unknown>>;
929
+ engine: OscManager;
930
+ createInstance: () => _dinilmusick_krnl.ServiceInstance<Record<string, unknown>, Record<string, unknown>>;
931
+ execute: <TIn = unknown, TOut = unknown>(op: string, input?: TIn) => Promise<TOut>;
932
+ };
933
+
934
+ /**
935
+ * @file index.ts
936
+ * @description kloks/audio-midi — KrnlTS-backed Pro-Audio Named Bus & Reactive Web MIDI Services.
937
+ * Converted from Skipo audio-midi engine into first-class KrnlTS services and orchestrators.
938
+ */
939
+
940
+ interface AudioServiceEvents extends Record<string, unknown> {
941
+ stateChange: AudioHardwareState;
942
+ }
943
+ declare function createAudioHardwareService(manager?: AudioInputManager$1): IService<AudioHardwareState & Record<string, unknown>, AudioServiceEvents>;
944
+ declare const AudioHardwareServiceDefinition: ServiceDefinition;
945
+ declare const AudioHardwareServiceFacade: {
946
+ id: string;
947
+ name: string;
948
+ version: string;
949
+ runtime: "client";
950
+ deployment: "local";
951
+ definition: ServiceDefinition<Record<string, unknown>, Record<string, unknown>>;
952
+ createInstance: typeof createAudioHardwareService;
953
+ execute: <TIn = unknown, TOut = unknown>(op: string, input?: TIn) => Promise<TOut>;
954
+ };
955
+ interface MidiServiceEvents extends Record<string, unknown> {
956
+ midiEvent: MidiEventPayload$1;
957
+ stateChange: MidiSubsystemState;
958
+ }
959
+ declare function createMidiService(manager?: MidiManager$1): IService<MidiSubsystemState & Record<string, unknown>, MidiServiceEvents>;
960
+ declare const MidiServiceDefinition: ServiceDefinition;
961
+ declare const MidiServiceFacade: {
962
+ id: string;
963
+ name: string;
964
+ version: string;
965
+ runtime: "client";
966
+ deployment: "local";
967
+ definition: ServiceDefinition<Record<string, unknown>, Record<string, unknown>>;
968
+ createInstance: typeof createMidiService;
969
+ execute: <TIn = unknown, TOut = unknown>(op: string, input?: TIn) => Promise<TOut>;
970
+ };
971
+ declare const AudioMidiOrchestratorFacade: {
972
+ id: string;
973
+ name: string;
974
+ version: string;
975
+ dependencies: string[];
976
+ execute: (input: {
977
+ midiCommand: MidiCommandType;
978
+ note?: number;
979
+ velocity?: number;
980
+ channel?: number;
981
+ }) => Promise<{
982
+ midiEvent: MidiEventPayload$1;
983
+ audioState: AudioHardwareState;
984
+ routedAt: number;
985
+ }>;
986
+ };
987
+
988
+ export { type ActiveAuditionPlayback, type ActiveTrackPlayback, type AudioBusConfig, AudioClipEngine, AudioContainerGraphNode, AudioContextManager, type AudioDeviceDescriptor, type AudioEffectProcessorInstance, AudioEffects, type AudioEffectsState, type AudioEngineConfig, AudioHardwareServiceDefinition, AudioHardwareServiceFacade, type AudioHardwareState, AudioInputManager$1 as AudioInputManager, AudioMidiOrchestratorFacade, type AudioServiceEvents, type AudioStateListener, BaseAudioGraphNode, BaseProcessorAudioGraphNode, BaseSourceAudioGraphNode, type BufferedAudioPeak, type BufferedCurvePoint, type BufferedMidiEvent, type CrossoverBandNodes, CurveEngine, DEFAULT_AUDIO_CONFIG, DEFAULT_NAMED_BUSSES, DEFAULT_NAMED_INPUTS, DEFAULT_OSC_DEVICES, type DeviceListener, EffectProcessorGraphNode, type MidiEventPayload as EngineMidiEventPayload, type HardwareProfileResult, KNOWN_PATTERNS, type KnownDevicePattern, MasterAudioOutputGraphNode, type MidiCommandType, MidiContainerGraphNode, type MidiEventListener, type MidiEventPayload$1 as MidiEventPayload, MidiInstrumentGraphNode, type MidiListener, MidiManager$1 as MidiManager, type MidiPortDescriptor, MidiServiceDefinition, type MidiServiceEvents, MidiServiceFacade, type MidiStateListener, type MidiStatus, type MidiSubsystemState, MultiChannelOutputRouter, type MultibandCompressorInstance, type OscDevice, type OscDeviceListener, type OscDeviceType, type OscListener, OscManager, type OscMessage, OscServiceDefinition, OscServiceFacade, type OutputChannelInfo, RetrospectiveBufferEngine, type RetrospectiveCycleInfo, STORAGE_KEY_AUDIO_CONFIG, SequencerEngine, SequencerEngineServiceDefinition, SequencerEngineServiceFacade, type SidechainCompressorInstance, SignalRouterGraphNode, type SnapshotListener, type StatusListener, SynthConfigManager, SynthEngine, SynthEngineServiceDefinition, SynthEngineServiceFacade, type SynthEngineState, audioClipEngine, audioEffectsEntity, audioInputManager, buildInputChannelList, buildOutputChannelList, create3BandCrossover, createAudioEffectProcessor, createAudioGraphNode, createAudioHardwareService, createCosmicImpulseBuffer, createMidiService, createMultibandCompressor, createSidechainCompressor, curveEngine, detectHardwareProfile, generatePresetAudioBuffer, generateReverbImpulse, generateSaturationCurve, midiManager, multiChannelOutputRouter, oscManager, playContainerNoteWithEffects, playSyntheticDrumVoice, processActiveContainers, retrospectiveBufferEngine, sequencerEngine, synthEngine };