Spaces:
Build error
Build error
| /** | |
| * src/hooks/useMediaRecorder.js | |
| * Initialize media recorder. Start and stop recording. | |
| * | |
| * created by Lynchee on 7/16/23 | |
| */ | |
| import { useState, useRef } from 'react'; | |
| const useMediaRecorder = (onDataAvailable, onStop) => { | |
| const [isRecording, setIsRecording] = useState(false); | |
| const mediaRecorder = useRef(null); | |
| // initialize media recorder | |
| const connectMicrophone = (deviceId) => { | |
| if (mediaRecorder.current) return; | |
| navigator.mediaDevices.getUserMedia({ | |
| audio: { deviceId: deviceId ? {exact: deviceId} : undefined, echoCancellation: true } | |
| }) | |
| .then((stream) => { | |
| mediaRecorder.current = new MediaRecorder(stream); | |
| mediaRecorder.current.ondataavailable = onDataAvailable; | |
| mediaRecorder.current.onstop = onStop; | |
| }) | |
| .catch(function(err) { | |
| console.log('An error occurred: ' + err); | |
| }); | |
| }; | |
| const startRecording = () => { | |
| console.log("start recording"); | |
| if (!mediaRecorder.current) return; | |
| mediaRecorder.current.start(); | |
| setIsRecording(true); | |
| } | |
| const stopRecording = () => { | |
| console.log("stop recording"); | |
| if (!mediaRecorder.current) return; | |
| mediaRecorder.current.stop(); | |
| setIsRecording(false); | |
| }; | |
| const closeMediaRecorder = () => { | |
| stopRecording(); | |
| mediaRecorder.current = null; | |
| }; | |
| return { isRecording, setIsRecording, connectMicrophone, startRecording, stopRecording, closeMediaRecorder }; | |
| }; | |
| export default useMediaRecorder; | |