在小程序中调用语音识别文字功能,不说话情况下主动取消会走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);
};
}
return recognitionManager;
} catch (err) {
console.error("初始化识别管理器失败:", err);
showErrorToast("语音功能初始化失败");
throw err;
}
};
const handleTouchCancel = () => {
if (!isRecording.value || !recognitionManager || isProcessing.value) return;
isCancelMode.value = true;
recognitionManager.stop();
};