@libraz/libsonare 1.7.2 → 1.8.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/NOTICE +178 -0
- package/README.md +26 -203
- package/dist/_chain_config.d.ts +14 -0
- package/dist/_chain_config.d.ts.map +1 -0
- package/dist/_effects_common.d.ts +7 -0
- package/dist/_effects_common.d.ts.map +1 -0
- package/dist/_feature_validation.d.ts +8 -0
- package/dist/_feature_validation.d.ts.map +1 -0
- package/dist/_fft_options.d.ts +24 -0
- package/dist/_fft_options.d.ts.map +1 -0
- package/dist/align_take.d.ts +50 -0
- package/dist/align_take.d.ts.map +1 -0
- package/dist/analysis.d.ts +29 -5840
- package/dist/analysis.d.ts.map +1 -0
- package/dist/analysis.js +874 -722
- package/dist/analysis.js.map +1 -1
- package/dist/analysis_helpers.d.ts +9 -0
- package/dist/analysis_helpers.d.ts.map +1 -0
- package/dist/audio.d.ts +163 -0
- package/dist/audio.d.ts.map +1 -0
- package/dist/clip_page_streamer.d.ts +133 -0
- package/dist/clip_page_streamer.d.ts.map +1 -0
- package/dist/codes.d.ts +44 -0
- package/dist/codes.d.ts.map +1 -0
- package/dist/effects_mastering.d.ts +23 -0
- package/dist/effects_mastering.d.ts.map +1 -0
- package/dist/effects_note_ops.d.ts +502 -0
- package/dist/effects_note_ops.d.ts.map +1 -0
- package/dist/effects_percussive.d.ts +185 -0
- package/dist/effects_percussive.d.ts.map +1 -0
- package/dist/effects_separation.d.ts +65 -0
- package/dist/effects_separation.d.ts.map +1 -0
- package/dist/effects_spectral.d.ts +28 -0
- package/dist/effects_spectral.d.ts.map +1 -0
- package/dist/effects_timepitch.d.ts +134 -0
- package/dist/effects_timepitch.d.ts.map +1 -0
- package/dist/effects_voice_change.d.ts +53 -0
- package/dist/effects_voice_change.d.ts.map +1 -0
- package/dist/errors.d.ts +51 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/feature_core.d.ts +341 -0
- package/dist/feature_core.d.ts.map +1 -0
- package/dist/feature_decompose.d.ts +278 -0
- package/dist/feature_decompose.d.ts.map +1 -0
- package/dist/feature_inverse.d.ts +128 -0
- package/dist/feature_inverse.d.ts.map +1 -0
- package/dist/feature_loudness.d.ts +66 -0
- package/dist/feature_loudness.d.ts.map +1 -0
- package/dist/feature_music.d.ts +307 -0
- package/dist/feature_music.d.ts.map +1 -0
- package/dist/feature_pitch.d.ts +108 -0
- package/dist/feature_pitch.d.ts.map +1 -0
- package/dist/feature_resample.d.ts +16 -0
- package/dist/feature_resample.d.ts.map +1 -0
- package/dist/feature_spectral.d.ts +137 -0
- package/dist/feature_spectral.d.ts.map +1 -0
- package/dist/feature_spectrogram.d.ts +198 -0
- package/dist/feature_spectrogram.d.ts.map +1 -0
- package/dist/features.d.ts +10 -0
- package/dist/features.d.ts.map +1 -0
- package/dist/hrtf/default.shrf +0 -0
- package/dist/index.d.ts +74 -7431
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +4173 -1621
- package/dist/index.js.map +1 -1
- package/dist/instrument_types.d.ts +517 -0
- package/dist/instrument_types.d.ts.map +1 -0
- package/dist/live_audio.d.ts +35 -0
- package/dist/live_audio.d.ts.map +1 -0
- package/dist/mastering_chain.d.ts +213 -0
- package/dist/mastering_chain.d.ts.map +1 -0
- package/dist/mastering_core.d.ts +483 -0
- package/dist/mastering_core.d.ts.map +1 -0
- package/dist/mastering_dynamics.d.ts +80 -0
- package/dist/mastering_dynamics.d.ts.map +1 -0
- package/dist/metering.d.ts +287 -0
- package/dist/metering.d.ts.map +1 -0
- package/dist/mixer.d.ts +464 -0
- package/dist/mixer.d.ts.map +1 -0
- package/dist/mixing_assistant.d.ts +62 -0
- package/dist/mixing_assistant.d.ts.map +1 -0
- package/dist/mixing_oneshot.d.ts +40 -0
- package/dist/mixing_oneshot.d.ts.map +1 -0
- package/dist/module_state.d.ts +15 -0
- package/dist/module_state.d.ts.map +1 -0
- package/dist/opfs_clip_pages.d.ts +28 -0
- package/dist/opfs_clip_pages.d.ts.map +1 -0
- package/dist/playback_renderer.d.ts +128 -0
- package/dist/playback_renderer.d.ts.map +1 -0
- package/dist/polyphony.d.ts +202 -0
- package/dist/polyphony.d.ts.map +1 -0
- package/dist/project.d.ts +8 -0
- package/dist/project.d.ts.map +1 -0
- package/dist/project_class.d.ts +562 -0
- package/dist/project_class.d.ts.map +1 -0
- package/dist/project_internal.d.ts +194 -0
- package/dist/project_internal.d.ts.map +1 -0
- package/dist/project_synth.d.ts +74 -0
- package/dist/project_synth.d.ts.map +1 -0
- package/dist/project_types.d.ts +654 -0
- package/dist/project_types.d.ts.map +1 -0
- package/dist/public_types.d.ts +185 -0
- package/dist/public_types.d.ts.map +1 -0
- package/dist/public_types_acoustic.d.ts +215 -0
- package/dist/public_types_acoustic.d.ts.map +1 -0
- package/dist/public_types_mastering.d.ts +528 -0
- package/dist/public_types_mastering.d.ts.map +1 -0
- package/dist/public_types_mixing.d.ts +436 -0
- package/dist/public_types_mixing.d.ts.map +1 -0
- package/dist/public_types_music.d.ts +619 -0
- package/dist/public_types_music.d.ts.map +1 -0
- package/dist/public_types_playback.d.ts +165 -0
- package/dist/public_types_playback.d.ts.map +1 -0
- package/dist/public_types_realtime.d.ts +174 -0
- package/dist/public_types_realtime.d.ts.map +1 -0
- package/dist/public_types_repair.d.ts +424 -0
- package/dist/public_types_repair.d.ts.map +1 -0
- package/dist/public_types_spectral.d.ts +697 -0
- package/dist/public_types_spectral.d.ts.map +1 -0
- package/dist/quick_analysis.d.ts +445 -0
- package/dist/quick_analysis.d.ts.map +1 -0
- package/dist/realtime_engine.d.ts +893 -0
- package/dist/realtime_engine.d.ts.map +1 -0
- package/dist/realtime_voice_changer.d.ts +158 -0
- package/dist/realtime_voice_changer.d.ts.map +1 -0
- package/dist/repair_dereverb.d.ts +187 -0
- package/dist/repair_dereverb.d.ts.map +1 -0
- package/dist/repair_impulsive.d.ts +186 -0
- package/dist/repair_impulsive.d.ts.map +1 -0
- package/dist/repair_noise.d.ts +239 -0
- package/dist/repair_noise.d.ts.map +1 -0
- package/dist/repair_trim.d.ts +123 -0
- package/dist/repair_trim.d.ts.map +1 -0
- package/dist/sample_bank.d.ts +84 -0
- package/dist/sample_bank.d.ts.map +1 -0
- package/dist/scale.d.ts +10 -0
- package/dist/scale.d.ts.map +1 -0
- package/dist/schemas/mixer-scene.schema.json +393 -0
- package/dist/schemas/playback-renderer-config.schema.json +392 -0
- package/dist/sonare-analysis.d.ts +8 -0
- package/dist/sonare-analysis.js +2 -2
- package/dist/sonare-analysis.wasm +0 -0
- package/dist/sonare.d.ts +3945 -0
- package/dist/sonare.js +2 -2
- package/dist/sonare.wasm +0 -0
- package/dist/stream_analyzer.d.ts +163 -0
- package/dist/stream_analyzer.d.ts.map +1 -0
- package/dist/stream_types.d.ts +214 -0
- package/dist/stream_types.d.ts.map +1 -0
- package/dist/streaming_mixing.d.ts +6 -0
- package/dist/streaming_mixing.d.ts.map +1 -0
- package/dist/streaming_processors.d.ts +340 -0
- package/dist/streaming_processors.d.ts.map +1 -0
- package/dist/transcribe.d.ts +77 -0
- package/dist/transcribe.d.ts.map +1 -0
- package/dist/validation.d.ts +140 -0
- package/dist/validation.d.ts.map +1 -0
- package/dist/web_midi.d.ts +77 -0
- package/dist/web_midi.d.ts.map +1 -0
- package/dist/worker.d.ts +5 -48
- package/dist/worker.d.ts.map +1 -0
- package/dist/worker.js +94 -41
- package/dist/worker.js.map +1 -1
- package/dist/worker_client.d.ts +96 -0
- package/dist/worker_client.d.ts.map +1 -0
- package/dist/worker_protocol.d.ts +43 -0
- package/dist/worker_protocol.d.ts.map +1 -0
- package/dist/worklet/audio_types.d.ts +21 -0
- package/dist/worklet/audio_types.d.ts.map +1 -0
- package/dist/worklet/engine-automation.d.ts +29 -0
- package/dist/worklet/engine-automation.d.ts.map +1 -0
- package/dist/worklet/engine-capture-facade.d.ts +35 -0
- package/dist/worklet/engine-capture-facade.d.ts.map +1 -0
- package/dist/worklet/engine-clips.d.ts +23 -0
- package/dist/worklet/engine-clips.d.ts.map +1 -0
- package/dist/worklet/engine-markers.d.ts +40 -0
- package/dist/worklet/engine-markers.d.ts.map +1 -0
- package/dist/worklet/engine-mixer-facade.d.ts +164 -0
- package/dist/worklet/engine-mixer-facade.d.ts.map +1 -0
- package/dist/worklet/engine-node.d.ts +83 -0
- package/dist/worklet/engine-node.d.ts.map +1 -0
- package/dist/worklet/engine-offline.d.ts +81 -0
- package/dist/worklet/engine-offline.d.ts.map +1 -0
- package/dist/worklet/engine-options.d.ts +12 -0
- package/dist/worklet/engine-options.d.ts.map +1 -0
- package/dist/worklet/engine-parameter-facade.d.ts +106 -0
- package/dist/worklet/engine-parameter-facade.d.ts.map +1 -0
- package/dist/worklet/engine-processor.d.ts +72 -0
- package/dist/worklet/engine-processor.d.ts.map +1 -0
- package/dist/worklet/engine-register.d.ts +2 -0
- package/dist/worklet/engine-register.d.ts.map +1 -0
- package/dist/worklet/engine-strips.d.ts +75 -0
- package/dist/worklet/engine-strips.d.ts.map +1 -0
- package/dist/worklet/engine-sync.d.ts +39 -0
- package/dist/worklet/engine-sync.d.ts.map +1 -0
- package/dist/worklet/engine-tempo-facade.d.ts +48 -0
- package/dist/worklet/engine-tempo-facade.d.ts.map +1 -0
- package/dist/worklet/engine.d.ts +418 -0
- package/dist/worklet/engine.d.ts.map +1 -0
- package/dist/worklet/guards.d.ts +53 -0
- package/dist/worklet/guards.d.ts.map +1 -0
- package/dist/worklet/messages.d.ts +710 -0
- package/dist/worklet/messages.d.ts.map +1 -0
- package/dist/worklet/mixer-processor.d.ts +46 -0
- package/dist/worklet/mixer-processor.d.ts.map +1 -0
- package/dist/worklet/playback-processor.d.ts +62 -0
- package/dist/worklet/playback-processor.d.ts.map +1 -0
- package/dist/worklet/protocol.d.ts +331 -0
- package/dist/worklet/protocol.d.ts.map +1 -0
- package/dist/worklet/voice-changer-processor.d.ts +41 -0
- package/dist/worklet/voice-changer-processor.d.ts.map +1 -0
- package/dist/worklet.d.ts +16 -2515
- package/dist/worklet.d.ts.map +1 -0
- package/dist/worklet.js +3200 -541
- package/dist/worklet.js.map +1 -1
- package/package.json +23 -12
- package/src/_effects_common.ts +47 -0
- package/src/_feature_validation.ts +34 -0
- package/src/_fft_options.ts +39 -0
- package/src/align_take.ts +64 -0
- package/src/analysis.ts +56 -3
- package/src/analysis_helpers.ts +7 -0
- package/src/audio.ts +106 -3
- package/src/codes.ts +39 -2
- package/src/effects_mastering.ts +101 -22
- package/src/effects_note_ops.ts +683 -0
- package/src/effects_percussive.ts +217 -0
- package/src/effects_separation.ts +150 -0
- package/src/effects_spectral.ts +60 -0
- package/src/effects_timepitch.ts +388 -0
- package/src/errors.ts +23 -1
- package/src/feature_core.ts +127 -2
- package/src/feature_decompose.ts +633 -0
- package/src/feature_inverse.ts +454 -0
- package/src/feature_loudness.ts +125 -0
- package/src/feature_music.ts +107 -14
- package/src/feature_pitch.ts +96 -1
- package/src/feature_spectral.ts +16 -611
- package/src/feature_spectrogram.ts +63 -450
- package/src/features.ts +36 -22
- package/src/index.ts +288 -30
- package/src/instrument_types.ts +645 -0
- package/src/live_audio.ts +27 -1
- package/src/mastering_chain.ts +184 -0
- package/src/mastering_core.ts +441 -32
- package/src/mastering_dynamics.ts +22 -11
- package/src/metering.ts +67 -24
- package/src/mixer.ts +251 -22
- package/src/mixing_assistant.ts +138 -0
- package/src/mixing_oneshot.ts +10 -5
- package/src/module_state.ts +24 -2
- package/src/playback_renderer.ts +252 -0
- package/src/polyphony.ts +279 -0
- package/src/project.ts +61 -24
- package/src/project_class.ts +450 -27
- package/src/project_internal.ts +149 -42
- package/src/project_synth.ts +67 -1
- package/src/project_types.ts +271 -271
- package/src/public_types.ts +122 -3
- package/src/public_types_acoustic.ts +112 -3
- package/src/public_types_mastering.ts +275 -73
- package/src/public_types_mixing.ts +363 -1
- package/src/public_types_music.ts +312 -2
- package/src/public_types_playback.ts +196 -0
- package/src/public_types_realtime.ts +39 -7
- package/src/public_types_repair.ts +446 -0
- package/src/public_types_spectral.ts +491 -5
- package/src/quick_analysis.ts +203 -26
- package/src/realtime_engine.ts +773 -34
- package/src/realtime_voice_changer.ts +55 -1
- package/src/repair_dereverb.ts +299 -0
- package/src/repair_impulsive.ts +395 -0
- package/src/repair_noise.ts +425 -0
- package/src/repair_trim.ts +226 -0
- package/src/sample_bank.ts +113 -0
- package/src/sonare.js.d.ts +1158 -30
- package/src/stream_analyzer.ts +36 -4
- package/src/stream_types.ts +37 -0
- package/src/streaming_mixing.ts +1 -1
- package/src/streaming_processors.ts +202 -10
- package/src/transcribe.ts +89 -0
- package/src/validation.ts +285 -11
- package/src/web_midi.ts +1 -6
- package/src/worker.ts +18 -2
- package/src/worklet/audio_types.ts +37 -0
- package/src/worklet/engine-mixer-facade.ts +800 -32
- package/src/worklet/engine-node.ts +99 -29
- package/src/worklet/engine-offline.ts +14 -8
- package/src/worklet/engine-parameter-facade.ts +21 -0
- package/src/worklet/engine-processor.ts +332 -93
- package/src/worklet/engine-register.ts +32 -18
- package/src/worklet/engine-strips.ts +275 -9
- package/src/worklet/engine-sync.ts +20 -7
- package/src/worklet/engine.ts +394 -48
- package/src/worklet/guards.ts +195 -44
- package/src/worklet/messages.ts +229 -2
- package/src/worklet/mixer-processor.ts +117 -48
- package/src/worklet/playback-processor.ts +300 -0
- package/src/worklet/protocol.ts +82 -11
- package/src/worklet/voice-changer-processor.ts +17 -11
- package/src/worklet.ts +17 -0
- package/src/effects_transform.ts +0 -718
- package/src/mastering_repair.ts +0 -273
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
import { ErrorCode } from './errors';
|
|
2
|
+
import type { MasterAudioRequest, MasterAudioStereoRequest } from './mastering_chain';
|
|
3
|
+
import type { DetectChordsRequest, DetectKeyRequest, MusicAnalyzeRequest, SamplesRequest } from './quick_analysis';
|
|
4
|
+
type WorkerRequest<T> = Omit<T, 'onProgress'>;
|
|
5
|
+
/** Progress relayed from the Worker at the core's native progress boundaries. */
|
|
6
|
+
export interface OfflineWorkerProgress {
|
|
7
|
+
progress: number;
|
|
8
|
+
stage: string;
|
|
9
|
+
}
|
|
10
|
+
/** Per-call behaviour for a one-shot operation. */
|
|
11
|
+
export interface OfflineWorkerCallOptions {
|
|
12
|
+
/**
|
|
13
|
+
* Preserve the caller's input arrays by copying them before dispatch.
|
|
14
|
+
*
|
|
15
|
+
* The default is `false`: `Float32Array` buffers are transferred to the
|
|
16
|
+
* Worker and become detached on the calling thread, avoiding a second copy.
|
|
17
|
+
*/
|
|
18
|
+
copy?: boolean;
|
|
19
|
+
/** Receives native progress boundaries for analysis and mastering calls. */
|
|
20
|
+
onProgress?: (update: OfflineWorkerProgress) => void;
|
|
21
|
+
}
|
|
22
|
+
/** Options used to create an {@link OfflineWorkerClient}. */
|
|
23
|
+
export interface OfflineWorkerClientOptions {
|
|
24
|
+
/** Reuse a Worker owned by the host instead of creating one. */
|
|
25
|
+
worker?: OfflineWorker;
|
|
26
|
+
/** URL of the Worker entry; defaults to the adjacent published `worker.js`. */
|
|
27
|
+
workerUrl?: string | URL;
|
|
28
|
+
/** Test/host hook for creating a dedicated Worker. */
|
|
29
|
+
workerFactory?: (url: URL) => OfflineWorker;
|
|
30
|
+
/** Terminate a supplied Worker when {@link OfflineWorkerClient.dispose} runs. */
|
|
31
|
+
terminateWorkerOnDispose?: boolean;
|
|
32
|
+
}
|
|
33
|
+
/** Browser Worker or Node `worker_threads.Worker` used by the client. */
|
|
34
|
+
export interface OfflineWorker {
|
|
35
|
+
postMessage(message: unknown, transfer?: Transferable[]): void;
|
|
36
|
+
terminate(): unknown;
|
|
37
|
+
addEventListener?(type: string, listener: EventListener): void;
|
|
38
|
+
removeEventListener?(type: string, listener: EventListener): void;
|
|
39
|
+
on?(type: 'message' | 'error', listener: (...args: unknown[]) => void): unknown;
|
|
40
|
+
off?(type: 'message' | 'error', listener: (...args: unknown[]) => void): unknown;
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* A cancellable promise returned by an {@link OfflineWorkerClient} call.
|
|
44
|
+
*
|
|
45
|
+
* It is Promise-like, so `await client.analyze(...)` works. Call `cancel()` to
|
|
46
|
+
* request cancellation at the next native progress boundary. In browsers this
|
|
47
|
+
* uses a `SharedArrayBuffer` flag, which requires cross-origin isolation for
|
|
48
|
+
* prompt cancellation while synchronous WASM is running. The worker forwards
|
|
49
|
+
* that flag through the same native cancellation callback used by synchronous
|
|
50
|
+
* one-shot requests.
|
|
51
|
+
*/
|
|
52
|
+
export declare class OfflineWorkerTask<T> implements PromiseLike<T> {
|
|
53
|
+
readonly result: Promise<T>;
|
|
54
|
+
private readonly cancelRequest;
|
|
55
|
+
constructor(result: Promise<T>, cancelRequest: () => void);
|
|
56
|
+
cancel(): void;
|
|
57
|
+
then<TResult1 = T, TResult2 = never>(onfulfilled?: ((value: T) => TResult1 | PromiseLike<TResult1>) | null, onrejected?: ((reason: unknown) => TResult2 | PromiseLike<TResult2>) | null): Promise<TResult1 | TResult2>;
|
|
58
|
+
catch<TResult = never>(onrejected?: ((reason: unknown) => TResult | PromiseLike<TResult>) | null): Promise<T | TResult>;
|
|
59
|
+
finally(onfinally?: (() => void) | null): Promise<T>;
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Owns a dedicated Worker for value-based offline analysis and mastering.
|
|
63
|
+
*
|
|
64
|
+
* `Project`, `Mixer`, and realtime APIs are intentionally absent: their native
|
|
65
|
+
* handles are local to one JavaScript realm and cannot be transferred safely.
|
|
66
|
+
*/
|
|
67
|
+
export declare class OfflineWorkerClient {
|
|
68
|
+
private readonly worker;
|
|
69
|
+
private readonly ownsWorker;
|
|
70
|
+
private readonly pending;
|
|
71
|
+
private nextId;
|
|
72
|
+
private closed;
|
|
73
|
+
private usesEventTarget;
|
|
74
|
+
constructor(options?: OfflineWorkerClientOptions);
|
|
75
|
+
/** Dispatch full music analysis to the Worker. */
|
|
76
|
+
analyze(request: WorkerRequest<MusicAnalyzeRequest>, options?: OfflineWorkerCallOptions): OfflineWorkerTask<ReturnType<typeof import('./quick_analysis').analyze>>;
|
|
77
|
+
/** Dispatch BPM detection to the Worker. */
|
|
78
|
+
detectBpm(request: SamplesRequest, options?: OfflineWorkerCallOptions): OfflineWorkerTask<number>;
|
|
79
|
+
/** Dispatch key detection to the Worker. */
|
|
80
|
+
detectKey(request: DetectKeyRequest, options?: OfflineWorkerCallOptions): OfflineWorkerTask<ReturnType<typeof import('./quick_analysis').detectKey>>;
|
|
81
|
+
/** Dispatch chord detection to the Worker. */
|
|
82
|
+
detectChords(request: DetectChordsRequest, options?: OfflineWorkerCallOptions): OfflineWorkerTask<ReturnType<typeof import('./quick_analysis').detectChords>>;
|
|
83
|
+
/** Dispatch mono preset mastering to the Worker. */
|
|
84
|
+
masterAudio(request: WorkerRequest<MasterAudioRequest>, options?: OfflineWorkerCallOptions): OfflineWorkerTask<ReturnType<typeof import('./mastering_chain').masterAudio>>;
|
|
85
|
+
/** Dispatch stereo preset mastering to the Worker. */
|
|
86
|
+
masterAudioStereo(request: WorkerRequest<MasterAudioStereoRequest>, options?: OfflineWorkerCallOptions): OfflineWorkerTask<ReturnType<typeof import('./mastering_chain').masterAudioStereo>>;
|
|
87
|
+
/** Stop accepting calls, reject outstanding work, and release the Worker if owned. */
|
|
88
|
+
dispose(): void;
|
|
89
|
+
private call;
|
|
90
|
+
private readonly onMessage;
|
|
91
|
+
private readonly onError;
|
|
92
|
+
private readonly onNodeMessage;
|
|
93
|
+
private readonly onNodeError;
|
|
94
|
+
}
|
|
95
|
+
export { ErrorCode };
|
|
96
|
+
//# sourceMappingURL=worker_client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"worker_client.d.ts","sourceRoot":"","sources":["../src/worker_client.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Internal structured-clone protocol for the offline Web Worker bridge.
|
|
3
|
+
*
|
|
4
|
+
* Keep this deliberately limited to one-shot operations. Embind handles own
|
|
5
|
+
* native resources and cannot safely cross a worker boundary.
|
|
6
|
+
*/
|
|
7
|
+
export type OfflineWorkerOperation = 'analyze' | 'detectBpm' | 'detectKey' | 'detectChords' | 'masterAudio' | 'masterAudioStereo';
|
|
8
|
+
export interface OfflineWorkerRunMessage {
|
|
9
|
+
type: 'sonare:offline-run';
|
|
10
|
+
id: number;
|
|
11
|
+
operation: OfflineWorkerOperation;
|
|
12
|
+
request: Record<string, unknown>;
|
|
13
|
+
/** A shared flag lets cancellation reach synchronous WASM progress callbacks. */
|
|
14
|
+
cancelBuffer?: SharedArrayBuffer;
|
|
15
|
+
}
|
|
16
|
+
export interface OfflineWorkerCancelMessage {
|
|
17
|
+
type: 'sonare:offline-cancel';
|
|
18
|
+
id: number;
|
|
19
|
+
}
|
|
20
|
+
export type OfflineWorkerRequestMessage = OfflineWorkerRunMessage | OfflineWorkerCancelMessage;
|
|
21
|
+
export interface OfflineWorkerProgressMessage {
|
|
22
|
+
type: 'sonare:offline-progress';
|
|
23
|
+
id: number;
|
|
24
|
+
progress: number;
|
|
25
|
+
stage: string;
|
|
26
|
+
}
|
|
27
|
+
export interface OfflineWorkerResultMessage {
|
|
28
|
+
type: 'sonare:offline-result';
|
|
29
|
+
id: number;
|
|
30
|
+
result: unknown;
|
|
31
|
+
}
|
|
32
|
+
export interface OfflineWorkerErrorMessage {
|
|
33
|
+
type: 'sonare:offline-error';
|
|
34
|
+
id: number;
|
|
35
|
+
error: {
|
|
36
|
+
name: string;
|
|
37
|
+
message: string;
|
|
38
|
+
code?: number;
|
|
39
|
+
codeName?: string;
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
export type OfflineWorkerResponseMessage = OfflineWorkerProgressMessage | OfflineWorkerResultMessage | OfflineWorkerErrorMessage;
|
|
43
|
+
//# sourceMappingURL=worker_protocol.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"worker_protocol.d.ts","sourceRoot":"","sources":["../src/worker_protocol.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,MAAM,MAAM,sBAAsB,GAC9B,SAAS,GACT,WAAW,GACX,WAAW,GACX,cAAc,GACd,aAAa,GACb,mBAAmB,CAAC;AAExB,MAAM,WAAW,uBAAuB;IACtC,IAAI,EAAE,oBAAoB,CAAC;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,sBAAsB,CAAC;IAClC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACjC,iFAAiF;IACjF,YAAY,CAAC,EAAE,iBAAiB,CAAC;CAClC;AAED,MAAM,WAAW,0BAA0B;IACzC,IAAI,EAAE,uBAAuB,CAAC;IAC9B,EAAE,EAAE,MAAM,CAAC;CACZ;AAED,MAAM,MAAM,2BAA2B,GAAG,uBAAuB,GAAG,0BAA0B,CAAC;AAE/F,MAAM,WAAW,4BAA4B;IAC3C,IAAI,EAAE,yBAAyB,CAAC;IAChC,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,0BAA0B;IACzC,IAAI,EAAE,uBAAuB,CAAC;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,OAAO,CAAC;CACjB;AAED,MAAM,WAAW,yBAAyB;IACxC,IAAI,EAAE,sBAAsB,CAAC;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE;QACL,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,EAAE,MAAM,CAAC;QAChB,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,QAAQ,CAAC,EAAE,MAAM,CAAC;KACnB,CAAC;CACH;AAED,MAAM,MAAM,4BAA4B,GACpC,4BAA4B,GAC5B,0BAA0B,GAC1B,yBAAyB,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
export type WorkletInput = readonly (readonly Float32Array[])[];
|
|
2
|
+
export type WorkletOutput = Float32Array[][];
|
|
3
|
+
/**
|
|
4
|
+
* Copies one plane per output channel. Shared by every worklet output — the
|
|
5
|
+
* engine's program and cue buses and the voice changer — so they cannot drift
|
|
6
|
+
* in their padding behaviour. Allocation-free.
|
|
7
|
+
*
|
|
8
|
+
* A host output wider than the engine's plane count is mapped the way Web Audio
|
|
9
|
+
* up-mixes rather than by padding with a copy of plane 0:
|
|
10
|
+
* - A single plane fans out to every output channel, so a mono engine driving a
|
|
11
|
+
* stereo host stays centred instead of hard-panned left.
|
|
12
|
+
* - With two or more planes, an output channel past the last plane is silence.
|
|
13
|
+
* Duplicating plane 0 into it would put the left signal in a rear or centre
|
|
14
|
+
* channel and add correlated energy the engine never produced.
|
|
15
|
+
*
|
|
16
|
+
* Everything the source does not fill is zeroed — the tail past `frames`, and
|
|
17
|
+
* the remainder of a plane shorter than `frames` — so no sample of the previous
|
|
18
|
+
* block survives into this one.
|
|
19
|
+
*/
|
|
20
|
+
export declare function copyPlanesToOutput(output: Float32Array[], planes: readonly Float32Array[], frames: number): void;
|
|
21
|
+
//# sourceMappingURL=audio_types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"audio_types.d.ts","sourceRoot":"","sources":["../../src/worklet/audio_types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,YAAY,GAAG,SAAS,CAAC,SAAS,YAAY,EAAE,CAAC,EAAE,CAAC;AAChE,MAAM,MAAM,aAAa,GAAG,YAAY,EAAE,EAAE,CAAC;AAE7C;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,YAAY,EAAE,EACtB,MAAM,EAAE,SAAS,YAAY,EAAE,EAC/B,MAAM,EAAE,MAAM,GACb,IAAI,CAcN"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import type { EngineAutomationPoint, RealtimeEngine } from '../index';
|
|
2
|
+
import type { SonareEngineSyncMessage } from './messages';
|
|
3
|
+
/**
|
|
4
|
+
* Collaborator surface the automation-lane helpers need from the owning
|
|
5
|
+
* {@link SonareEngine}: the lane store they mutate, the offline engine they
|
|
6
|
+
* mirror into, the sync poster, and the parameter-id resolver.
|
|
7
|
+
*/
|
|
8
|
+
export interface EngineAutomationContext {
|
|
9
|
+
readonly offlineEngine: RealtimeEngine;
|
|
10
|
+
readonly automationLanes: Map<number, EngineAutomationPoint[]>;
|
|
11
|
+
postSync(message: SonareEngineSyncMessage): void;
|
|
12
|
+
resolveParamId(nodeId: string, param: string | number): number;
|
|
13
|
+
}
|
|
14
|
+
export declare function scheduleParam(ctx: EngineAutomationContext, nodeId: string, param: string | number, ppq: number, value: number, curve?: number | 'linear' | 'exponential'): void;
|
|
15
|
+
export declare function addAutomationPoint(ctx: EngineAutomationContext, laneId: string | number, ppq: number, value: number, curve?: number | 'linear' | 'exponential'): void;
|
|
16
|
+
/**
|
|
17
|
+
* Replaces the automation lane for `paramId` with the given breakpoints.
|
|
18
|
+
*
|
|
19
|
+
* Unlike scheduleParam (which appends a single point), this sets the whole
|
|
20
|
+
* lane at once; an empty array clears the lane. The points are defensively
|
|
21
|
+
* copied and sorted by ppq before being mirrored to the offline engine and
|
|
22
|
+
* the live worklet engine.
|
|
23
|
+
*
|
|
24
|
+
* @param paramId Automation target id (registered parameter or a reserved
|
|
25
|
+
* engine mixer target from automationParamId/busAutomationParamId).
|
|
26
|
+
* @param points Lane breakpoints; order does not matter.
|
|
27
|
+
*/
|
|
28
|
+
export declare function setAutomationLane(ctx: EngineAutomationContext, paramId: number, points: ReadonlyArray<EngineAutomationPoint>): void;
|
|
29
|
+
//# sourceMappingURL=engine-automation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"engine-automation.d.ts","sourceRoot":"","sources":["../../src/worklet/engine-automation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAEtE,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,YAAY,CAAC;AAE1D;;;;GAIG;AACH,MAAM,WAAW,uBAAuB;IACtC,QAAQ,CAAC,aAAa,EAAE,cAAc,CAAC;IACvC,QAAQ,CAAC,eAAe,EAAE,GAAG,CAAC,MAAM,EAAE,qBAAqB,EAAE,CAAC,CAAC;IAC/D,QAAQ,CAAC,OAAO,EAAE,uBAAuB,GAAG,IAAI,CAAC;IACjD,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC;CAChE;AAED,wBAAgB,aAAa,CAC3B,GAAG,EAAE,uBAAuB,EAC5B,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,MAAM,GAAG,MAAM,EACtB,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,MAAM,EACb,KAAK,GAAE,MAAM,GAAG,QAAQ,GAAG,aAAwB,GAClD,IAAI,CAaN;AAED,wBAAgB,kBAAkB,CAChC,GAAG,EAAE,uBAAuB,EAC5B,MAAM,EAAE,MAAM,GAAG,MAAM,EACvB,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,MAAM,EACb,KAAK,GAAE,MAAM,GAAG,QAAQ,GAAG,aAAwB,GAClD,IAAI,CAEN;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,iBAAiB,CAC/B,GAAG,EAAE,uBAAuB,EAC5B,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,aAAa,CAAC,qBAAqB,CAAC,GAC3C,IAAI,CASN"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import type { EngineCaptureStatus, RealtimeEngine } from '../index';
|
|
2
|
+
import type { SonareRealtimeEngineNode } from './engine-node';
|
|
3
|
+
import { type CaptureOptions } from './engine-offline';
|
|
4
|
+
import type { SonareEngineSyncCaptureMessage, SonareEngineSyncMessage } from './messages';
|
|
5
|
+
import { SonareEngineCommandType } from './protocol';
|
|
6
|
+
type CaptureConfig = Omit<SonareEngineSyncCaptureMessage, 'type'>;
|
|
7
|
+
/**
|
|
8
|
+
* Collaborator surface the capture/record/punch setters need from the owning
|
|
9
|
+
* {@link SonareEngine}: the offline engine they mirror into, the realtime node
|
|
10
|
+
* they command and query, the channel count, the out-of-band sync poster, the
|
|
11
|
+
* capture-config accessor, and the target-id resolver.
|
|
12
|
+
*/
|
|
13
|
+
export interface EngineCaptureContext {
|
|
14
|
+
readonly offlineEngine: RealtimeEngine;
|
|
15
|
+
readonly realtimeNode: SonareRealtimeEngineNode;
|
|
16
|
+
sendCommand(command: {
|
|
17
|
+
type: SonareEngineCommandType;
|
|
18
|
+
targetId?: number;
|
|
19
|
+
sampleTime?: number;
|
|
20
|
+
argFloat?: number;
|
|
21
|
+
argInt?: number;
|
|
22
|
+
}): boolean;
|
|
23
|
+
readonly offlineChannelCount: number;
|
|
24
|
+
postSync(message: SonareEngineSyncMessage): void;
|
|
25
|
+
getCaptureConfig(): CaptureConfig | undefined;
|
|
26
|
+
setCaptureConfig(config: CaptureConfig): void;
|
|
27
|
+
}
|
|
28
|
+
export declare function configureCapture(ctx: EngineCaptureContext, options: CaptureOptions): void;
|
|
29
|
+
export declare function armRecord(ctx: EngineCaptureContext, trackId: string | number, enabled: boolean): boolean;
|
|
30
|
+
export declare function punch(ctx: EngineCaptureContext, inPpq: number, outPpq: number): boolean;
|
|
31
|
+
export declare function captureStatus(ctx: EngineCaptureContext): Promise<EngineCaptureStatus>;
|
|
32
|
+
export declare function capturedAudio(ctx: EngineCaptureContext): Promise<Float32Array[]>;
|
|
33
|
+
export declare function resetCapture(ctx: EngineCaptureContext): Promise<void>;
|
|
34
|
+
export {};
|
|
35
|
+
//# sourceMappingURL=engine-capture-facade.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"engine-capture-facade.d.ts","sourceRoot":"","sources":["../../src/worklet/engine-capture-facade.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AACpE,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,eAAe,CAAC;AAC9D,OAAO,EAAsB,KAAK,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAC3E,OAAO,KAAK,EAAE,8BAA8B,EAAE,uBAAuB,EAAE,MAAM,YAAY,CAAC;AAC1F,OAAO,EAAE,uBAAuB,EAAE,MAAM,YAAY,CAAC;AAErD,KAAK,aAAa,GAAG,IAAI,CAAC,8BAA8B,EAAE,MAAM,CAAC,CAAC;AAElE;;;;;GAKG;AACH,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,aAAa,EAAE,cAAc,CAAC;IACvC,QAAQ,CAAC,YAAY,EAAE,wBAAwB,CAAC;IAChD,WAAW,CAAC,OAAO,EAAE;QACnB,IAAI,EAAE,uBAAuB,CAAC;QAC9B,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,MAAM,CAAC,EAAE,MAAM,CAAC;KACjB,GAAG,OAAO,CAAC;IACZ,QAAQ,CAAC,mBAAmB,EAAE,MAAM,CAAC;IACrC,QAAQ,CAAC,OAAO,EAAE,uBAAuB,GAAG,IAAI,CAAC;IACjD,gBAAgB,IAAI,aAAa,GAAG,SAAS,CAAC;IAC9C,gBAAgB,CAAC,MAAM,EAAE,aAAa,GAAG,IAAI,CAAC;CAC/C;AAED,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,oBAAoB,EAAE,OAAO,EAAE,cAAc,GAAG,IAAI,CAQzF;AAED,wBAAgB,SAAS,CACvB,GAAG,EAAE,oBAAoB,EACzB,OAAO,EAAE,MAAM,GAAG,MAAM,EACxB,OAAO,EAAE,OAAO,GACf,OAAO,CAcT;AAED,wBAAgB,KAAK,CAAC,GAAG,EAAE,oBAAoB,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAevF;AAED,wBAAgB,aAAa,CAAC,GAAG,EAAE,oBAAoB,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAErF;AAED,wBAAgB,aAAa,CAAC,GAAG,EAAE,oBAAoB,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,CAEhF;AAED,wBAAsB,YAAY,CAAC,GAAG,EAAE,oBAAoB,GAAG,OAAO,CAAC,IAAI,CAAC,CAG3E"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import type { EngineClip, EngineMidiClipSchedule, RealtimeEngine } from '../index';
|
|
2
|
+
import type { ClipPageProvider } from '../realtime_engine';
|
|
3
|
+
import type { SonareEngineSyncMessage } from './messages';
|
|
4
|
+
/**
|
|
5
|
+
* Collaborator surface the audio/MIDI clip scheduling helpers need from the
|
|
6
|
+
* owning {@link SonareEngine}: the clip stores they mutate, the offline engine
|
|
7
|
+
* they mirror into, the sync poster, and the clip-id allocator / lane resolvers.
|
|
8
|
+
*/
|
|
9
|
+
export interface EngineClipContext {
|
|
10
|
+
readonly offlineEngine: RealtimeEngine;
|
|
11
|
+
readonly clips: Map<number, EngineClip>;
|
|
12
|
+
readonly midiClips: Map<number, EngineMidiClipSchedule>;
|
|
13
|
+
allocateClipId(): number;
|
|
14
|
+
postSync(message: SonareEngineSyncMessage, transfer?: Transferable[]): void;
|
|
15
|
+
resolveTargetId(target: string | number): number;
|
|
16
|
+
ensureTrackLane(target: string | number): number;
|
|
17
|
+
/** Commits a provider already primed through the worklet's OPFS pull bridge. */
|
|
18
|
+
commitWorkletClipPageProvider(clip: EngineClip): boolean;
|
|
19
|
+
}
|
|
20
|
+
export declare function addClip(ctx: EngineClipContext, trackId: string | number, buffer: Float32Array[] | ClipPageProvider, startPpq: number, opts?: Partial<Omit<EngineClip, 'channels' | 'pageProvider' | 'startPpq'>>): number;
|
|
21
|
+
export declare function removeClip(ctx: EngineClipContext, clipId: number): void;
|
|
22
|
+
export declare function setMidiClips(ctx: EngineClipContext, clips: readonly EngineMidiClipSchedule[]): void;
|
|
23
|
+
//# sourceMappingURL=engine-clips.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"engine-clips.d.ts","sourceRoot":"","sources":["../../src/worklet/engine-clips.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,sBAAsB,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AACnF,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAC3D,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,YAAY,CAAC;AAE1D;;;;GAIG;AACH,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,aAAa,EAAE,cAAc,CAAC;IACvC,QAAQ,CAAC,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IACxC,QAAQ,CAAC,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE,sBAAsB,CAAC,CAAC;IACxD,cAAc,IAAI,MAAM,CAAC;IACzB,QAAQ,CAAC,OAAO,EAAE,uBAAuB,EAAE,QAAQ,CAAC,EAAE,YAAY,EAAE,GAAG,IAAI,CAAC;IAC5E,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC;IACjD,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC;IACjD,gFAAgF;IAChF,6BAA6B,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC;CAC1D;AAQD,wBAAgB,OAAO,CACrB,GAAG,EAAE,iBAAiB,EACtB,OAAO,EAAE,MAAM,GAAG,MAAM,EACxB,MAAM,EAAE,YAAY,EAAE,GAAG,gBAAgB,EACzC,QAAQ,EAAE,MAAM,EAChB,IAAI,GAAE,OAAO,CAAC,IAAI,CAAC,UAAU,EAAE,UAAU,GAAG,cAAc,GAAG,UAAU,CAAC,CAAM,GAC7E,MAAM,CAaR;AAED,wBAAgB,UAAU,CAAC,GAAG,EAAE,iBAAiB,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAGvE;AAED,wBAAgB,YAAY,CAC1B,GAAG,EAAE,iBAAiB,EACtB,KAAK,EAAE,SAAS,sBAAsB,EAAE,GACvC,IAAI,CAON"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import type { EngineMarker, RealtimeEngine } from '../index';
|
|
2
|
+
import type { SonareEngineSyncMessage } from './messages';
|
|
3
|
+
import { type SonareEngineCommandRecord } from './protocol';
|
|
4
|
+
/**
|
|
5
|
+
* Collaborator surface the marker helpers need from the owning
|
|
6
|
+
* {@link SonareEngine}: the marker store and id counter, the offline engine they
|
|
7
|
+
* mirror into, the sync poster, the realtime command sender, and the loop setter.
|
|
8
|
+
*/
|
|
9
|
+
export interface EngineMarkerContext {
|
|
10
|
+
readonly offlineEngine: RealtimeEngine;
|
|
11
|
+
readonly markers: Map<number, EngineMarker>;
|
|
12
|
+
getNextMarkerId(): number;
|
|
13
|
+
setNextMarkerId(value: number): void;
|
|
14
|
+
postSync(message: SonareEngineSyncMessage): void;
|
|
15
|
+
sendCommand(command: SonareEngineCommandRecord): boolean;
|
|
16
|
+
setLoop(startPpq: number, endPpq: number, enabled: boolean): boolean;
|
|
17
|
+
}
|
|
18
|
+
export declare function addMarker(ctx: EngineMarkerContext, ppq: number, name?: string): number;
|
|
19
|
+
/**
|
|
20
|
+
* Replaces the whole marker set in one call.
|
|
21
|
+
*
|
|
22
|
+
* Entries without an `id` are assigned fresh ids; entries carrying an `id`
|
|
23
|
+
* keep it (ids must be positive and unique within the list). Returns the
|
|
24
|
+
* resolved markers in the order given, so a caller can map its own marker
|
|
25
|
+
* identities to the engine ids used by `seekMarker`/`setLoopFromMarkers`.
|
|
26
|
+
*
|
|
27
|
+
* @param markers The full marker list (an empty list clears all markers).
|
|
28
|
+
* @returns The markers with their resolved engine ids.
|
|
29
|
+
*/
|
|
30
|
+
export declare function setMarkers(ctx: EngineMarkerContext, markers: ReadonlyArray<{
|
|
31
|
+
ppq: number;
|
|
32
|
+
name?: string;
|
|
33
|
+
id?: number;
|
|
34
|
+
}>): EngineMarker[];
|
|
35
|
+
export declare function markerCount(ctx: EngineMarkerContext): number;
|
|
36
|
+
export declare function markerByIndex(ctx: EngineMarkerContext, index: number): EngineMarker;
|
|
37
|
+
export declare function marker(ctx: EngineMarkerContext, markerId: number): EngineMarker;
|
|
38
|
+
export declare function seekMarker(ctx: EngineMarkerContext, markerId: number): boolean;
|
|
39
|
+
export declare function setLoopFromMarkers(ctx: EngineMarkerContext, startMarkerId: number, endMarkerId: number): boolean;
|
|
40
|
+
//# sourceMappingURL=engine-markers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"engine-markers.d.ts","sourceRoot":"","sources":["../../src/worklet/engine-markers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAE7D,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,YAAY,CAAC;AAC1D,OAAO,EAAE,KAAK,yBAAyB,EAA2B,MAAM,YAAY,CAAC;AAErF;;;;GAIG;AACH,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,aAAa,EAAE,cAAc,CAAC;IACvC,QAAQ,CAAC,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;IAC5C,eAAe,IAAI,MAAM,CAAC;IAC1B,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrC,QAAQ,CAAC,OAAO,EAAE,uBAAuB,GAAG,IAAI,CAAC;IACjD,WAAW,CAAC,OAAO,EAAE,yBAAyB,GAAG,OAAO,CAAC;IACzD,OAAO,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC;CACtE;AAED,wBAAgB,SAAS,CAAC,GAAG,EAAE,mBAAmB,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,SAAK,GAAG,MAAM,CAMlF;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,UAAU,CACxB,GAAG,EAAE,mBAAmB,EACxB,OAAO,EAAE,aAAa,CAAC;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,EAAE,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,GAClE,YAAY,EAAE,CAShB;AAED,wBAAgB,WAAW,CAAC,GAAG,EAAE,mBAAmB,GAAG,MAAM,CAE5D;AAED,wBAAgB,aAAa,CAAC,GAAG,EAAE,mBAAmB,EAAE,KAAK,EAAE,MAAM,GAAG,YAAY,CAEnF;AAED,wBAAgB,MAAM,CAAC,GAAG,EAAE,mBAAmB,EAAE,QAAQ,EAAE,MAAM,GAAG,YAAY,CAE/E;AAED,wBAAgB,UAAU,CAAC,GAAG,EAAE,mBAAmB,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAU9E;AAED,wBAAgB,kBAAkB,CAChC,GAAG,EAAE,mBAAmB,EACxB,aAAa,EAAE,MAAM,EACrB,WAAW,EAAE,MAAM,GAClB,OAAO,CAKT"}
|
|
@@ -0,0 +1,164 @@
|
|
|
1
|
+
import type { EngineBus, EngineTrackLane, EngineTrackSend, RealtimeEngine, SidechainSourceKind } from '../index';
|
|
2
|
+
import type { SonareEngineSyncMessage } from './messages';
|
|
3
|
+
/** A latest by-name insert value retained across a later topology replay. */
|
|
4
|
+
export interface InsertParamOverride {
|
|
5
|
+
target: StripJsonTarget;
|
|
6
|
+
insertIndex: number;
|
|
7
|
+
paramName: string;
|
|
8
|
+
value: number;
|
|
9
|
+
}
|
|
10
|
+
export type InsertParamOverrideMap = Map<string, InsertParamOverride>;
|
|
11
|
+
/**
|
|
12
|
+
* Collaborator surface the mixer/routing setters need from the owning
|
|
13
|
+
* {@link SonareEngine}: the offline engine they mirror writes into, the mutable
|
|
14
|
+
* routing stores (held by reference), the out-of-band sync poster, and the
|
|
15
|
+
* lane/bus declaration and mixer-sync helpers.
|
|
16
|
+
*/
|
|
17
|
+
export interface EngineMixerContext {
|
|
18
|
+
readonly offlineEngine: RealtimeEngine;
|
|
19
|
+
readonly trackLaneIds: number[];
|
|
20
|
+
readonly trackSends: Map<number, EngineTrackSend[]>;
|
|
21
|
+
readonly trackOutputBus: Map<number, number>;
|
|
22
|
+
readonly trackSourceChannelLayout: Map<number, number>;
|
|
23
|
+
readonly laneSidechains: Map<string, {
|
|
24
|
+
trackId: number;
|
|
25
|
+
insertIndex: number;
|
|
26
|
+
sourceTrackId: number;
|
|
27
|
+
}>;
|
|
28
|
+
readonly busSidechains: Map<string, {
|
|
29
|
+
busId: number;
|
|
30
|
+
insertIndex: number;
|
|
31
|
+
sourceKind: number;
|
|
32
|
+
sourceId: number;
|
|
33
|
+
}>;
|
|
34
|
+
readonly masterSidechains: Map<number, {
|
|
35
|
+
insertIndex: number;
|
|
36
|
+
sourceKind: number;
|
|
37
|
+
sourceId: number;
|
|
38
|
+
}>;
|
|
39
|
+
readonly buses: EngineBus[];
|
|
40
|
+
readonly trackStripJson: Map<number, string>;
|
|
41
|
+
readonly busStripJson: Map<number, string>;
|
|
42
|
+
readonly insertParamOverrides: InsertParamOverrideMap;
|
|
43
|
+
clearInsertAutomationLanes(target: StripJsonTarget, forgetResolvedIds?: boolean): void;
|
|
44
|
+
flushOfflineMirror(): void;
|
|
45
|
+
postSync(message: SonareEngineSyncMessage): void;
|
|
46
|
+
ensureTrackLane(target: string | number): number;
|
|
47
|
+
ensureBus(busId: number): number;
|
|
48
|
+
mixerLanes(): EngineTrackLane[];
|
|
49
|
+
syncMixer(insertBaseResets?: StripJsonTarget[], oneShotInsertParamOverrides?: InsertParamOverride[]): void;
|
|
50
|
+
sendSmoothedParam(paramId: number, value: number): boolean;
|
|
51
|
+
getMasterStripJson(): string | undefined;
|
|
52
|
+
cacheMasterStripJson(sceneJson: string): void;
|
|
53
|
+
}
|
|
54
|
+
/** Addresses one strip's cached scene JSON, the state a syncMixer re-post replays. */
|
|
55
|
+
export type StripJsonTarget = {
|
|
56
|
+
kind: 'track';
|
|
57
|
+
trackId: number;
|
|
58
|
+
} | {
|
|
59
|
+
kind: 'bus';
|
|
60
|
+
busId: number;
|
|
61
|
+
} | {
|
|
62
|
+
kind: 'master';
|
|
63
|
+
};
|
|
64
|
+
/**
|
|
65
|
+
* Returns the insert identity used to decide whether native state can stay
|
|
66
|
+
* alive across a strip-scene update. Scalar strip fields are intentionally
|
|
67
|
+
* excluded. Track and master inserts use the native pre-then-post indexing;
|
|
68
|
+
* buses retain their scene order.
|
|
69
|
+
*/
|
|
70
|
+
export declare function decodedInsertSignature(sceneJson: string, target: StripJsonTarget): string;
|
|
71
|
+
/** Builds one-shot restores for manual insert edits before their bookkeeping is forgotten. */
|
|
72
|
+
export declare function constructionInsertOverrides(engine: RealtimeEngine, target: StripJsonTarget, overrides: InsertParamOverrideMap): InsertParamOverride[];
|
|
73
|
+
/** Applies construction restores to the control-side mirror before posting them. */
|
|
74
|
+
export declare function applyConstructionInsertOverrides(engine: RealtimeEngine, overrides: readonly InsertParamOverride[]): void;
|
|
75
|
+
/** Clears the native manual parameter bases for one strip after a replacement. */
|
|
76
|
+
export declare function clearInsertParameterBases(engine: RealtimeEngine, target: StripJsonTarget): void;
|
|
77
|
+
/** An empty construction scene used only within an explicit strip replacement. */
|
|
78
|
+
export declare function emptyStripJson(target: StripJsonTarget): string;
|
|
79
|
+
/** Drop bindings whose insert was removed by an explicit scene replacement. */
|
|
80
|
+
export declare function pruneStripSidechains(ctx: EngineMixerContext, target: StripJsonTarget, sceneJson: string): void;
|
|
81
|
+
export declare function hasInsertParamOverrides(overrides: InsertParamOverrideMap, target: StripJsonTarget): boolean;
|
|
82
|
+
/** Apply and validate one candidate scene without rebuilding it through an empty scene. */
|
|
83
|
+
export declare function applyFullStripJson(engine: RealtimeEngine, target: StripJsonTarget, sceneJson: string): void;
|
|
84
|
+
/** Builds a collision-safe key for one target/insert/parameter tuple. */
|
|
85
|
+
export declare function insertParamOverrideKey(override: InsertParamOverride): string;
|
|
86
|
+
/** Removes all retained insert values for one strip after a full scene replacement. */
|
|
87
|
+
export declare function clearInsertParamOverrides(overrides: InsertParamOverrideMap, target: StripJsonTarget): void;
|
|
88
|
+
/** Reads a strip's cached scene JSON; undefined when none was ever set. */
|
|
89
|
+
export declare function cachedStripJson(ctx: EngineMixerContext, target: StripJsonTarget): string | undefined;
|
|
90
|
+
/** Replaces a strip's cached scene JSON without syncing it. */
|
|
91
|
+
export declare function cacheStripJson(ctx: EngineMixerContext, target: StripJsonTarget, sceneJson: string): void;
|
|
92
|
+
/** Builds the engine's track-lane descriptors from the current routing stores. */
|
|
93
|
+
export declare function mixerLanes(ctx: EngineMixerContext): EngineTrackLane[];
|
|
94
|
+
/**
|
|
95
|
+
* Mirrors the current mixer routing into the offline engine and posts the full
|
|
96
|
+
* mixer-sync message (lanes, buses, strip JSON, sidechains) to the worklet.
|
|
97
|
+
*/
|
|
98
|
+
export declare function syncMixer(ctx: EngineMixerContext, busesAlreadyApplied?: boolean, insertBaseResets?: StripJsonTarget[], oneShotInsertParamOverrides?: InsertParamOverride[]): void;
|
|
99
|
+
/**
|
|
100
|
+
* Reapplies retained by-name values after native topology setters clear their
|
|
101
|
+
* smoother slots. This runs once per mixer sync, never once per knob tick.
|
|
102
|
+
*/
|
|
103
|
+
export declare function replayInsertParamOverrides(ctx: EngineMixerContext, lanes?: EngineTrackLane[], buses?: EngineBus[]): void;
|
|
104
|
+
/**
|
|
105
|
+
* Declares the mixer track lanes in an explicit order.
|
|
106
|
+
*
|
|
107
|
+
* Lane indices are append-only: once a track id occupies a lane, its index
|
|
108
|
+
* stays fixed for the engine's lifetime. The given list must therefore start
|
|
109
|
+
* with the already-declared lane ids in their current order and may only
|
|
110
|
+
* append new track ids after them. Entries carrying `sends` replace that
|
|
111
|
+
* track's send list; entries without `sends` leave existing sends untouched.
|
|
112
|
+
* The same omission rule preserves an existing source channel layout.
|
|
113
|
+
*
|
|
114
|
+
* @param lanes Track ids or lane descriptors in the desired lane order.
|
|
115
|
+
*/
|
|
116
|
+
export declare function setTrackLanes(ctx: EngineMixerContext, lanes: ReadonlyArray<number | EngineTrackLane>): void;
|
|
117
|
+
/** Ensures a lane exists, committing it only after native routing accepts it. */
|
|
118
|
+
export declare function ensureTrackLane(ctx: EngineMixerContext, target: string | number): number;
|
|
119
|
+
/**
|
|
120
|
+
* Routes a track lane's post-fader output into a declared bus instead of
|
|
121
|
+
* the master mix (group/folder routing); busId 0 restores the master mix.
|
|
122
|
+
*/
|
|
123
|
+
export declare function setTrackOutputBus(ctx: EngineMixerContext, target: string | number, busId: number): void;
|
|
124
|
+
/**
|
|
125
|
+
* Keys one insert of a lane strip from another lane's post-strip pre-fader
|
|
126
|
+
* audio (ducking/sidechainRouter inserts). sourceTarget null removes the
|
|
127
|
+
* binding.
|
|
128
|
+
*/
|
|
129
|
+
export declare function setLaneSidechain(ctx: EngineMixerContext, target: string | number, insertIndex: number, sourceTarget: string | number | null): void;
|
|
130
|
+
/**
|
|
131
|
+
* Keys one insert of a bus strip from a track lane or another bus
|
|
132
|
+
* (ducking/sidechainRouter inserts). `sourceId` 0 removes the binding. The
|
|
133
|
+
* binding is cached for resync only once the engine has accepted it.
|
|
134
|
+
*/
|
|
135
|
+
export declare function setBusSidechain(ctx: EngineMixerContext, busId: number, insertIndex: number, kind: SidechainSourceKind | number, sourceId: number): void;
|
|
136
|
+
/**
|
|
137
|
+
* Keys one insert of the master strip from a track lane or a bus. Same source
|
|
138
|
+
* rules as {@link setBusSidechain}.
|
|
139
|
+
*/
|
|
140
|
+
export declare function setMasterSidechain(ctx: EngineMixerContext, insertIndex: number, kind: SidechainSourceKind | number, sourceId: number): void;
|
|
141
|
+
export declare function setSends(ctx: EngineMixerContext, target: string | number, sends: EngineTrackSend[]): void;
|
|
142
|
+
export declare function setTrackBuses(ctx: EngineMixerContext, buses: EngineBus[]): void;
|
|
143
|
+
export declare function setBusGain(ctx: EngineMixerContext, busId: number, db: number): boolean;
|
|
144
|
+
/** Control-side state a strip-scene replacement reads and updates. */
|
|
145
|
+
export interface StripSceneContext {
|
|
146
|
+
readonly offlineEngine: RealtimeEngine;
|
|
147
|
+
readonly insertParamOverrides: InsertParamOverrideMap;
|
|
148
|
+
clearInsertAutomationLanes(target: StripJsonTarget): void;
|
|
149
|
+
}
|
|
150
|
+
/**
|
|
151
|
+
* Applies a strip scene to the offline mirror and returns what the realtime
|
|
152
|
+
* sync must repeat: the targets whose manual insert bases it clears and the
|
|
153
|
+
* construction values it restores. A changed insert chain forgets manual edits;
|
|
154
|
+
* an equal chain with manual edits restores each edited parameter's
|
|
155
|
+
* construction value. Native state of equal inserts is kept either way.
|
|
156
|
+
*/
|
|
157
|
+
export declare function replaceStripScene(ctx: StripSceneContext, target: StripJsonTarget, previousJson: string | undefined, sceneJson: string): {
|
|
158
|
+
insertBaseResets: StripJsonTarget[];
|
|
159
|
+
constructionOverrides: InsertParamOverride[];
|
|
160
|
+
};
|
|
161
|
+
export declare function setBusStripJson(ctx: EngineMixerContext, busId: number, sceneJson: string): void;
|
|
162
|
+
/** Applies a master strip scene while retaining native state for equal inserts. */
|
|
163
|
+
export declare function setMasterStripJson(ctx: EngineMixerContext, sceneJson: string): void;
|
|
164
|
+
//# sourceMappingURL=engine-mixer-facade.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"engine-mixer-facade.d.ts","sourceRoot":"","sources":["../../src/worklet/engine-mixer-facade.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
import type { EngineCaptureStatus, EngineTransportState } from '../index';
|
|
2
|
+
import type { SonareEngineClipPageRequestMessage, SonareEngineSyncErrorMessage, SonareRealtimeEngineNodeCapabilities, SonareRealtimeEngineNodeOptions, SonareWorkletExternalMidiEvent } from './messages';
|
|
3
|
+
import { type SonareClipPageRequestRingBuffer, type SonareEngineCommandRecord, type SonareEngineCommandRingBuffer, type SonareEngineTelemetryRecord, type SonareEngineTelemetryRingBuffer, type SonareExternalMidiRingBuffer, type SonareMeterRingBuffer, type SonareScopeRingBuffer, type SonareWorkletMeterSnapshot, type SonareWorkletScopeSnapshot } from './protocol';
|
|
4
|
+
export declare class SonareRealtimeEngineNode {
|
|
5
|
+
readonly node: AudioWorkletNode;
|
|
6
|
+
readonly capabilities: SonareRealtimeEngineNodeCapabilities;
|
|
7
|
+
readonly commandRing?: SonareEngineCommandRingBuffer;
|
|
8
|
+
readonly telemetryRing?: SonareEngineTelemetryRingBuffer;
|
|
9
|
+
readonly meterRing?: SonareMeterRingBuffer;
|
|
10
|
+
readonly scopeRing?: SonareScopeRingBuffer;
|
|
11
|
+
readonly clipPageRequestRing?: SonareClipPageRequestRingBuffer;
|
|
12
|
+
readonly externalMidiRing?: SonareExternalMidiRingBuffer;
|
|
13
|
+
readonly ready: Promise<void>;
|
|
14
|
+
private telemetryReadIndex;
|
|
15
|
+
private meterReadIndex;
|
|
16
|
+
private scopeReadIndex;
|
|
17
|
+
private clipPageRequestDroppedRead;
|
|
18
|
+
private ringPollTimer;
|
|
19
|
+
private telemetryListeners;
|
|
20
|
+
private meterListeners;
|
|
21
|
+
private scopeListeners;
|
|
22
|
+
private midiOutListeners;
|
|
23
|
+
private clipPageRequestListeners;
|
|
24
|
+
private syncErrorListeners;
|
|
25
|
+
private captureRequestId;
|
|
26
|
+
private readonly captureRequests;
|
|
27
|
+
private transportRequestId;
|
|
28
|
+
private readonly transportRequests;
|
|
29
|
+
private resolveReady;
|
|
30
|
+
private rejectReady;
|
|
31
|
+
private destroyed;
|
|
32
|
+
private constructor();
|
|
33
|
+
/** Subscribes to control-plane sync rejections reported by the worklet. */
|
|
34
|
+
onSyncError(listener: (message: SonareEngineSyncErrorMessage) => void): () => void;
|
|
35
|
+
static create(context: BaseAudioContext, options?: SonareRealtimeEngineNodeOptions): Promise<SonareRealtimeEngineNode>;
|
|
36
|
+
play(sampleTime?: number): boolean;
|
|
37
|
+
/** Queues a reset of the master's integrated-loudness accumulator. */
|
|
38
|
+
resetMasterLoudnessMeter(sampleTime?: number): boolean;
|
|
39
|
+
stop(sampleTime?: number): boolean;
|
|
40
|
+
seekSample(timelineSample: number, sampleTime?: number): boolean;
|
|
41
|
+
seekPpq(ppq: number, sampleTime?: number): boolean;
|
|
42
|
+
sendCommand(command: SonareEngineCommandRecord): boolean;
|
|
43
|
+
requestCaptureStatus(): Promise<EngineCaptureStatus>;
|
|
44
|
+
requestCapturedAudio(): Promise<Float32Array[]>;
|
|
45
|
+
requestCaptureReset(): Promise<void>;
|
|
46
|
+
requestTransportState(): Promise<EngineTransportState>;
|
|
47
|
+
pollTelemetry(): SonareEngineTelemetryRecord[];
|
|
48
|
+
pollMeters(): SonareWorkletMeterSnapshot[];
|
|
49
|
+
pollScope(): SonareWorkletScopeSnapshot[];
|
|
50
|
+
/** Drain lowered MIDI-1 records from the SAB ring on the main thread. */
|
|
51
|
+
pollMidiOut(): SonareWorkletExternalMidiEvent[];
|
|
52
|
+
/**
|
|
53
|
+
* Drains bounded paged-clip misses from the SAB ring and forwards one batch
|
|
54
|
+
* to subscribers. In postMessage mode the legacy handler remains available,
|
|
55
|
+
* but that degraded path is not realtime-safe for OPFS streaming.
|
|
56
|
+
*/
|
|
57
|
+
pollClipPageRequests(): SonareEngineClipPageRequestMessage | undefined;
|
|
58
|
+
onTelemetry(callback: (telemetry: SonareEngineTelemetryRecord) => void): () => void;
|
|
59
|
+
onMeter(callback: (meter: SonareWorkletMeterSnapshot) => void): () => void;
|
|
60
|
+
onScope(callback: (scope: SonareWorkletScopeSnapshot) => void): () => void;
|
|
61
|
+
/**
|
|
62
|
+
* Subscribe to external-MIDI batches drained from the engine (one call per
|
|
63
|
+
* render block that produced events), already lowered to MIDI 1.0 bytes for a
|
|
64
|
+
* Web MIDI output port. Returns an unsubscribe function.
|
|
65
|
+
*/
|
|
66
|
+
onMidiOut(callback: (events: SonareWorkletExternalMidiEvent[]) => void): () => void;
|
|
67
|
+
/**
|
|
68
|
+
* Subscribe to bounded batches of paged-clip misses from the worklet. The
|
|
69
|
+
* callback runs on the main thread and may initiate asynchronous OPFS I/O.
|
|
70
|
+
*/
|
|
71
|
+
onClipPageRequests(callback: (message: SonareEngineClipPageRequestMessage) => void): () => void;
|
|
72
|
+
destroy(): void;
|
|
73
|
+
private emitTelemetry;
|
|
74
|
+
private startRingPolling;
|
|
75
|
+
private stopRingPollingIfUnused;
|
|
76
|
+
private emitMeter;
|
|
77
|
+
private emitMidiOut;
|
|
78
|
+
private emitClipPageRequests;
|
|
79
|
+
private emitScope;
|
|
80
|
+
private sendCaptureRequest;
|
|
81
|
+
private sendTransportRequest;
|
|
82
|
+
}
|
|
83
|
+
//# sourceMappingURL=engine-node.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"engine-node.d.ts","sourceRoot":"","sources":["../../src/worklet/engine-node.ts"],"names":[],"mappings":"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"}
|