From a3baf105e0ec000ef845654e53a188b0675b069c Mon Sep 17 00:00:00 2001 From: Alan Trebugeais Date: Sat, 9 May 2026 14:31:06 +0200 Subject: [PATCH] audio part seperated from video editor --- src/components/video-editor/VideoEditor.tsx | 21 ++----- .../audio/useClipAudioSettingsController.ts | 59 +++++++++++++++++++ 2 files changed, 63 insertions(+), 17 deletions(-) create mode 100644 src/components/video-editor/audio/useClipAudioSettingsController.ts diff --git a/src/components/video-editor/VideoEditor.tsx b/src/components/video-editor/VideoEditor.tsx index 6208ca3f..c7394dda 100644 --- a/src/components/video-editor/VideoEditor.tsx +++ b/src/components/video-editor/VideoEditor.tsx @@ -140,11 +140,10 @@ import { validateProjectData, } from "./projectPersistence"; import { SettingsPanel } from "./SettingsPanel"; -import { SOURCE_AUDIO_NORMALIZE_GAIN, getSourceTrackIdFromPath } from "./audio/sourceAudioTracks"; import { useAudioPreviewSync } from "./audio/useAudioPreviewSync"; +import { useClipAudioSettingsController } from "./audio/useClipAudioSettingsController"; import { useSourceAudioFallback } from "./audio/useSourceAudioFallback"; import { getActiveClipIdAtSourceTime, isClipMutedById } from "./audio/clipAudio"; -import { useSourceAudioTrackSettings } from "./audio/useSourceAudioTrackSettings"; import { APP_HEADER_ICON_BUTTON_CLASS, DiscordLinkButton, @@ -1791,24 +1790,12 @@ export default function VideoEditor() { onSourceAudioTracksMetaChange, onSelectedClipSourceAudioTrackVolumeChange, onSelectedClipSourceAudioTrackNormalizeChange, - } = useSourceAudioTrackSettings({ + embeddedSourcePreviewGain, + getSourceTrackPreviewGain, + } = useClipAudioSettingsController({ selectedClipId, activeClipId: activeClipIdAtCurrentTime, }); - const embeddedSourcePreviewGain = useMemo(() => { - const settings = activeSourceAudioTrackSettings.mixed ?? { volume: 1, normalize: false }; - const normalizeGain = settings.normalize ? SOURCE_AUDIO_NORMALIZE_GAIN : 1; - return Math.max(0, Math.min(2, settings.volume * normalizeGain)); - }, [activeSourceAudioTrackSettings]); - const getSourceTrackPreviewGain = useCallback( - (audioPath: string) => { - const trackId = getSourceTrackIdFromPath(audioPath); - const settings = activeSourceAudioTrackSettings[trackId] ?? { volume: 1, normalize: false }; - const normalizeGain = settings.normalize ? SOURCE_AUDIO_NORMALIZE_GAIN : 1; - return Math.max(0, Math.min(2, settings.volume * normalizeGain)); - }, - [activeSourceAudioTrackSettings], - ); const isCurrentClipMuted = useMemo(() => { return isClipMutedById(activeClipIdAtCurrentTime, clipRegions); }, [activeClipIdAtCurrentTime, clipRegions]); diff --git a/src/components/video-editor/audio/useClipAudioSettingsController.ts b/src/components/video-editor/audio/useClipAudioSettingsController.ts new file mode 100644 index 00000000..f6d69881 --- /dev/null +++ b/src/components/video-editor/audio/useClipAudioSettingsController.ts @@ -0,0 +1,59 @@ +import { useCallback, useMemo } from "react"; +import { + SOURCE_AUDIO_NORMALIZE_GAIN, + getSourceTrackIdFromPath, +} from "./sourceAudioTracks"; +import { useSourceAudioTrackSettings } from "./useSourceAudioTrackSettings"; + +interface UseClipAudioSettingsControllerParams { + selectedClipId: string | null; + activeClipId: string | null; +} + +export function useClipAudioSettingsController({ + selectedClipId, + activeClipId, +}: UseClipAudioSettingsControllerParams) { + const { + sourceAudioTrackMeta, + activeSourceAudioTrackSettings, + selectedClipSourceAudioTrackSettings, + onSourceAudioTracksMetaChange, + onSelectedClipSourceAudioTrackVolumeChange, + onSelectedClipSourceAudioTrackNormalizeChange, + } = useSourceAudioTrackSettings({ + selectedClipId, + activeClipId, + }); + + const embeddedSourcePreviewGain = useMemo(() => { + const settings = activeSourceAudioTrackSettings.mixed ?? { volume: 1, normalize: false }; + const normalizeGain = settings.normalize ? SOURCE_AUDIO_NORMALIZE_GAIN : 1; + return Math.max(0, Math.min(2, settings.volume * normalizeGain)); + }, [activeSourceAudioTrackSettings]); + + const getSourceTrackPreviewGain = useCallback( + (audioPath: string) => { + const trackId = getSourceTrackIdFromPath(audioPath); + const settings = activeSourceAudioTrackSettings[trackId] ?? { + volume: 1, + normalize: false, + }; + const normalizeGain = settings.normalize ? SOURCE_AUDIO_NORMALIZE_GAIN : 1; + return Math.max(0, Math.min(2, settings.volume * normalizeGain)); + }, + [activeSourceAudioTrackSettings], + ); + + return { + sourceAudioTrackMeta, + activeSourceAudioTrackSettings, + selectedClipSourceAudioTrackSettings, + onSourceAudioTracksMetaChange, + onSelectedClipSourceAudioTrackVolumeChange, + onSelectedClipSourceAudioTrackNormalizeChange, + embeddedSourcePreviewGain, + getSourceTrackPreviewGain, + }; +} +