diff --git a/src/components/player/SpeedControl.tsx b/src/components/player/SpeedControl.tsx index eafe41a..768effd 100644 --- a/src/components/player/SpeedControl.tsx +++ b/src/components/player/SpeedControl.tsx @@ -45,7 +45,36 @@ export const SpeedControl = ({ } }, [localAudioSpeed, audioPlayerSpeed, setAudioPlayerSpeedAndRestart]); - const displaySpeed = useMemo(() => (localAudioSpeed !== 1.0 ? localAudioSpeed : localVoiceSpeed), [localAudioSpeed, localVoiceSpeed]); + const formatSpeed = useCallback((speed: number, maxDecimals: number) => { + const rounded = Number(speed.toFixed(maxDecimals)); + return rounded.toString(); + }, []); + + const triggerLabel = useMemo( + () => { + const parts: string[] = []; + if (localVoiceSpeed !== 1.0) parts.push(`${formatSpeed(localVoiceSpeed, 1)}x`); + if (localAudioSpeed !== 1.0) parts.push(`${formatSpeed(localAudioSpeed, 1)}x`); + return parts.length > 0 ? parts.join(' • ') : '1x'; + }, + [formatSpeed, localVoiceSpeed, localAudioSpeed] + ); + + const compactTriggerLabel = useMemo(() => { + const voiceIsDefault = localVoiceSpeed === 1.0; + const audioIsDefault = localAudioSpeed === 1.0; + + let combined = 1.0; + if (!voiceIsDefault && !audioIsDefault) { + combined = (localVoiceSpeed + localAudioSpeed) / 2; + } else if (!voiceIsDefault) { + combined = localVoiceSpeed; + } else if (!audioIsDefault) { + combined = localAudioSpeed; + } + + return `${formatSpeed(combined, 2)}x`; + }, [formatSpeed, localVoiceSpeed, localAudioSpeed]); const min = 0.5; const max = 3; @@ -55,7 +84,8 @@ export const SpeedControl = ({ - {Number.isInteger(displaySpeed) ? displaySpeed.toString() : displaySpeed.toFixed(1)}x + {compactTriggerLabel} + {triggerLabel} diff --git a/src/components/player/VoicesControlBase.tsx b/src/components/player/VoicesControlBase.tsx index 1501586..92d7b87 100644 --- a/src/components/player/VoicesControlBase.tsx +++ b/src/components/player/VoicesControlBase.tsx @@ -96,7 +96,7 @@ export function VoicesControlBase({ {selectedVoices.length > 1 ? selectedVoices.join(' + ') : selectedVoices[0] || currentVoice} - + {availableVoices.map((voiceId) => ( {currentVoice} - + {availableVoices.map((voiceId) => (