自学内容网 自学内容网

vue 录音流程

vue 录音流程 RecordRTC

npm install recordrtc
import RecordRTC from "recordrtc";
    <!-- 音频播放器,用于播放录音 -->
<audio v-show="false" ref="audioPlayer" controls></audio>

 async startRecording() {
      // 检查浏览器是否支持 mediaDevices
      if (!navigator.mediaDevices) {
        console.error("浏览器不支持mediaDevices.");
        ElMessage.error("浏览器不支持mediaDevices.");
        return;
      }
      this.audioUrl = null;
      // this.recorder = null;
      // this.isRecording = false;

      try {
        // 请求麦克风权限并获取音频流getUserMedia
        // const stream = await navigator.mediaDevices.getUserMedia({
        const stream = await navigator.mediaDevices.getUserMedia({
          audio: true,
        });
        // 设置录音选项为PCM格式
        const options = {
          type: "audio",
          mimeType: "audio/wav",
          recorderType: RecordRTC.StereoAudioRecorder,
          // desiredSampRate: 16000, // 设置采样率为16kHz,可根据需求调整
          numberOfAudioChannels: 1, // 单通道
          desiredSampRate: 24000, // 设置采样率为24kHz
          checkForInactiveTracks: true,
        };
        // 创建 RecordRTC 实例
        this.recorder = new RecordRTC(stream, options);
        // 开始录音
        this.recorder.startRecording();
        this.isRecording = true; // 更新录音状态为进行中
      } catch (err) {
        // 处理获取麦克风权限失败的情况
        console.error("无法获取麦克风权限:", err);
        ElMessage.error("无法获取麦克风权限.");
      }
    },
    async stopRecording() {
      if (this.recorder) {
        // 停止录音
        await new Promise((resolve) => {
          this.recorder.stopRecording(() => {
            // 获取录音Blob数据
            // const blob = this.recorder.getBlob();
            this.blobData = this.recorder.getBlob();
            // 创建 Blob 对象的 URL,用于播放
            this.audioUrl = URL.createObjectURL(this.blobData);
            // 重置录音状态
            this.isRecording = false;
            // 重置音频播放器的源
            this.$refs.audioPlayer.src = this.audioUrl;
            // 关闭媒体流
            let stream = this.recorder.stream;
            if (stream) {
              stream.getTracks().forEach((track) => track.stop());
            }

            // 重置 recorder 实例
            this.recorder.destroy();
            this.recorder = null;

            resolve();
          });
        });
      }
      this.isRecording = false; // 更新录音状态
    },
    playRecording() {
      // 获取 audio 元素的引用
      const audioPlayer = this.$refs.audioPlayer;
      // 如果 audio 元素存在,播放录音
      if (audioPlayer) {
        audioPlayer.play();
      }
    },

原文地址:https://blog.csdn.net/qq_40287084/article/details/143902507

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!