@hyperframes/engine 0.7.107 → 0.7.109

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (37) hide show
  1. package/dist/index.d.ts +1 -0
  2. package/dist/index.d.ts.map +1 -1
  3. package/dist/index.js +1 -0
  4. package/dist/index.js.map +1 -1
  5. package/dist/services/audioFxRender.d.ts +68 -0
  6. package/dist/services/audioFxRender.d.ts.map +1 -0
  7. package/dist/services/audioFxRender.js +360 -0
  8. package/dist/services/audioFxRender.js.map +1 -0
  9. package/dist/services/audioMixer.d.ts +15 -0
  10. package/dist/services/audioMixer.d.ts.map +1 -1
  11. package/dist/services/audioMixer.js +152 -14
  12. package/dist/services/audioMixer.js.map +1 -1
  13. package/dist/services/audioMixer.types.d.ts +10 -0
  14. package/dist/services/audioMixer.types.d.ts.map +1 -1
  15. package/dist/services/audioVolumeEnvelope.d.ts +11 -0
  16. package/dist/services/audioVolumeEnvelope.d.ts.map +1 -1
  17. package/dist/services/audioVolumeEnvelope.js +38 -25
  18. package/dist/services/audioVolumeEnvelope.js.map +1 -1
  19. package/dist/services/chunkEncoder.d.ts.map +1 -1
  20. package/dist/services/chunkEncoder.js +16 -12
  21. package/dist/services/chunkEncoder.js.map +1 -1
  22. package/dist/services/streamingEncoder.d.ts.map +1 -1
  23. package/dist/services/streamingEncoder.js +3 -0
  24. package/dist/services/streamingEncoder.js.map +1 -1
  25. package/dist/services/wavChunks.d.ts +29 -0
  26. package/dist/services/wavChunks.d.ts.map +1 -0
  27. package/dist/services/wavChunks.js +29 -0
  28. package/dist/services/wavChunks.js.map +1 -0
  29. package/dist/utils/ffprobe.d.ts +7 -0
  30. package/dist/utils/ffprobe.d.ts.map +1 -1
  31. package/dist/utils/ffprobe.js +1 -1
  32. package/dist/utils/ffprobe.js.map +1 -1
  33. package/dist/utils/renderProvenance.d.ts +50 -0
  34. package/dist/utils/renderProvenance.d.ts.map +1 -0
  35. package/dist/utils/renderProvenance.js +92 -0
  36. package/dist/utils/renderProvenance.js.map +1 -0
  37. package/package.json +3 -3
package/dist/index.d.ts CHANGED
@@ -69,4 +69,5 @@ export { captureScreenshotWithAlpha } from "./services/screenshotService.js";
69
69
  export { hideVideoElements, showVideoElements, queryVideoElementBounds, queryElementStacking, type VideoElementBounds, type ElementStackingInfo, } from "./services/videoFrameInjector.js";
70
70
  export { isHdrColorSpace, detectTransfer, getHdrEncoderColorParams, analyzeCompositionHdr, DEFAULT_HDR10_MASTERING, type HdrTransfer, type HdrEncoderColorParams, type CompositionHdrInfo, type HdrMasteringMetadata, } from "./utils/hdr.js";
71
71
  export type { VideoColorSpace } from "./utils/ffprobe.js";
