当前位置:首页 > 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 方法停止录音并获取音频文件:

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();
  },
}

清理资源

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

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 方法并关闭流:

vue 实现录音功能

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 实现年历的方法 使用 Vue 实现年历可以通过组件化开发方式,结合日期计算和动态渲染完成。以下是两种常见的实现方式: 基于原生 Vue 的日历组件 创建 Calendar.vue 组件文件,…

vue实现建模

vue实现建模

Vue 实现建模的方法 在 Vue 中实现建模通常涉及数据绑定、组件化和状态管理。以下是几种常见的方法: 数据驱动建模 Vue 的核心是数据驱动视图。通过定义数据模型,Vue 会自动更新 DOM。例…

vue实现ajax

vue实现ajax

Vue 中实现 AJAX 的几种方法 在 Vue 中实现 AJAX 请求可以通过原生 JavaScript 的 XMLHttpRequest、第三方库如 axios 或 fetch API 来完成。以…

vue实现动画

vue实现动画

Vue 实现动画的方法 Vue 提供了多种方式来实现动画效果,包括内置的过渡系统、第三方动画库以及直接操作 CSS 或 JavaScript 动画。 使用 Vue 内置过渡系统 Vue 的 <…

vue实现画廊

vue实现画廊

Vue实现画廊的基本方法 使用Vue.js实现画廊功能可以通过多种方式完成,以下是一种常见的实现方案: 安装必要依赖 npm install vue-gallery --save 引入组件并注册…

vue实现画板

vue实现画板

Vue 实现画板功能 在 Vue 中实现画板功能可以通过 HTML5 的 Canvas API 实现。以下是一个完整的实现方案: 创建 Vue 组件 新建一个 Vue 单文件组件(SFC),命名为…