收藏
回答

微信同声传译语音识别主动取消失败?

在小程序中调用语音识别文字功能,不说话情况下主动取消会走onError事件报错,主动取消失败


// 初始化识别管理器时,优化onError处理
const initRecognitionManager = async () => {
  try {
    const plugin = await loadWechatSIPlugin();
    if (!recognitionManager) {
      recognitionManager = plugin.getRecordRecognitionManager();
      recognitionManager.onStart = (res) => {
        isRecording.value = true;
        isProcessing.value = false;
        showErrorToast("开始语音识别...");
        startDurationTimer();
        startNoteAnimation();
      };


      recognitionManager.onStop = (res) => {
        // 重置主动取消标记
        isManualCancel.value = false;
        // 原有逻辑...
        isRecording.value = false;
        stopDurationTimer();
        stopNoteAnimation();


        if (isCancelMode.value) {
          // 取消模式,不提示
        } else if (res.result) {
          recognizedText.value = res.result;
          inputValue.value = res.result;
          startSSE(res.result);
        } else if (res.tempFilePath) {
          showErrorToast("正在处理语音...");
          retryRecognizeWithFile(res.tempFilePath);
        } else {
          showErrorToast("未识别到有效语音内容");
        }


        isCancelMode.value = false;
        isProcessing.value = false;
        if (res.tempFilePath) {
          safeRemoveFile(res.tempFilePath);
        }
      };


      recognitionManager.onError = (res) => {
        console.error("语音识别错误:", res);
        const isSilenceTimeout = res.errCode === 10004;


        if (isManualCancel.value || isSilenceTimeout) {;
          isRecording.value = false;
          isProcessing.value = false;
          stopDurationTimer();
          stopNoteAnimation();
          isCancelMode.value = false;
          isManualCancel.value = false;
          return;
        }


        // 非主动取消的错误,才显示提示
        isRecording.value = false;
        isProcessing.value = false;
        stopDurationTimer();
        stopNoteAnimation();


        let errorMsg = "识别失败: ";
        switch (res.errCode) {
          case 10001:
            errorMsg += "没有录音权限,请开启权限";
            openPermissionSetting();
            break;
          case 10002:
            errorMsg += "录音设备异常";
            break;
          case 10003:
            errorMsg += "网络异常,请检查网络";
            break;
          case 10004:
            errorMsg += "识别超时,请重试";
            break;
          case 10005:
            errorMsg += "语音过长(最长支持60秒)";
            break;
          case 10006:
            // 未检测到语音,可能是被动触发(非主动取消)
            errorMsg += "未检测到语音";
            break;
          default:
            errorMsg += res.msg || "未知错误";
        }
        showErrorToast(errorMsg);
      };
      // recognitionManager.onRecognize = (res) => {
      //   console.log("实时识别结果:", res.result);
      // };
    }


    return recognitionManager;
  } catch (err) {
    console.error("初始化识别管理器失败:", err);
    showErrorToast("语音功能初始化失败");
    throw err;
  }
};
const handleTouchCancel = () => {
  if (!isRecording.value || !recognitionManager || isProcessing.value) return;
  isCancelMode.value = true;
  recognitionManager.stop();
  // showErrorToast("已取消录音");
};
回答关注问题邀请回答
收藏
登录 后发表内容