bug fix
This commit is contained in:
@@ -176,7 +176,12 @@ function initRecognition() {
|
||||
checkBtn.disabled = !display.trim();
|
||||
};
|
||||
|
||||
r.onend = () => { if (state.isRecording) stopRecording(); };
|
||||
r.onend = () => {
|
||||
if (state.isRecording) {
|
||||
// Android stops recognition on its own after silence — restart it
|
||||
try { r.start(); } catch (_) {}
|
||||
}
|
||||
};
|
||||
r.onerror = (e) => { if (e.error !== 'no-speech') stopRecording(); };
|
||||
|
||||
return r;
|
||||
@@ -207,21 +212,24 @@ async function startRecording() {
|
||||
clearTimeout(recordingTimer);
|
||||
recordingTimer = setTimeout(stopRecording, MAX_RECORD_SECONDS * 1000);
|
||||
|
||||
// MediaRecorder for audio download — best-effort, after recognition starts
|
||||
try {
|
||||
const stream = await navigator.mediaDevices.getUserMedia({ audio: true });
|
||||
const mimeType = MediaRecorder.isTypeSupported('audio/webm;codecs=opus')
|
||||
? 'audio/webm;codecs=opus' : 'audio/webm';
|
||||
mediaRecorder = new MediaRecorder(stream, { mimeType });
|
||||
mediaRecorder.ondataavailable = e => { if (e.data.size > 0) audioChunks.push(e.data); };
|
||||
mediaRecorder.onstop = () => {
|
||||
audioBlob = new Blob(audioChunks, { type: mimeType });
|
||||
stream.getTracks().forEach(t => t.stop());
|
||||
if (audioBlob.size > 0) downloadBtn.disabled = false;
|
||||
};
|
||||
mediaRecorder.start();
|
||||
} catch (e) {
|
||||
console.warn('MediaRecorder unavailable:', e);
|
||||
// MediaRecorder for audio download — desktop only; on mobile it conflicts with SpeechRecognition
|
||||
const isMobile = /Android|iPhone|iPad/i.test(navigator.userAgent);
|
||||
if (!isMobile) {
|
||||
try {
|
||||
const stream = await navigator.mediaDevices.getUserMedia({ audio: true });
|
||||
const mimeType = MediaRecorder.isTypeSupported('audio/webm;codecs=opus')
|
||||
? 'audio/webm;codecs=opus' : 'audio/webm';
|
||||
mediaRecorder = new MediaRecorder(stream, { mimeType });
|
||||
mediaRecorder.ondataavailable = e => { if (e.data.size > 0) audioChunks.push(e.data); };
|
||||
mediaRecorder.onstop = () => {
|
||||
audioBlob = new Blob(audioChunks, { type: mimeType });
|
||||
stream.getTracks().forEach(t => t.stop());
|
||||
if (audioBlob.size > 0) downloadBtn.disabled = false;
|
||||
};
|
||||
mediaRecorder.start();
|
||||
} catch (e) {
|
||||
console.warn('MediaRecorder unavailable:', e);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user