72
+ export { renderProvenanceArgs, appendRenderProvenanceArgs, readRenderProvenance, PROVENANCE_RENDERER_TAG, PROVENANCE_VERSION_TAG, PROVENANCE_RENDERER_NAME, PROVENANCE_VERSION, type RenderProvenance, } from "./utils/renderProvenance.js";
72
73
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -77,4 +77,5 @@ export { initHdrReadback, uploadAndReadbackHdrFrame, float16ToPqRgb, buildHdrChr
77
77
  export { captureScreenshotWithAlpha } from "./services/screenshotService.js";
78
78
  export { hideVideoElements, showVideoElements, queryVideoElementBounds, queryElementStacking, } from "./services/videoFrameInjector.js";
79
79
  export { isHdrColorSpace, detectTransfer, getHdrEncoderColorParams, analyzeCompositionHdr, DEFAULT_HDR10_MASTERING, } from "./utils/hdr.js";
80
+ export { renderProvenanceArgs, appendRenderProvenanceArgs, readRenderProvenance, PROVENANCE_RENDERER_TAG, PROVENANCE_VERSION_TAG, PROVENANCE_RENDERER_NAME, PROVENANCE_VERSION, } from "./utils/renderProvenance.js";
80
81
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,68 @@
1
+ /**
2
+ * Applies an audio FX chain to a WAV at render time.
3
+ *
4
+ * The processing runs in an OfflineAudioContext inside the headless browser the
5
+ * engine already drives, using the same graph builders the studio previews
6
+ * with. There is one implementation of each effect, so the render matching the
7
+ * preview is a property of the architecture rather than a tolerance to police.
8
+ *
9
+ * The alternative — reimplementing every effect as an FFmpeg filter — means two
10
+ * implementations that have to be kept in agreement, and four of them (the
11
+ * dynamics processors and the modulated delays) have no filter that behaves the
12
+ * same way, so preview would quietly stop predicting the render.
13
+ */
14
+ import { type HfAudioFxChain } from "@hyperframes/core/audio-fx";
15
+ import { type HfAutomation } from "@hyperframes/core/audio-automation";
16
+ import type { AudioVolumeKeyframe } from "./audioMixer.types.js";
17
+ export declare class AudioFxRenderError extends Error {
18
+ constructor(message: string);
19
+ }
20
+ interface WavData {
21
+ samples: Float32Array;
22
+ sampleRate: number;
23
+ channels: number;
24
+ }
25
+ export declare function readWav(path: string): WavData;
26
+ /**
27
+ * Write 16-bit PCM, interleaved, preserving the channel count.
28
+ *
29
+ * 16-bit rather than the float32 this used to emit: the very next step in the
30
+ * mixer bakes the volume envelope into the samples, and that baker accepts only
31
+ * 16-bit PCM. Emitting float meant enabling any effect silently downgraded a
32
+ * track's volume automation to the ffmpeg expression path, which is capped at 32
33
+ * straight segments — so a curved envelope was quantised and a dense one could
34
+ * fall back to rendering at base volume.
35
+ */
36
+ export declare function writeWav(path: string, samples: Float32Array, sampleRate: number, channels?: number): void;
37
+ /**
38
+ * Run a chain over `inputWav`, writing `outputWav`. Resolves to the path to use
39
+ * downstream — `outputWav` when the chain did something, `inputWav` untouched
40
+ * when the chain was empty — plus whether the volume envelope was baked here.
41
+ *
42
+ * The envelope is applied to the float samples the chain produced, BEFORE
43
+ * `writeWav` quantises them. Leaving it to the mixer's second pass meant a
44
+ * chain that overshoots full scale was destructively clipped to ±1 and only
45
+ * then ducked, so a track the lane pulls 12 dB down still rendered the
46
+ * distortion — which preview, working in float throughout, never had.
47
+ * `writeWav`'s clamp stays: it is the correct last resort for a signal that is
48
+ * still hot after the duck.
49
+ *
50
+ * Failure is fatal to the caller rather than a soft per-track warning: quietly
51
+ * rendering the dry signal ships a mix that sounds plausible and is not what
52
+ * the author set up.
53
+ */
54
+ export declare function applyAudioFxChain(inputWav: string, chain: HfAudioFxChain, outputWav: string, options: {
55
+ trackId: string;
56
+ signal?: AbortSignal;
57
+ automation?: HfAutomation;
58
+ envelope?: {
59
+ keyframes: AudioVolumeKeyframe[];
60
+ trackStart: number;
61
+ baseVolume: number;
62
+ };
63
+ }): Promise<{
64
+ path: string;
65
+ envelopeBaked: boolean;
66
+ }>;
67
+ export type { HfAudioFxChain, HfAutomation };
68
+ //# sourceMappingURL=audioFxRender.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"audioFxRender.d.ts","sourceRoot":"","sources":["../../src/services/audioFxRender.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAOH,OAAO,EAAuB,KAAK,cAAc,EAAE,MAAM,4BAA4B,CAAC;AACtF,OAAO,EAAuB,KAAK,YAAY,EAAE,MAAM,oCAAoC,CAAC;AAI5F,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAEjE,qBAAa,kBAAmB,SAAQ,KAAK;gBAC/B,OAAO,EAAE,MAAM;CAI5B;AAED,UAAU,OAAO;IACf,OAAO,EAAE,YAAY,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAmCD,wBAAgB,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAQ7C;AAuBD;;;;;;;;;GASG;AACH,wBAAgB,QAAQ,CACtB,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,YAAY,EACrB,UAAU,EAAE,MAAM,EAClB,QAAQ,SAAI,GACX,IAAI,CAmCN;AAmFD;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAsB,iBAAiB,CACrC,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,cAAc,EACrB,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE;IACP,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,UAAU,CAAC,EAAE,YAAY,CAAC;IAC1B,QAAQ,CAAC,EAAE;QAAE,SAAS,EAAE,mBAAmB,EAAE,CAAC;QAAC,UAAU,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,CAAC;CACzF,GACA,OAAO,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,aAAa,EAAE,OAAO,CAAA;CAAE,CAAC,CAuKnD;AAED,YAAY,EAAE,cAAc,EAAE,YAAY,EAAE,CAAC"}
@@ -0,0 +1,360 @@
1
+ /**
2
+ * Applies an audio FX chain to a WAV at render time.
3
+ *
4
+ * The processing runs in an OfflineAudioContext inside the headless browser the
5
+ * engine already drives, using the same graph builders the studio previews
6
+ * with. There is one implementation of each effect, so the render matching the
7
+ * preview is a property of the architecture rather than a tolerance to police.
8
+ *
9
+ * The alternative — reimplementing every effect as an FFmpeg filter — means two
10
+ * implementations that have to be kept in agreement, and four of them (the
11
+ * dynamics processors and the modulated delays) have no filter that behaves the
12
+ * same way, so preview would quietly stop predicting the render.
13
+ */
14
+ import { existsSync, mkdtempSync, readFileSync, rmSync, writeFileSync } from "node:fs";
15
+ import { tmpdir } from "node:os";
16
+ import { join } from "node:path";
17
+ import { pathToFileURL } from "node:url";
18
+ import { getAudioFxRuntimeScript } from "@hyperframes/core/audio-fx-runtime";
19
+ import { enabledAudioFxNodes } from "@hyperframes/core/audio-fx";
20
+ import { serializeAutomation } from "@hyperframes/core/audio-automation";
21
+ import { acquireBrowser } from "./browserManager.js";
22
+ import { createEnvelopeWalker } from "./audioVolumeEnvelope.js";
23
+ import { riffChunks } from "./wavChunks.js";
24
+ export class AudioFxRenderError extends Error {
25
+ constructor(message) {
26
+ super(message);
27
+ this.name = "AudioFxRenderError";
28
+ }
29
+ }
30
+ /**
31
+ * Minimal reader for the WAVs the mixer produces upstream. Handles 16-bit PCM
32
+ * and 32-bit float, the two formats the trim/extract steps emit; anything else
33
+ * is refused rather than silently misread as noise.
34
+ */
35
+ /** Walk the chunks for the format and the payload, in whatever order they sit. */
36
+ function readWavChunks(buf) {
37
+ const head = { format: 1, channels: 1, sampleRate: 48000, bits: 16 };
38
+ let data;
39
+ for (const { id, body, size } of riffChunks(buf)) {
40
+ if (id === "fmt ") {
41
+ head.format = buf.readUInt16LE(body);
42
+ head.channels = buf.readUInt16LE(body + 2);
43
+ head.sampleRate = buf.readUInt32LE(body + 4);
44
+ head.bits = buf.readUInt16LE(body + 14);
45
+ }
46
+ else if (id === "data") {
47
+ data = buf.subarray(body, Math.min(buf.length, body + size));
48
+ // The payload is the rest of the file for anything the mixer writes, and
49
+ // reading past it buys nothing: `fmt ` precedes `data` in every WAV these
50
+ // steps produce, and the alternative is walking a several-hundred-megabyte
51
+ // tail chunk by chunk.
52
+ break;
53
+ }
54
+ }
55
+ return { ...head, data };
56
+ }
57
+ export function readWav(path) {
58
+ const buf = readFileSync(path);
59
+ if (buf.length < 44 || buf.toString("ascii", 0, 4) !== "RIFF") {
60
+ throw new AudioFxRenderError(`Not a WAV file: ${path}`);
61
+ }
62
+ const { format, channels, sampleRate, bits, data } = readWavChunks(buf);
63
+ if (!data)
64
+ throw new AudioFxRenderError(`WAV has no data chunk: ${path}`);
65
+ return { samples: decodeSamples(data, format, bits, path), sampleRate, channels };
66
+ }
67
+ /** Interleaved samples as floats, for the two formats the mixer emits upstream. */
68
+ function decodeSamples(data, format, bits, path) {
69
+ if (format === 3 && bits === 32) {
70
+ const n = Math.floor(data.length / 4);
71
+ // A Float32Array view demands a 4-aligned offset, and chunk layouts that put
72
+ // `data` on an odd boundary (an 18-byte fmt plus a fact chunk, which
73
+ // ffmpeg's pcm_f32le writes) would otherwise throw RangeError. Copy then.
74
+ if (data.byteOffset % 4 === 0)
75
+ return new Float32Array(data.buffer, data.byteOffset, n);
76
+ const copied = new Float32Array(n);
77
+ for (let i = 0; i < n; i++)
78
+ copied[i] = data.readFloatLE(i * 4);
79
+ return copied;
80
+ }
81
+ if (format === 1 && bits === 16) {
82
+ const n = Math.floor(data.length / 2);
83
+ const out = new Float32Array(n);
84
+ for (let i = 0; i < n; i++)
85
+ out[i] = data.readInt16LE(i * 2) / 32768;
86
+ return out;
87
+ }
88
+ throw new AudioFxRenderError(`Unsupported WAV format ${format}/${bits}-bit: ${path}`);
89
+ }
90
+ /**
91
+ * Write 16-bit PCM, interleaved, preserving the channel count.
92
+ *
93
+ * 16-bit rather than the float32 this used to emit: the very next step in the
94
+ * mixer bakes the volume envelope into the samples, and that baker accepts only
95
+ * 16-bit PCM. Emitting float meant enabling any effect silently downgraded a
96
+ * track's volume automation to the ffmpeg expression path, which is capped at 32
97
+ * straight segments — so a curved envelope was quantised and a dense one could
98
+ * fall back to rendering at base volume.
99
+ */
100
+ export function writeWav(path, samples, sampleRate, channels = 1) {
101
+ const n = samples.length;
102
+ const bytes = n * 2;
103
+ const buf = Buffer.alloc(44 + bytes);
104
+ buf.write("RIFF", 0, "ascii");
105
+ buf.writeUInt32LE(36 + bytes, 4);
106
+ buf.write("WAVE", 8, "ascii");
107
+ buf.write("fmt ", 12, "ascii");
108
+ buf.writeUInt32LE(16, 16);
109
+ buf.writeUInt16LE(1, 20); // WAVE_FORMAT_PCM
110
+ buf.writeUInt16LE(channels, 22);
111
+ buf.writeUInt32LE(sampleRate, 24);
112
+ buf.writeUInt32LE(sampleRate * channels * 2, 28);
113
+ buf.writeUInt16LE(channels * 2, 32);
114
+ buf.writeUInt16LE(16, 34);
115
+ buf.write("data", 36, "ascii");
116
+ buf.writeUInt32LE(bytes, 40);
117
+ for (let i = 0; i < n; i++) {
118
+ // Clamp before scaling: a limiter set to 0 dB or a resonant filter can push
119
+ // past full scale, and wrapping would turn that into a click.
120
+ const v = Math.max(-1, Math.min(1, samples[i] ?? 0));
121
+ buf.writeInt16LE(Math.round(v * 32767), 44 + i * 2);
122
+ }
123
+ // lgtm[js/insecure-temporary-file] — `path` is always inside a directory the
124
+ // caller made with `mkdtempSync`, never a name assembled directly under
125
+ // `tmpdir()`. Both routes here are covered: the browser host page writes into
126
+ // `mkdtempSync(join(tmpdir(), "hf-fx-host-"))` below, and the render output
127
+ // goes to the producer's work dir, itself created as
128
+ // `mkdtempSync(join(tempRoot, "producer-project-"))`. mkdtemp picks the random
129
+ // suffix and creates the directory 0700 in one syscall, so the predictable
130
+ // FILENAME inside it (`<elementId>-fx.wav`) cannot be pre-created or
131
+ // symlinked by another user — which is the attack this rule is about. CodeQL
132
+ // flags it because the dataflow reaches `tmpdir()` without seeing the mkdtemp
133
+ // in between.
134
+ writeFileSync(path, buf);
135
+ }
136
+ /**
137
+ * Split an interleaved buffer into one array per channel.
138
+ *
139
+ * The graph used to fold everything to mono, which collapsed a stereo bed's
140
+ * width for the render only — and cost ~3 dB through the very mono-to-stereo
141
+ * rematrix that `prepareAudioTrack`'s pan filter exists to avoid. Preview kept
142
+ * the track stereo, so the two diverged the moment any effect was enabled.
143
+ */
144
+ function deinterleave(samples, channels) {
145
+ if (channels <= 1)
146
+ return [samples];
147
+ const frames = Math.floor(samples.length / channels);
148
+ const out = Array.from({ length: channels }, () => new Float32Array(frames));
149
+ for (let i = 0; i < frames; i++) {
150
+ for (let c = 0; c < channels; c++) {
151
+ out[c][i] = samples[i * channels + c] ?? 0;
152
+ }
153
+ }
154
+ return out;
155
+ }
156
+ /** Re-interleave per-channel arrays for the WAV writer. */
157
+ function interleave(planes) {
158
+ if (planes.length === 1)
159
+ return planes[0];
160
+ const frames = planes[0]?.length ?? 0;
161
+ const out = new Float32Array(frames * planes.length);
162
+ for (let i = 0; i < frames; i++) {
163
+ for (let c = 0; c < planes.length; c++) {
164
+ out[i * planes.length + c] = planes[c][i] ?? 0;
165
+ }
166
+ }
167
+ return out;
168
+ }
169
+ /**
170
+ * Bytes of PCM per CDP message.
171
+ *
172
+ * The whole track used to cross in a single `page.evaluate` pair — ~184 MB of
173
+ * base64 for a 3-minute stereo 48 kHz clip, in one WebSocket frame each way.
174
+ * puppeteer-core caps its frames at 256 MB and the browser pool does not use
175
+ * the pipe transport, so stereo past ~8.7 minutes failed the render outright;
176
+ * V8's max string length is a second wall not far beyond it. Chunking bounds
177
+ * both, and bounds the peak Node-side allocation with them: the mixer renders
178
+ * tracks concurrently, so every track's payload was live at once.
179
+ *
180
+ * 8 MiB encodes to ~11 MB of base64. A multiple of 4, so a chunk boundary
181
+ * never falls inside a float.
182
+ */
183
+ const TRANSFER_BYTES = 8 * 1024 * 1024;
184
+ /**
185
+ * Multiply every channel by the envelope, in place, one gain per frame.
186
+ *
187
+ * Frame-outer rather than plane-outer on purpose: the walker's cursor only
188
+ * moves forward, so restarting each channel at t=0 would hand the second one
189
+ * the tail gain for its whole length.
190
+ */
191
+ function applyEnvelopeToPlanes(planes, sampleRate, gainAt) {
192
+ const frames = planes[0]?.length ?? 0;
193
+ for (let frame = 0; frame < frames; frame += 1) {
194
+ const gain = gainAt(frame / sampleRate);
195
+ for (const plane of planes)
196
+ plane[frame] = (plane[frame] ?? 0) * gain;
197
+ }
198
+ }
199
+ /**
200
+ * Run a chain over `inputWav`, writing `outputWav`. Resolves to the path to use
201
+ * downstream — `outputWav` when the chain did something, `inputWav` untouched
202
+ * when the chain was empty — plus whether the volume envelope was baked here.
203
+ *
204
+ * The envelope is applied to the float samples the chain produced, BEFORE
205
+ * `writeWav` quantises them. Leaving it to the mixer's second pass meant a
206
+ * chain that overshoots full scale was destructively clipped to ±1 and only
207
+ * then ducked, so a track the lane pulls 12 dB down still rendered the
208
+ * distortion — which preview, working in float throughout, never had.
209
+ * `writeWav`'s clamp stays: it is the correct last resort for a signal that is
210
+ * still hot after the duck.
211
+ *
212
+ * Failure is fatal to the caller rather than a soft per-track warning: quietly
213
+ * rendering the dry signal ships a mix that sounds plausible and is not what
214
+ * the author set up.
215
+ */
216
+ export async function applyAudioFxChain(inputWav, chain, outputWav, options) {
217
+ if (enabledAudioFxNodes(chain).length === 0)
218
+ return { path: inputWav, envelopeBaked: false };
219
+ if (!existsSync(inputWav)) {
220
+ throw new AudioFxRenderError(`Audio FX input is missing: ${inputWav}`);
221
+ }
222
+ const { samples, sampleRate, channels } = readWav(inputWav);
223
+ const planes = deinterleave(samples, channels);
224
+ // An empty track has nothing to process — and an OfflineAudioContext of zero
225
+ // length throws, which is fatal for the WHOLE render rather than this track:
226
+ // the error travels past the mixer's per-track failure collector. ffmpeg
227
+ // writes an empty but structurally valid WAV whenever a clip's trim starts
228
+ // past the end of its source, so one mis-set `data-media-start` used to take
229
+ // the render down. Guarded here as well as in the runtime so an empty track
230
+ // never costs a browser.
231
+ if ((planes[0]?.length ?? 0) === 0)
232
+ return { path: inputWav, envelopeBaked: false };
233
+ // Both resources are taken INSIDE the try that releases them. The lease used
234
+ // to be acquired above it, with the mkdtemp between — so a failure there
235
+ // (a full disk, a read-only tmpdir) leaked a pooled browser, and a pool with
236
+ // no leases left hangs every later render rather than failing one.
237
+ const hostDir = mkdtempSync(join(tmpdir(), "hf-fx-host-"));
238
+ let lease = null;
239
+ try {
240
+ // Audio processing needs no GPU or special capture mode; a plain sandboxed
241
+ // browser is enough, and the lease pool reuses one across tracks.
242
+ // Checked before the lease, not after: an already-cancelled track has no
243
+ // reason to take a browser out of the pool just to hand it straight back.
244
+ if (options.signal?.aborted) {
245
+ throw new AudioFxRenderError(`Audio FX cancelled for track ${options.trackId}`);
246
+ }
247
+ lease = await acquireBrowser(["--no-sandbox", "--autoplay-policy=no-user-gesture-required"]);
248
+ const page = await lease.browser.newPage();
249
+ try {
250
+ // AudioWorklet is only exposed in a secure context, and about:blank is
251
+ // not one — the module would fail with an opaque error. A file:// page
252
+ // qualifies and needs no listening socket.
253
+ const hostPage = join(hostDir, "audio-fx.html");
254
+ writeFileSync(hostPage, "<!doctype html><meta charset=utf-8><title>audio fx</title>");
255
+ await page.goto(pathToFileURL(hostPage).href, { waitUntil: "domcontentloaded" });
256
+ await page.addScriptTag({ content: getAudioFxRuntimeScript() });
257
+ // Hand the input over a chunk at a time. The chunks stay separate byte
258
+ // arrays page-side rather than being concatenated into one string, so
259
+ // neither the frame cap nor V8's string limit sees the whole track.
260
+ await page.evaluate((count) => {
261
+ window.__HF_FX_IO = {
262
+ in: Array.from({ length: count }, () => []),
263
+ out: [],
264
+ };
265
+ }, planes.length);
266
+ for (let p = 0; p < planes.length; p += 1) {
267
+ const plane = planes[p];
268
+ if (!plane)
269
+ continue;
270
+ const bytes = Buffer.from(plane.buffer, plane.byteOffset, plane.length * 4);
271
+ for (let at = 0; at < bytes.length; at += TRANSFER_BYTES) {
272
+ await page.evaluate(([index, b64]) => {
273
+ const bin = atob(b64);
274
+ const chunk = new Uint8Array(bin.length);
275
+ for (let i = 0; i < bin.length; i++)
276
+ chunk[i] = bin.charCodeAt(i);
277
+ window.__HF_FX_IO?.in[index]?.push(chunk);
278
+ }, [p, bytes.subarray(at, at + TRANSFER_BYTES).toString("base64")]);
279
+ }
280
+ }
281
+ const outLengths = (await page.evaluate(async ([rate, chainJson, automationJson]) => {
282
+ const w = window;
283
+ const io = w.__HF_FX_IO;
284
+ if (!w.__HF_AUDIO_FX || !io)
285
+ throw new Error("audio FX runtime failed to load");
286
+ const inPlanes = io.in.map((chunks) => {
287
+ const bytes = new Uint8Array(chunks.reduce((n, c) => n + c.length, 0));
288
+ let at = 0;
289
+ for (const chunk of chunks) {
290
+ bytes.set(chunk, at);
291
+ at += chunk.length;
292
+ }
293
+ return new Float32Array(bytes.buffer);
294
+ });
295
+ // Dropped before the render allocates its own buffers, so the page
296
+ // does not hold two copies of the track at once.
297
+ io.in = [];
298
+ io.out = await w.__HF_AUDIO_FX.render(inPlanes, rate, chainJson, automationJson || undefined);
299
+ return io.out.map((plane) => plane.length);
300
+ }, [
301
+ sampleRate,
302
+ JSON.stringify(chain),
303
+ options.automation ? serializeAutomation(options.automation) : "",
304
+ ]));
305
+ const outPlanes = [];
306
+ for (let p = 0; p < outLengths.length; p += 1) {
307
+ const byteLength = (outLengths[p] ?? 0) * 4;
308
+ const parts = [];
309
+ for (let at = 0; at < byteLength; at += TRANSFER_BYTES) {
310
+ const b64 = (await page.evaluate(([index, offset, limit]) => {
311
+ const plane = window.__HF_FX_IO?.out[index];
312
+ if (!plane)
313
+ return "";
314
+ const u8 = new Uint8Array(plane.buffer, plane.byteOffset + offset, Math.min(limit, plane.length * 4 - offset));
315
+ let s = "";
316
+ const CHUNK = 0x8000;
317
+ for (let i = 0; i < u8.length; i += CHUNK) {
318
+ // `apply` takes array-likes, so the subarray goes in as it is;
319
+ // Array.from boxed every byte of a 32 KiB window for nothing.
320
+ s += String.fromCharCode.apply(null, u8.subarray(i, i + CHUNK));
321
+ }
322
+ return btoa(s);
323
+ }, [p, at, TRANSFER_BYTES]));
324
+ parts.push(Buffer.from(b64, "base64"));
325
+ }
326
+ // byteOffset and byteLength matter: Node pools small allocations, so a
327
+ // short payload decodes into an 8 KiB pool and a view over the whole
328
+ // ArrayBuffer would read kilobytes of unrelated memory at the wrong length.
329
+ const buf = Buffer.concat(parts);
330
+ outPlanes.push(new Float32Array(buf.buffer.slice(buf.byteOffset, buf.byteOffset + buf.byteLength)));
331
+ }
332
+ if (outPlanes.length === 0 || (outPlanes[0]?.length ?? 0) === 0) {
333
+ throw new AudioFxRenderError(`Audio FX produced no samples for track ${options.trackId}`);
334
+ }
335
+ // Null when the keyframes normalise away to nothing — then the mixer's
336
+ // own paths still own this track's gain, so say so rather than claiming
337
+ // a bake that never happened.
338
+ const gainAt = options.envelope
339
+ ? createEnvelopeWalker(options.envelope.keyframes, options.envelope.trackStart, options.envelope.baseVolume)
340
+ : null;
341
+ if (gainAt)
342
+ applyEnvelopeToPlanes(outPlanes, sampleRate, gainAt);
343
+ writeWav(outputWav, interleave(outPlanes), sampleRate, outPlanes.length);
344
+ return { path: outputWav, envelopeBaked: gainAt !== null };
345
+ }
346
+ finally {
347
+ await page.close().catch(() => undefined);
348
+ }
349
+ }
350
+ catch (err) {
351
+ if (err instanceof AudioFxRenderError)
352
+ throw err;
353
+ throw new AudioFxRenderError(`Audio FX failed for track ${options.trackId}: ${err.message}`);
354
+ }
355
+ finally {
356
+ rmSync(hostDir, { recursive: true, force: true });
357
+ await lease?.release().catch(() => undefined);
358
+ }
359
+ }
360
+ //# sourceMappingURL=audioFxRender.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"audioFxRender.js","sourceRoot":"","sources":["../../src/services/audioFxRender.ts"],"names":[],"mappings":"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"}
@@ -5,6 +5,8 @@
5
5
  */
6
6
  import { type EngineConfig } from "../config.js";
7
7
  import type { AudioElement, MixResult } from "./audioMixer.types.js";
8
+ import { type HfAutomationLane } from "@hyperframes/core/audio-automation";
9
+ import type { AudioVolumeKeyframe } from "./audioMixer.types.js";
8
10
  export type { AudioElement, MixResult } from "./audioMixer.types.js";
9
11
  /**
10
12
  * Filename every caller must use for the mixed-audio artifact.
@@ -20,6 +22,19 @@ export type { AudioElement, MixResult } from "./audioMixer.types.js";
20
22
  * the PNG-sequence sidecar, and all three have to agree.
21
23
  */
22
24
  export declare const MIXED_AUDIO_FILENAME = "audio.m4a";
25
+ /**
26
+ * A volume lane as keyframes for the PCM baker.
27
+ *
28
+ * The baker interpolates linearly between keyframes, so a straight segment
29
+ * needs only its two ends — a simple fade stays two keyframes. A bent one is
30
+ * sampled, or the bake would quietly straighten it.
31
+ *
32
+ * Times come out in composition seconds, which is what the baker subtracts the
33
+ * track start from. Returns null when the track has no volume lane.
34
+ */
35
+ export declare function volumeLaneKeyframes(automation: {
36
+ lanes: HfAutomationLane[];
37
+ }, trackStart: number, duration: number): AudioVolumeKeyframe[] | null;
23
38
  export declare function parseAudioElements(html: string): AudioElement[];
24
39
  export declare function processCompositionAudio(elements: AudioElement[], baseDir: string, workDir: string, outputPath: string, totalDuration: number, signal?: AbortSignal, config?: Partial<Pick<EngineConfig, "ffmpegProcessTimeout" | "audioGain">>, compiledDir?: string): Promise<MixResult>;
25
40
  //# sourceMappingURL=audioMixer.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"audioMixer.d.ts","sourceRoot":"","sources":["../../src/services/audioMixer.ts"],"names":[],"mappings":"AACA;;;;GAIG;AAaH,OAAO,EAAkB,KAAK,YAAY,EAAE,MAAM,cAAc,CAAC;AAKjE,OAAO,KAAK,EACV,YAAY,EAIZ,SAAS,EACV,MAAM,uBAAuB,CAAC;AAG/B,YAAY,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAErE;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,oBAAoB,cAAc,CAAC;AA4RhD,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,YAAY,EAAE,CA8D/D;AAsTD,wBAAsB,uBAAuB,CAC3C,QAAQ,EAAE,YAAY,EAAE,EACxB,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,MAAM,EACf,UAAU,EAAE,MAAM,EAClB,aAAa,EAAE,MAAM,EACrB,MAAM,CAAC,EAAE,WAAW,EACpB,MAAM,CAAC,EAAE,OAAO,CAAC,IAAI,CAAC,YAAY,EAAE,sBAAsB,GAAG,WAAW,CAAC,CAAC,EAC1E,WAAW,CAAC,EAAE,MAAM,GACnB,OAAO,CAAC,SAAS,CAAC,CA4NpB"}
1
+ {"version":3,"file":"audioMixer.d.ts","sourceRoot":"","sources":["../../src/services/audioMixer.ts"],"names":[],"mappings":"AACA;;;;GAIG;AAaH,OAAO,EAAkB,KAAK,YAAY,EAAE,MAAM,cAAc,CAAC;AAKjE,OAAO,KAAK,EACV,YAAY,EAIZ,SAAS,EACV,MAAM,uBAAuB,CAAC;AAG/B,OAAO,EAML,KAAK,gBAAgB,EACtB,MAAM,oCAAoC,CAAC;AAG5C,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAEjE,YAAY,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAErE;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,oBAAoB,cAAc,CAAC;AA+RhD;;;;;;;;;GASG;AACH,wBAAgB,mBAAmB,CACjC,UAAU,EAAE;IAAE,KAAK,EAAE,gBAAgB,EAAE,CAAA;CAAE,EACzC,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,MAAM,GACf,mBAAmB,EAAE,GAAG,IAAI,CA+B9B;AAED,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,YAAY,EAAE,CAmE/D;AA0TD,wBAAsB,uBAAuB,CAC3C,QAAQ,EAAE,YAAY,EAAE,EACxB,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,MAAM,EACf,UAAU,EAAE,MAAM,EAClB,aAAa,EAAE,MAAM,EACrB,MAAM,CAAC,EAAE,WAAW,EACpB,MAAM,CAAC,EAAE,OAAO,CAAC,IAAI,CAAC,YAAY,EAAE,sBAAsB,GAAG,WAAW,CAAC,CAAC,EAC1E,WAAW,CAAC,EAAE,MAAM,GACnB,OAAO,CAAC,SAAS,CAAC,CA8TpB"}