@maravilla-labs/frames 0.7.0 → 0.8.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/README.md +19 -2
- package/dist/audio.d.ts +9 -1
- package/dist/audio.d.ts.map +1 -1
- package/dist/audio.js +47 -13
- package/dist/audio.js.map +1 -1
- package/dist/fades.d.ts +38 -0
- package/dist/fades.d.ts.map +1 -0
- package/dist/fades.js +70 -0
- package/dist/fades.js.map +1 -0
- package/dist/index.d.ts +11 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +6 -0
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
- package/src/audio.ts +49 -13
- package/src/fades.ts +81 -0
- package/src/index.ts +15 -0
package/README.md
CHANGED
|
@@ -216,8 +216,25 @@ Fields: `at` / `duration` / `seek` (ms, like video); `src` — a URL the
|
|
|
216
216
|
browser preview fetches + decodes; `key` — the storage key the renderer
|
|
217
217
|
stages to mix (omit for preview-only tracks); `role` —
|
|
218
218
|
`"voiceover" | "music" | "sfx"` (default `"music"`); `gain` (linear,
|
|
219
|
-
default 1); `fadeIn` / `fadeOut` (ms); `
|
|
220
|
-
|
|
219
|
+
default 1); `fadeIn` / `fadeOut` (ms); `fadeInCurve` / `fadeOutCurve`
|
|
220
|
+
(see below); `duck` — whether a music bed dips under voiceover (default
|
|
221
|
+
`true` for `role: "music"`).
|
|
222
|
+
|
|
223
|
+
**Fade curves.** A fade has a shape as well as a length. The names map
|
|
224
|
+
to ffmpeg's own `afade` curves, and the preview evaluates the same
|
|
225
|
+
formulas, so a fade sounds identical in the editor and in the export:
|
|
226
|
+
|
|
227
|
+
| `fadeInCurve` / `fadeOutCurve` | afade | character |
|
|
228
|
+
|---|---|---|
|
|
229
|
+
| `linear` (default) | `tri` | straight gain ramp; dips in loudness mid-fade |
|
|
230
|
+
| `equal-power` | `qsin` | constant perceived loudness (−3 dB at the midpoint) |
|
|
231
|
+
| `s-curve` | `hsin` | gentle at both ends, quick through the middle |
|
|
232
|
+
| `exponential` | `exp` | slow start, fast finish (100 dB range) |
|
|
233
|
+
| `logarithmic` | `log` | fast start, slow finish |
|
|
234
|
+
|
|
235
|
+
`fadeGain(curve, x)` returns a fade-in's gain at progress `x` (a fade-out
|
|
236
|
+
is `fadeGain(curve, 1 - p)`), for drawing an envelope in your own UI;
|
|
237
|
+
`FADE_CURVES` lists the names in picker order.
|
|
221
238
|
|
|
222
239
|
**Ducking** is a static envelope computed from the voiceover clips'
|
|
223
240
|
positions (not their loudness), so it's deterministic and the preview
|
package/dist/audio.d.ts
CHANGED
|
@@ -13,6 +13,7 @@
|
|
|
13
13
|
* [`AudioEngine.playFrom`] on play and [`AudioEngine.stop`] on pause.
|
|
14
14
|
*/
|
|
15
15
|
import { type DuckParams } from "./ducking.js";
|
|
16
|
+
import { type FadeCurve } from "./fades.js";
|
|
16
17
|
/** A timeline audio track, resolved for browser playback. Times in ms. */
|
|
17
18
|
export type PreviewAudioTrack = {
|
|
18
19
|
/** Playable URL fetched + decoded for preview. */
|
|
@@ -28,6 +29,9 @@ export type PreviewAudioTrack = {
|
|
|
28
29
|
/** Fade-in / fade-out, ms. */
|
|
29
30
|
fadeIn: number;
|
|
30
31
|
fadeOut: number;
|
|
32
|
+
/** Shape of each fade (see `fades.ts`). Default `linear`. */
|
|
33
|
+
fadeInCurve?: FadeCurve;
|
|
34
|
+
fadeOutCurve?: FadeCurve;
|
|
31
35
|
/** "voiceover" drives ducking; "music" gets ducked when `duck`. */
|
|
32
36
|
role: "voiceover" | "music" | "sfx";
|
|
33
37
|
/** Whether this (music) track dips under voiceover. */
|
|
@@ -55,7 +59,11 @@ export declare class AudioEngine {
|
|
|
55
59
|
private ensureBuffers;
|
|
56
60
|
/** Start (or restart) playback from timeline position `fromMs`. */
|
|
57
61
|
playFrom(fromMs: number): Promise<void>;
|
|
58
|
-
/**
|
|
62
|
+
/**
|
|
63
|
+
* Per-track base gain + fade-in on `inGain`, fade-out on `outGain`, each
|
|
64
|
+
* shaped by its curve. `t0` is the playhead (seconds): a fade the playhead is
|
|
65
|
+
* already inside continues from where it is rather than restarting.
|
|
66
|
+
*/
|
|
59
67
|
private applyFades;
|
|
60
68
|
/** Ducking automation (scaled by the music track's base gain) on `g`. */
|
|
61
69
|
private applyDuck;
|
package/dist/audio.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"audio.d.ts","sourceRoot":"","sources":["../src/audio.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAIL,KAAK,UAAU,EAEhB,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"audio.d.ts","sourceRoot":"","sources":["../src/audio.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAIL,KAAK,UAAU,EAEhB,MAAM,cAAc,CAAC;AACtB,OAAO,EAAkB,KAAK,SAAS,EAAE,MAAM,YAAY,CAAC;AAE5D,0EAA0E;AAC1E,MAAM,MAAM,iBAAiB,GAAG;IAC9B,kDAAkD;IAClD,GAAG,EAAE,MAAM,CAAC;IACZ,0BAA0B;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,qEAAqE;IACrE,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,0CAA0C;IAC1C,IAAI,EAAE,MAAM,CAAC;IACb,oCAAoC;IACpC,IAAI,EAAE,MAAM,CAAC;IACb,8BAA8B;IAC9B,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,6DAA6D;IAC7D,WAAW,CAAC,EAAE,SAAS,CAAC;IACxB,YAAY,CAAC,EAAE,SAAS,CAAC;IACzB,mEAAmE;IACnE,IAAI,EAAE,WAAW,GAAG,OAAO,GAAG,KAAK,CAAC;IACpC,uDAAuD;IACvD,IAAI,EAAE,OAAO,CAAC;IACd,sEAAsE;IACtE,MAAM,CAAC,EAAE;QAAE,IAAI,EAAE,OAAO,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CAC3E,CAAC;AAcF,qBAAa,WAAW;IACtB,OAAO,CAAC,MAAM,CAAsB;IACpC,OAAO,CAAC,IAAI,CAAa;IACzB,OAAO,CAAC,GAAG,CAA6B;IACxC,OAAO,CAAC,MAAM,CAAyB;IACvC,OAAO,CAAC,OAAO,CAAkC;IACjD,OAAO,CAAC,MAAM,CAA+B;IAC7C,OAAO,CAAC,KAAK,CAAS;gBAEV,MAAM,EAAE,iBAAiB,EAAE,EAAE,IAAI,GAAE,UAAyB;IAKxE,mEAAmE;IACnE,OAAO,CAAC,iBAAiB;IAWzB,uEAAuE;YACzD,aAAa;IA0B3B,mEAAmE;IAC7D,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IA6E7C;;;;OAIG;IACH,OAAO,CAAC,UAAU;IA4ClB,yEAAyE;IACzE,OAAO,CAAC,SAAS;IAkBjB,uDAAuD;IACvD,IAAI,IAAI,IAAI;IAWZ,QAAQ,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI;CAI/B;AAMD;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,MAAM,EAAE;IAAE,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG;IACtF,EAAE,EAAE,MAAM,CAAC;IACX,EAAE,EAAE,MAAM,CAAC;IACX,WAAW,EAAE,MAAM,CAAC;IACpB,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,CAAC,EAAE,MAAM,CAAC;CACX,CAYA"}
|
package/dist/audio.js
CHANGED
|
@@ -13,6 +13,7 @@
|
|
|
13
13
|
* [`AudioEngine.playFrom`] on play and [`AudioEngine.stop`] on pause.
|
|
14
14
|
*/
|
|
15
15
|
import { DEFAULT_DUCK, duckAutomation, mergeSegments, } from "./ducking.js";
|
|
16
|
+
import { fadeAutomation } from "./fades.js";
|
|
16
17
|
function getAudioContextCtor() {
|
|
17
18
|
if (typeof window === "undefined")
|
|
18
19
|
return null;
|
|
@@ -112,13 +113,19 @@ export class AudioEngine {
|
|
|
112
113
|
continue;
|
|
113
114
|
// Map a timeline time (seconds) to this AudioContext's clock.
|
|
114
115
|
const toCtx = (timelineSec) => Math.max(startCtx, startCtx + (timelineSec - t0));
|
|
116
|
+
// Two gains, in series: the fade-in and the fade-out are separate
|
|
117
|
+
// automations that MULTIPLY where they overlap — the same as ffmpeg's two
|
|
118
|
+
// chained `afade` filters, and it keeps each curve's events on its own
|
|
119
|
+
// AudioParam so they can never collide.
|
|
115
120
|
const fadeGain = ctx.createGain();
|
|
116
|
-
|
|
117
|
-
|
|
121
|
+
const fadeOutGain = ctx.createGain();
|
|
122
|
+
fadeGain.connect(fadeOutGain);
|
|
123
|
+
this.applyFades(fadeGain, fadeOutGain, track, t0, toCtx);
|
|
124
|
+
let tail = fadeOutGain;
|
|
118
125
|
if (track.role === "music" && track.duck && segments.length) {
|
|
119
126
|
const duckGain = ctx.createGain();
|
|
120
127
|
this.applyDuck(duckGain, track.gain, segments, toCtx);
|
|
121
|
-
|
|
128
|
+
fadeOutGain.connect(duckGain);
|
|
122
129
|
tail = duckGain;
|
|
123
130
|
}
|
|
124
131
|
tail.connect(this.master);
|
|
@@ -139,21 +146,48 @@ export class AudioEngine {
|
|
|
139
146
|
this.active.push(node);
|
|
140
147
|
}
|
|
141
148
|
}
|
|
142
|
-
/**
|
|
143
|
-
|
|
149
|
+
/**
|
|
150
|
+
* Per-track base gain + fade-in on `inGain`, fade-out on `outGain`, each
|
|
151
|
+
* shaped by its curve. `t0` is the playhead (seconds): a fade the playhead is
|
|
152
|
+
* already inside continues from where it is rather than restarting.
|
|
153
|
+
*/
|
|
154
|
+
applyFades(inGain, outGain, track, t0, toCtx) {
|
|
144
155
|
const base = track.role === "music" && track.duck ? 1 : track.gain;
|
|
145
156
|
const startSec = track.at / 1000;
|
|
146
|
-
const fadeInSec = track.fadeIn / 1000;
|
|
147
|
-
const fadeOutSec = track.fadeOut / 1000;
|
|
148
157
|
const durMs = track.duration ?? 0;
|
|
149
158
|
const endSec = (track.at + durMs) / 1000;
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
159
|
+
const fadeInSec = Math.max(0, track.fadeIn) / 1000;
|
|
160
|
+
const fadeOutSec = Math.max(0, track.fadeOut) / 1000;
|
|
161
|
+
const inCurve = track.fadeInCurve ?? "linear";
|
|
162
|
+
const outCurve = track.fadeOutCurve ?? "linear";
|
|
163
|
+
// Fade-in (carries the base gain).
|
|
164
|
+
if (fadeInSec > 0) {
|
|
165
|
+
const inEnd = startSec + fadeInSec;
|
|
166
|
+
if (t0 >= inEnd) {
|
|
167
|
+
inGain.gain.setValueAtTime(base, toCtx(t0));
|
|
168
|
+
}
|
|
169
|
+
else {
|
|
170
|
+
const from = Math.max(0, (t0 - startSec) / fadeInSec);
|
|
171
|
+
const at = Math.max(startSec, t0);
|
|
172
|
+
// A value event AT the curve's start time counts as an overlap and
|
|
173
|
+
// throws — hold silence only when the clip starts later than the playhead.
|
|
174
|
+
if (at > t0)
|
|
175
|
+
inGain.gain.setValueAtTime(0, toCtx(t0));
|
|
176
|
+
inGain.gain.setValueCurveAtTime(fadeAutomation(inCurve, "in", base, from), toCtx(at), inEnd - at);
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
else {
|
|
180
|
+
inGain.gain.setValueAtTime(base, toCtx(t0));
|
|
153
181
|
}
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
182
|
+
// Fade-out (unity outside the fade).
|
|
183
|
+
const outStart = Math.max(startSec, endSec - fadeOutSec);
|
|
184
|
+
const hasOut = fadeOutSec > 0 && durMs > 0 && endSec > outStart && t0 < endSec;
|
|
185
|
+
const outAt = Math.max(outStart, t0);
|
|
186
|
+
if (!hasOut || outAt > t0)
|
|
187
|
+
outGain.gain.setValueAtTime(1, toCtx(t0));
|
|
188
|
+
if (hasOut) {
|
|
189
|
+
const from = Math.max(0, (t0 - outStart) / (endSec - outStart));
|
|
190
|
+
outGain.gain.setValueCurveAtTime(fadeAutomation(outCurve, "out", 1, from), toCtx(outAt), endSec - outAt);
|
|
157
191
|
}
|
|
158
192
|
}
|
|
159
193
|
/** Ducking automation (scaled by the music track's base gain) on `g`. */
|
package/dist/audio.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"audio.js","sourceRoot":"","sources":["../src/audio.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"audio.js","sourceRoot":"","sources":["../src/audio.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EACL,YAAY,EACZ,cAAc,EACd,aAAa,GAGd,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,cAAc,EAAkB,MAAM,YAAY,CAAC;AA8B5D,SAAS,mBAAmB;IAC1B,IAAI,OAAO,MAAM,KAAK,WAAW;QAAE,OAAO,IAAI,CAAC;IAC/C,OAAO,CACL,MAAM,CAAC,YAAY;QAClB,MAAiE;aAC/D,kBAAkB;QACrB,IAAI,CACL,CAAC;AACJ,CAAC;AAED,MAAM,OAAO,WAAW;IACd,MAAM,CAAsB;IAC5B,IAAI,CAAa;IACjB,GAAG,GAAwB,IAAI,CAAC;IAChC,MAAM,GAAoB,IAAI,CAAC;IAC/B,OAAO,GAAG,IAAI,GAAG,EAAuB,CAAC;IACzC,MAAM,GAA4B,EAAE,CAAC;IACrC,KAAK,GAAG,KAAK,CAAC;IAEtB,YAAY,MAA2B,EAAE,OAAmB,YAAY;QACtE,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACnB,CAAC;IAED,mEAAmE;IAC3D,iBAAiB;QACvB,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM;aACrB,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,WAAW,CAAC;aACrC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACX,KAAK,EAAE,CAAC,CAAC,EAAE,GAAG,IAAI;YAClB,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI;SACvC,CAAC,CAAC;aACF,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC;QAClC,OAAO,aAAa,CAAC,IAAI,CAAC,CAAC;IAC7B,CAAC;IAED,uEAAuE;IAC/D,KAAK,CAAC,aAAa;QACzB,MAAM,IAAI,GAAG,mBAAmB,EAAE,CAAC;QACnC,IAAI,CAAC,IAAI;YAAE,OAAO;QAClB,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;YACd,IAAI,CAAC,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC;YACtB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,CAAC;YACpC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;QAC5C,CAAC;QACD,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC;QACrB,MAAM,OAAO,CAAC,GAAG,CACf,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE;YAC1B,IAAI,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;gBAAE,OAAO;YACpC,IAAI,CAAC;gBACH,MAAM,IAAI,GAAG,MAAM,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;gBAChC,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,WAAW,EAAE,CAAC;gBACrC,MAAM,GAAG,GAAG,MAAM,GAAG,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC;gBAC3C,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;YAC/B,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,kEAAkE;gBAClE,sCAAsC;gBACtC,OAAO,CAAC,IAAI,CAAC,oDAAoD,CAAC,CAAC,GAAG,GAAG,EAAE,GAAG,CAAC,CAAC;YAClF,CAAC;QACH,CAAC,CAAC,CACH,CAAC;IACJ,CAAC;IAED,mEAAmE;IACnE,KAAK,CAAC,QAAQ,CAAC,MAAc;QAC3B,MAAM,IAAI,CAAC,aAAa,EAAE,CAAC;QAC3B,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM;YAAE,OAAO;QACtC,IAAI,CAAC,IAAI,EAAE,CAAC;QACZ,2EAA2E;QAC3E,4EAA4E;QAC5E,4EAA4E;QAC5E,iDAAiD;QACjD,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,KAAK,WAAW,EAAE,CAAC;YACnC,IAAI,CAAC;gBACH,MAAM,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC;YAC1B,CAAC;YAAC,MAAM,CAAC;gBACP,uDAAuD;YACzD,CAAC;QACH,CAAC;QAED,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC;QACrB,MAAM,EAAE,GAAG,MAAM,GAAG,IAAI,CAAC;QACzB,MAAM,QAAQ,GAAG,GAAG,CAAC,WAAW,GAAG,IAAI,CAAC,CAAC,iCAAiC;QAC1E,MAAM,QAAQ,GAAG,IAAI,CAAC,iBAAiB,EAAE,CAAC;QAC1C,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAE5C,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAChC,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YACxC,IAAI,CAAC,GAAG;gBAAE,SAAS;YAEnB,MAAM,SAAS,GAAG,GAAG,CAAC,QAAQ,GAAG,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC;YACnD,MAAM,KAAK,GAAG,KAAK,CAAC,QAAQ,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC;YACvD,MAAM,QAAQ,GAAG,KAAK,CAAC,EAAE,GAAG,KAAK,CAAC;YAClC,IAAI,EAAE,GAAG,IAAI,IAAI,QAAQ;gBAAE,SAAS,CAAC,yBAAyB;YAE9D,0EAA0E;YAC1E,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,IAAI,EAAE,KAAK,CAAC,EAAE,CAAC,CAAC;YAChD,MAAM,QAAQ,GAAG,CAAC,SAAS,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC;YAChD,MAAM,YAAY,GAAG,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC,SAAS,GAAG,KAAK,CAAC,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC;YAClE,MAAM,YAAY,GAAG,CAAC,QAAQ,GAAG,SAAS,CAAC,GAAG,IAAI,CAAC;YACnD,IAAI,YAAY,IAAI,CAAC;gBAAE,SAAS;YAEhC,8DAA8D;YAC9D,MAAM,KAAK,GAAG,CAAC,WAAmB,EAAE,EAAE,CACpC,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,QAAQ,GAAG,CAAC,WAAW,GAAG,EAAE,CAAC,CAAC,CAAC;YAEpD,kEAAkE;YAClE,0EAA0E;YAC1E,uEAAuE;YACvE,wCAAwC;YACxC,MAAM,QAAQ,GAAG,GAAG,CAAC,UAAU,EAAE,CAAC;YAClC,MAAM,WAAW,GAAG,GAAG,CAAC,UAAU,EAAE,CAAC;YACrC,QAAQ,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;YAC9B,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE,WAAW,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,CAAC,CAAC;YAEzD,IAAI,IAAI,GAAc,WAAW,CAAC;YAClC,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO,IAAI,KAAK,CAAC,IAAI,IAAI,QAAQ,CAAC,MAAM,EAAE,CAAC;gBAC5D,MAAM,QAAQ,GAAG,GAAG,CAAC,UAAU,EAAE,CAAC;gBAClC,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,KAAK,CAAC,IAAI,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC;gBACtD,WAAW,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;gBAC9B,IAAI,GAAG,QAAQ,CAAC;YAClB,CAAC;YACD,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YAE1B,qEAAqE;YACrE,uEAAuE;YACvE,eAAe;YACf,MAAM,IAAI,GAAG,GAAG,CAAC,kBAAkB,EAAE,CAAC;YACtC,IAAI,CAAC,MAAM,GAAG,GAAG,CAAC;YAClB,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,EAAE,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,eAAe,CAAC,GAAG,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;YACzF,IAAI,KAAK,EAAE,CAAC;gBACV,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;gBAC1B,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;YACjC,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;YACzB,CAAC;YACD,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,QAAQ,EAAE,YAAY,EAAE,YAAY,CAAC,CAAC;YAC5D,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACzB,CAAC;IACH,CAAC;IAED;;;;OAIG;IACK,UAAU,CAChB,MAAgB,EAChB,OAAiB,EACjB,KAAwB,EACxB,EAAU,EACV,KAAsC;QAEtC,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,KAAK,OAAO,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC;QACnE,MAAM,QAAQ,GAAG,KAAK,CAAC,EAAE,GAAG,IAAI,CAAC;QACjC,MAAM,KAAK,GAAG,KAAK,CAAC,QAAQ,IAAI,CAAC,CAAC;QAClC,MAAM,MAAM,GAAG,CAAC,KAAK,CAAC,EAAE,GAAG,KAAK,CAAC,GAAG,IAAI,CAAC;QACzC,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC;QACnD,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC;QACrD,MAAM,OAAO,GAAG,KAAK,CAAC,WAAW,IAAI,QAAQ,CAAC;QAC9C,MAAM,QAAQ,GAAG,KAAK,CAAC,YAAY,IAAI,QAAQ,CAAC;QAEhD,mCAAmC;QACnC,IAAI,SAAS,GAAG,CAAC,EAAE,CAAC;YAClB,MAAM,KAAK,GAAG,QAAQ,GAAG,SAAS,CAAC;YACnC,IAAI,EAAE,IAAI,KAAK,EAAE,CAAC;gBAChB,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC;YAC9C,CAAC;iBAAM,CAAC;gBACN,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,QAAQ,CAAC,GAAG,SAAS,CAAC,CAAC;gBACtD,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;gBAClC,mEAAmE;gBACnE,2EAA2E;gBAC3E,IAAI,EAAE,GAAG,EAAE;oBAAE,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC;gBACtD,MAAM,CAAC,IAAI,CAAC,mBAAmB,CAAC,cAAc,CAAC,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,KAAK,CAAC,EAAE,CAAC,EAAE,KAAK,GAAG,EAAE,CAAC,CAAC;YACpG,CAAC;QACH,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC;QAC9C,CAAC;QAED,qCAAqC;QACrC,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,MAAM,GAAG,UAAU,CAAC,CAAC;QACzD,MAAM,MAAM,GAAG,UAAU,GAAG,CAAC,IAAI,KAAK,GAAG,CAAC,IAAI,MAAM,GAAG,QAAQ,IAAI,EAAE,GAAG,MAAM,CAAC;QAC/E,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;QACrC,IAAI,CAAC,MAAM,IAAI,KAAK,GAAG,EAAE;YAAE,OAAO,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC;QACrE,IAAI,MAAM,EAAE,CAAC;YACX,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,QAAQ,CAAC,GAAG,CAAC,MAAM,GAAG,QAAQ,CAAC,CAAC,CAAC;YAChE,OAAO,CAAC,IAAI,CAAC,mBAAmB,CAAC,cAAc,CAAC,QAAQ,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,CAAC,EAAE,KAAK,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,KAAK,CAAC,CAAC;QAC3G,CAAC;IACH,CAAC;IAED,yEAAyE;IACjE,SAAS,CACf,CAAW,EACX,IAAY,EACZ,QAAmB,EACnB,KAAsC;QAEtC,MAAM,MAAM,GAAG,cAAc,CAAC,QAAQ,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;QACzD,IAAI,KAAK,GAAG,IAAI,CAAC;QACjB,KAAK,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC,IAAI,MAAM,EAAE,CAAC;YACtC,IAAI,KAAK,EAAE,CAAC;gBACV,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;gBAC7C,KAAK,GAAG,KAAK,CAAC;YAChB,CAAC;iBAAM,CAAC;gBACN,CAAC,CAAC,IAAI,CAAC,uBAAuB,CAAC,KAAK,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;YACxD,CAAC;QACH,CAAC;IACH,CAAC;IAED,uDAAuD;IACvD,IAAI;QACF,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAC/B,IAAI,CAAC;gBACH,IAAI,CAAC,IAAI,EAAE,CAAC;YACd,CAAC;YAAC,MAAM,CAAC;gBACP,qBAAqB;YACvB,CAAC;QACH,CAAC;QACD,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC;IACnB,CAAC;IAED,QAAQ,CAAC,KAAc;QACrB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,IAAI,CAAC,MAAM;YAAE,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC1D,CAAC;CACF;AAED,SAAS,OAAO,CAAC,CAAS;IACxB,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACnC,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,WAAW,CAAC,MAAyD;IAQnF,MAAM,KAAK,GAAG,OAAO,CAAC,MAAM,CAAC,KAAK,IAAI,GAAG,CAAC,CAAC;IAC3C,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,IAAI,IAAI,GAAG,CAAC,CAAC;IACzC,MAAM,KAAK,GAAG,OAAO,CAAC,MAAM,CAAC,KAAK,IAAI,GAAG,CAAC,CAAC;IAC3C,OAAO;QACL,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,IAAI,EAAE,mCAAmC;QACzD,EAAE,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,EAAE,oCAAoC;QAC5D,WAAW,EAAE,KAAK,GAAG,EAAE,EAAE,yBAAyB;QAClD,GAAG,EAAE,CAAC,GAAG,KAAK,GAAG,CAAC,EAAE,2BAA2B;QAC/C,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,GAAG,GAAG,CAAC,EAAE,iBAAiB;QAC9C,CAAC,EAAE,CAAC,GAAG,KAAK,GAAG,CAAC,EAAE,iBAAiB;KACpC,CAAC;AACJ,CAAC;AAED,SAAS,SAAS,CAAC,CAAS;IAC1B,MAAM,CAAC,GAAG,IAAI,CAAC;IACf,MAAM,KAAK,GAAG,IAAI,YAAY,CAAC,CAAC,CAAC,CAAC;IAClC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAC3B,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAChC,KAAK,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IAC9B,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,eAAe,CACtB,GAAiB,EACjB,MAAyD;IAEzD,MAAM,CAAC,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC;IAC9B,MAAM,EAAE,GAAG,GAAG,CAAC,kBAAkB,EAAE,CAAC;IACpC,EAAE,CAAC,IAAI,GAAG,UAAU,CAAC;IACrB,EAAE,CAAC,SAAS,CAAC,KAAK,GAAG,CAAC,CAAC,EAAE,CAAC;IAC1B,MAAM,EAAE,GAAG,GAAG,CAAC,kBAAkB,EAAE,CAAC;IACpC,EAAE,CAAC,IAAI,GAAG,SAAS,CAAC;IACpB,EAAE,CAAC,SAAS,CAAC,KAAK,GAAG,CAAC,CAAC,EAAE,CAAC;IAC1B,MAAM,KAAK,GAAG,GAAG,CAAC,kBAAkB,EAAE,CAAC;IACvC,KAAK,CAAC,IAAI,GAAG,UAAU,CAAC;IACxB,KAAK,CAAC,SAAS,CAAC,KAAK,GAAG,GAAG,CAAC;IAC5B,KAAK,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,WAAW,CAAC;IACjC,MAAM,GAAG,GAAG,GAAG,CAAC,UAAU,EAAE,CAAC;IAC7B,GAAG,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,GAAG,CAAC;IACvB,MAAM,MAAM,GAAG,GAAG,CAAC,gBAAgB,EAAE,CAAC;IACtC,MAAM,CAAC,KAAK,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC9B,MAAM,CAAC,UAAU,GAAG,IAAI,CAAC;IACzB,MAAM,IAAI,GAAG,GAAG,CAAC,UAAU,EAAE,CAAC;IAC9B,IAAI,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,IAAI,CAAC;IACzB,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IACf,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IAClB,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IACnB,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IACpB,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IACrB,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;AACrC,CAAC"}
|
package/dist/fades.d.ts
ADDED
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Fade curves for audio tracks — the shape of a fade-in / fade-out, not just
|
|
3
|
+
* its length.
|
|
4
|
+
*
|
|
5
|
+
* The render worker mixes with ffmpeg's `afade`, so these are ffmpeg's OWN
|
|
6
|
+
* curve formulas (libavfilter `af_afade.c`, `fade_gain`), evaluated here for the
|
|
7
|
+
* browser preview. The worker maps each name to the matching `afade` curve
|
|
8
|
+
* (`audio_mix.rs`, `ffmpeg_fade_curve`), which is what keeps preview == export.
|
|
9
|
+
*
|
|
10
|
+
* | name | afade | shape |
|
|
11
|
+
* |---------------|-------|----------------------------------------------------|
|
|
12
|
+
* | `linear` | tri | straight gain ramp — a dip in the middle |
|
|
13
|
+
* | `equal-power` | qsin | quarter sine — constant perceived loudness |
|
|
14
|
+
* | `s-curve` | hsin | half sine — gentle at both ends |
|
|
15
|
+
* | `exponential` | exp | slow start, fast finish (~-100 dB floor) |
|
|
16
|
+
* | `logarithmic` | log | fast start, slow finish |
|
|
17
|
+
*
|
|
18
|
+
* `linear` is the default because it is what `afade` does when no curve is
|
|
19
|
+
* named, so a track written before curves existed renders unchanged.
|
|
20
|
+
*/
|
|
21
|
+
export type FadeCurve = "linear" | "equal-power" | "s-curve" | "exponential" | "logarithmic";
|
|
22
|
+
/** Every curve, in the order a picker should offer them. */
|
|
23
|
+
export declare const FADE_CURVES: readonly FadeCurve[];
|
|
24
|
+
/** Resolve an untrusted value to a known curve (unknown ⇒ `linear`). */
|
|
25
|
+
export declare function resolveFadeCurve(value: unknown): FadeCurve;
|
|
26
|
+
/**
|
|
27
|
+
* Gain (0..1) of a FADE-IN at progress `x` (0 = start of the fade, 1 = end).
|
|
28
|
+
* A fade-out at progress `p` is `fadeGain(curve, 1 - p)` — exactly how `afade`
|
|
29
|
+
* runs its curve backwards for `t=out`.
|
|
30
|
+
*/
|
|
31
|
+
export declare function fadeGain(curve: FadeCurve, x: number): number;
|
|
32
|
+
/**
|
|
33
|
+
* Sampled gain automation for `AudioParam.setValueCurveAtTime`, scaled by
|
|
34
|
+
* `base`. `from` lets a curve start part-way through (playback that begins in
|
|
35
|
+
* the middle of a fade), so the preview never restarts a fade from silence.
|
|
36
|
+
*/
|
|
37
|
+
export declare function fadeAutomation(curve: FadeCurve, direction: "in" | "out", base: number, from?: number, samples?: number): Float32Array;
|
|
38
|
+
//# sourceMappingURL=fades.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fades.d.ts","sourceRoot":"","sources":["../src/fades.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,MAAM,MAAM,SAAS,GAAG,QAAQ,GAAG,aAAa,GAAG,SAAS,GAAG,aAAa,GAAG,aAAa,CAAC;AAE7F,4DAA4D;AAC5D,eAAO,MAAM,WAAW,EAAE,SAAS,SAAS,EAM3C,CAAC;AAEF,wEAAwE;AACxE,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,OAAO,GAAG,SAAS,CAI1D;AAED;;;;GAIG;AACH,wBAAgB,QAAQ,CAAC,KAAK,EAAE,SAAS,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAe5D;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAC5B,KAAK,EAAE,SAAS,EAChB,SAAS,EAAE,IAAI,GAAG,KAAK,EACvB,IAAI,EAAE,MAAM,EACZ,IAAI,SAAI,EACR,OAAO,SAAM,GACZ,YAAY,CAQd"}
|
package/dist/fades.js
ADDED
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Fade curves for audio tracks — the shape of a fade-in / fade-out, not just
|
|
3
|
+
* its length.
|
|
4
|
+
*
|
|
5
|
+
* The render worker mixes with ffmpeg's `afade`, so these are ffmpeg's OWN
|
|
6
|
+
* curve formulas (libavfilter `af_afade.c`, `fade_gain`), evaluated here for the
|
|
7
|
+
* browser preview. The worker maps each name to the matching `afade` curve
|
|
8
|
+
* (`audio_mix.rs`, `ffmpeg_fade_curve`), which is what keeps preview == export.
|
|
9
|
+
*
|
|
10
|
+
* | name | afade | shape |
|
|
11
|
+
* |---------------|-------|----------------------------------------------------|
|
|
12
|
+
* | `linear` | tri | straight gain ramp — a dip in the middle |
|
|
13
|
+
* | `equal-power` | qsin | quarter sine — constant perceived loudness |
|
|
14
|
+
* | `s-curve` | hsin | half sine — gentle at both ends |
|
|
15
|
+
* | `exponential` | exp | slow start, fast finish (~-100 dB floor) |
|
|
16
|
+
* | `logarithmic` | log | fast start, slow finish |
|
|
17
|
+
*
|
|
18
|
+
* `linear` is the default because it is what `afade` does when no curve is
|
|
19
|
+
* named, so a track written before curves existed renders unchanged.
|
|
20
|
+
*/
|
|
21
|
+
/** Every curve, in the order a picker should offer them. */
|
|
22
|
+
export const FADE_CURVES = [
|
|
23
|
+
"linear",
|
|
24
|
+
"equal-power",
|
|
25
|
+
"s-curve",
|
|
26
|
+
"exponential",
|
|
27
|
+
"logarithmic",
|
|
28
|
+
];
|
|
29
|
+
/** Resolve an untrusted value to a known curve (unknown ⇒ `linear`). */
|
|
30
|
+
export function resolveFadeCurve(value) {
|
|
31
|
+
return typeof value === "string" && FADE_CURVES.includes(value)
|
|
32
|
+
? value
|
|
33
|
+
: "linear";
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Gain (0..1) of a FADE-IN at progress `x` (0 = start of the fade, 1 = end).
|
|
37
|
+
* A fade-out at progress `p` is `fadeGain(curve, 1 - p)` — exactly how `afade`
|
|
38
|
+
* runs its curve backwards for `t=out`.
|
|
39
|
+
*/
|
|
40
|
+
export function fadeGain(curve, x) {
|
|
41
|
+
const g = x <= 0 ? 0 : x >= 1 ? 1 : x;
|
|
42
|
+
switch (curve) {
|
|
43
|
+
case "equal-power":
|
|
44
|
+
return Math.sin((g * Math.PI) / 2);
|
|
45
|
+
case "s-curve":
|
|
46
|
+
return (1 - Math.cos(g * Math.PI)) / 2;
|
|
47
|
+
case "exponential":
|
|
48
|
+
return g >= 1 ? 1 : Math.exp(-11.512925464970227 * (1 - g));
|
|
49
|
+
case "logarithmic":
|
|
50
|
+
return g <= 0 ? 0 : Math.min(1, Math.max(0, 1 + 0.2 * Math.log10(g)));
|
|
51
|
+
case "linear":
|
|
52
|
+
default:
|
|
53
|
+
return g;
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Sampled gain automation for `AudioParam.setValueCurveAtTime`, scaled by
|
|
58
|
+
* `base`. `from` lets a curve start part-way through (playback that begins in
|
|
59
|
+
* the middle of a fade), so the preview never restarts a fade from silence.
|
|
60
|
+
*/
|
|
61
|
+
export function fadeAutomation(curve, direction, base, from = 0, samples = 128) {
|
|
62
|
+
const out = new Float32Array(Math.max(2, samples));
|
|
63
|
+
const start = from <= 0 ? 0 : from >= 1 ? 1 : from;
|
|
64
|
+
for (let i = 0; i < out.length; i++) {
|
|
65
|
+
const p = start + ((1 - start) * i) / (out.length - 1);
|
|
66
|
+
out[i] = base * fadeGain(curve, direction === "in" ? p : 1 - p);
|
|
67
|
+
}
|
|
68
|
+
return out;
|
|
69
|
+
}
|
|
70
|
+
//# sourceMappingURL=fades.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fades.js","sourceRoot":"","sources":["../src/fades.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAIH,4DAA4D;AAC5D,MAAM,CAAC,MAAM,WAAW,GAAyB;IAC/C,QAAQ;IACR,aAAa;IACb,SAAS;IACT,aAAa;IACb,aAAa;CACd,CAAC;AAEF,wEAAwE;AACxE,MAAM,UAAU,gBAAgB,CAAC,KAAc;IAC7C,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAK,WAAiC,CAAC,QAAQ,CAAC,KAAK,CAAC;QACpF,CAAC,CAAE,KAAmB;QACtB,CAAC,CAAC,QAAQ,CAAC;AACf,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,QAAQ,CAAC,KAAgB,EAAE,CAAS;IAClD,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACtC,QAAQ,KAAK,EAAE,CAAC;QACd,KAAK,aAAa;YAChB,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;QACrC,KAAK,SAAS;YACZ,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC;QACzC,KAAK,aAAa;YAChB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,kBAAkB,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QAC9D,KAAK,aAAa;YAChB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACxE,KAAK,QAAQ,CAAC;QACd;YACE,OAAO,CAAC,CAAC;IACb,CAAC;AACH,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,cAAc,CAC5B,KAAgB,EAChB,SAAuB,EACvB,IAAY,EACZ,IAAI,GAAG,CAAC,EACR,OAAO,GAAG,GAAG;IAEb,MAAM,GAAG,GAAG,IAAI,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC;IACnD,MAAM,KAAK,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IACnD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACpC,MAAM,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QACvD,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,GAAG,QAAQ,CAAC,KAAK,EAAE,SAAS,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IAClE,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC"}
|
package/dist/index.d.ts
CHANGED
|
@@ -7,8 +7,11 @@
|
|
|
7
7
|
* - Inside the Maravilla renderer, the timeline is stepped frame by
|
|
8
8
|
* frame to produce deterministic video output.
|
|
9
9
|
*/
|
|
10
|
+
import { type FadeCurve } from "./fades.js";
|
|
10
11
|
export { AudioEngine } from "./audio.js";
|
|
11
12
|
export type { PreviewAudioTrack } from "./audio.js";
|
|
13
|
+
export { FADE_CURVES, fadeAutomation, fadeGain, resolveFadeCurve } from "./fades.js";
|
|
14
|
+
export type { FadeCurve } from "./fades.js";
|
|
12
15
|
export { DEFAULT_DUCK, duckAutomation, duckMultiplier, mergeSegments, type DuckParams, type Segment, } from "./ducking.js";
|
|
13
16
|
export type AnimationInstr = {
|
|
14
17
|
/** Optional discriminator. Defaults to `"animation"`. */
|
|
@@ -118,6 +121,12 @@ export type AudioInstr = {
|
|
|
118
121
|
/** Fade-in / fade-out length from the clip edges, ms. Default 0. */
|
|
119
122
|
fadeIn?: number;
|
|
120
123
|
fadeOut?: number;
|
|
124
|
+
/**
|
|
125
|
+
* Shape of each fade — `linear` | `equal-power` | `s-curve` | `exponential`
|
|
126
|
+
* | `logarithmic` (ffmpeg `afade` curves; see `fades.ts`). Default `linear`.
|
|
127
|
+
*/
|
|
128
|
+
fadeInCurve?: FadeCurve;
|
|
129
|
+
fadeOutCurve?: FadeCurve;
|
|
121
130
|
/** Whether a music track ducks under voiceover. Defaults to `role === "music"`. */
|
|
122
131
|
duck?: boolean;
|
|
123
132
|
/** Optional per-track effect (e.g. a "radio voice"). */
|
|
@@ -143,6 +152,8 @@ export type AudioSlotInfo = {
|
|
|
143
152
|
duck: boolean;
|
|
144
153
|
fadeIn: number;
|
|
145
154
|
fadeOut: number;
|
|
155
|
+
fadeInCurve: FadeCurve;
|
|
156
|
+
fadeOutCurve: FadeCurve;
|
|
146
157
|
effect?: AudioEffect;
|
|
147
158
|
};
|
|
148
159
|
/** A `<video>` slot as exposed to the renderer engine (worker). The engine
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -8,7 +8,9 @@
|
|
|
8
8
|
* frame to produce deterministic video output.
|
|
9
9
|
*/
|
|
10
10
|
import { AudioEngine } from "./audio.js";
|
|
11
|
+
import { resolveFadeCurve } from "./fades.js";
|
|
11
12
|
export { AudioEngine } from "./audio.js";
|
|
13
|
+
export { FADE_CURVES, fadeAutomation, fadeGain, resolveFadeCurve } from "./fades.js";
|
|
12
14
|
export { DEFAULT_DUCK, duckAutomation, duckMultiplier, mergeSegments, } from "./ducking.js";
|
|
13
15
|
/**
|
|
14
16
|
* Declare the page's timeline. **Safe to call as soon as your module runs** —
|
|
@@ -229,6 +231,8 @@ function installTimeline(schema) {
|
|
|
229
231
|
duck: a.duck ?? role === "music",
|
|
230
232
|
fadeIn: a.fadeIn ?? 0,
|
|
231
233
|
fadeOut: a.fadeOut ?? 0,
|
|
234
|
+
fadeInCurve: resolveFadeCurve(a.fadeInCurve),
|
|
235
|
+
fadeOutCurve: resolveFadeCurve(a.fadeOutCurve),
|
|
232
236
|
effect: a.effect,
|
|
233
237
|
};
|
|
234
238
|
});
|
|
@@ -253,6 +257,8 @@ function installTimeline(schema) {
|
|
|
253
257
|
gain: a.gain,
|
|
254
258
|
fadeIn: a.fadeIn,
|
|
255
259
|
fadeOut: a.fadeOut,
|
|
260
|
+
fadeInCurve: a.fadeInCurve,
|
|
261
|
+
fadeOutCurve: a.fadeOutCurve,
|
|
256
262
|
role: a.role,
|
|
257
263
|
duck: a.duck,
|
|
258
264
|
effect: a.effect,
|
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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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@maravilla-labs/frames",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.8.0",
|
|
4
4
|
"description": "Tiny vanilla helper for declaring Web Animations API timelines that the Maravilla runtime renderer drives frame-accurately.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|
package/src/audio.ts
CHANGED
|
@@ -20,6 +20,7 @@ import {
|
|
|
20
20
|
type DuckParams,
|
|
21
21
|
type Segment,
|
|
22
22
|
} from "./ducking.js";
|
|
23
|
+
import { fadeAutomation, type FadeCurve } from "./fades.js";
|
|
23
24
|
|
|
24
25
|
/** A timeline audio track, resolved for browser playback. Times in ms. */
|
|
25
26
|
export type PreviewAudioTrack = {
|
|
@@ -36,6 +37,9 @@ export type PreviewAudioTrack = {
|
|
|
36
37
|
/** Fade-in / fade-out, ms. */
|
|
37
38
|
fadeIn: number;
|
|
38
39
|
fadeOut: number;
|
|
40
|
+
/** Shape of each fade (see `fades.ts`). Default `linear`. */
|
|
41
|
+
fadeInCurve?: FadeCurve;
|
|
42
|
+
fadeOutCurve?: FadeCurve;
|
|
39
43
|
/** "voiceover" drives ducking; "music" gets ducked when `duck`. */
|
|
40
44
|
role: "voiceover" | "music" | "sfx";
|
|
41
45
|
/** Whether this (music) track dips under voiceover. */
|
|
@@ -152,14 +156,20 @@ export class AudioEngine {
|
|
|
152
156
|
const toCtx = (timelineSec: number) =>
|
|
153
157
|
Math.max(startCtx, startCtx + (timelineSec - t0));
|
|
154
158
|
|
|
159
|
+
// Two gains, in series: the fade-in and the fade-out are separate
|
|
160
|
+
// automations that MULTIPLY where they overlap — the same as ffmpeg's two
|
|
161
|
+
// chained `afade` filters, and it keeps each curve's events on its own
|
|
162
|
+
// AudioParam so they can never collide.
|
|
155
163
|
const fadeGain = ctx.createGain();
|
|
156
|
-
|
|
164
|
+
const fadeOutGain = ctx.createGain();
|
|
165
|
+
fadeGain.connect(fadeOutGain);
|
|
166
|
+
this.applyFades(fadeGain, fadeOutGain, track, t0, toCtx);
|
|
157
167
|
|
|
158
|
-
let tail: AudioNode =
|
|
168
|
+
let tail: AudioNode = fadeOutGain;
|
|
159
169
|
if (track.role === "music" && track.duck && segments.length) {
|
|
160
170
|
const duckGain = ctx.createGain();
|
|
161
171
|
this.applyDuck(duckGain, track.gain, segments, toCtx);
|
|
162
|
-
|
|
172
|
+
fadeOutGain.connect(duckGain);
|
|
163
173
|
tail = duckGain;
|
|
164
174
|
}
|
|
165
175
|
tail.connect(this.master);
|
|
@@ -181,26 +191,52 @@ export class AudioEngine {
|
|
|
181
191
|
}
|
|
182
192
|
}
|
|
183
193
|
|
|
184
|
-
/**
|
|
194
|
+
/**
|
|
195
|
+
* Per-track base gain + fade-in on `inGain`, fade-out on `outGain`, each
|
|
196
|
+
* shaped by its curve. `t0` is the playhead (seconds): a fade the playhead is
|
|
197
|
+
* already inside continues from where it is rather than restarting.
|
|
198
|
+
*/
|
|
185
199
|
private applyFades(
|
|
186
|
-
|
|
200
|
+
inGain: GainNode,
|
|
201
|
+
outGain: GainNode,
|
|
187
202
|
track: PreviewAudioTrack,
|
|
203
|
+
t0: number,
|
|
188
204
|
toCtx: (timelineSec: number) => number,
|
|
189
205
|
): void {
|
|
190
206
|
const base = track.role === "music" && track.duck ? 1 : track.gain;
|
|
191
207
|
const startSec = track.at / 1000;
|
|
192
|
-
const fadeInSec = track.fadeIn / 1000;
|
|
193
|
-
const fadeOutSec = track.fadeOut / 1000;
|
|
194
208
|
const durMs = track.duration ?? 0;
|
|
195
209
|
const endSec = (track.at + durMs) / 1000;
|
|
210
|
+
const fadeInSec = Math.max(0, track.fadeIn) / 1000;
|
|
211
|
+
const fadeOutSec = Math.max(0, track.fadeOut) / 1000;
|
|
212
|
+
const inCurve = track.fadeInCurve ?? "linear";
|
|
213
|
+
const outCurve = track.fadeOutCurve ?? "linear";
|
|
196
214
|
|
|
197
|
-
|
|
198
|
-
if (
|
|
199
|
-
|
|
215
|
+
// Fade-in (carries the base gain).
|
|
216
|
+
if (fadeInSec > 0) {
|
|
217
|
+
const inEnd = startSec + fadeInSec;
|
|
218
|
+
if (t0 >= inEnd) {
|
|
219
|
+
inGain.gain.setValueAtTime(base, toCtx(t0));
|
|
220
|
+
} else {
|
|
221
|
+
const from = Math.max(0, (t0 - startSec) / fadeInSec);
|
|
222
|
+
const at = Math.max(startSec, t0);
|
|
223
|
+
// A value event AT the curve's start time counts as an overlap and
|
|
224
|
+
// throws — hold silence only when the clip starts later than the playhead.
|
|
225
|
+
if (at > t0) inGain.gain.setValueAtTime(0, toCtx(t0));
|
|
226
|
+
inGain.gain.setValueCurveAtTime(fadeAutomation(inCurve, "in", base, from), toCtx(at), inEnd - at);
|
|
227
|
+
}
|
|
228
|
+
} else {
|
|
229
|
+
inGain.gain.setValueAtTime(base, toCtx(t0));
|
|
200
230
|
}
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
231
|
+
|
|
232
|
+
// Fade-out (unity outside the fade).
|
|
233
|
+
const outStart = Math.max(startSec, endSec - fadeOutSec);
|
|
234
|
+
const hasOut = fadeOutSec > 0 && durMs > 0 && endSec > outStart && t0 < endSec;
|
|
235
|
+
const outAt = Math.max(outStart, t0);
|
|
236
|
+
if (!hasOut || outAt > t0) outGain.gain.setValueAtTime(1, toCtx(t0));
|
|
237
|
+
if (hasOut) {
|
|
238
|
+
const from = Math.max(0, (t0 - outStart) / (endSec - outStart));
|
|
239
|
+
outGain.gain.setValueCurveAtTime(fadeAutomation(outCurve, "out", 1, from), toCtx(outAt), endSec - outAt);
|
|
204
240
|
}
|
|
205
241
|
}
|
|
206
242
|
|
package/src/fades.ts
ADDED
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Fade curves for audio tracks — the shape of a fade-in / fade-out, not just
|
|
3
|
+
* its length.
|
|
4
|
+
*
|
|
5
|
+
* The render worker mixes with ffmpeg's `afade`, so these are ffmpeg's OWN
|
|
6
|
+
* curve formulas (libavfilter `af_afade.c`, `fade_gain`), evaluated here for the
|
|
7
|
+
* browser preview. The worker maps each name to the matching `afade` curve
|
|
8
|
+
* (`audio_mix.rs`, `ffmpeg_fade_curve`), which is what keeps preview == export.
|
|
9
|
+
*
|
|
10
|
+
* | name | afade | shape |
|
|
11
|
+
* |---------------|-------|----------------------------------------------------|
|
|
12
|
+
* | `linear` | tri | straight gain ramp — a dip in the middle |
|
|
13
|
+
* | `equal-power` | qsin | quarter sine — constant perceived loudness |
|
|
14
|
+
* | `s-curve` | hsin | half sine — gentle at both ends |
|
|
15
|
+
* | `exponential` | exp | slow start, fast finish (~-100 dB floor) |
|
|
16
|
+
* | `logarithmic` | log | fast start, slow finish |
|
|
17
|
+
*
|
|
18
|
+
* `linear` is the default because it is what `afade` does when no curve is
|
|
19
|
+
* named, so a track written before curves existed renders unchanged.
|
|
20
|
+
*/
|
|
21
|
+
|
|
22
|
+
export type FadeCurve = "linear" | "equal-power" | "s-curve" | "exponential" | "logarithmic";
|
|
23
|
+
|
|
24
|
+
/** Every curve, in the order a picker should offer them. */
|
|
25
|
+
export const FADE_CURVES: readonly FadeCurve[] = [
|
|
26
|
+
"linear",
|
|
27
|
+
"equal-power",
|
|
28
|
+
"s-curve",
|
|
29
|
+
"exponential",
|
|
30
|
+
"logarithmic",
|
|
31
|
+
];
|
|
32
|
+
|
|
33
|
+
/** Resolve an untrusted value to a known curve (unknown ⇒ `linear`). */
|
|
34
|
+
export function resolveFadeCurve(value: unknown): FadeCurve {
|
|
35
|
+
return typeof value === "string" && (FADE_CURVES as readonly string[]).includes(value)
|
|
36
|
+
? (value as FadeCurve)
|
|
37
|
+
: "linear";
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
/**
|
|
41
|
+
* Gain (0..1) of a FADE-IN at progress `x` (0 = start of the fade, 1 = end).
|
|
42
|
+
* A fade-out at progress `p` is `fadeGain(curve, 1 - p)` — exactly how `afade`
|
|
43
|
+
* runs its curve backwards for `t=out`.
|
|
44
|
+
*/
|
|
45
|
+
export function fadeGain(curve: FadeCurve, x: number): number {
|
|
46
|
+
const g = x <= 0 ? 0 : x >= 1 ? 1 : x;
|
|
47
|
+
switch (curve) {
|
|
48
|
+
case "equal-power":
|
|
49
|
+
return Math.sin((g * Math.PI) / 2);
|
|
50
|
+
case "s-curve":
|
|
51
|
+
return (1 - Math.cos(g * Math.PI)) / 2;
|
|
52
|
+
case "exponential":
|
|
53
|
+
return g >= 1 ? 1 : Math.exp(-11.512925464970227 * (1 - g));
|
|
54
|
+
case "logarithmic":
|
|
55
|
+
return g <= 0 ? 0 : Math.min(1, Math.max(0, 1 + 0.2 * Math.log10(g)));
|
|
56
|
+
case "linear":
|
|
57
|
+
default:
|
|
58
|
+
return g;
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
/**
|
|
63
|
+
* Sampled gain automation for `AudioParam.setValueCurveAtTime`, scaled by
|
|
64
|
+
* `base`. `from` lets a curve start part-way through (playback that begins in
|
|
65
|
+
* the middle of a fade), so the preview never restarts a fade from silence.
|
|
66
|
+
*/
|
|
67
|
+
export function fadeAutomation(
|
|
68
|
+
curve: FadeCurve,
|
|
69
|
+
direction: "in" | "out",
|
|
70
|
+
base: number,
|
|
71
|
+
from = 0,
|
|
72
|
+
samples = 128,
|
|
73
|
+
): Float32Array {
|
|
74
|
+
const out = new Float32Array(Math.max(2, samples));
|
|
75
|
+
const start = from <= 0 ? 0 : from >= 1 ? 1 : from;
|
|
76
|
+
for (let i = 0; i < out.length; i++) {
|
|
77
|
+
const p = start + ((1 - start) * i) / (out.length - 1);
|
|
78
|
+
out[i] = base * fadeGain(curve, direction === "in" ? p : 1 - p);
|
|
79
|
+
}
|
|
80
|
+
return out;
|
|
81
|
+
}
|
package/src/index.ts
CHANGED
|
@@ -9,9 +9,12 @@
|
|
|
9
9
|
*/
|
|
10
10
|
|
|
11
11
|
import { AudioEngine, type PreviewAudioTrack } from "./audio.js";
|
|
12
|
+
import { resolveFadeCurve, type FadeCurve } from "./fades.js";
|
|
12
13
|
|
|
13
14
|
export { AudioEngine } from "./audio.js";
|
|
14
15
|
export type { PreviewAudioTrack } from "./audio.js";
|
|
16
|
+
export { FADE_CURVES, fadeAutomation, fadeGain, resolveFadeCurve } from "./fades.js";
|
|
17
|
+
export type { FadeCurve } from "./fades.js";
|
|
15
18
|
export {
|
|
16
19
|
DEFAULT_DUCK,
|
|
17
20
|
duckAutomation,
|
|
@@ -134,6 +137,12 @@ export type AudioInstr = {
|
|
|
134
137
|
/** Fade-in / fade-out length from the clip edges, ms. Default 0. */
|
|
135
138
|
fadeIn?: number;
|
|
136
139
|
fadeOut?: number;
|
|
140
|
+
/**
|
|
141
|
+
* Shape of each fade — `linear` | `equal-power` | `s-curve` | `exponential`
|
|
142
|
+
* | `logarithmic` (ffmpeg `afade` curves; see `fades.ts`). Default `linear`.
|
|
143
|
+
*/
|
|
144
|
+
fadeInCurve?: FadeCurve;
|
|
145
|
+
fadeOutCurve?: FadeCurve;
|
|
137
146
|
/** Whether a music track ducks under voiceover. Defaults to `role === "music"`. */
|
|
138
147
|
duck?: boolean;
|
|
139
148
|
/** Optional per-track effect (e.g. a "radio voice"). */
|
|
@@ -158,6 +167,8 @@ export type AudioSlotInfo = {
|
|
|
158
167
|
duck: boolean;
|
|
159
168
|
fadeIn: number;
|
|
160
169
|
fadeOut: number;
|
|
170
|
+
fadeInCurve: FadeCurve;
|
|
171
|
+
fadeOutCurve: FadeCurve;
|
|
161
172
|
effect?: AudioEffect;
|
|
162
173
|
};
|
|
163
174
|
|
|
@@ -475,6 +486,8 @@ function installTimeline(schema: TimelineSchema): void {
|
|
|
475
486
|
duck: a.duck ?? role === "music",
|
|
476
487
|
fadeIn: a.fadeIn ?? 0,
|
|
477
488
|
fadeOut: a.fadeOut ?? 0,
|
|
489
|
+
fadeInCurve: resolveFadeCurve(a.fadeInCurve),
|
|
490
|
+
fadeOutCurve: resolveFadeCurve(a.fadeOutCurve),
|
|
478
491
|
effect: a.effect,
|
|
479
492
|
};
|
|
480
493
|
});
|
|
@@ -503,6 +516,8 @@ function installTimeline(schema: TimelineSchema): void {
|
|
|
503
516
|
gain: a.gain,
|
|
504
517
|
fadeIn: a.fadeIn,
|
|
505
518
|
fadeOut: a.fadeOut,
|
|
519
|
+
fadeInCurve: a.fadeInCurve,
|
|
520
|
+
fadeOutCurve: a.fadeOutCurve,
|
|
506
521
|
role: a.role,
|
|
507
522
|
duck: a.duck,
|
|
508
523
|
effect: a.effect,
|