当前位置:首页 > VUE

vue实现录音播放

2026-02-19 07:25:55VUE

Vue 实现录音播放

录音功能实现

使用 navigator.mediaDevices.getUserMedia 获取麦克风权限并录制音频。创建一个 Vue 组件,初始化录音功能:

vue实现录音播放

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

<script>
export default {
  data() {
    return {
      isRecording: false,
      mediaRecorder: null,
      audioChunks: [],
      audioUrl: null
    };
  },
  methods: {
    async startRecording() {
      try {
        const stream = await navigator.mediaDevices.getUserMedia({ audio: true });
        this.mediaRecorder = new MediaRecorder(stream);
        this.mediaRecorder.ondataavailable = (event) => {
          this.audioChunks.push(event.data);
        };
        this.mediaRecorder.onstop = () => {
          const audioBlob = new Blob(this.audioChunks, { type: 'audio/wav' });
          this.audioUrl = URL.createObjectURL(audioBlob);
          this.$refs.audioPlayer.src = this.audioUrl;
          this.audioChunks = [];
        };
        this.mediaRecorder.start();
        this.isRecording = true;
      } catch (error) {
        console.error('录音权限获取失败:', error);
      }
    },
    stopRecording() {
      this.mediaRecorder.stop();
      this.isRecording = false;
    }
  }
};
</script>

播放录音功能

通过 <audio> 标签的 src 属性绑定录音生成的 URL。使用 ref 获取 DOM 元素并控制播放:

playRecording() {
  this.$refs.audioPlayer.play();
}

保存录音文件

将录音数据转换为 Blob 并下载:

downloadRecording() {
  const audioBlob = new Blob(this.audioChunks, { type: 'audio/wav' });
  const url = URL.createObjectURL(audioBlob);
  const a = document.createElement('a');
  a.href = url;
  a.download = 'recording.wav';
  document.body.appendChild(a);
  a.click();
  document.body.removeChild(a);
}

注意事项

  • 确保在 HTTPS 环境或 localhost 下使用 getUserMedia,否则可能因浏览器安全策略失败。
  • 录音结束后及时释放资源:stream.getTracks().forEach(track => track.stop())
  • 兼容性处理:部分旧浏览器需使用 navigator.getUserMedia 而非 navigator.mediaDevices.getUserMedia

扩展功能

  • 添加录音时长显示:通过 setInterval 记录开始/结束时间差。
  • 可视化音频波形:使用 Web Audio API 的 AnalyserNode 分析音频数据并绘制 Canvas。
  • 多段录音管理:用数组存储多个录音 URL,实现列表播放。

vue实现录音播放

标签: vue
分享给朋友:

相关文章

vue实现视频会议

vue实现视频会议

使用 Vue 实现视频会议 技术选型 Vue.js 作为前端框架,结合 WebRTC 技术实现实时音视频通信。常用的库包括: peerjs:简化 WebRTC 的点对点连接。 socket.io:用…

vue实现星星

vue实现星星

实现星星评分的Vue组件 使用Vue实现星星评分功能可以通过组件化方式完成,以下是一个完整的实现方案: 模板部分 <template> <div class="star-ra…

vue实现oauth

vue实现oauth

Vue 实现 OAuth 的步骤 安装必要的依赖 确保项目中安装了 axios 和 vue-router。OAuth 通常需要发送 HTTP 请求和处理路由跳转。 npm install axios…

vue实现验证

vue实现验证

Vue 表单验证实现方法 在Vue中实现表单验证可以通过多种方式完成,以下是常见的几种方法: 使用Vuelidate库 Vuelidate是一个轻量级的Vue表单验证库,安装后可以通过简单的配置实…

vue实现通讯

vue实现通讯

Vue 组件通讯方法 父子组件通讯 父组件向子组件传递数据通过 props,子组件向父组件传递数据通过 $emit 事件。 父组件模板: <child-component :messag…

vue实现表单

vue实现表单

Vue 表单实现方法 双向数据绑定 使用 v-model 指令实现表单元素与数据的双向绑定。适用于 input、textarea、select 等元素。 <template> <…