问题:在使用 window.SpeechRecognition || window.webkitSpeechRecognition 技术
recognition = new (window.SpeechRecognition || window.webkitSpeechRecognition)();
recognition.continuous = false;
recognition.lang = "en-US";
的过程中,发现只停留很短时间就自动停止识别了。
思考:SpeechRecognition有个实时输出的接口,可以使用这个接口结合定时器以及continuous=true来实现 5 秒内无输入,自动停止识别。
亲测可行,代码如下:
const recognition = new (window.SpeechRecognition || window.webkitSpeechRecognition)();
recognition.continuous = true; // 持续监听
recognition.interimResults = true; // 允许返回实时结果
recognition.lang = "en-US";
let transcript = ""; // 存储最终的识别文本
let silenceTimer = null; // 记录静音时间
// 监听识别结果
recognition.onresult = function(event) {
let interimTranscript = "";
for (let i = event.resultIndex; i < event.results.length; i++) {
let result = event.results[i];
if (result.isFinal) {
transcript += result[0].transcript + " "; // 记录最终文本
} else {
interimTranscript += result[0].transcript; // 实时结果
}
}
console.log("Final:", transcript);
console.log("Interim:", interimTranscript);
// **重置静音计时器**
resetSilenceTimer();
};
// **启动静音计时器(如果 5 秒无新输入,就停止识别)**
function resetSilenceTimer() {
clearTimeout(silenceTimer);
silenceTimer = setTimeout(() => {
console.log("No voice input detected for 5 seconds, stopping recognition...");
recognition.stop();
}, 5000);
}
// 监听错误
recognition.onerror = function(event) {
console.error("Speech recognition error:", event.error);
};
// 监听停止事件
recognition.onend = function() {
console.log("Speech recognition ended.");
// **自动重启识别,等待新的语音输入**
// setTimeout(() => {
// console.log("Restarting recognition...");
// recognition.start();
// }, 1000);
};
// **启动语音识别**
function startRecognition() {
transcript = ""; // 清空之前的结果
console.log("Starting speech recognition...");
recognition.start();
resetSilenceTimer(); // 初始化静音检测
}
startRecognition(); // 启动识别