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

Chrome下Speech Recognition移动端重复输出问题求助

解决Chrome移动设备语音识别重复输出问题

问题原因

移动版Chrome的Speech Recognition API行为和桌面端存在差异:

  • 会多次触发onresult事件,即使是同一轮识别的最终结果
  • event.results数组可能包含之前已处理过的结果,原代码未做去重处理
  • 每次onresult都直接累加所有isFinal结果并插入,导致重复输出

修复方案

1. 新增已处理索引跟踪

添加变量记录已处理完成的结果索引,避免重复处理同一结果项。

2. 优化结果处理逻辑

只处理未被处理过的结果,且仅当结果为isFinal时才插入到textarea,避免中间临时结果的干扰。

3. 调整插入文本的时机

确保只有当完整的最终结果确认后,才执行插入操作,避免多次触发导致的重复添加。

修改后的完整代码

// 新增变量跟踪已处理的结果索引
let processedResultIndex = 0;

speechRecognition.onresult = (event) => {
  let teks_transkrip = "";
  let transkrip_akhir = "";

  // 只处理从processedResultIndex开始的新结果
  for (let i = processedResultIndex; i < event.results.length; ++i) {
    if (event.results[i].isFinal) {
      transkrip_akhir += event.results[i][0].transcript;
      // 更新已处理索引,标记该结果已处理
      processedResultIndex = i + 1;
    } else {
      teks_transkrip += event.results[i][0].transcript;
      $("#pratinjau").val(teks_transkrip);
    }
  }

  // 只有当有新的final结果时才插入
  if (transkrip_akhir.trim()) {
    $("#artikel").insertIntoTextArea(transkrip_akhir);
  }
};

// 可选:如果需要连续识别,在onend时重启(避免移动设备自动停止)
speechRecognition.onend = () => {
  // 可根据需求设置状态变量控制是否重启
  // speechRecognition.start();
};

$.fn.insertIntoTextArea = function(textToInsert) {
  const data = $("#artikel").val();
  const trimmedText = textToInsert.trim();

  switch(trimmedText) {
    case "titik":
      $("#artikel").val(data + ".");
      break;
    case "baris baru":
      $("#artikel").val(data + "\n");
      break;
    case "paragraf baru":
      $("#artikel").val(data + "\n\n");
      break;
    case "titik koma":
      $("#artikel").val(data + ";");
      break;
    case "koma":
      $("#artikel").val(data + ",");
      break;
    default:
      $("#artikel").val(data + textToInsert);
  }
};

关键改动说明

  • processedResultIndex:记录已处理的结果索引,每次循环只处理新结果项,避免重复累加。
  • 仅当transkrip_akhir不为空时执行插入操作,防止空内容触发不必要的更新。
  • 将insertIntoTextArea中的多分支if改为switch,代码更简洁易维护。
  • 可选的onend重启逻辑:移动设备语音识别可能在短时间无输入后自动停止,如需连续识别可添加此逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 20:30:41