董国庆
昨天 95ac9029c648194c35dda58daaa17b9160bcb69d
H5/components/voiceInputPopup.vue
@@ -107,7 +107,7 @@
        console.log('当前录音片段URL:', res.localUrl)
        console.log('当前已存储的片段数:', this.recordSegments.length)
        console.log('当前片段:', this.currentSegment)
        // 只有当当前片段与上一个不同时才添加
        if (!this.currentSegment || this.currentSegment.url !== res.localUrl) {
          console.log('添加新的录音片段')
@@ -183,7 +183,7 @@
      try {
        const audioContext = new (window.AudioContext || window.webkitAudioContext)();
        const audioBuffers = [];
        // 加载所有音频文件
        for (const url of audioUrls) {
          const response = await fetch(url);
@@ -194,7 +194,7 @@
        // 计算总时长
        const totalLength = audioBuffers.reduce((acc, buffer) => acc + buffer.length, 0);
        // 创建新的音频缓冲区
        const mergedBuffer = audioContext.createBuffer(
          audioBuffers[0].numberOfChannels,
@@ -215,7 +215,7 @@
        // 将合并后的音频转换为 Blob
        const wavBlob = await this.audioBufferToWav(mergedBuffer);
        const mergedUrl = URL.createObjectURL(wavBlob);
        return mergedUrl;
      } catch (error) {
        console.error('合并音频失败:', error);
@@ -284,65 +284,67 @@
      if (this.isRecording) {
        this.$refs.mumuRecorder.stop()
      }
      // 停止计时
      this.stopTimer()
      // 重置状态
      this.isRecording = false
      this.isPaused = false
      this.currentSegment = null
      // 处理录音片段
      if (this.recordSegments.length > 0) {
        try {
          uni.showLoading({
            title: '正在处理音频...'
          })
          // 获取所有录音片段的URL
          const audioUrls = this.recordSegments.map(segment => segment.url)
          console.log('准备合并的音频片段列表:', audioUrls)
          console.log('音频片段数量:', audioUrls.length)
          // 合并音频文件
          const mergedUrl = await this.mergeAudioFiles(audioUrls)
          // 创建合并后的音频数据对象
          const mergedAudioData = {
            url: this.recordSegments[this.recordSegments.length - 1].url,
            data: this.recordSegments[this.recordSegments.length - 1].data,
            duration: this.seconds + this.minutes * 60 + this.hours * 3600
      setTimeout(async() => {
        console.log('处理录音片段')
        // 处理录音片段
        if (this.recordSegments.length > 0) {
          try {
            uni.showLoading({
              title: '正在处理音频...'
            })
            // 获取所有录音片段的URL
            const audioUrls = this.recordSegments.map(segment => segment.url)
            console.log('准备合并的音频片段列表:', audioUrls)
            console.log('音频片段数量:', audioUrls.length)
            // 合并音频文件
            const mergedUrl = await this.mergeAudioFiles(audioUrls)
            // 创建合并后的音频数据对象
            const mergedAudioData = {
              url: this.recordSegments[this.recordSegments.length - 1].url,
              data: this.recordSegments[this.recordSegments.length - 1].data,
              duration: this.seconds + this.minutes * 60 + this.hours * 3600
            }
            uni.showToast({
              title: '录制成功',
              icon: 'success',
              duration: 2000
            })
            setTimeout(() => {
              this.$emit('submit', mergedAudioData)
            }, 2000)
            uni.hideLoading()
            this.closePopup()
          } catch (error) {
            console.error('音频合并失败:', error)
            uni.hideLoading()
            uni.showToast({
              title: '音频合并失败,请重试',
              icon: 'none',
              duration: 2000
            })
          }
        } else {
          uni.showToast({
            title: '录制成功',
            icon: 'success',
            duration: 2000
          })
          setTimeout(() => {
            this.$emit('submit', mergedAudioData)
          }, 2000)
          uni.hideLoading()
          this.closePopup()
        } catch (error) {
          console.error('音频合并失败:', error)
          uni.hideLoading()
          uni.showToast({
            title: '音频合并失败,请重试',
            title: '未检测到录音文件',
            icon: 'none',
            duration: 2000
          })
        }
      } else {
        uni.showToast({
          title: '未检测到录音文件',
          icon: 'none',
          duration: 2000
        })
      }
      }, 1000);
    }
  },
  beforeDestroy() {