diff --git a/www/app/components/record.js b/www/app/components/record.js index de27b7d3..0ad807c0 100644 --- a/www/app/components/record.js +++ b/www/app/components/record.js @@ -9,6 +9,7 @@ import Dropdown from "react-dropdown"; import "react-dropdown/style.css"; import CustomRecordPlugin from "./CustomRecordPlugin"; +import { formatTime } from "../utils"; const AudioInputsDropdown = (props) => { const [ddOptions, setDdOptions] = useState([]); @@ -54,6 +55,9 @@ export default function Recorder(props) { const [isRecording, setIsRecording] = useState(false); const [isPlaying, setIsPlaying] = useState(false); const [deviceId, setDeviceId] = useState(null); + const [currentTime, setCurrentTime] = useState(0); + const [timeInterval, setTimeInterval] = useState(null); + const [duration, setDuration] = useState(0); useEffect(() => { document.getElementById("play-btn").disabled = true; @@ -79,6 +83,7 @@ export default function Recorder(props) { _wavesurfer.on("pause", () => { setIsPlaying(false); }); + _wavesurfer.on("timeupdate", setCurrentTime); setRecord(_wavesurfer.registerPlugin(CustomRecordPlugin.create())); setWavesurfer(_wavesurfer); @@ -101,6 +106,22 @@ export default function Recorder(props) { } }, [record]); + useEffect(() => { + if (isRecording) { + const interval = setInterval(() => { + setCurrentTime((prev) => prev + 1); + }, 1000); + setTimeInterval(interval); + return () => clearInterval(interval); + } else { + clearInterval(timeInterval); + setCurrentTime((prev) => { + setDuration(prev); + return 0; + }); + } + }, [isRecording]); + const handleRecClick = async () => { if (!record) return console.log("no record"); @@ -127,8 +148,15 @@ export default function Recorder(props) { wavesurfer?.playPause(); }; + const timeLabel = () => { + if (isRecording) return formatTime(currentTime); + else if (duration) + return `${formatTime(currentTime)}/${formatTime(duration)}`; + else ""; + }; + return ( -