Code: Select all
const startRecording = async () => {
try {
set_button_is_loading(true);
const stream = await window.navigator.mediaDevices.getUserMedia({ audio: true, video: false });
setAudioStream(stream);
const mediaRecorder = new MediaRecorder(stream);
mediaRecorderRef.current = mediaRecorder;
const chunks: BlobPart[] = [];
mediaRecorder.ondataavailable = (e) => {
if (e.data.size > 0) {
if (e.data.type) {
mime_type.current = e.data.type
}
chunks.push(e.data);
}
};
mediaRecorder.onstop = async () => {
try {
const blob = new Blob(chunks, { type: mime_type.current });
let answer = await api_stt(blob, mime_type.current);
let prev_answer = current_answer;
if (!prev_answer) {
prev_answer = "";
} else if (prev_answer.length > 3) {
prev_answer = prev_answer + "\n";
}
set_current_answer(prev_answer + answer);
set_button_is_loading(false);
} catch (e) {
console.error(e)
set_global_error("Error transcribing audio, please speak clearly.")
set_button_is_loading(false);
}
};
mediaRecorder.start();
setIsRecording(true);
setTimeout(() => {
set_button_is_loading(false);
}, 500)
} catch (err) {
console.error("Error accessing microphone:", err);
}
};
const stopRecording = () => {
if (mediaRecorderRef.current && audioStream) {
set_button_is_loading(true);
setTimeout(() => {
if (mediaRecorderRef.current && audioStream) {
mediaRecorderRef.current.requestData();
mediaRecorderRef.current!.stop();
audioStream.getTracks().forEach((track) => track.stop());
setAudioStream(null);
setIsRecording(false);
}
}, 500)
}
};
Ich habe keinen Weg herausgefunden, um den Audio -Stream zu "unverändert", in dem Browser berichtet Auf verschiedenen Websites für Web-Audio-Aufzeichnungen bemerkt, d. H. Ich gehe davon aus>