当前位置:首页 > VUE

vue 实现录音功能

2026-03-09 15:52:01VUE

使用 Vue 实现录音功能

安装依赖

需要安装 recordrtcmic-recorder-to-mp3 等录音库。以 mic-recorder-to-mp3 为例:

npm install mic-recorder-to-mp3

初始化录音组件

在 Vue 组件中引入录音库并初始化:

import MicRecorder from 'mic-recorder-to-mp3';

export default {
  data() {
    return {
      isRecording: false,
      recorder: null,
      audioFile: null,
    };
  },
  created() {
    this.recorder = new MicRecorder({
      bitRate: 128,
    });
  },
};

开始录音

调用库的 start 方法开始录音:

methods: {
  startRecording() {
    this.recorder
      .start()
      .then(() => {
        this.isRecording = true;
      })
      .catch((e) => {
        console.error(e);
      });
  },
}

停止录音

调用 stop 方法停止录音并获取音频文件:

vue 实现录音功能

methods: {
  stopRecording() {
    this.recorder
      .stop()
      .getMp3()
      .then(([buffer, blob]) => {
        this.isRecording = false;
        this.audioFile = new File(buffer, 'recording.mp3', {
          type: blob.type,
          lastModified: Date.now(),
        });
      })
      .catch((e) => {
        console.error(e);
      });
  },
}

播放录音

通过 URL.createObjectURL 生成音频链接并播放:

methods: {
  playRecording() {
    if (!this.audioFile) return;
    const audio = new Audio(URL.createObjectURL(this.audioFile));
    audio.play();
  },
}

清理资源

在组件销毁时释放音频资源:

vue 实现录音功能

beforeDestroy() {
  if (this.audioFile) {
    URL.revokeObjectURL(this.audioFile);
  }
}

使用原生 Web API 实现

如果不想依赖第三方库,可以使用浏览器的 MediaRecorder API:

请求麦克风权限

通过 navigator.mediaDevices.getUserMedia 获取麦克风访问权限:

async startRecording() {
  const stream = await navigator.mediaDevices.getUserMedia({ audio: true });
  this.mediaRecorder = new MediaRecorder(stream);
  this.audioChunks = [];

  this.mediaRecorder.ondataavailable = (e) => {
    this.audioChunks.push(e.data);
  };

  this.mediaRecorder.onstop = () => {
    const audioBlob = new Blob(this.audioChunks);
    this.audioFile = URL.createObjectURL(audioBlob);
  };

  this.mediaRecorder.start();
  this.isRecording = true;
}

停止录音

调用 stop 方法并关闭流:

stopRecording() {
  this.mediaRecorder.stop();
  this.mediaRecorder.stream.getTracks().forEach(track => track.stop());
  this.isRecording = false;
}

注意事项

  • 浏览器兼容性:MediaRecorder 在 Safari 和部分移动端浏览器可能不支持。
  • HTTPS 环境:getUserMedia 要求页面运行在 HTTPS 或 localhost 下。
  • 用户授权:需处理用户拒绝麦克风权限的情况。

标签: 录音功能vue
分享给朋友:

相关文章

vue实现语音

vue实现语音

Vue 实现语音功能的方法 使用 Web Speech API Vue 可以结合 Web Speech API 实现语音识别和合成功能。Web Speech API 包含 SpeechRecognit…

vue实现切换

vue实现切换

Vue 实现切换功能的方法 在 Vue 中实现切换功能可以通过多种方式实现,以下是一些常见的方法: 使用 v-if 和 v-else 指令 通过条件渲染实现切换功能,适用于简单的显示/隐藏场景。…

vue实现翻译

vue实现翻译

Vue 实现翻译功能的方法 使用 i18n 插件实现多语言切换 安装 vue-i18n 插件: npm install vue-i18n 创建语言资源文件(如 en.json 和 zh.json):…

vue 实现轮播

vue 实现轮播

Vue 实现轮播的方法 使用第三方库(如 Swiper) 安装 Swiper 库: npm install swiper 在 Vue 组件中引入 Swiper: <template>…

vue实现tree

vue实现tree

Vue 实现 Tree 组件 使用 Vue 实现 Tree 组件可以通过递归组件的方式来实现层级结构展示。以下是一个完整的实现方法: 基础递归组件实现 创建 Tree 组件文件 Tree.vue,使…

vue实现mui

vue实现mui

使用 Vue 实现 MUI(Material-UI)风格的界面 Vue 本身不直接提供 MUI(Material Design)组件,但可以通过集成第三方库或手动实现来达到类似效果。以下是几种常见方法…