当前位置:首页 > VUE

vue实现音频录音

2026-01-19 22:29:51VUE

Vue 实现音频录音的方法

使用浏览器 MediaRecorder API

浏览器原生提供的 MediaRecorder API 是录制音频的核心工具。通过 navigator.mediaDevices.getUserMedia 获取麦克风权限后,可初始化录音功能。

// 在 Vue 组件中
export default {
  data() {
    return {
      mediaRecorder: null,
      audioChunks: [],
      audioBlob: null,
      audioUrl: ''
    }
  },
  methods: {
    async startRecording() {
      const stream = await navigator.mediaDevices.getUserMedia({ audio: true });
      this.mediaRecorder = new MediaRecorder(stream);
      this.mediaRecorder.ondataavailable = (event) => {
        this.audioChunks.push(event.data);
      };
      this.mediaRecorder.start();
    },
    stopRecording() {
      return new Promise((resolve) => {
        this.mediaRecorder.onstop = () => {
          this.audioBlob = new Blob(this.audioChunks, { type: 'audio/wav' });
          this.audioUrl = URL.createObjectURL(this.audioBlob);
          resolve(this.audioBlob);
        };
        this.mediaRecorder.stop();
      });
    }
  }
}

添加录音控制按钮

在模板中添加按钮控制录音开始和结束,并播放录音结果。

<template>
  <div>
    <button @click="startRecording" :disabled="isRecording">开始录音</button>
    <button @click="stopRecording" :disabled="!isRecording">停止录音</button>
    <audio v-if="audioUrl" :src="audioUrl" controls></audio>
  </div>
</template>

处理录音权限问题

需处理用户拒绝麦克风权限的情况,通过 catch 捕获错误。

startRecording() {
  navigator.mediaDevices.getUserMedia({ audio: true })
    .then((stream) => {
      this.mediaRecorder = new MediaRecorder(stream);
      // 其他初始化代码
    })
    .catch((err) => {
      console.error('麦克风权限被拒绝:', err);
    });
}

录音格式与兼容性

MediaRecorder 支持多种音频格式,但不同浏览器兼容性不同。可通过 mimeType 指定格式。

const options = { mimeType: 'audio/webm' }; // Chrome 首选
this.mediaRecorder = new MediaRecorder(stream, options);

第三方库简化流程

若需更复杂功能(如可视化、格式转换),可使用 recordrtcwavesurfer.js 等库。

安装 recordrtc

npm install recordrtc

使用示例:

vue实现音频录音

import RecordRTC from 'recordrtc';

export default {
  methods: {
    async startRecording() {
      const stream = await navigator.mediaDevices.getUserMedia({ audio: true });
      this.recorder = new RecordRTC(stream, { type: 'audio' });
      this.recorder.startRecording();
    },
    stopRecording() {
      return new Promise((resolve) => {
        this.recorder.stopRecording(() => {
          resolve(this.recorder.getBlob());
        });
      });
    }
  }
}

注意事项

  • 仅在 HTTPS 或 localhost 环境下可用,部分浏览器不允许 HTTP 访问麦克风。
  • 移动端浏览器可能有额外限制,需测试目标平台兼容性。
  • 长时间录音需注意内存管理,及时释放 Blob 对象。

标签: 音频vue
分享给朋友:

相关文章

vue实现tip

vue实现tip

Vue实现Tooltip的方法 使用Vue实现Tooltip可以通过多种方式完成,以下是几种常见的方法: 使用原生HTML的title属性 在Vue模板中直接使用HTML的title属性是最简单的实…

前端vue实现概率

前端vue实现概率

Vue实现概率功能的方法 在Vue中实现概率功能通常涉及随机数生成和概率计算。以下是几种常见实现方式: 基础概率实现 使用Math.random()生成0到1之间的随机数,与设定概率比较: con…

vue怎么实现 tab

vue怎么实现 tab

Vue 实现 Tab 的方法 使用动态组件和 v-if 通过动态组件或 v-if 指令切换不同 Tab 内容,结合点击事件改变当前激活的 Tab。 <template> &l…

用vue实现滚动

用vue实现滚动

实现滚动的基本方法 在Vue中实现滚动可以通过多种方式完成,包括使用原生JavaScript、Vue指令或第三方库。以下是几种常见的方法: 使用ref和原生JavaScript 在模板中定义一个可滚…

vue实现即时聊天

vue实现即时聊天

Vue 实现即时聊天功能 核心功能模块 即时聊天功能通常需要以下核心模块:实时消息收发、用户列表管理、消息历史记录和前端界面交互。Vue 结合 WebSocket 或第三方服务(如 Firebase、…

vue实现select查询

vue实现select查询

Vue实现Select查询功能 在Vue中实现Select查询功能,可以通过以下方法完成: 基础实现 使用<select>和v-model绑定数据 <template&g…