Skip to content

Commit ffc9cb4

Browse files
committed
refactor(studio): the stored volume reader lives in its own file, under the helpers' size limit
1 parent 3660521 commit ffc9cb4

3 files changed

Lines changed: 13 additions & 15 deletions

File tree

‎packages/studio/src/player/lib/automationStoreSync.ts‎

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -25,11 +25,11 @@ import {
2525
import { usePlayerStore, type TimelineElement } from "../store/playerStore";
2626
import { groupInfoFor } from "./timelineGroupInfo";
2727
import {
28-
elementVolume,
2928
getTimelineElementIdentity,
30-
parseStoredVolume,
3129
previewElementFinder,
30+
resolveMediaElement,
3231
} from "./timelineElementHelpers";
32+
import { elementVolume, parseStoredVolume } from "./storedVolume";
3333

3434
/**
3535
* Re-read every element's automation, FX-chain, fade and volume attributes from the preview
@@ -60,7 +60,7 @@ function syncedFields(doc: Document, element: TimelineElement, node: Element) {
6060
fxChain: node.getAttribute(HF_AUDIO_FX_ATTR) ?? undefined,
6161
fadeIn: storedFade(fades.fadeIn),
6262
fadeOut: storedFade(fades.fadeOut),
63-
volume: elementVolume(node),
63+
volume: elementVolume(node, resolveMediaElement(node) ?? node),
6464
audioGroupAutomation: group?.automation,
6565
audioGroupFxChain: group?.fxChain,
6666
};
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
export function parseStoredVolume(text: string | null): number | undefined {
2+
const volume = Number.parseFloat(text ?? "");
3+
return Number.isFinite(volume) ? volume : undefined;
4+
}
5+
6+
/** Discovery's reading: the element's own `data-volume`, else its media's. */
7+
export const elementVolume = (el: Element, media: Element) =>
8+
parseStoredVolume(el.getAttribute("data-volume") ?? media.getAttribute("data-volume"));

‎packages/studio/src/player/lib/timelineElementHelpers.ts‎

Lines changed: 2 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ import { isFinitePositive } from "./playbackAdapter";
1313
import { getSourceScopedSelectorIndex } from "../../utils/sourceScopedSelectorIndex";
1414
import { HF_AUDIO_GROUP_TAG } from "@hyperframes/core/audio-groups";
1515
import { readElementFades } from "@hyperframes/core/audio-fade";
16+
import { elementVolume } from "./storedVolume";
1617
import {
1718
type AttrReader,
1819
clampPlaybackRate,
@@ -213,11 +214,6 @@ function setOptional<K extends keyof TimelineElement>(
213214
else entry[key] = value;
214215
}
215216

216-
export function parseStoredVolume(text: string | null): number | undefined {
217-
const volume = Number.parseFloat(text ?? "");
218-
return Number.isFinite(volume) ? volume : undefined;
219-
}
220-
221217
/** The compiler's rule (timingCompiler): explicit data-has-audio wins; otherwise an unmuted <video> is audible. */
222218
export function isVideoAudible(opts: {
223219
tag: string;
@@ -238,12 +234,6 @@ export function isAudibleVideoNode(el: Element): boolean {
238234
});
239235
}
240236

241-
function readVolume(el: Element, media: Element): number | undefined {
242-
return parseStoredVolume(el.getAttribute("data-volume") ?? media.getAttribute("data-volume"));
243-
}
244-
245-
export const elementVolume = (el: Element) => readVolume(el, resolveMediaElement(el) ?? el);
246-
247237
/** What the mixer gets: the compiler's `data-has-audio` rule, muted and volume. */
248238
function applyAudioMetadataFromElement(entry: TimelineElement, el: Element): void {
249239
const media = resolveMediaElement(el) ?? el;
@@ -255,7 +245,7 @@ function applyAudioMetadataFromElement(entry: TimelineElement, el: Element): voi
255245
});
256246
setOptional(entry, "hasAudio", sound ? true : undefined);
257247
setOptional(entry, "muted", muted ? true : undefined);
258-
setOptional(entry, "volume", readVolume(el, media));
248+
setOptional(entry, "volume", elementVolume(el, media));
259249
}
260250

261251
function applyFadeMetadataFromElement(entry: TimelineElement, el: Element): void {

0 commit comments

Comments
 (0)