From 079327dac35ee6551c6a9c9cba5cc193d87c1082 Mon Sep 17 00:00:00 2001 From: Mikael Finstad Date: Tue, 24 Aug 2021 21:22:56 +0700 Subject: [PATCH] allow controlling audio playback volume closes #307 #125 --- public/configStore.js | 2 +- src/App.jsx | 31 ++++++----------- src/components/VolumeControl.jsx | 57 ++++++++++++++++++++++++++++++++ src/hooks/useUserPreferences.js | 8 ++--- 4 files changed, 72 insertions(+), 26 deletions(-) create mode 100644 src/components/VolumeControl.jsx diff --git a/public/configStore.js b/public/configStore.js index 7da02313..2006ac35 100644 --- a/public/configStore.js +++ b/public/configStore.js @@ -20,7 +20,7 @@ const defaults = { askBeforeClose: false, enableAskForImportChapters: true, enableAskForFileOpenAction: true, - muted: false, + playbackVolume: 1, autoSaveProjectFile: true, wheelSensitivity: 0.2, language: undefined, diff --git a/src/App.jsx b/src/App.jsx index 2a6dc69e..66ba7777 100644 --- a/src/App.jsx +++ b/src/App.jsx @@ -1,5 +1,5 @@ import React, { memo, useEffect, useState, useCallback, useRef, useMemo } from 'react'; -import { FaVolumeMute, FaVolumeUp, FaAngleLeft, FaWindowClose } from 'react-icons/fa'; +import { FaAngleLeft, FaWindowClose } from 'react-icons/fa'; import { AnimatePresence, motion } from 'framer-motion'; import Swal from 'sweetalert2'; import Lottie from 'react-lottie-player'; @@ -38,6 +38,7 @@ import RightMenu from './RightMenu'; import TimelineControls from './TimelineControls'; import ExportConfirm from './ExportConfirm'; import ValueTuner from './components/ValueTuner'; +import VolumeControl from './components/VolumeControl'; import { loadMifiLink } from './mifi'; import { primaryColor, controlsBackground } from './colors'; import allOutFormats from './outFormats'; @@ -149,7 +150,7 @@ const App = memo(() => { const isCustomFormatSelected = fileFormat !== detectedFileFormat; const { - captureFormat, setCaptureFormat, customOutDir, setCustomOutDir, keyframeCut, setKeyframeCut, preserveMovData, setPreserveMovData, movFastStart, setMovFastStart, avoidNegativeTs, setAvoidNegativeTs, autoMerge, setAutoMerge, timecodeShowFrames, setTimecodeShowFrames, invertCutSegments, setInvertCutSegments, autoExportExtraStreams, setAutoExportExtraStreams, askBeforeClose, setAskBeforeClose, enableAskForImportChapters, setEnableAskForImportChapters, enableAskForFileOpenAction, setEnableAskForFileOpenAction, muted, setMuted, autoSaveProjectFile, setAutoSaveProjectFile, wheelSensitivity, setWheelSensitivity, invertTimelineScroll, setInvertTimelineScroll, language, setLanguage, ffmpegExperimental, setFfmpegExperimental, hideNotifications, setHideNotifications, autoLoadTimecode, setAutoLoadTimecode, autoDeleteMergedSegments, setAutoDeleteMergedSegments, exportConfirmEnabled, setExportConfirmEnabled, segmentsToChapters, setSegmentsToChapters, preserveMetadataOnMerge, setPreserveMetadataOnMerge, simpleMode, setSimpleMode, outSegTemplate, setOutSegTemplate, keyboardSeekAccFactor, setKeyboardSeekAccFactor, keyboardNormalSeekSpeed, setKeyboardNormalSeekSpeed, enableTransferTimestamps, setEnableTransferTimestamps, outFormatLocked, setOutFormatLocked, safeOutputFileName, setSafeOutputFileName, + captureFormat, setCaptureFormat, customOutDir, setCustomOutDir, keyframeCut, setKeyframeCut, preserveMovData, setPreserveMovData, movFastStart, setMovFastStart, avoidNegativeTs, setAvoidNegativeTs, autoMerge, setAutoMerge, timecodeShowFrames, setTimecodeShowFrames, invertCutSegments, setInvertCutSegments, autoExportExtraStreams, setAutoExportExtraStreams, askBeforeClose, setAskBeforeClose, enableAskForImportChapters, setEnableAskForImportChapters, enableAskForFileOpenAction, setEnableAskForFileOpenAction, playbackVolume, setPlaybackVolume, autoSaveProjectFile, setAutoSaveProjectFile, wheelSensitivity, setWheelSensitivity, invertTimelineScroll, setInvertTimelineScroll, language, setLanguage, ffmpegExperimental, setFfmpegExperimental, hideNotifications, setHideNotifications, autoLoadTimecode, setAutoLoadTimecode, autoDeleteMergedSegments, setAutoDeleteMergedSegments, exportConfirmEnabled, setExportConfirmEnabled, segmentsToChapters, setSegmentsToChapters, preserveMetadataOnMerge, setPreserveMetadataOnMerge, simpleMode, setSimpleMode, outSegTemplate, setOutSegTemplate, keyboardSeekAccFactor, setKeyboardSeekAccFactor, keyboardNormalSeekSpeed, setKeyboardNormalSeekSpeed, enableTransferTimestamps, setEnableTransferTimestamps, outFormatLocked, setOutFormatLocked, safeOutputFileName, setSafeOutputFileName, } = useUserPreferences(); const { @@ -237,12 +238,9 @@ const App = memo(() => { return !v; }), [setSafeOutputFileName, hideAllNotifications]); - const toggleMute = useCallback(() => { - setMuted((v) => { - if (!v && !hideAllNotifications) toast.fire({ icon: 'info', title: i18n.t('Muted preview (exported file will not be affected)') }); - return !v; - }); - }, [hideAllNotifications, setMuted]); + useEffect(() => { + if (videoRef.current) videoRef.current.volume = playbackVolume; + }, [playbackVolume]); const seekAbs = useCallback((val) => { const video = videoRef.current; @@ -2037,9 +2035,6 @@ const App = memo(() => { // if (isDev) load({ filePath: '/Users/mifi/Downloads/inp.MOV', customOutDir }); }, []); - // TODO fastest-audio shows as muted - const VolumeIcon = muted || usingDummyVideo ? FaVolumeMute : FaVolumeUp; - useEffect(() => { const keyScrollPreventer = (e) => { // https://stackoverflow.com/questions/8916620/disable-arrow-key-scrolling-in-users-browser @@ -2199,7 +2194,7 @@ const App = memo(() => {
{/* eslint-disable-next-line jsx-a11y/media-has-caption */}