当前位置:首页 > VUE

vue实现录音播放

2026-02-19 07:25:55VUE

Vue 实现录音播放

录音功能实现

使用 navigator.mediaDevices.getUserMedia 获取麦克风权限并录制音频。创建一个 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 并下载:

vue实现录音播放

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 实现主题的方法 使用 CSS 变量动态切换主题 定义全局 CSS 变量,通过修改这些变量实现主题切换。在 Vue 的根组件或全局样式中定义变量: :root { --primary-co…

vue实现slider

vue实现slider

Vue 实现 Slider 组件 使用 Vue 实现 Slider 组件可以通过原生开发或借助第三方库。以下是两种常见方法: 原生实现 Slider 创建一个基础的 Slider 组件,通过 v-m…

vue 实现排序

vue 实现排序

Vue 实现排序的方法 使用计算属性实现排序 通过计算属性对数组进行排序,可以保持原始数据不变。示例代码展示了如何对列表按名称升序排序: <template> <div>…

vue实现刷新

vue实现刷新

Vue 实现页面刷新的方法 在Vue中实现页面刷新可以通过多种方式,以下是几种常见的方法: 使用 window.location.reload() 通过调用浏览器的原生方法强制刷新当前页面:…

vue计算属性 实现

vue计算属性 实现

Vue 计算属性的实现 计算属性(Computed Properties)是 Vue 中的一个核心功能,用于声明式地定义依赖其他属性的值。计算属性会缓存结果,只有当依赖的响应式数据发生变化时才会重新计…

vue怎么实现滑动

vue怎么实现滑动

Vue实现滑动效果的方法 在Vue中实现滑动效果可以通过多种方式,以下是几种常见的方法: 使用CSS过渡和动画 通过Vue的过渡系统和CSS可以实现平滑的滑动效果。定义一个CSS类,利用transf…