@algo-wasm/algo-wasm 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.
- package/CHANGELOG.md +18 -0
- package/LICENSE +661 -0
- package/NOTICE +15 -0
- package/README.md +36 -0
- package/dist/AlgoWasmError.d.ts +8 -0
- package/dist/AlgoWasmError.d.ts.map +1 -0
- package/dist/AlgoWasmError.js +9 -0
- package/dist/AlgoWasmError.js.map +1 -0
- package/dist/AlgoWasmPlayer.d.ts +48 -0
- package/dist/AlgoWasmPlayer.d.ts.map +1 -0
- package/dist/AlgoWasmPlayer.js +375 -0
- package/dist/AlgoWasmPlayer.js.map +1 -0
- package/dist/algo_wasm.wasm +0 -0
- package/dist/events.d.ts +9 -0
- package/dist/events.d.ts.map +1 -0
- package/dist/events.js +25 -0
- package/dist/events.js.map +1 -0
- package/dist/index.d.ts +7 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +6 -0
- package/dist/index.js.map +1 -0
- package/dist/integrations/phaser.d.ts +11 -0
- package/dist/integrations/phaser.d.ts.map +1 -0
- package/dist/integrations/phaser.js +16 -0
- package/dist/integrations/phaser.js.map +1 -0
- package/dist/integrations/react.d.ts +8 -0
- package/dist/integrations/react.d.ts.map +1 -0
- package/dist/integrations/react.js +28 -0
- package/dist/integrations/react.js.map +1 -0
- package/dist/integrations/svelte.d.ts +7 -0
- package/dist/integrations/svelte.d.ts.map +1 -0
- package/dist/integrations/svelte.js +17 -0
- package/dist/integrations/svelte.js.map +1 -0
- package/dist/integrations/vue.d.ts +8 -0
- package/dist/integrations/vue.d.ts.map +1 -0
- package/dist/integrations/vue.js +16 -0
- package/dist/integrations/vue.js.map +1 -0
- package/dist/loadWasm.d.ts +47 -0
- package/dist/loadWasm.d.ts.map +1 -0
- package/dist/loadWasm.js +229 -0
- package/dist/loadWasm.js.map +1 -0
- package/dist/profile-schema.json +464 -0
- package/dist/profile.d.ts +15 -0
- package/dist/profile.d.ts.map +1 -0
- package/dist/profile.js +525 -0
- package/dist/profile.js.map +1 -0
- package/dist/types.d.ts +189 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/dist/worklet/algo-worklet.d.ts +83 -0
- package/dist/worklet/algo-worklet.d.ts.map +1 -0
- package/dist/worklet/algo-worklet.js +471 -0
- package/dist/worklet/algo-worklet.js.map +1 -0
- package/package.json +56 -0
package/NOTICE
ADDED
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
AlgoWASM
|
|
2
|
+
Copyright (C) 2026 Agent 57951
|
|
3
|
+
|
|
4
|
+
This product includes software developed for the AlgoWASM project
|
|
5
|
+
(https://github.com/0xe25f/algowasm).
|
|
6
|
+
|
|
7
|
+
AlgoWASM is licensed under the GNU Affero General Public License v3.0 or
|
|
8
|
+
later (AGPL-3.0-or-later). See the LICENSE file for the full licence text.
|
|
9
|
+
|
|
10
|
+
If you run a modified version of this software as a network service, you
|
|
11
|
+
must make the complete corresponding source code available to users of
|
|
12
|
+
that service, as required by section 13 of the AGPL-3.0.
|
|
13
|
+
|
|
14
|
+
No third-party source code, samples, or copyrighted assets are bundled
|
|
15
|
+
with this software.
|
package/README.md
ADDED
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
# AlgoWASM
|
|
2
|
+
|
|
3
|
+
AlgoWASM is a WebAssembly-first deterministic algorithmic music engine for modern browsers.
|
|
4
|
+
|
|
5
|
+
It includes:
|
|
6
|
+
|
|
7
|
+
- `dist/index.js`: ESM TypeScript SDK output.
|
|
8
|
+
- `dist/index.d.ts`: public TypeScript declarations.
|
|
9
|
+
- `dist/algo_wasm.wasm`: Rust engine compiled to WebAssembly.
|
|
10
|
+
- `dist/worklet/algo-worklet.js`: AudioWorklet processor.
|
|
11
|
+
- `dist/profile-schema.json`: JSON schema for profiles.
|
|
12
|
+
|
|
13
|
+
See the repository README for full integration notes, examples, browser deployment notes, and development commands.
|
|
14
|
+
|
|
15
|
+
## Quick Start
|
|
16
|
+
|
|
17
|
+
```ts
|
|
18
|
+
import { AlgoWasmPlayer, builtInProfiles } from '@algo-wasm/algo-wasm';
|
|
19
|
+
|
|
20
|
+
const player = await AlgoWasmPlayer.create({
|
|
21
|
+
wasmUrl: '/algo_wasm.wasm',
|
|
22
|
+
workletUrl: '/algo-worklet.js',
|
|
23
|
+
profile: builtInProfiles.amigaHouse95ish(),
|
|
24
|
+
seed: 42n
|
|
25
|
+
});
|
|
26
|
+
|
|
27
|
+
await player.start();
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
Call `start()` from a user gesture such as a click or tap.
|
|
31
|
+
|
|
32
|
+
## Licence
|
|
33
|
+
|
|
34
|
+
AGPL-3.0-or-later.
|
|
35
|
+
|
|
36
|
+
Any application that uses this library and is distributed or offered as a network service must make its complete source code available under the same licence.
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { AlgoWasmErrorCode } from './types.js';
|
|
2
|
+
export declare class AlgoWasmError extends Error {
|
|
3
|
+
readonly code: AlgoWasmErrorCode;
|
|
4
|
+
constructor(code: AlgoWasmErrorCode, message: string, options?: {
|
|
5
|
+
cause?: unknown;
|
|
6
|
+
});
|
|
7
|
+
}
|
|
8
|
+
//# sourceMappingURL=AlgoWasmError.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AlgoWasmError.d.ts","sourceRoot":"","sources":["../src/AlgoWasmError.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAEpD,qBAAa,aAAc,SAAQ,KAAK;IACtC,QAAQ,CAAC,IAAI,EAAE,iBAAiB,CAAC;gBAErB,IAAI,EAAE,iBAAiB,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,OAAO,CAAA;KAAE;CAKpF"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AlgoWasmError.js","sourceRoot":"","sources":["../src/AlgoWasmError.ts"],"names":[],"mappings":"AAEA,MAAM,OAAO,aAAc,SAAQ,KAAK;IAC7B,IAAI,CAAoB;IAEjC,YAAY,IAAuB,EAAE,OAAe,EAAE,OAA6B;QACjF,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QACxB,IAAI,CAAC,IAAI,GAAG,eAAe,CAAC;QAC5B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACnB,CAAC;CACF"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import type { AlgoWasmEventHandler, AlgoWasmEventName, AlgoWasmGeneratedEvent, AlgoWasmMidiExportOptions, AlgoWasmMood, AlgoWasmOfflineRenderOptions, AlgoWasmPlayerOptions, AlgoWasmProfile, AlgoWasmSnapshot, AlgoWasmTrackId } from './types.js';
|
|
2
|
+
export declare class AlgoWasmPlayer {
|
|
3
|
+
private readonly emitter;
|
|
4
|
+
private readonly audioContext;
|
|
5
|
+
private readonly ownsAudioContext;
|
|
6
|
+
private readonly node;
|
|
7
|
+
private readonly wasmUrl;
|
|
8
|
+
private readonly workletUrl;
|
|
9
|
+
private readonly pending;
|
|
10
|
+
private commandId;
|
|
11
|
+
private destroyed;
|
|
12
|
+
private destroyPromise?;
|
|
13
|
+
private profile;
|
|
14
|
+
private seed;
|
|
15
|
+
private lastSnapshot;
|
|
16
|
+
private lastEvents;
|
|
17
|
+
private constructor();
|
|
18
|
+
static create(options: AlgoWasmPlayerOptions): Promise<AlgoWasmPlayer>;
|
|
19
|
+
start(): Promise<void>;
|
|
20
|
+
pause(): Promise<void>;
|
|
21
|
+
resume(): Promise<void>;
|
|
22
|
+
stop(): Promise<void>;
|
|
23
|
+
destroy(): Promise<void>;
|
|
24
|
+
private performDestroy;
|
|
25
|
+
setSeed(seed: bigint | number | string): void;
|
|
26
|
+
setProfile(profile: AlgoWasmProfile): void;
|
|
27
|
+
setVolume(volume: number): void;
|
|
28
|
+
setMuted(trackId: AlgoWasmTrackId, muted: boolean): void;
|
|
29
|
+
setSolo(trackId: AlgoWasmTrackId, solo: boolean): void;
|
|
30
|
+
setEnergy(value: number): void;
|
|
31
|
+
setIntensity(value: number): void;
|
|
32
|
+
setMood(mood: AlgoWasmMood): void;
|
|
33
|
+
setTempoRange(minBpm: number, maxBpm: number): void;
|
|
34
|
+
getSnapshot(): AlgoWasmSnapshot;
|
|
35
|
+
getCurrentEvents(): AlgoWasmGeneratedEvent[];
|
|
36
|
+
exportMidi(_options?: AlgoWasmMidiExportOptions): Promise<Uint8Array>;
|
|
37
|
+
renderOffline(options: AlgoWasmOfflineRenderOptions): Promise<Float32Array>;
|
|
38
|
+
on<Name extends AlgoWasmEventName>(eventName: Name, handler: AlgoWasmEventHandler<Name>): () => void;
|
|
39
|
+
off<Name extends AlgoWasmEventName>(eventName: Name, handler: AlgoWasmEventHandler<Name>): void;
|
|
40
|
+
private configure;
|
|
41
|
+
private postLiveCommand;
|
|
42
|
+
private sendBestEffort;
|
|
43
|
+
private sendCommand;
|
|
44
|
+
private handleMessage;
|
|
45
|
+
private updateSnapshot;
|
|
46
|
+
private assertAlive;
|
|
47
|
+
}
|
|
48
|
+
//# sourceMappingURL=AlgoWasmPlayer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AlgoWasmPlayer.d.ts","sourceRoot":"","sources":["../src/AlgoWasmPlayer.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EACV,oBAAoB,EACpB,iBAAiB,EACjB,sBAAsB,EAEtB,yBAAyB,EACzB,YAAY,EACZ,4BAA4B,EAC5B,qBAAqB,EACrB,eAAe,EACf,gBAAgB,EAChB,eAAe,EAChB,MAAM,YAAY,CAAC;AA+BpB,qBAAa,cAAc;IACzB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA8B;IACtD,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAe;IAC5C,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAU;IAC3C,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAmB;IACxC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;IACpC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAqC;IAC7D,OAAO,CAAC,SAAS,CAAK;IACtB,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,cAAc,CAAC,CAAgB;IACvC,OAAO,CAAC,OAAO,CAAkB;IACjC,OAAO,CAAC,IAAI,CAAS;IACrB,OAAO,CAAC,YAAY,CAAmB;IACvC,OAAO,CAAC,UAAU,CAAgC;IAElD,OAAO;WAqBM,MAAM,CAAC,OAAO,EAAE,qBAAqB,GAAG,OAAO,CAAC,cAAc,CAAC;IAgDtE,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAyBtB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAOtB,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;IAgBvB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAOrB,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;YAYhB,cAAc;IA2B5B,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,IAAI;IAK7C,UAAU,CAAC,OAAO,EAAE,eAAe,GAAG,IAAI;IAK1C,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAI/B,QAAQ,CAAC,OAAO,EAAE,eAAe,EAAE,KAAK,EAAE,OAAO,GAAG,IAAI;IAIxD,OAAO,CAAC,OAAO,EAAE,eAAe,EAAE,IAAI,EAAE,OAAO,GAAG,IAAI;IAItD,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAI9B,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAIjC,OAAO,CAAC,IAAI,EAAE,YAAY,GAAG,IAAI;IAIjC,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI;IAInD,WAAW,IAAI,gBAAgB;IAI/B,gBAAgB,IAAI,sBAAsB,EAAE;IAItC,UAAU,CAAC,QAAQ,GAAE,yBAA8B,GAAG,OAAO,CAAC,UAAU,CAAC;IAMzE,aAAa,CAAC,OAAO,EAAE,4BAA4B,GAAG,OAAO,CAAC,YAAY,CAAC;IA8BjF,EAAE,CAAC,IAAI,SAAS,iBAAiB,EAC/B,SAAS,EAAE,IAAI,EACf,OAAO,EAAE,oBAAoB,CAAC,IAAI,CAAC,GAClC,MAAM,IAAI;IAIb,GAAG,CAAC,IAAI,SAAS,iBAAiB,EAChC,SAAS,EAAE,IAAI,EACf,OAAO,EAAE,oBAAoB,CAAC,IAAI,CAAC,GAClC,IAAI;YAIO,SAAS;IA8CvB,OAAO,CAAC,eAAe;YAUT,cAAc;IAQ5B,OAAO,CAAC,WAAW;IAuBnB,OAAO,CAAC,aAAa;IAqDrB,OAAO,CAAC,cAAc;IAItB,OAAO,CAAC,WAAW;CAKpB"}
|
|
@@ -0,0 +1,375 @@
|
|
|
1
|
+
import { AlgoWasmError } from './AlgoWasmError.js';
|
|
2
|
+
import { AlgoWasmEventEmitter } from './events.js';
|
|
3
|
+
import { AlgoWasmEngineBinding, instantiateAlgoWasm } from './loadWasm.js';
|
|
4
|
+
import { builtInProfiles, normaliseSeed, validateProfile } from './profile.js';
|
|
5
|
+
export class AlgoWasmPlayer {
|
|
6
|
+
emitter = new AlgoWasmEventEmitter();
|
|
7
|
+
audioContext;
|
|
8
|
+
ownsAudioContext;
|
|
9
|
+
node;
|
|
10
|
+
wasmUrl;
|
|
11
|
+
workletUrl;
|
|
12
|
+
pending = new Map();
|
|
13
|
+
commandId = 1;
|
|
14
|
+
destroyed = false;
|
|
15
|
+
destroyPromise;
|
|
16
|
+
profile;
|
|
17
|
+
seed;
|
|
18
|
+
lastSnapshot;
|
|
19
|
+
lastEvents = [];
|
|
20
|
+
constructor(audioContext, ownsAudioContext, node, wasmUrl, workletUrl, profile, seed, initialSnapshot) {
|
|
21
|
+
this.audioContext = audioContext;
|
|
22
|
+
this.ownsAudioContext = ownsAudioContext;
|
|
23
|
+
this.node = node;
|
|
24
|
+
this.wasmUrl = wasmUrl;
|
|
25
|
+
this.workletUrl = workletUrl;
|
|
26
|
+
this.profile = profile;
|
|
27
|
+
this.seed = seed;
|
|
28
|
+
this.lastSnapshot = initialSnapshot;
|
|
29
|
+
this.node.port.onmessage = (event) => this.handleMessage(event.data);
|
|
30
|
+
}
|
|
31
|
+
static async create(options) {
|
|
32
|
+
assertBrowserSupport();
|
|
33
|
+
const profile = validateProfile(options.profile ?? builtInProfiles.amigaHouse95ish());
|
|
34
|
+
const seed = normaliseSeed(options.seed);
|
|
35
|
+
const wasmUrl = options.wasmUrl.toString();
|
|
36
|
+
const workletUrl = options.workletUrl.toString();
|
|
37
|
+
const ownsAudioContext = !options.audioContext;
|
|
38
|
+
const audioContext = options.audioContext ?? new AudioContext();
|
|
39
|
+
if (!audioContext.audioWorklet) {
|
|
40
|
+
throw new AlgoWasmError('browser_feature_missing', 'AudioWorklet is not available in this browser. AlgoWASM targets modern browsers from 2025 onwards.');
|
|
41
|
+
}
|
|
42
|
+
try {
|
|
43
|
+
await audioContext.audioWorklet.addModule(workletUrl);
|
|
44
|
+
}
|
|
45
|
+
catch (error) {
|
|
46
|
+
throw new AlgoWasmError('worklet_load_failed', `Could not load the AlgoWASM worklet from ${workletUrl}.`, {
|
|
47
|
+
cause: error
|
|
48
|
+
});
|
|
49
|
+
}
|
|
50
|
+
const node = new AudioWorkletNode(audioContext, 'algo-wasm-processor', {
|
|
51
|
+
numberOfInputs: 0,
|
|
52
|
+
numberOfOutputs: 1,
|
|
53
|
+
outputChannelCount: [2]
|
|
54
|
+
});
|
|
55
|
+
node.connect(audioContext.destination);
|
|
56
|
+
const initialSnapshot = createInitialSnapshot(profile, seed, audioContext.sampleRate);
|
|
57
|
+
const player = new AlgoWasmPlayer(audioContext, ownsAudioContext, node, wasmUrl, workletUrl, profile, seed, initialSnapshot);
|
|
58
|
+
await player.configure(options.volume ?? 0.8);
|
|
59
|
+
return player;
|
|
60
|
+
}
|
|
61
|
+
async start() {
|
|
62
|
+
this.assertAlive();
|
|
63
|
+
try {
|
|
64
|
+
const unlockState = await resumeAudioContext(this.audioContext);
|
|
65
|
+
if (unlockState === 'pending') {
|
|
66
|
+
this.emitter.emit('warning', 'AudioContext did not report a running state yet. Playback will continue when the browser unlocks audio.');
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
catch (error) {
|
|
70
|
+
throw new AlgoWasmError('audio_context_locked', 'AudioContext could not resume. Call start() from a user gesture such as a click or tap.', { cause: error });
|
|
71
|
+
}
|
|
72
|
+
const snapshot = (await this.sendCommand('start'));
|
|
73
|
+
this.updateSnapshot(snapshot);
|
|
74
|
+
this.emitter.emit('started', this.lastSnapshot);
|
|
75
|
+
}
|
|
76
|
+
async pause() {
|
|
77
|
+
this.assertAlive();
|
|
78
|
+
const snapshot = (await this.sendCommand('pause'));
|
|
79
|
+
this.updateSnapshot(snapshot);
|
|
80
|
+
this.emitter.emit('paused', this.lastSnapshot);
|
|
81
|
+
}
|
|
82
|
+
async resume() {
|
|
83
|
+
this.assertAlive();
|
|
84
|
+
const unlockState = await resumeAudioContext(this.audioContext);
|
|
85
|
+
if (unlockState === 'pending') {
|
|
86
|
+
this.emitter.emit('warning', 'AudioContext did not report a running state yet. Playback will continue when the browser unlocks audio.');
|
|
87
|
+
}
|
|
88
|
+
const snapshot = (await this.sendCommand('resume'));
|
|
89
|
+
this.updateSnapshot(snapshot);
|
|
90
|
+
this.emitter.emit('resumed', this.lastSnapshot);
|
|
91
|
+
}
|
|
92
|
+
async stop() {
|
|
93
|
+
this.assertAlive();
|
|
94
|
+
const snapshot = (await this.sendCommand('stop'));
|
|
95
|
+
this.updateSnapshot(snapshot);
|
|
96
|
+
this.emitter.emit('stopped', this.lastSnapshot);
|
|
97
|
+
}
|
|
98
|
+
async destroy() {
|
|
99
|
+
// Memoise the in-flight promise (set synchronously, before any await) so
|
|
100
|
+
// overlapping calls share one teardown instead of each racing to send
|
|
101
|
+
// their own "destroy" command and close the same AudioContext twice.
|
|
102
|
+
if (this.destroyPromise) {
|
|
103
|
+
return this.destroyPromise;
|
|
104
|
+
}
|
|
105
|
+
this.destroyPromise = this.performDestroy();
|
|
106
|
+
return this.destroyPromise;
|
|
107
|
+
}
|
|
108
|
+
async performDestroy() {
|
|
109
|
+
try {
|
|
110
|
+
await this.sendBestEffort('destroy');
|
|
111
|
+
}
|
|
112
|
+
finally {
|
|
113
|
+
this.destroyed = true;
|
|
114
|
+
for (const command of this.pending.values()) {
|
|
115
|
+
clearTimeout(command.timeout);
|
|
116
|
+
command.reject(new AlgoWasmError('destroyed', 'AlgoWASM player was destroyed.'));
|
|
117
|
+
}
|
|
118
|
+
this.pending.clear();
|
|
119
|
+
this.node.disconnect();
|
|
120
|
+
this.node.port.close();
|
|
121
|
+
this.emitter.clear();
|
|
122
|
+
if (this.ownsAudioContext && this.audioContext.state !== 'closed') {
|
|
123
|
+
try {
|
|
124
|
+
await this.audioContext.close();
|
|
125
|
+
}
|
|
126
|
+
catch {
|
|
127
|
+
// The browser may already be closing this context. Destruction must
|
|
128
|
+
// still resolve rather than reject.
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
setSeed(seed) {
|
|
134
|
+
this.seed = normaliseSeed(seed);
|
|
135
|
+
this.postLiveCommand('set-seed', { seed: this.seed.toString() });
|
|
136
|
+
}
|
|
137
|
+
setProfile(profile) {
|
|
138
|
+
this.profile = validateProfile(profile);
|
|
139
|
+
this.postLiveCommand('set-profile', { profile: this.profile });
|
|
140
|
+
}
|
|
141
|
+
setVolume(volume) {
|
|
142
|
+
this.postLiveCommand('set-volume', { value: clampUnit(volume) });
|
|
143
|
+
}
|
|
144
|
+
setMuted(trackId, muted) {
|
|
145
|
+
this.postLiveCommand('set-muted', { trackId, muted });
|
|
146
|
+
}
|
|
147
|
+
setSolo(trackId, solo) {
|
|
148
|
+
this.postLiveCommand('set-solo', { trackId, solo });
|
|
149
|
+
}
|
|
150
|
+
setEnergy(value) {
|
|
151
|
+
this.postLiveCommand('set-energy', { value: clampUnit(value) });
|
|
152
|
+
}
|
|
153
|
+
setIntensity(value) {
|
|
154
|
+
this.postLiveCommand('set-intensity', { value: clampUnit(value) });
|
|
155
|
+
}
|
|
156
|
+
setMood(mood) {
|
|
157
|
+
this.postLiveCommand('set-mood', { mood });
|
|
158
|
+
}
|
|
159
|
+
setTempoRange(minBpm, maxBpm) {
|
|
160
|
+
this.postLiveCommand('set-tempo-range', { minBpm, maxBpm });
|
|
161
|
+
}
|
|
162
|
+
getSnapshot() {
|
|
163
|
+
return structuredClone(this.lastSnapshot);
|
|
164
|
+
}
|
|
165
|
+
getCurrentEvents() {
|
|
166
|
+
return structuredClone(this.lastEvents);
|
|
167
|
+
}
|
|
168
|
+
async exportMidi(_options = {}) {
|
|
169
|
+
this.assertAlive();
|
|
170
|
+
const bytes = (await this.sendCommand('export-midi'));
|
|
171
|
+
return new Uint8Array(bytes);
|
|
172
|
+
}
|
|
173
|
+
async renderOffline(options) {
|
|
174
|
+
this.assertAlive();
|
|
175
|
+
const profile = validateProfile(options.profile ?? this.profile);
|
|
176
|
+
const seed = normaliseSeed(options.seed ?? this.seed);
|
|
177
|
+
const sampleRate = options.sampleRate ?? this.audioContext.sampleRate;
|
|
178
|
+
const frames = Math.max(0, Math.floor(options.seconds * sampleRate));
|
|
179
|
+
const output = new Float32Array(frames * 2);
|
|
180
|
+
const { instance } = await instantiateAlgoWasm(this.wasmUrl);
|
|
181
|
+
const binding = new AlgoWasmEngineBinding(instance);
|
|
182
|
+
try {
|
|
183
|
+
binding.create(sampleRate, seed, profile);
|
|
184
|
+
binding.start();
|
|
185
|
+
const chunkFrames = 2048;
|
|
186
|
+
let offset = 0;
|
|
187
|
+
while (offset < output.length) {
|
|
188
|
+
const chunkLength = Math.min(chunkFrames * 2, output.length - offset);
|
|
189
|
+
const chunk = new Float32Array(chunkLength);
|
|
190
|
+
binding.renderTo(chunk);
|
|
191
|
+
output.set(chunk, offset);
|
|
192
|
+
offset += chunkLength;
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
finally {
|
|
196
|
+
binding.destroy();
|
|
197
|
+
}
|
|
198
|
+
return output;
|
|
199
|
+
}
|
|
200
|
+
on(eventName, handler) {
|
|
201
|
+
return this.emitter.on(eventName, handler);
|
|
202
|
+
}
|
|
203
|
+
off(eventName, handler) {
|
|
204
|
+
this.emitter.off(eventName, handler);
|
|
205
|
+
}
|
|
206
|
+
async configure(volume) {
|
|
207
|
+
const wasmBytes = await fetchWasmBytes(this.wasmUrl);
|
|
208
|
+
const ready = new Promise((resolve, reject) => {
|
|
209
|
+
let offReady = () => { };
|
|
210
|
+
let offError = () => { };
|
|
211
|
+
const timeout = setTimeout(() => {
|
|
212
|
+
offReady();
|
|
213
|
+
offError();
|
|
214
|
+
reject(new AlgoWasmError('engine_failed', 'AlgoWASM worklet did not become ready within five seconds.'));
|
|
215
|
+
}, 5000);
|
|
216
|
+
offReady = this.on('ready', snapshot => {
|
|
217
|
+
clearTimeout(timeout);
|
|
218
|
+
offReady();
|
|
219
|
+
offError();
|
|
220
|
+
resolve(snapshot);
|
|
221
|
+
});
|
|
222
|
+
offError = this.on('error', error => {
|
|
223
|
+
clearTimeout(timeout);
|
|
224
|
+
offReady();
|
|
225
|
+
offError();
|
|
226
|
+
reject(error);
|
|
227
|
+
});
|
|
228
|
+
});
|
|
229
|
+
this.node.port.postMessage({
|
|
230
|
+
type: 'configure',
|
|
231
|
+
wasmUrl: this.wasmUrl,
|
|
232
|
+
wasmBytes,
|
|
233
|
+
profile: this.profile,
|
|
234
|
+
seed: this.seed.toString(),
|
|
235
|
+
volume: clampUnit(volume),
|
|
236
|
+
sampleRate: this.audioContext.sampleRate
|
|
237
|
+
}, [wasmBytes]);
|
|
238
|
+
this.updateSnapshot(await ready);
|
|
239
|
+
}
|
|
240
|
+
postLiveCommand(type, payload) {
|
|
241
|
+
if (this.destroyed) {
|
|
242
|
+
throw new AlgoWasmError('destroyed', 'AlgoWASM player has been destroyed.');
|
|
243
|
+
}
|
|
244
|
+
void this.sendCommand(type, payload).catch(error => {
|
|
245
|
+
this.emitter.emit('error', error instanceof Error ? error : new Error(String(error)));
|
|
246
|
+
});
|
|
247
|
+
}
|
|
248
|
+
async sendBestEffort(type, payload = {}) {
|
|
249
|
+
try {
|
|
250
|
+
await this.sendCommand(type, payload, 1000);
|
|
251
|
+
}
|
|
252
|
+
catch {
|
|
253
|
+
// Destruction must finish even if the worklet has already gone away.
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
sendCommand(type, payload = {}, timeoutMs = 5000) {
|
|
257
|
+
this.assertAlive();
|
|
258
|
+
const id = this.commandId++;
|
|
259
|
+
return new Promise((resolve, reject) => {
|
|
260
|
+
const timeout = setTimeout(() => {
|
|
261
|
+
this.pending.delete(id);
|
|
262
|
+
reject(new AlgoWasmError('engine_failed', `Worklet command ${type} timed out.`));
|
|
263
|
+
}, timeoutMs);
|
|
264
|
+
this.pending.set(id, { resolve, reject, timeout });
|
|
265
|
+
this.node.port.postMessage({
|
|
266
|
+
type,
|
|
267
|
+
id,
|
|
268
|
+
...payload
|
|
269
|
+
});
|
|
270
|
+
});
|
|
271
|
+
}
|
|
272
|
+
handleMessage(message) {
|
|
273
|
+
if (message.type === 'ready') {
|
|
274
|
+
this.updateSnapshot(message.snapshot);
|
|
275
|
+
this.emitter.emit('ready', this.lastSnapshot);
|
|
276
|
+
return;
|
|
277
|
+
}
|
|
278
|
+
if (message.type === 'events') {
|
|
279
|
+
this.lastEvents = message.events;
|
|
280
|
+
if (message.snapshot) {
|
|
281
|
+
this.updateSnapshot(message.snapshot);
|
|
282
|
+
}
|
|
283
|
+
if (message.metrics) {
|
|
284
|
+
this.emitter.emit('metrics', message.metrics);
|
|
285
|
+
}
|
|
286
|
+
for (const event of message.events) {
|
|
287
|
+
if (event.type === 'section-change') {
|
|
288
|
+
this.emitter.emit('section-change', event);
|
|
289
|
+
}
|
|
290
|
+
else if (event.type === 'bar') {
|
|
291
|
+
this.emitter.emit('bar', event);
|
|
292
|
+
}
|
|
293
|
+
else if (event.type === 'beat') {
|
|
294
|
+
this.emitter.emit('beat', event);
|
|
295
|
+
}
|
|
296
|
+
}
|
|
297
|
+
return;
|
|
298
|
+
}
|
|
299
|
+
if (message.type === 'error') {
|
|
300
|
+
this.emitter.emit('error', new AlgoWasmError('engine_failed', message.error));
|
|
301
|
+
return;
|
|
302
|
+
}
|
|
303
|
+
const pending = this.pending.get(message.id);
|
|
304
|
+
if (!pending) {
|
|
305
|
+
return;
|
|
306
|
+
}
|
|
307
|
+
clearTimeout(pending.timeout);
|
|
308
|
+
this.pending.delete(message.id);
|
|
309
|
+
if (message.ok) {
|
|
310
|
+
pending.resolve(message.result);
|
|
311
|
+
return;
|
|
312
|
+
}
|
|
313
|
+
pending.reject(new AlgoWasmError('engine_failed', message.error ?? 'Worklet command failed.'));
|
|
314
|
+
}
|
|
315
|
+
updateSnapshot(snapshot) {
|
|
316
|
+
this.lastSnapshot = structuredClone(snapshot);
|
|
317
|
+
}
|
|
318
|
+
assertAlive() {
|
|
319
|
+
if (this.destroyed) {
|
|
320
|
+
throw new AlgoWasmError('destroyed', 'AlgoWASM player has been destroyed.');
|
|
321
|
+
}
|
|
322
|
+
}
|
|
323
|
+
}
|
|
324
|
+
function assertBrowserSupport() {
|
|
325
|
+
if (typeof AudioContext === 'undefined') {
|
|
326
|
+
throw new AlgoWasmError('browser_feature_missing', 'AudioContext is not available in this browser. AlgoWASM targets modern browsers from 2025 onwards.');
|
|
327
|
+
}
|
|
328
|
+
if (typeof WebAssembly === 'undefined') {
|
|
329
|
+
throw new AlgoWasmError('browser_feature_missing', 'WebAssembly is not available in this browser. AlgoWASM cannot run here.');
|
|
330
|
+
}
|
|
331
|
+
}
|
|
332
|
+
function createInitialSnapshot(profile, seed, sampleRate) {
|
|
333
|
+
return {
|
|
334
|
+
seed: seed.toString(),
|
|
335
|
+
sampleRate,
|
|
336
|
+
bpm: profile.tempo.defaultBpm,
|
|
337
|
+
currentBar: 0,
|
|
338
|
+
currentBeat: 1,
|
|
339
|
+
currentSection: 'intro',
|
|
340
|
+
energy: 0.5,
|
|
341
|
+
intensity: 0.5,
|
|
342
|
+
isPlaying: false,
|
|
343
|
+
tracks: profile.mixer.tracks.map(track => ({
|
|
344
|
+
id: track.track,
|
|
345
|
+
muted: false,
|
|
346
|
+
solo: false,
|
|
347
|
+
level: track.gain
|
|
348
|
+
}))
|
|
349
|
+
};
|
|
350
|
+
}
|
|
351
|
+
function clampUnit(value) {
|
|
352
|
+
if (!Number.isFinite(value)) {
|
|
353
|
+
return 0;
|
|
354
|
+
}
|
|
355
|
+
return Math.min(1, Math.max(0, value));
|
|
356
|
+
}
|
|
357
|
+
async function resumeAudioContext(audioContext) {
|
|
358
|
+
if (audioContext.state === 'running') {
|
|
359
|
+
return 'running';
|
|
360
|
+
}
|
|
361
|
+
return Promise.race([
|
|
362
|
+
audioContext.resume().then(() => 'running'),
|
|
363
|
+
new Promise(resolve => {
|
|
364
|
+
setTimeout(() => resolve('pending'), 1200);
|
|
365
|
+
})
|
|
366
|
+
]);
|
|
367
|
+
}
|
|
368
|
+
async function fetchWasmBytes(url) {
|
|
369
|
+
const response = await fetch(url);
|
|
370
|
+
if (!response.ok) {
|
|
371
|
+
throw new AlgoWasmError('wasm_load_failed', `Could not load AlgoWASM from ${url}. The server returned ${response.status}.`);
|
|
372
|
+
}
|
|
373
|
+
return response.arrayBuffer();
|
|
374
|
+
}
|
|
375
|
+
//# sourceMappingURL=AlgoWasmPlayer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AlgoWasmPlayer.js","sourceRoot":"","sources":["../src/AlgoWasmPlayer.ts"],"names":[],"mappings":"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"}
|
|
Binary file
|
package/dist/events.d.ts
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { AlgoWasmEventHandler, AlgoWasmEventName, AlgoWasmEventPayloads } from './types.js';
|
|
2
|
+
export declare class AlgoWasmEventEmitter {
|
|
3
|
+
private readonly handlers;
|
|
4
|
+
on<Name extends AlgoWasmEventName>(eventName: Name, handler: AlgoWasmEventHandler<Name>): () => void;
|
|
5
|
+
off<Name extends AlgoWasmEventName>(eventName: Name, handler: AlgoWasmEventHandler<Name>): void;
|
|
6
|
+
emit<Name extends AlgoWasmEventName>(eventName: Name, payload: AlgoWasmEventPayloads[Name]): void;
|
|
7
|
+
clear(): void;
|
|
8
|
+
}
|
|
9
|
+
//# sourceMappingURL=events.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"events.d.ts","sourceRoot":"","sources":["../src/events.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,oBAAoB,EACpB,iBAAiB,EACjB,qBAAqB,EACtB,MAAM,YAAY,CAAC;AAEpB,qBAAa,oBAAoB;IAC/B,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAiE;IAE1F,EAAE,CAAC,IAAI,SAAS,iBAAiB,EAC/B,SAAS,EAAE,IAAI,EACf,OAAO,EAAE,oBAAoB,CAAC,IAAI,CAAC,GAClC,MAAM,IAAI;IAQb,GAAG,CAAC,IAAI,SAAS,iBAAiB,EAChC,SAAS,EAAE,IAAI,EACf,OAAO,EAAE,oBAAoB,CAAC,IAAI,CAAC,GAClC,IAAI;IAIP,IAAI,CAAC,IAAI,SAAS,iBAAiB,EACjC,SAAS,EAAE,IAAI,EACf,OAAO,EAAE,qBAAqB,CAAC,IAAI,CAAC,GACnC,IAAI;IAYP,KAAK,IAAI,IAAI;CAGd"}
|
package/dist/events.js
ADDED
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
export class AlgoWasmEventEmitter {
|
|
2
|
+
handlers = new Map();
|
|
3
|
+
on(eventName, handler) {
|
|
4
|
+
const handlers = this.handlers.get(eventName) ?? new Set();
|
|
5
|
+
handlers.add(handler);
|
|
6
|
+
this.handlers.set(eventName, handlers);
|
|
7
|
+
return () => this.off(eventName, handler);
|
|
8
|
+
}
|
|
9
|
+
off(eventName, handler) {
|
|
10
|
+
this.handlers.get(eventName)?.delete(handler);
|
|
11
|
+
}
|
|
12
|
+
emit(eventName, payload) {
|
|
13
|
+
const handlers = this.handlers.get(eventName);
|
|
14
|
+
if (!handlers) {
|
|
15
|
+
return;
|
|
16
|
+
}
|
|
17
|
+
for (const handler of handlers) {
|
|
18
|
+
handler(payload);
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
clear() {
|
|
22
|
+
this.handlers.clear();
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=events.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"events.js","sourceRoot":"","sources":["../src/events.ts"],"names":[],"mappings":"AAMA,MAAM,OAAO,oBAAoB;IACd,QAAQ,GAAG,IAAI,GAAG,EAAsD,CAAC;IAE1F,EAAE,CACA,SAAe,EACf,OAAmC;QAEnC,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,IAAI,GAAG,EAA8B,CAAC;QACvF,QAAQ,CAAC,GAAG,CAAC,OAAqC,CAAC,CAAC;QACpD,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;QAEvC,OAAO,GAAG,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;IAC5C,CAAC;IAED,GAAG,CACD,SAAe,EACf,OAAmC;QAEnC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC,OAAqC,CAAC,CAAC;IAC9E,CAAC;IAED,IAAI,CACF,SAAe,EACf,OAAoC;QAEpC,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QAE9C,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,OAAO;QACT,CAAC;QAED,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;YAC/B,OAAO,CAAC,OAAO,CAAC,CAAC;QACnB,CAAC;IACH,CAAC;IAED,KAAK;QACH,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;IACxB,CAAC;CACF"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export { AlgoWasmError } from './AlgoWasmError.js';
|
|
2
|
+
export { AlgoWasmPlayer } from './AlgoWasmPlayer.js';
|
|
3
|
+
export { AlgoWasmEventEmitter } from './events.js';
|
|
4
|
+
export { AlgoWasmEngineBinding, instantiateAlgoWasm } from './loadWasm.js';
|
|
5
|
+
export { builtInProfiles, cloneProfile, normaliseSeed, splitSeed, trackIds, validateProfile } from './profile.js';
|
|
6
|
+
export type { AlgoWasmArrangementRules, AlgoWasmAutomationRules, AlgoWasmBassRules, AlgoWasmChordRules, AlgoWasmErrorCode, AlgoWasmEventHandler, AlgoWasmEventName, AlgoWasmEventPayloads, AlgoWasmGeneratedEvent, AlgoWasmMelodyRules, AlgoWasmMetrics, AlgoWasmMidiExportOptions, AlgoWasmMixerProfile, AlgoWasmMixerTrackProfile, AlgoWasmMood, AlgoWasmOfflineRenderOptions, AlgoWasmPatch, AlgoWasmPlayerOptions, AlgoWasmProfile, AlgoWasmRhythmRules, AlgoWasmSafetyLimits, AlgoWasmScaleRule, AlgoWasmSnapshot, AlgoWasmTempoRules, AlgoWasmTrackId, AlgoWasmTrackSnapshot, AlgoWasmWaveShape } from './types.js';
|
|
7
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,EAAE,qBAAqB,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AAC3E,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,aAAa,EAAE,SAAS,EAAE,QAAQ,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAClH,YAAY,EACV,wBAAwB,EACxB,uBAAuB,EACvB,iBAAiB,EACjB,kBAAkB,EAClB,iBAAiB,EACjB,oBAAoB,EACpB,iBAAiB,EACjB,qBAAqB,EACrB,sBAAsB,EACtB,mBAAmB,EACnB,eAAe,EACf,yBAAyB,EACzB,oBAAoB,EACpB,yBAAyB,EACzB,YAAY,EACZ,4BAA4B,EAC5B,aAAa,EACb,qBAAqB,EACrB,eAAe,EACf,mBAAmB,EACnB,oBAAoB,EACpB,iBAAiB,EACjB,gBAAgB,EAChB,kBAAkB,EAClB,eAAe,EACf,qBAAqB,EACrB,iBAAiB,EAClB,MAAM,YAAY,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export { AlgoWasmError } from './AlgoWasmError.js';
|
|
2
|
+
export { AlgoWasmPlayer } from './AlgoWasmPlayer.js';
|
|
3
|
+
export { AlgoWasmEventEmitter } from './events.js';
|
|
4
|
+
export { AlgoWasmEngineBinding, instantiateAlgoWasm } from './loadWasm.js';
|
|
5
|
+
export { builtInProfiles, cloneProfile, normaliseSeed, splitSeed, trackIds, validateProfile } from './profile.js';
|
|
6
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,EAAE,qBAAqB,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AAC3E,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,aAAa,EAAE,SAAS,EAAE,QAAQ,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { AlgoWasmPlayer } from '../AlgoWasmPlayer.js';
|
|
2
|
+
export interface PhaserLikeScene {
|
|
3
|
+
registry?: {
|
|
4
|
+
get(key: string): unknown;
|
|
5
|
+
};
|
|
6
|
+
events?: {
|
|
7
|
+
once(eventName: string, handler: () => void): void;
|
|
8
|
+
};
|
|
9
|
+
}
|
|
10
|
+
export declare function bindAlgoWasmToPhaserDanger(scene: PhaserLikeScene, player: AlgoWasmPlayer, registryKey?: string): () => void;
|
|
11
|
+
//# sourceMappingURL=phaser.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"phaser.d.ts","sourceRoot":"","sources":["../../src/integrations/phaser.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAE3D,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,EAAE;QACT,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;KAC3B,CAAC;IACF,MAAM,CAAC,EAAE;QACP,IAAI,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,IAAI,GAAG,IAAI,CAAC;KACpD,CAAC;CACH;AAED,wBAAgB,0BAA0B,CACxC,KAAK,EAAE,eAAe,EACtB,MAAM,EAAE,cAAc,EACtB,WAAW,SAAW,GACrB,MAAM,IAAI,CAkBZ"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
export function bindAlgoWasmToPhaserDanger(scene, player, registryKey = 'danger') {
|
|
2
|
+
let disposed = false;
|
|
3
|
+
const update = () => {
|
|
4
|
+
if (disposed) {
|
|
5
|
+
return;
|
|
6
|
+
}
|
|
7
|
+
const value = scene.registry?.get(registryKey);
|
|
8
|
+
player.setEnergy(typeof value === 'number' ? value : 0);
|
|
9
|
+
requestAnimationFrame(update);
|
|
10
|
+
};
|
|
11
|
+
update();
|
|
12
|
+
return () => {
|
|
13
|
+
disposed = true;
|
|
14
|
+
};
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=phaser.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"phaser.js","sourceRoot":"","sources":["../../src/integrations/phaser.ts"],"names":[],"mappings":"AAWA,MAAM,UAAU,0BAA0B,CACxC,KAAsB,EACtB,MAAsB,EACtB,WAAW,GAAG,QAAQ;IAEtB,IAAI,QAAQ,GAAG,KAAK,CAAC;IAErB,MAAM,MAAM,GAAG,GAAG,EAAE;QAClB,IAAI,QAAQ,EAAE,CAAC;YACb,OAAO;QACT,CAAC;QAED,MAAM,KAAK,GAAG,KAAK,CAAC,QAAQ,EAAE,GAAG,CAAC,WAAW,CAAC,CAAC;QAC/C,MAAM,CAAC,SAAS,CAAC,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACxD,qBAAqB,CAAC,MAAM,CAAC,CAAC;IAChC,CAAC,CAAC;IAEF,MAAM,EAAE,CAAC;IAET,OAAO,GAAG,EAAE;QACV,QAAQ,GAAG,IAAI,CAAC;IAClB,CAAC,CAAC;AACJ,CAAC"}
|