@opendaw/studio-core 0.0.119 → 0.0.121
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/dist/AudioUnitFreeze.d.ts.map +1 -1
- package/dist/AudioUnitFreeze.js +4 -2
- package/dist/OfflineEngineRenderer.d.ts +3 -3
- package/dist/OfflineEngineRenderer.d.ts.map +1 -1
- package/dist/OfflineEngineRenderer.js +27 -15
- package/dist/capture/Recording.d.ts.map +1 -1
- package/dist/capture/Recording.js +3 -1
- package/dist/offline-engine.js +1 -1
- package/dist/offline-engine.js.map +3 -3
- package/dist/processors.js +8 -8
- package/dist/processors.js.map +4 -4
- package/package.json +7 -7
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AudioUnitFreeze.d.ts","sourceRoot":"","sources":["../src/AudioUnitFreeze.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"AudioUnitFreeze.d.ts","sourceRoot":"","sources":["../src/AudioUnitFreeze.ts"],"names":[],"mappings":"AAAA,OAAO,EAA2C,QAAQ,EAA2B,YAAY,EAAE,UAAU,EAAc,IAAI,EAAC,MAAM,kBAAkB,CAAA;AAGxJ,OAAO,EAAC,mBAAmB,EAA2B,MAAM,0BAA0B,CAAA;AAItF,OAAO,KAAK,EAAC,OAAO,EAAC,MAAM,WAAW,CAAA;AAItC,qBAAa,eAAgB,YAAW,UAAU;;gBAMlC,OAAO,EAAE,OAAO;IAU5B,QAAQ,CAAC,mBAAmB,EAAE,mBAAmB,GAAG,OAAO;IAI3D,YAAY,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,GAAG,OAAO;IAIvC,SAAS,CAAC,QAAQ,EAAE,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,YAAY;IAEvD,sBAAsB,CAAC,mBAAmB,EAAE,mBAAmB,GAAG,OAAO;IAoBnE,MAAM,CAAC,mBAAmB,EAAE,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC;IAmErE,QAAQ,CAAC,mBAAmB,EAAE,mBAAmB,GAAG,IAAI;IAIxD,SAAS,IAAI,IAAI;CAwBpB"}
|
package/dist/AudioUnitFreeze.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Errors, Notifier, Option, RuntimeNotifier, Terminator, UUID } from "@opendaw/lib-std";
|
|
1
|
+
import { DefaultObservableValue, Errors, Notifier, Option, RuntimeNotifier, Terminator, UUID } from "@opendaw/lib-std";
|
|
2
2
|
import { Promises } from "@opendaw/lib-runtime";
|
|
3
3
|
import { OfflineEngineRenderer } from "./OfflineEngineRenderer";
|
|
4
4
|
export class AudioUnitFreeze {
|
|
@@ -62,11 +62,13 @@ export class AudioUnitFreeze {
|
|
|
62
62
|
};
|
|
63
63
|
const copiedProject = this.#project.copy();
|
|
64
64
|
const abortController = new AbortController();
|
|
65
|
+
const progress = new DefaultObservableValue(0.0);
|
|
65
66
|
const dialog = RuntimeNotifier.progress({
|
|
66
67
|
headline: "Freezing AudioUnit...",
|
|
68
|
+
progress,
|
|
67
69
|
cancel: () => abortController.abort()
|
|
68
70
|
});
|
|
69
|
-
const renderResult = await Promises.tryCatch(OfflineEngineRenderer.start(copiedProject, Option.wrap(exportConfiguration), progress
|
|
71
|
+
const renderResult = await Promises.tryCatch(OfflineEngineRenderer.start(copiedProject, Option.wrap(exportConfiguration), progress, abortController.signal, engine.sampleRate));
|
|
70
72
|
if (renderResult.status === "rejected") {
|
|
71
73
|
dialog.terminate();
|
|
72
74
|
if (!Errors.isAbort(renderResult.error)) {
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { int, Option
|
|
1
|
+
import { DefaultObservableValue, int, Option } from "@opendaw/lib-std";
|
|
2
2
|
import { AudioData, ppqn } from "@opendaw/lib-dsp";
|
|
3
3
|
import { ExportStemsConfiguration, OfflineEngineRenderConfig } from "@opendaw/studio-adapters";
|
|
4
4
|
import { Project } from "./project";
|
|
@@ -7,7 +7,7 @@ export declare class OfflineEngineRenderer {
|
|
|
7
7
|
static install(url: string): void;
|
|
8
8
|
static getWorkerUrl(): string;
|
|
9
9
|
static create(source: Project, optExportConfiguration: Option<ExportStemsConfiguration>, sampleRate?: int): Promise<OfflineEngineRenderer>;
|
|
10
|
-
static start(source: Project, optExportConfiguration: Option<ExportStemsConfiguration>, progress:
|
|
10
|
+
static start(source: Project, optExportConfiguration: Option<ExportStemsConfiguration>, progress: DefaultObservableValue<number>, abortSignal?: AbortSignal, sampleRate?: int): Promise<AudioData>;
|
|
11
11
|
private constructor();
|
|
12
12
|
get sampleRate(): int;
|
|
13
13
|
get numberOfChannels(): int;
|
|
@@ -18,6 +18,6 @@ export declare class OfflineEngineRenderer {
|
|
|
18
18
|
waitForLoading(): Promise<void>;
|
|
19
19
|
terminate(): void;
|
|
20
20
|
step(samples: int): Promise<Float32Array[]>;
|
|
21
|
-
render(config: OfflineEngineRenderConfig,
|
|
21
|
+
render(config: OfflineEngineRenderConfig, endPosition: ppqn, progress: DefaultObservableValue<number>, abortSignal?: AbortSignal): Promise<AudioData>;
|
|
22
22
|
}
|
|
23
23
|
//# sourceMappingURL=OfflineEngineRenderer.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"OfflineEngineRenderer.d.ts","sourceRoot":"","sources":["../src/OfflineEngineRenderer.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"OfflineEngineRenderer.d.ts","sourceRoot":"","sources":["../src/OfflineEngineRenderer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,sBAAsB,EAAU,GAAG,EAAuB,MAAM,EAA4D,MAAM,kBAAkB,CAAA;AAC5J,OAAO,EAAC,SAAS,EAAE,IAAI,EAAC,MAAM,kBAAkB,CAAA;AAGhD,OAAO,EAKH,wBAAwB,EAKxB,yBAAyB,EAC5B,MAAM,0BAA0B,CAAA;AACjC,OAAO,EAAC,OAAO,EAAC,MAAM,WAAW,CAAA;AAOjC,qBAAa,qBAAqB;;IAC9B,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAKjC,MAAM,CAAC,YAAY,IAAI,MAAM;WAIhB,MAAM,CAAC,MAAM,EAAE,OAAO,EACf,sBAAsB,EAAE,MAAM,CAAC,wBAAwB,CAAC,EACxD,UAAU,GAAE,GAAY,GACzC,OAAO,CAAC,qBAAqB,CAAC;WAqHpB,KAAK,CAAC,MAAM,EAAE,OAAO,EACf,sBAAsB,EAAE,MAAM,CAAC,wBAAwB,CAAC,EACxD,QAAQ,EAAE,sBAAsB,CAAC,MAAM,CAAC,EACxC,WAAW,CAAC,EAAE,WAAW,EACzB,UAAU,GAAE,GAAY,GACxC,OAAO,CAAC,SAAS,CAAC;IA0BrB,OAAO;IAoBP,IAAI,UAAU,IAAI,GAAG,CAA0B;IAC/C,IAAI,gBAAgB,IAAI,GAAG,CAAgC;IAC3D,IAAI,WAAW,IAAI,GAAG,CAA2B;IAEjD,IAAI,IAAI,IAAI;IAIZ,IAAI,IAAI,IAAI;IAKZ,WAAW,CAAC,QAAQ,EAAE,IAAI,GAAG,IAAI;IAI3B,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC;IAMrC,SAAS,IAAI,IAAI;IAKX,IAAI,CAAC,OAAO,EAAE,GAAG,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;IAM3C,MAAM,CACR,MAAM,EAAE,yBAAyB,EACjC,WAAW,EAAE,IAAI,EACjB,QAAQ,EAAE,sBAAsB,CAAC,MAAM,CAAC,EACxC,WAAW,CAAC,EAAE,WAAW,GAC1B,OAAO,CAAC,SAAS,CAAC;CA0CxB"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
|
-
import { Errors, isDefined, Option, panic, Terminator, TimeSpan } from "@opendaw/lib-std";
|
|
1
|
+
import { Errors, isDefined, Option, panic, SyncStream, Terminable, Terminator, TimeSpan } from "@opendaw/lib-std";
|
|
2
2
|
import { AudioData } from "@opendaw/lib-dsp";
|
|
3
3
|
import { Communicator, Messenger, Wait } from "@opendaw/lib-runtime";
|
|
4
|
+
import { AnimationFrame } from "@opendaw/lib-dom";
|
|
4
5
|
import { EngineStateSchema, ExportStemsConfiguration } from "@opendaw/studio-adapters";
|
|
5
6
|
import { AudioWorklets } from "./AudioWorklets";
|
|
6
7
|
import { MIDIReceiver } from "./midi";
|
|
@@ -22,8 +23,8 @@ export class OfflineEngineRenderer {
|
|
|
22
23
|
const worker = new Worker(this.getWorkerUrl(), { type: "module" });
|
|
23
24
|
const messenger = Messenger.for(worker);
|
|
24
25
|
const protocol = Communicator.sender(messenger.channel("offline-engine"), dispatcher => new class {
|
|
25
|
-
initialize(enginePort,
|
|
26
|
-
return dispatcher.dispatchAndReturn(this.initialize, enginePort,
|
|
26
|
+
initialize(enginePort, config) {
|
|
27
|
+
return dispatcher.dispatchAndReturn(this.initialize, enginePort, config);
|
|
27
28
|
}
|
|
28
29
|
render(config) {
|
|
29
30
|
return dispatcher.dispatchAndReturn(this.render, config);
|
|
@@ -34,8 +35,8 @@ export class OfflineEngineRenderer {
|
|
|
34
35
|
stop() { dispatcher.dispatchAndForget(this.stop); }
|
|
35
36
|
});
|
|
36
37
|
const channel = new MessageChannel();
|
|
37
|
-
const
|
|
38
|
-
const
|
|
38
|
+
const engineStateIO = EngineStateSchema();
|
|
39
|
+
const reader = SyncStream.reader(engineStateIO, () => { });
|
|
39
40
|
const controlFlagsBuffer = new SharedArrayBuffer(4);
|
|
40
41
|
const terminator = new Terminator();
|
|
41
42
|
const engineMessenger = Messenger.for(channel.port2);
|
|
@@ -96,20 +97,19 @@ export class OfflineEngineRenderer {
|
|
|
96
97
|
terminate() { dispatcher.dispatchAndForget(this.terminate); }
|
|
97
98
|
});
|
|
98
99
|
channel.port2.start();
|
|
99
|
-
progressChannel.port2.start();
|
|
100
100
|
terminator.own(source.liveStreamReceiver.connect(engineMessenger.channel("engine-live-data")));
|
|
101
101
|
const { port, sab } = terminator.own(MIDIReceiver.create(() => 0, (deviceId, data, relativeTimeInMs) => source.receivedMIDIFromEngine(deviceId, data, relativeTimeInMs)));
|
|
102
|
-
await protocol.initialize(channel.port1,
|
|
102
|
+
await protocol.initialize(channel.port1, {
|
|
103
103
|
sampleRate,
|
|
104
104
|
numberOfChannels,
|
|
105
105
|
processorsUrl: AudioWorklets.processorsUrl,
|
|
106
|
-
syncStreamBuffer,
|
|
106
|
+
syncStreamBuffer: reader.buffer,
|
|
107
107
|
controlFlagsBuffer,
|
|
108
108
|
project: source.toArrayBuffer(),
|
|
109
109
|
exportConfiguration: optExportConfiguration.unwrapOrUndefined()
|
|
110
110
|
});
|
|
111
111
|
engineCommands.setupMIDI(port, sab);
|
|
112
|
-
return new OfflineEngineRenderer(worker, protocol, engineCommands, terminator,
|
|
112
|
+
return new OfflineEngineRenderer(worker, protocol, engineCommands, terminator, reader, engineStateIO, sampleRate, numberOfChannels);
|
|
113
113
|
}
|
|
114
114
|
static async start(source, optExportConfiguration, progress, abortSignal, sampleRate = 48_000) {
|
|
115
115
|
const { timelineBox: { loopArea: { enabled } }, boxGraph } = source;
|
|
@@ -117,8 +117,9 @@ export class OfflineEngineRenderer {
|
|
|
117
117
|
boxGraph.beginTransaction();
|
|
118
118
|
enabled.setValue(false);
|
|
119
119
|
boxGraph.endTransaction();
|
|
120
|
+
const endPosition = source.lastRegionAction();
|
|
120
121
|
const renderer = await this.create(source, optExportConfiguration, sampleRate);
|
|
121
|
-
const result = await renderer.render({}, progress, abortSignal);
|
|
122
|
+
const result = await renderer.render({}, endPosition, progress, abortSignal);
|
|
122
123
|
boxGraph.beginTransaction();
|
|
123
124
|
enabled.setValue(wasEnabled);
|
|
124
125
|
boxGraph.endTransaction();
|
|
@@ -128,16 +129,18 @@ export class OfflineEngineRenderer {
|
|
|
128
129
|
#protocol;
|
|
129
130
|
#engineCommands;
|
|
130
131
|
#terminator;
|
|
131
|
-
#
|
|
132
|
+
#reader;
|
|
133
|
+
#engineStateIO;
|
|
132
134
|
#sampleRate;
|
|
133
135
|
#numberOfChannels;
|
|
134
136
|
#totalFrames = 0;
|
|
135
|
-
constructor(worker, protocol, engineCommands, terminator,
|
|
137
|
+
constructor(worker, protocol, engineCommands, terminator, reader, engineStateIO, sampleRate, numberOfChannels) {
|
|
136
138
|
this.#worker = worker;
|
|
137
139
|
this.#protocol = protocol;
|
|
138
140
|
this.#engineCommands = engineCommands;
|
|
139
141
|
this.#terminator = terminator;
|
|
140
|
-
this.#
|
|
142
|
+
this.#reader = reader;
|
|
143
|
+
this.#engineStateIO = engineStateIO;
|
|
141
144
|
this.#sampleRate = sampleRate;
|
|
142
145
|
this.#numberOfChannels = numberOfChannels;
|
|
143
146
|
}
|
|
@@ -168,26 +171,34 @@ export class OfflineEngineRenderer {
|
|
|
168
171
|
this.#totalFrames += samples;
|
|
169
172
|
return channels;
|
|
170
173
|
}
|
|
171
|
-
async render(config, progress, abortSignal) {
|
|
174
|
+
async render(config, endPosition, progress, abortSignal) {
|
|
172
175
|
const { promise, reject, resolve } = Promise.withResolvers();
|
|
173
176
|
let cancelled = false;
|
|
177
|
+
const polling = endPosition > 0
|
|
178
|
+
? AnimationFrame.add(() => {
|
|
179
|
+
this.#reader.tryRead();
|
|
180
|
+
progress.setValue(Math.min(1.0, this.#engineStateIO.object.position / endPosition));
|
|
181
|
+
})
|
|
182
|
+
: Terminable.Empty;
|
|
174
183
|
if (isDefined(abortSignal)) {
|
|
175
184
|
abortSignal.onabort = () => {
|
|
185
|
+
polling.terminate();
|
|
176
186
|
this.stop();
|
|
177
187
|
this.terminate();
|
|
178
188
|
cancelled = true;
|
|
179
189
|
reject(Errors.AbortError);
|
|
180
190
|
};
|
|
181
191
|
}
|
|
182
|
-
this.#progressPort.onmessage = (event) => progress(event.data.frames / this.#sampleRate);
|
|
183
192
|
while (!await this.#engineCommands.queryLoadingComplete()) {
|
|
184
193
|
await Wait.timeSpan(TimeSpan.millis(100));
|
|
185
194
|
}
|
|
186
195
|
this.play();
|
|
187
196
|
this.#protocol.render(config).then(channels => {
|
|
197
|
+
polling.terminate();
|
|
188
198
|
if (cancelled) {
|
|
189
199
|
return;
|
|
190
200
|
}
|
|
201
|
+
progress.setValue(1.0);
|
|
191
202
|
this.terminate();
|
|
192
203
|
const numberOfFrames = channels[0].length;
|
|
193
204
|
const audioData = AudioData.create(this.#sampleRate, numberOfFrames, this.#numberOfChannels);
|
|
@@ -196,6 +207,7 @@ export class OfflineEngineRenderer {
|
|
|
196
207
|
}
|
|
197
208
|
resolve(audioData);
|
|
198
209
|
}).catch(reason => {
|
|
210
|
+
polling.terminate();
|
|
199
211
|
if (!cancelled) {
|
|
200
212
|
this.terminate();
|
|
201
213
|
reject(reason);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Recording.d.ts","sourceRoot":"","sources":["../../src/capture/Recording.ts"],"names":[],"mappings":"AAAA,OAAO,EAAyB,UAAU,EAAmB,MAAM,kBAAkB,CAAA;AAErF,OAAO,EAAC,OAAO,EAAC,MAAM,YAAY,CAAA;AAClC,OAAO,EAAC,IAAI,EAAC,MAAM,kBAAkB,CAAA;AAGrC,qBAAa,SAAS;;
|
|
1
|
+
{"version":3,"file":"Recording.d.ts","sourceRoot":"","sources":["../../src/capture/Recording.ts"],"names":[],"mappings":"AAAA,OAAO,EAAyB,UAAU,EAAmB,MAAM,kBAAkB,CAAA;AAErF,OAAO,EAAC,OAAO,EAAC,MAAM,YAAY,CAAA;AAClC,OAAO,EAAC,IAAI,EAAC,MAAM,kBAAkB,CAAA;AAGrC,qBAAa,SAAS;;IAqDE,QAAQ,CAAC,OAAO,EAAE,OAAO;IAAE,QAAQ,CAAC,aAAa,EAAE,IAAI;IApD3E,MAAM,KAAK,WAAW,IAAI,OAAO,CAA2B;WAE/C,KAAK,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,UAAU,CAAC;IA+C3E,MAAM,CAAC,aAAa,IAAI,OAAO;IAC/B,MAAM,CAAC,aAAa,IAAI,IAAI;IAE5B,OAAO;CACV"}
|
|
@@ -23,7 +23,9 @@ export class Recording {
|
|
|
23
23
|
captures.forEach(capture => capture.clearRecordedRegions());
|
|
24
24
|
terminator.ownAll(...captures.map(capture => capture.startRecording()));
|
|
25
25
|
}
|
|
26
|
-
|
|
26
|
+
if (project.engine.preferences.settings.recording.automationEnabled) {
|
|
27
|
+
terminator.own(RecordAutomation.start(project));
|
|
28
|
+
}
|
|
27
29
|
const armedUUIDs = UUID.newSet(uuid => uuid);
|
|
28
30
|
captures.forEach(capture => armedUUIDs.add(capture.audioUnitBox.address.uuid));
|
|
29
31
|
project.regionSelection.deselect(...project.regionSelection.selected()
|
package/dist/offline-engine.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
var m=s=>s!=null;var b=(s,e="asDefined failed")=>s??p(S(e));var S=s=>s instanceof Function?s():s;var U=s=>{throw new Error(`Unhandled ${s}`)},p=s=>{throw typeof s=="string"?new Error(s):s},j=(s,e)=>s?void 0:p(S(e));var H=s=>new Proxy({},{get(){return p(s)}});var k=class{value;status="success";constructor(e){this.value=e}error=H("Cannot access error when succeeded")},C=class{error;status="failure";constructor(e){this.error=e}value=H("Cannot access value when failed")},G=s=>{try{return new k(s())}catch(e){return new C(e)}};var q=()=>{};var $;(function(s){s[s.Ascending=1]="Ascending",s[s.Descending=-1]="Descending"})($||($={}));var v=class{static#e=Object.freeze(new Array(0));static empty=()=>this.#e;static clear=e=>{e.length=0};static replace=(e,t)=>{e.length=0,e.push(...t)};static consume=(e,t)=>{for(let r=0;r<e.length;)t(e[r])?e.splice(r,1):r++};static peekFirst=e=>e.at(0)??null;static peekLast=e=>e.at(-1)??null;static getFirst=(e,t)=>b(e.at(0),t);static getLast=(e,t)=>b(e.at(-1),t);static getPrev=(e,t)=>{let r=e.indexOf(t);return r===-1?p(`${t} not found in ${e}`):b(e.at((r-1)%e.length),"Internal Error")};static getNext=(e,t)=>{let r=e.indexOf(t);return r===-1?p(`${t} not found in ${e}`):b(e.at((r+1)%e.length),"Internal Error")};static removeLast=(e,t)=>b(e.pop(),t);static create=(e,t)=>{let r=new Array(t);for(let n=0;n<t;n++)r[n]=e(n);return r};static equals=(e,t)=>{if(e.length!==t.length)return!1;for(let r=0;r<e.length;r++)if(e[r]!==t[r])return!1;return!0};static satisfy=(e,t)=>{if(e.length<2)return!0;let r=e[0];for(let n=1;n<e.length;n++)if(!t(r,e[n]))return!1;return!0};static remove=(e,t)=>{let r=e.indexOf(t);if(r===-1)return p(`${t} not found in ${e}`);e.splice(r,1)};static removeIf=(e,t)=>{for(let r=e.length-1;r>=0;r--)t(e[r])&&e.splice(r,1)};static removeOpt=(e,t)=>{let r=e.indexOf(t);return r===-1?!1:(e.splice(r,1),!0)};static hasDuplicates=e=>new Set(e).size<e.length;static removeDuplicates=e=>{let t=0,r=new Set;for(let n of e)r.has(n)||(r.add(n),e[t++]=n);return e.length=t,e};static removeDuplicateKeys=(e,t)=>{let r=0,n=new Set;for(let i of e){let c=i[t];n.has(c)||(n.add(c),e[r++]=i)}return e.length=r,e};static subtract(e,t,r){return e.filter(n=>!t.some(i=>r(n,i)))}static intersect(e,t,r){return e.filter(n=>t.some(i=>r(n,i)))}static merge(e,t,r){return[...e.filter(n=>!t.some(i=>r(n,i))),...t]}static*iterate(e){for(let t=0;t<e.length;t++)yield e[t]}static*iterateReverse(e){for(let t=e.length-1;t>=0;t--)yield e[t]}static*iterateStateFull(e){let t=e.length-1;for(let r=0;r<=t;r++)yield{value:e[r],isFirst:r===0,isLast:r===t}}static*iterateAdjacent(e){if(!(e.length<=1))for(let t=1,r=e[0];t<e.length;t++){let n=e[t];yield[r,n],r=n}}static isSorted(e,t=$.Ascending){if(e.length<2)return!0;let r=e[0];for(let n=1;n<e.length;n++){let i=e[n];if(Math.sign(r-i)===t)return!1;r=i}return!0}static toRecord(e,t){return e.reduce((r,n)=>(r[t(n)]=n,r),{})}static concatArrayBuffers(e,t){let r=new ArrayBuffer(e.byteLength+t.byteLength),n=new Uint8Array(r);return n.set(new Uint8Array(e),0),n.set(new Uint8Array(t),e.byteLength),r}};var E;(function(s){s.wrap=t=>m(t)?new e(t):s.None,s.from=t=>s.wrap(t()),s.tryCatch=t=>{try{return s.wrap(t())}catch{return s.None}},s.execute=(t,...r)=>s.wrap(t?.apply(null,r)),s.async=t=>t.then(r=>s.wrap(r),()=>s.None);class e{#e;constructor(r){this.#e=b(r)}unwrap(){return this.#e}unwrapOrElse(r){return this.#e}unwrapOrNull(){return this.#e}unwrapOrUndefined(){return this.#e}contains(r){return r===this.#e}match(r){return r.some(this.#e)}ifSome(r){return r(this.#e)}ifAbsent(r){}isEmpty(){return!1}nonEmpty(){return!0}map(r){return s.wrap(r(this.#e))}mapOr(r,n){return r(this.#e)}flatMap(r){return r(this.#e)}equals(r){return this.unwrapOrNull()===r.unwrapOrNull()}assert(r){return this}toString(){return`{Option.Some(${this.#e})}`}get[Symbol.toStringTag](){return this.toString()}}s.Some=e,s.None=new class{unwrap=t=>p(m(t)?S(t):"unwrap failed");unwrapOrElse=t=>S(t);unwrapOrNull=()=>null;unwrapOrUndefined=()=>{};contains=t=>!1;match=t=>t.none();ifSome=t=>{};ifAbsent=t=>t(void 0);isEmpty=()=>!0;nonEmpty=()=>!1;map=t=>s.None;mapOr=(t,r)=>S(r);flatMap=t=>s.None;equals=t=>t.isEmpty();assert=t=>p(S(t)??"assert failed");toString=()=>"{Option.None}";get[Symbol.toStringTag](){return this.toString()}}})(E||(E={}));var I=class{static*empty(){}static one(e){return[e]}static count(e){let t=0;for(let r of e)t++;return t}static some(e,t){for(let r of e)if(t(r))return!0;return!1}static every(e,t){for(let r of e)if(!t(r))return!1;return!0}static reduce(e,t,r){let n=r,i=0;for(let c of e)n=t(n,c,i++);return n}static includes(e,t){for(let r of e)if(r===t)return!0;return!1}static forEach(e,t){for(let r of e)t(r)}static*map(e,t){let r=0;for(let n of e)yield t(n,r++)}static*take(e,t){let r=0;for(let n of e){if(r++>=t)return;yield n}}static filter(e,t){let r=[];for(let n of e)t(n)&&r.push(n);return r}static filterMap(e,t){let r=[];for(let n of e){let i=t(n);m(i)&&r.push(i)}return r}static reverse(e){let t=[];for(let r of e)t.push(r);return t.reverse()}static*pairWise(e){let t=e[Symbol.iterator](),{done:r,value:n}=t.next(),i=n;if(r!==!0)for(;;){let{done:c,value:o}=t.next();if(c===!0){yield[i,null];return}yield[i,o],i=o}}};var z=Object.freeze({Empty:{terminate:q},create:s=>({terminate:s}),many:(...s)=>({terminate:()=>{for(;s.length>0;)s.pop().terminate()}})});var O=class{static subscribeMany(e,...t){return z.many(...t.map(r=>r.subscribe(()=>e(r))))}#e=new Set;subscribe(e){return this.#e.add(e),{terminate:()=>this.#e.delete(e)}}isEmpty(){return this.#e.size===0}notify(e){this.#e.forEach(t=>t(e))}observers(){return this.#e}terminate(){this.#e.clear()}};var _=class s{static createEstimator=()=>{let e=performance.now(),t=s.millis(Number.POSITIVE_INFINITY),r=0;return n=>{if(n===0)return s.POSITIVE_INFINITY;if(n>=1)return s.millis(0);let i=performance.now()-e;return i>r*1e3&&(t=s.millis(i/n-i),r++),t}};static POSITIVE_INFINITY=new s(Number.POSITIVE_INFINITY);static millis=e=>new s(e);static seconds=e=>new s(e*s.#e);static minutes=e=>new s(e*s.#t);static hours=e=>new s(e*s.#n);static days=e=>new s(e*s.#o);static toHHMMSS=e=>((e/3600|0)+100).toString().slice(1)+":"+((e/60|0)%60+100).toString().slice(1)+":"+(e%60+100).toString().slice(1);static#e=1e3;static#t=6e4;static#n=36e5;static#o=864e5;#r;constructor(e){this.#r=e}millis(){return this.#r}absSeconds(){return Math.abs(this.#r)/s.#e}absMinutes(){return Math.abs(this.#r)/s.#t}absHours(){return Math.abs(this.#r)/s.#n}absDays(){return Math.abs(this.#r)/s.#o}split(){return{d:Math.floor(this.absDays()),h:Math.floor(this.absHours())%24,m:Math.floor(this.absMinutes())%60,s:Math.floor(this.absSeconds())%60}}isNow(){return this.#r===0}isPast(){return this.#r<0}isFuture(){return this.#r>0}toUnitString(){let e,t,r=Math.floor(Math.abs(this.#r)/1e3),n=Math.floor(r/60),i=Math.floor(n/60),c=Math.floor(i/24);return r<60?(e=r,t="second"):n<60?(e=n,t="minute"):i<24?(e=i,t="hour"):(e=c,t="day"),new Intl.RelativeTimeFormat("en",{numeric:"auto",style:"long"}).format(e*Math.sign(this.#r),t)}toString(){if(isNaN(this.#r))return"NaN";if(!isFinite(this.#r))return"\u221E";let{d:e,h:t,m:r,s:n}=this.split();return e>0?[s.#s("d",e),s.#s("h",t),s.#s("m",r),s.#s("s",n)].join(", "):t>0?[s.#s("h",t),s.#s("m",r),s.#s("s",n)].join(", "):r>0?[s.#s("m",r),s.#s("s",n)].join(", "):n>0?s.#s("s",n):"now"}static#s=(e,t)=>{switch(e){case"d":return`${t} ${t<2?"day":"days"}`;case"h":return`${t} ${t<2?"hour":"hours"}`;case"m":return`${t} ${t<2?"minute":"minutes"}`;case"s":return`${t} ${t<2?"second":"seconds"}`;default:return U(e)}}};var F;(function(s){class e{value;constructor(o){this.value=o}}s.Transfer=e,s.makeTransferable=c=>new e(c),s.sender=(c,o)=>o(new n(c)),s.executor=(c,o)=>new i(c,o);let t=c=>{let o=[];for(let a of c)a instanceof e?o.push(a.value):(a instanceof MessagePort||typeof ImageBitmap<"u"&&a instanceof ImageBitmap||typeof OffscreenCanvas<"u"&&a instanceof OffscreenCanvas)&&o.push(a);return o},r=c=>c instanceof e?c.value:c;class n{#e;#t=new Map;#n;#o=0;constructor(o){this.#e=o,this.#n=o.subscribe(this.#r)}terminate(){this.#n.terminate()}dispatchAndForget=(o,...a)=>{let l=t(a);this.#e.send({type:"send",returnId:!1,func:o.name,args:Array.from(I.map(a,u=>({value:r(u)})))},l)};dispatchAndReturn=(o,...a)=>new Promise((l,u)=>{let w=I.reduce(a,(h,d,x)=>(typeof d=="function"&&h.push([x,d]),h),[]);this.#t.set(this.#o,{executorTuple:{resolve:l,reject:u},callbacks:new Map(w)});let f=t(a);this.#e.send({type:"send",returnId:this.#o,func:o.name,args:Array.from(I.map(a,(h,d)=>typeof h=="function"?{callback:d}:{value:r(h)}))},f),this.#o++});#r=o=>{let a=this.#t.get(o.returnId);m(a)?o.type==="resolve"?(a.executorTuple.resolve(o.resolve),this.#t.delete(o.returnId)):o.type==="reject"?(a.executorTuple.reject(o.reject),this.#t.delete(o.returnId)):o.type==="callback"&&a.callbacks?.get(o.funcAt).apply(this,o.args):p(`Promise has already been resolved. ${JSON.stringify(o)}`)}}class i{#e;#t;#n;constructor(o,a){this.#e=o,this.#t=a,this.#n=o.subscribe(this.#o)}terminate(){this.#n.terminate()}#o=o=>{j(o.type==="send",()=>"Message type must be 'send'");let a=Object.getPrototypeOf(this.#t)===Object.getPrototypeOf({})?this.#t:Object.getPrototypeOf(this.#t),l=b(a[o.func],`${o.func.toString()} does not exists on ${this.#t}`),u=o.returnId;if(u===!1)l.apply(this.#t,o.args.map(w=>"value"in w?w.value:p(`${o.func.toString()} has no promise.`)));else try{l.apply(this.#t,o.args.map(f=>"callback"in f?(...h)=>this.#i(u,f.callback,h):f.value)).then(f=>{try{this.#r(u,f)}catch(h){this.#s(u,h)}},f=>this.#s(u,f))}catch(w){this.#s(u,w)}};#r=(o,a)=>this.#e.send({type:"resolve",returnId:o,resolve:a});#s=(o,a)=>this.#e.send({type:"reject",returnId:o,reject:a});#i=(o,a,l)=>this.#e.send({type:"callback",returnId:o,funcAt:a,args:l})}s.Executor=i})(F||(F={}));var V={for:s=>new R(s)},se=[],R=class{#e;#t=new O;constructor(e){if(this.#e=e,m(e.onmessage)||m(e.onmessageerror))throw console.error(e),new Error(`${e} is already wrapped.`);e.onmessage=t=>this.#t.notify(t.data),e.onmessageerror=t=>{throw new Error(t.type)}}send(e,t){this.#e.postMessage(e,t??se)}channel(e){return new D(this,e)}subscribe(e){return this.#t.subscribe(e)}terminate(){this.#t.terminate(),this.#e.onmessage=null,this.#e.onmessageerror=null}},D=class s{#e;#t;#n=new O;#o;constructor(e,t){this.#e=e,this.#t=t,this.#o=e.subscribe(r=>{"__id__"in r&&r.__id__==="42"&&"message"in r&&"channel"in r&&r.channel===t&&this.#n.notify(r.message)})}send(e,t){this.#e.send({__id__:"42",channel:this.#t,message:e},t)}channel(e){return new s(this,e)}subscribe(e){return this.#n.subscribe(e)}terminate(){this.#o.terminate(),this.#n.terminate()}};var A;(function(s){s.frame=()=>new Promise(e=>requestAnimationFrame(()=>e())),s.frames=e=>new Promise(t=>{let r=e,n=()=>{--r<=0?t():requestAnimationFrame(n)};requestAnimationFrame(n)}),s.timeSpan=(e,...t)=>new Promise(r=>setTimeout(r,e.millis(),...t)),s.event=(e,t)=>new Promise(r=>e.addEventListener(t,r,{once:!0})),s.observable=e=>new Promise(t=>{let r=e.subscribe(()=>{r.terminate(),t()})}),s.complete=e=>new Promise((t,r)=>{let n=setInterval(()=>{let{status:i,value:c,error:o}=G(()=>e.next());if(i==="success"){let{done:a,value:l}=c;a&&(clearInterval(n),t(l))}else clearInterval(n),r(o)},0)})})(A||(A={}));var L=(s,e)=>Math.floor(3840/e)*s,Y=(s,e=4,t=4)=>{let r=L(1,t),n=Math.floor(s/r),i=Math.floor(n/e),o=(Math.floor(s)-L(i*e,t))%r,a=Math.floor(o/240),l=o%240;return{bars:i,beats:n-i*e,semiquavers:a,ticks:l}},K=(s,e)=>s*e/60*960,Z=(s,e)=>s*60/960/e,ne=(s,e)=>e*60/960/s,oe=(s,e,t)=>K(s/t,e),ie=(s,e,t)=>Z(s,e)*t,J={Bar:3840,Quarter:960,SemiQuaver:240,fromSignature:L,toParts:Y,secondsToPulses:K,pulsesToSeconds:Z,secondsToBpm:ne,samplesToPulses:oe,pulsesToSamples:ie,toString:(s,e=4,t=4)=>{let{bars:r,beats:n,semiquavers:i,ticks:c}=Y(s|0,e,t);return`${r+1}.${n+1}.${i+1}:${c}`}};var M=128,Fe=J.fromSignature(1,48);var ae=Math.log(10)/20;var X=s=>Math.exp(s*ae);var g=globalThis,B=class{port;constructor(){this.port=g.__workletPort__}process(e,t){return!1}},ee=s=>{g.sampleRate=s.sampleRate,g.currentFrame=0,g.currentTime=0,g.AudioWorkletProcessor=B,g.registerProcessor=(e,t)=>{g.__registeredProcessors__=g.__registeredProcessors__||{},g.__registeredProcessors__[e]=t}},Q=(s,e)=>{g.currentFrame=s,g.currentTime=s/e};var te=globalThis,N=E.None;F.executor(V.for(self).channel("offline-engine"),{async initialize(s,e,t){ee({sampleRate:t.sampleRate}),te.__workletPort__=s,await import(t.processorsUrl);let r=te.__registeredProcessors__["engine-processor"];N=E.wrap({processor:new r({processorOptions:{syncStreamBuffer:t.syncStreamBuffer,controlFlagsBuffer:t.controlFlagsBuffer,hrClockBuffer:new SharedArrayBuffer(32),project:t.project,exportConfiguration:t.exportConfiguration}}),progressPort:e,sampleRate:t.sampleRate,numberOfChannels:t.numberOfChannels,totalFrames:0,running:!1})},async step(s){let e=N.unwrap(),t=v.create(()=>new Float32Array(s),e.numberOfChannels),r=v.create(()=>new Float32Array(M),e.numberOfChannels),n=0;for(;n<s;){let i=[r];Q(e.totalFrames,e.sampleRate),e.processor.process([[]],i),e.totalFrames+=M;let c=s-n,o=Math.min(c,M);for(let a=0;a<e.numberOfChannels;a++)t[a].set(i[0][a].subarray(0,o),n);n+=o}return t},async render(s){let e=N.unwrap(),{silenceThresholdDb:t,silenceDurationSeconds:r,maxDurationSeconds:n}=s,i=X(t??-72),c=Math.ceil((r??10)*e.sampleRate),o=m(n)?Math.ceil(n*e.sampleRate):1/0,a=v.create(()=>[],e.numberOfChannels),l=0,u=!1,w=0;for(e.running=!0,await A.timeSpan(_.seconds(0));e.running&&e.totalFrames<o;){let d=[v.create(()=>new Float32Array(M),e.numberOfChannels)];Q(e.totalFrames,e.sampleRate);let x=e.processor.process([[]],d),P=0;for(let y of d[0])for(let re of y){let W=Math.abs(re);W>P&&(P=W)}let T=P<=i;if(P>i&&(u=!0),T&&u){if(l+=M,l>=c)break}else l=0;for(let y=0;y<e.numberOfChannels;y++)a[y].push(d[0][y].slice());if(e.totalFrames+=M,!x)break;e.totalFrames-w>=e.sampleRate&&(w=e.totalFrames,e.progressPort.postMessage({frames:e.totalFrames}),await new Promise(y=>setTimeout(y,0)))}let f=e.totalFrames-l+Math.min(e.sampleRate/4,l);return v.create(h=>{let d=new Float32Array(f),x=0;for(let P of a[h]){if(x>=f)break;let T=Math.min(P.length,f-x);d.set(P.subarray(0,T),x),x+=T}return d},e.numberOfChannels)},stop(){N.unwrap().running=!1}});
|
|
1
|
+
var m=n=>n!=null;var b=(n,e="asDefined failed")=>n??p(S(e));var S=n=>n instanceof Function?n():n;var U=n=>{throw new Error(`Unhandled ${n}`)},p=n=>{throw typeof n=="string"?new Error(n):n},j=(n,e)=>n?void 0:p(S(e));var H=n=>new Proxy({},{get(){return p(n)}});var k=class{value;status="success";constructor(e){this.value=e}error=H("Cannot access error when succeeded")},C=class{error;status="failure";constructor(e){this.error=e}value=H("Cannot access value when failed")},G=n=>{try{return new k(n())}catch(e){return new C(e)}};var q=()=>{};var $;(function(n){n[n.Ascending=1]="Ascending",n[n.Descending=-1]="Descending"})($||($={}));var v=class{static#e=Object.freeze(new Array(0));static empty=()=>this.#e;static clear=e=>{e.length=0};static replace=(e,t)=>{e.length=0,e.push(...t)};static consume=(e,t)=>{for(let r=0;r<e.length;)t(e[r])?e.splice(r,1):r++};static peekFirst=e=>e.at(0)??null;static peekLast=e=>e.at(-1)??null;static getFirst=(e,t)=>b(e.at(0),t);static getLast=(e,t)=>b(e.at(-1),t);static getPrev=(e,t)=>{let r=e.indexOf(t);return r===-1?p(`${t} not found in ${e}`):b(e.at((r-1)%e.length),"Internal Error")};static getNext=(e,t)=>{let r=e.indexOf(t);return r===-1?p(`${t} not found in ${e}`):b(e.at((r+1)%e.length),"Internal Error")};static removeLast=(e,t)=>b(e.pop(),t);static create=(e,t)=>{let r=new Array(t);for(let s=0;s<t;s++)r[s]=e(s);return r};static equals=(e,t)=>{if(e.length!==t.length)return!1;for(let r=0;r<e.length;r++)if(e[r]!==t[r])return!1;return!0};static satisfy=(e,t)=>{if(e.length<2)return!0;let r=e[0];for(let s=1;s<e.length;s++)if(!t(r,e[s]))return!1;return!0};static remove=(e,t)=>{let r=e.indexOf(t);if(r===-1)return p(`${t} not found in ${e}`);e.splice(r,1)};static removeIf=(e,t)=>{for(let r=e.length-1;r>=0;r--)t(e[r])&&e.splice(r,1)};static removeOpt=(e,t)=>{let r=e.indexOf(t);return r===-1?!1:(e.splice(r,1),!0)};static hasDuplicates=e=>new Set(e).size<e.length;static removeDuplicates=e=>{let t=0,r=new Set;for(let s of e)r.has(s)||(r.add(s),e[t++]=s);return e.length=t,e};static removeDuplicateKeys=(e,t)=>{let r=0,s=new Set;for(let i of e){let c=i[t];s.has(c)||(s.add(c),e[r++]=i)}return e.length=r,e};static subtract(e,t,r){return e.filter(s=>!t.some(i=>r(s,i)))}static intersect(e,t,r){return e.filter(s=>t.some(i=>r(s,i)))}static merge(e,t,r){return[...e.filter(s=>!t.some(i=>r(s,i))),...t]}static*iterate(e){for(let t=0;t<e.length;t++)yield e[t]}static*iterateReverse(e){for(let t=e.length-1;t>=0;t--)yield e[t]}static*iterateStateFull(e){let t=e.length-1;for(let r=0;r<=t;r++)yield{value:e[r],isFirst:r===0,isLast:r===t}}static*iterateAdjacent(e){if(!(e.length<=1))for(let t=1,r=e[0];t<e.length;t++){let s=e[t];yield[r,s],r=s}}static isSorted(e,t=$.Ascending){if(e.length<2)return!0;let r=e[0];for(let s=1;s<e.length;s++){let i=e[s];if(Math.sign(r-i)===t)return!1;r=i}return!0}static toRecord(e,t){return e.reduce((r,s)=>(r[t(s)]=s,r),{})}static concatArrayBuffers(e,t){let r=new ArrayBuffer(e.byteLength+t.byteLength),s=new Uint8Array(r);return s.set(new Uint8Array(e),0),s.set(new Uint8Array(t),e.byteLength),r}};var E;(function(n){n.wrap=t=>m(t)?new e(t):n.None,n.from=t=>n.wrap(t()),n.tryCatch=t=>{try{return n.wrap(t())}catch{return n.None}},n.execute=(t,...r)=>n.wrap(t?.apply(null,r)),n.async=t=>t.then(r=>n.wrap(r),()=>n.None);class e{#e;constructor(r){this.#e=b(r)}unwrap(){return this.#e}unwrapOrElse(r){return this.#e}unwrapOrNull(){return this.#e}unwrapOrUndefined(){return this.#e}contains(r){return r===this.#e}match(r){return r.some(this.#e)}ifSome(r){return r(this.#e)}ifAbsent(r){}isEmpty(){return!1}nonEmpty(){return!0}map(r){return n.wrap(r(this.#e))}mapOr(r,s){return r(this.#e)}flatMap(r){return r(this.#e)}equals(r){return this.unwrapOrNull()===r.unwrapOrNull()}assert(r){return this}toString(){return`{Option.Some(${this.#e})}`}get[Symbol.toStringTag](){return this.toString()}}n.Some=e,n.None=new class{unwrap=t=>p(m(t)?S(t):"unwrap failed");unwrapOrElse=t=>S(t);unwrapOrNull=()=>null;unwrapOrUndefined=()=>{};contains=t=>!1;match=t=>t.none();ifSome=t=>{};ifAbsent=t=>t(void 0);isEmpty=()=>!0;nonEmpty=()=>!1;map=t=>n.None;mapOr=(t,r)=>S(r);flatMap=t=>n.None;equals=t=>t.isEmpty();assert=t=>p(S(t)??"assert failed");toString=()=>"{Option.None}";get[Symbol.toStringTag](){return this.toString()}}})(E||(E={}));var I=class{static*empty(){}static one(e){return[e]}static count(e){let t=0;for(let r of e)t++;return t}static some(e,t){for(let r of e)if(t(r))return!0;return!1}static every(e,t){for(let r of e)if(!t(r))return!1;return!0}static reduce(e,t,r){let s=r,i=0;for(let c of e)s=t(s,c,i++);return s}static includes(e,t){for(let r of e)if(r===t)return!0;return!1}static forEach(e,t){for(let r of e)t(r)}static*map(e,t){let r=0;for(let s of e)yield t(s,r++)}static*take(e,t){let r=0;for(let s of e){if(r++>=t)return;yield s}}static filter(e,t){let r=[];for(let s of e)t(s)&&r.push(s);return r}static filterMap(e,t){let r=[];for(let s of e){let i=t(s);m(i)&&r.push(i)}return r}static reverse(e){let t=[];for(let r of e)t.push(r);return t.reverse()}static*pairWise(e){let t=e[Symbol.iterator](),{done:r,value:s}=t.next(),i=s;if(r!==!0)for(;;){let{done:c,value:o}=t.next();if(c===!0){yield[i,null];return}yield[i,o],i=o}}};var z=Object.freeze({Empty:{terminate:q},create:n=>({terminate:n}),many:(...n)=>({terminate:()=>{for(;n.length>0;)n.pop().terminate()}})});var O=class{static subscribeMany(e,...t){return z.many(...t.map(r=>r.subscribe(()=>e(r))))}#e=new Set;subscribe(e){return this.#e.add(e),{terminate:()=>this.#e.delete(e)}}isEmpty(){return this.#e.size===0}notify(e){this.#e.forEach(t=>t(e))}observers(){return this.#e}terminate(){this.#e.clear()}};var _=class n{static createEstimator=()=>{let e=performance.now(),t=n.millis(Number.POSITIVE_INFINITY),r=0;return s=>{if(s===0)return n.POSITIVE_INFINITY;if(s>=1)return n.millis(0);let i=performance.now()-e;return i>r*1e3&&(t=n.millis(i/s-i),r++),t}};static POSITIVE_INFINITY=new n(Number.POSITIVE_INFINITY);static millis=e=>new n(e);static seconds=e=>new n(e*n.#e);static minutes=e=>new n(e*n.#t);static hours=e=>new n(e*n.#s);static days=e=>new n(e*n.#o);static toHHMMSS=e=>((e/3600|0)+100).toString().slice(1)+":"+((e/60|0)%60+100).toString().slice(1)+":"+(e%60+100).toString().slice(1);static#e=1e3;static#t=6e4;static#s=36e5;static#o=864e5;#r;constructor(e){this.#r=e}millis(){return this.#r}absSeconds(){return Math.abs(this.#r)/n.#e}absMinutes(){return Math.abs(this.#r)/n.#t}absHours(){return Math.abs(this.#r)/n.#s}absDays(){return Math.abs(this.#r)/n.#o}split(){return{d:Math.floor(this.absDays()),h:Math.floor(this.absHours())%24,m:Math.floor(this.absMinutes())%60,s:Math.floor(this.absSeconds())%60}}isNow(){return this.#r===0}isPast(){return this.#r<0}isFuture(){return this.#r>0}toUnitString(){let e,t,r=Math.floor(Math.abs(this.#r)/1e3),s=Math.floor(r/60),i=Math.floor(s/60),c=Math.floor(i/24);return r<60?(e=r,t="second"):s<60?(e=s,t="minute"):i<24?(e=i,t="hour"):(e=c,t="day"),new Intl.RelativeTimeFormat("en",{numeric:"auto",style:"long"}).format(e*Math.sign(this.#r),t)}toString(){if(isNaN(this.#r))return"NaN";if(!isFinite(this.#r))return"\u221E";let{d:e,h:t,m:r,s}=this.split();return e>0?[n.#n("d",e),n.#n("h",t),n.#n("m",r),n.#n("s",s)].join(", "):t>0?[n.#n("h",t),n.#n("m",r),n.#n("s",s)].join(", "):r>0?[n.#n("m",r),n.#n("s",s)].join(", "):s>0?n.#n("s",s):"now"}static#n=(e,t)=>{switch(e){case"d":return`${t} ${t<2?"day":"days"}`;case"h":return`${t} ${t<2?"hour":"hours"}`;case"m":return`${t} ${t<2?"minute":"minutes"}`;case"s":return`${t} ${t<2?"second":"seconds"}`;default:return U(e)}}};var F;(function(n){class e{value;constructor(o){this.value=o}}n.Transfer=e,n.makeTransferable=c=>new e(c),n.sender=(c,o)=>o(new s(c)),n.executor=(c,o)=>new i(c,o);let t=c=>{let o=[];for(let a of c)a instanceof e?o.push(a.value):(a instanceof MessagePort||typeof ImageBitmap<"u"&&a instanceof ImageBitmap||typeof OffscreenCanvas<"u"&&a instanceof OffscreenCanvas)&&o.push(a);return o},r=c=>c instanceof e?c.value:c;class s{#e;#t=new Map;#s;#o=0;constructor(o){this.#e=o,this.#s=o.subscribe(this.#r)}terminate(){this.#s.terminate()}dispatchAndForget=(o,...a)=>{let l=t(a);this.#e.send({type:"send",returnId:!1,func:o.name,args:Array.from(I.map(a,u=>({value:r(u)})))},l)};dispatchAndReturn=(o,...a)=>new Promise((l,u)=>{let w=I.reduce(a,(h,d,x)=>(typeof d=="function"&&h.push([x,d]),h),[]);this.#t.set(this.#o,{executorTuple:{resolve:l,reject:u},callbacks:new Map(w)});let f=t(a);this.#e.send({type:"send",returnId:this.#o,func:o.name,args:Array.from(I.map(a,(h,d)=>typeof h=="function"?{callback:d}:{value:r(h)}))},f),this.#o++});#r=o=>{let a=this.#t.get(o.returnId);m(a)?o.type==="resolve"?(a.executorTuple.resolve(o.resolve),this.#t.delete(o.returnId)):o.type==="reject"?(a.executorTuple.reject(o.reject),this.#t.delete(o.returnId)):o.type==="callback"&&a.callbacks?.get(o.funcAt).apply(this,o.args):p(`Promise has already been resolved. ${JSON.stringify(o)}`)}}class i{#e;#t;#s;constructor(o,a){this.#e=o,this.#t=a,this.#s=o.subscribe(this.#o)}terminate(){this.#s.terminate()}#o=o=>{j(o.type==="send",()=>"Message type must be 'send'");let a=Object.getPrototypeOf(this.#t)===Object.getPrototypeOf({})?this.#t:Object.getPrototypeOf(this.#t),l=b(a[o.func],`${o.func.toString()} does not exists on ${this.#t}`),u=o.returnId;if(u===!1)l.apply(this.#t,o.args.map(w=>"value"in w?w.value:p(`${o.func.toString()} has no promise.`)));else try{l.apply(this.#t,o.args.map(f=>"callback"in f?(...h)=>this.#i(u,f.callback,h):f.value)).then(f=>{try{this.#r(u,f)}catch(h){this.#n(u,h)}},f=>this.#n(u,f))}catch(w){this.#n(u,w)}};#r=(o,a)=>this.#e.send({type:"resolve",returnId:o,resolve:a});#n=(o,a)=>this.#e.send({type:"reject",returnId:o,reject:a});#i=(o,a,l)=>this.#e.send({type:"callback",returnId:o,funcAt:a,args:l})}n.Executor=i})(F||(F={}));var V={for:n=>new R(n)},ne=[],R=class{#e;#t=new O;constructor(e){if(this.#e=e,m(e.onmessage)||m(e.onmessageerror))throw console.error(e),new Error(`${e} is already wrapped.`);e.onmessage=t=>this.#t.notify(t.data),e.onmessageerror=t=>{throw new Error(t.type)}}send(e,t){this.#e.postMessage(e,t??ne)}channel(e){return new D(this,e)}subscribe(e){return this.#t.subscribe(e)}terminate(){this.#t.terminate(),this.#e.onmessage=null,this.#e.onmessageerror=null}},D=class n{#e;#t;#s=new O;#o;constructor(e,t){this.#e=e,this.#t=t,this.#o=e.subscribe(r=>{"__id__"in r&&r.__id__==="42"&&"message"in r&&"channel"in r&&r.channel===t&&this.#s.notify(r.message)})}send(e,t){this.#e.send({__id__:"42",channel:this.#t,message:e},t)}channel(e){return new n(this,e)}subscribe(e){return this.#s.subscribe(e)}terminate(){this.#o.terminate(),this.#s.terminate()}};var A;(function(n){n.frame=()=>new Promise(e=>requestAnimationFrame(()=>e())),n.frames=e=>new Promise(t=>{let r=e,s=()=>{--r<=0?t():requestAnimationFrame(s)};requestAnimationFrame(s)}),n.timeSpan=(e,...t)=>new Promise(r=>setTimeout(r,e.millis(),...t)),n.event=(e,t)=>new Promise(r=>e.addEventListener(t,r,{once:!0})),n.observable=e=>new Promise(t=>{let r=e.subscribe(()=>{r.terminate(),t()})}),n.complete=e=>new Promise((t,r)=>{let s=setInterval(()=>{let{status:i,value:c,error:o}=G(()=>e.next());if(i==="success"){let{done:a,value:l}=c;a&&(clearInterval(s),t(l))}else clearInterval(s),r(o)},0)})})(A||(A={}));var L=(n,e)=>Math.floor(3840/e)*n,Y=(n,e=4,t=4)=>{let r=L(1,t),s=Math.floor(n/r),i=Math.floor(s/e),o=(Math.floor(n)-L(i*e,t))%r,a=Math.floor(o/240),l=o%240;return{bars:i,beats:s-i*e,semiquavers:a,ticks:l}},K=(n,e)=>n*e/60*960,Z=(n,e)=>n*60/960/e,se=(n,e)=>e*60/960/n,oe=(n,e,t)=>K(n/t,e),ie=(n,e,t)=>Z(n,e)*t,J={Bar:3840,Quarter:960,SemiQuaver:240,fromSignature:L,toParts:Y,secondsToPulses:K,pulsesToSeconds:Z,secondsToBpm:se,samplesToPulses:oe,pulsesToSamples:ie,toString:(n,e=4,t=4)=>{let{bars:r,beats:s,semiquavers:i,ticks:c}=Y(n|0,e,t);return`${r+1}.${s+1}.${i+1}:${c}`}};var M=128,Fe=J.fromSignature(1,48);var ae=Math.log(10)/20;var X=n=>Math.exp(n*ae);var g=globalThis,B=class{port;constructor(){this.port=g.__workletPort__}process(e,t){return!1}},ee=n=>{g.sampleRate=n.sampleRate,g.currentFrame=0,g.currentTime=0,g.AudioWorkletProcessor=B,g.registerProcessor=(e,t)=>{g.__registeredProcessors__=g.__registeredProcessors__||{},g.__registeredProcessors__[e]=t}},Q=(n,e)=>{g.currentFrame=n,g.currentTime=n/e};var te=globalThis,N=E.None;F.executor(V.for(self).channel("offline-engine"),{async initialize(n,e){ee({sampleRate:e.sampleRate}),te.__workletPort__=n,await import(e.processorsUrl);let t=te.__registeredProcessors__["engine-processor"];N=E.wrap({processor:new t({processorOptions:{syncStreamBuffer:e.syncStreamBuffer,controlFlagsBuffer:e.controlFlagsBuffer,hrClockBuffer:new SharedArrayBuffer(32),project:e.project,exportConfiguration:e.exportConfiguration}}),sampleRate:e.sampleRate,numberOfChannels:e.numberOfChannels,totalFrames:0,running:!1})},async step(n){let e=N.unwrap(),t=v.create(()=>new Float32Array(n),e.numberOfChannels),r=v.create(()=>new Float32Array(M),e.numberOfChannels),s=0;for(;s<n;){let i=[r];Q(e.totalFrames,e.sampleRate),e.processor.process([[]],i),e.totalFrames+=M;let c=n-s,o=Math.min(c,M);for(let a=0;a<e.numberOfChannels;a++)t[a].set(i[0][a].subarray(0,o),s);s+=o}return t},async render(n){let e=N.unwrap(),{silenceThresholdDb:t,silenceDurationSeconds:r,maxDurationSeconds:s}=n,i=X(t??-72),c=Math.ceil((r??10)*e.sampleRate),o=m(s)?Math.ceil(s*e.sampleRate):1/0,a=v.create(()=>[],e.numberOfChannels),l=0,u=!1,w=0;for(e.running=!0,await A.timeSpan(_.seconds(0));e.running&&e.totalFrames<o;){let d=[v.create(()=>new Float32Array(M),e.numberOfChannels)];Q(e.totalFrames,e.sampleRate);let x=e.processor.process([[]],d),P=0;for(let y of d[0])for(let re of y){let W=Math.abs(re);W>P&&(P=W)}let T=P<=i;if(P>i&&(u=!0),T&&u){if(l+=M,l>=c)break}else l=0;for(let y=0;y<e.numberOfChannels;y++)a[y].push(d[0][y].slice());if(e.totalFrames+=M,!x)break;e.totalFrames-w>=e.sampleRate&&(w=e.totalFrames,await new Promise(y=>setTimeout(y,0)))}let f=e.totalFrames-l+Math.min(e.sampleRate/4,l);return v.create(h=>{let d=new Float32Array(f),x=0;for(let P of a[h]){if(x>=f)break;let T=Math.min(P.length,f-x);d.set(P.subarray(0,T),x),x+=T}return d},e.numberOfChannels)},stop(){N.unwrap().running=!1}});
|
|
2
2
|
//# sourceMappingURL=offline-engine.js.map
|