| |
| |
| |
| |
| |
| |
|
|
| import { useState, useRef } from 'react'; |
|
|
| const useMediaRecorder = (onDataAvailable, onStop) => { |
| const [isRecording, setIsRecording] = useState(false); |
| const mediaRecorder = useRef(null); |
|
|
| |
| 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; |
|
|