You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

iPhone Safari中SpeechRecognitionResult的isFinal始终为false的解决方案求助

解决方案:iOS Safari中SpeechRecognitionResult.isFinal始终为false的问题

针对你在iPhone7、iPhone SE第三代Safari中遇到的SpeechRecognitionResult.isFinal始终为false的问题,以下是几个可行的解决方向:

  • 调整识别参数组合
    当continuous: true与interimResults: true同时启用时,iOS Safari的语音识别引擎可能无法正确判定识别结束。可以尝试先将continuous设为false测试:

    SpeechRecognition = webkitSpeechRecognition || SpeechRecognition;
    let recognition = new SpeechRecognition();
    
    recognition.lang = 'ja-JP';
    recognition.interimResults = true;
    recognition.continuous = false; // 修改此处
    
    recognition.onresult = (event) => {
      for (let i = event.resultIndex; i < event.results.length; i++) {
        let transcript = event.results[i][0].transcript;
        if (event.results[i].isFinal) {
          console.log('final#' + transcript );
          // 如需连续识别,可在此处重新启动
          // recognition.start();
        } else {
          console.log('interim#' + transcript );
        }
      }
    }
    
  • 手动触发识别结束
    iOS Safari的语音识别不会主动检测用户是否停止说话,你可以通过用户交互(比如点击“结束”按钮)手动调用recognition.stop(),强制生成isFinal: true的结果:

    // 添加一个按钮用于结束识别
    document.getElementById('stop-btn').addEventListener('click', () => {
      recognition.stop();
    });
    
    recognition.onend = () => {
      // 可选:识别结束后重新启动,实现连续识别
      // recognition.start();
    }
    
  • 检查语言包兼容性
    部分设备的日语语音识别支持可能存在异常,尝试切换到en-US测试是否能触发isFinal,排除语言包的问题:

    recognition.lang = 'en-US';
    
  • 重新初始化识别实例
    避免长时间复用同一个识别实例,每次识别完成后销毁旧实例并创建新实例,可能会解决部分设备的异常:

    function startRecognition() {
      SpeechRecognition = webkitSpeechRecognition || SpeechRecognition;
      let recognition = new SpeechRecognition();
      
      recognition.lang = 'ja-JP';
      recognition.interimResults = true;
      recognition.continuous = true;
    
      recognition.onresult = (event) => {
        for (let i = event.resultIndex; i < event.results.length; i++) {
          let transcript = event.results[i][0].transcript;
          if (event.results[i].isFinal) {
            console.log('final#' + transcript );
            recognition.stop();
          } else {
            console.log('interim#' + transcript );
          }
        }
      }
    
      recognition.onend = () => {
        // 如需继续识别,重新创建实例
        // startRecognition();
      }
    
      recognition.start();
    }
    
    // 启动识别
    startRecognition();
    

内容的提问来源于stack exchange,提问作者basikon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 08:25:04