导航栏: 首页 评论列表

How to resolve window.SpeechRecognition || window.webkitSpeechRecognition automatically stops

默认分类 2025/03/13 14:51

问题:在使用 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();  // 启动识别


>> 留言评论