diff options
Diffstat (limited to 'apps/web/src/timeline/audio-state.ts')
| -rw-r--r-- | apps/web/src/timeline/audio-state.ts | 20 |
1 files changed, 16 insertions, 4 deletions
diff --git a/apps/web/src/timeline/audio-state.ts b/apps/web/src/timeline/audio-state.ts index 6c8f3044..34220cc9 100644 --- a/apps/web/src/timeline/audio-state.ts +++ b/apps/web/src/timeline/audio-state.ts @@ -1,7 +1,8 @@ import { hasKeyframesForPath } from "@/animation/keyframe-query"; import { resolveNumberAtTime } from "@/animation/values"; import { VOLUME_DB_MAX, VOLUME_DB_MIN } from "./audio-constants"; -import type { TimelineElement } from "./types"; +import type { TimelineElement, TimelineTrack } from "./types"; +import { TICKS_PER_SECOND } from "@/wasm"; const DEFAULT_STEP_SECONDS = 1 / 60; export type AudioCapableElement = Extract< @@ -29,6 +30,13 @@ export function getElementVolume({ const value = element.params.volume; return typeof value === "number" ? value : 0; } +export function getTrackVolume({ + track, +}: { + track: Extract<TimelineTrack, { muted: boolean }>; +}): number { + return typeof track.volume === "number" ? track.volume : 0; +} export function isElementMuted({ element, @@ -49,15 +57,15 @@ export function hasAnimatedVolume({ }); } -import { TICKS_PER_SECOND } from "@/wasm"; - export function resolveEffectiveAudioGain({ element, trackMuted = false, + trackVolume = 0, localTime, }: { element: AudioCapableElement; trackMuted?: boolean; + trackVolume?: number; localTime: number; }): number { if (trackMuted || isElementMuted({ element })) { @@ -71,7 +79,7 @@ export function resolveEffectiveAudioGain({ localTime: Math.round(localTime * TICKS_PER_SECOND), }); - return dBToLinear(resolvedDb); + return dBToLinear(resolvedDb + trackVolume); } export function buildWaveformGainSamples({ @@ -91,12 +99,14 @@ export function buildWaveformGainSamples({ export function buildAudioGainAutomation({ element, trackMuted = false, + trackVolume = 0, fromLocalTime, toLocalTime, stepSeconds = DEFAULT_STEP_SECONDS, }: { element: AudioCapableElement; trackMuted?: boolean; + trackVolume?: number; fromLocalTime: number; toLocalTime: number; stepSeconds?: number; @@ -115,6 +125,7 @@ export function buildAudioGainAutomation({ gain: resolveEffectiveAudioGain({ element, trackMuted, + trackVolume, localTime, }), }); @@ -126,6 +137,7 @@ export function buildAudioGainAutomation({ element, trackMuted, localTime: endTime, + trackVolume, }), }); |
