diff --git a/zhiyin-app/src/pages/interview/interview.vue b/zhiyin-app/src/pages/interview/interview.vue index c581926..915a933 100644 --- a/zhiyin-app/src/pages/interview/interview.vue +++ b/zhiyin-app/src/pages/interview/interview.vue @@ -401,11 +401,27 @@ function startRecord() { if (aiLoading.value || isComplete.value) return // #ifdef MP-WEIXIN if (isRecording.value) return - // 先确保已获得 scope.record 授权,避免没权限时产生全 0 的 corrupted 音频 + // 先标记正在录音,避免 touchend 在 authorize 回调前就触发 stopRecord + isRecording.value = true uni.authorize({ scope: 'scope.record', - success: () => doStartRecorder(), + success: () => { + if (!recorder) initRecorder() + if (!recorder) { + isRecording.value = false + uni.showToast({ title: '录音初始化失败', icon: 'none' }) + return + } + recorder.start({ + format: 'wav', + sampleRate: 16000, + numberOfChannels: 1, + encodeBitRate: 128000, + }) + uni.vibrateShort({ type: 'medium' }) + }, fail: () => { + isRecording.value = false uni.showModal({ title: '需要录音权限', content: '请在「设置」中开启「麦克风」权限后再使用语音输入', @@ -416,32 +432,14 @@ function startRecord() { }) // #endif // #ifndef MP-WEIXIN + isRecording.value = false uni.showToast({ title: '语音输入仅支持小程序', icon: 'none' }) // #endif } -// #ifdef MP-WEIXIN -function doStartRecorder() { - isRecording.value = true - if (!recorder) initRecorder() - if (!recorder) { - isRecording.value = false - uni.showToast({ title: '录音初始化失败', icon: 'none' }) - return - } - recorder.start({ - format: 'wav', - sampleRate: 16000, - numberOfChannels: 1, - encodeBitRate: 128000, - }) - uni.vibrateShort({ type: 'medium' }) -} -// #endif - function stopRecord() { - if (!recorder || !isRecording.value) return isRecording.value = false + if (!recorder) return recorder.stop() }