diff --git a/zhiyin-app/src/pages/interview/interview.vue b/zhiyin-app/src/pages/interview/interview.vue index 5bd9946..b93aa69 100644 --- a/zhiyin-app/src/pages/interview/interview.vue +++ b/zhiyin-app/src/pages/interview/interview.vue @@ -157,6 +157,8 @@ const asrLoading = ref(false) let recorder = null let recordTimer = null let skipAsr = false +let recorderStarted = false +let pendingStop = false function initRecorder() { // #ifdef MP-WEIXIN @@ -164,12 +166,20 @@ function initRecorder() { recorder = uni.getRecorderManager() recorder.onStart(() => { console.log('[Recorder] start recording') + recorderStarted = true recordingDuration.value = 0 recordTimer = setInterval(() => { recordingDuration.value++ }, 1000) + if (pendingStop) { + pendingStop = false + recorder.stop() + } }) recorder.onError((err) => { console.error('[Recorder] error:', JSON.stringify(err)) isRecording.value = false + recorderStarted = false + pendingStop = false + skipAsr = false recordingDuration.value = 0 asrLoading.value = false if (recordTimer) { clearInterval(recordTimer); recordTimer = null } @@ -179,6 +189,7 @@ function initRecorder() { }) recorder.onStop(async (res) => { isRecording.value = false + recorderStarted = false recordingDuration.value = 0 if (recordTimer) { clearInterval(recordTimer); recordTimer = null } if (skipAsr) { skipAsr = false; return } @@ -459,6 +470,10 @@ function stopRecord() { if (recordTimer) { clearInterval(recordTimer); recordTimer = null } recordingDuration.value = 0 } + if (!recorderStarted) { + pendingStop = true + return + } recorder.stop() }