当前位置:首页 > VUE

vue 实现录音功能

2026-01-17 10:30:34VUE

使用 Vue 实现录音功能

安装依赖

需要安装 recordrtcvue-audio-recorder 等库来简化录音功能的实现。通过 npm 或 yarn 安装:

npm install recordrtc
# 或
npm install vue-audio-recorder

基本录音功能实现

通过 HTML5 的 MediaRecorder API 结合 Vue 实现录音功能。以下是一个简单的示例代码:

vue 实现录音功能

<template>
  <div>
    <button @click="startRecording">开始录音</button>
    <button @click="stopRecording" :disabled="!isRecording">停止录音</button>
    <audio v-if="audioUrl" :src="audioUrl" controls></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.audioChunks = [];
        };
        this.mediaRecorder.start();
        this.isRecording = true;
      } catch (error) {
        console.error('录音失败:', error);
      }
    },
    stopRecording() {
      this.mediaRecorder.stop();
      this.isRecording = false;
    },
  },
};
</script>

使用第三方库简化实现

vue-audio-recorder 提供了更简单的封装,可以直接在 Vue 中使用:

vue 实现录音功能

<template>
  <div>
    <vue-audio-recorder
      :recording="recording"
      @startRecording="startRecording"
      @stopRecording="stopRecording"
    />
    <audio v-if="audioUrl" :src="audioUrl" controls></audio>
  </div>
</template>

<script>
import VueAudioRecorder from 'vue-audio-recorder';

export default {
  components: { VueAudioRecorder },
  data() {
    return {
      recording: false,
      audioUrl: null,
    };
  },
  methods: {
    startRecording() {
      this.recording = true;
    },
    stopRecording(audioData) {
      this.recording = false;
      this.audioUrl = audioData.url;
    },
  },
};
</script>

处理兼容性问题

不同浏览器对 MediaRecorder 的支持程度不同,可以通过检查 API 是否存在来确保兼容性:

if (!navigator.mediaDevices || !navigator.mediaDevices.getUserMedia) {
  alert('您的浏览器不支持录音功能');
}

保存录音文件

可以将录音文件保存到服务器或本地:

methods: {
  saveRecording() {
    const audioBlob = new Blob(this.audioChunks, { type: 'audio/wav' });
    const formData = new FormData();
    formData.append('audio', audioBlob, 'recording.wav');

    // 上传到服务器
    fetch('/api/upload-audio', {
      method: 'POST',
      body: formData,
    }).then(response => {
      console.log('录音已保存');
    });
  },
},

注意事项

  • 录音功能需要用户授权麦克风权限。
  • 部分浏览器可能不支持某些音频格式,建议使用 audio/wavaudio/mp3
  • 录音完成后释放资源,避免内存泄漏:
    stopRecording() {
      this.mediaRecorder.stop();
      this.mediaRecorder.stream.getTracks().forEach(track => track.stop());
      this.isRecording = false;
    },

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

相关文章

vue实现图片轮播

vue实现图片轮播

使用 Swiper 实现图片轮播 安装 Swiper 依赖 npm install swiper 在 Vue 组件中引入 Swiper <template> <div c…

vue实现安全免登录

vue实现安全免登录

Vue 实现安全免登录的方案 免登录功能通常通过持久化认证状态(如 Token)实现,但需兼顾安全性。以下是基于 Vue 的常见实现方案: 基于 Token 的免登录 登录成功后存储 Toke…

vue实现收起展开面板

vue实现收起展开面板

实现收起展开面板的方法 在Vue中实现收起展开面板功能可以通过多种方式完成,以下是几种常见的实现方法: 使用v-show或v-if控制显示隐藏 利用Vue的指令可以轻松实现面板的展开和收起:…

vue实现用户信息删除

vue实现用户信息删除

Vue 实现用户信息删除功能 在 Vue 中实现用户信息删除功能通常涉及前端界面交互和后端 API 调用。以下是实现步骤: 前端界面设计 创建删除按钮或操作项,通常使用 @click 事件触发删除…

vue实现矩阵

vue实现矩阵

Vue 实现矩阵的方法 在 Vue 中实现矩阵操作可以通过多种方式完成,以下是一些常见的方法: 使用二维数组表示矩阵 矩阵可以用二维数组来表示,每个元素对应矩阵中的一个值。在 Vue 的 data…

vue实现弹窗

vue实现弹窗

Vue 实现弹窗的常见方法 使用组件化方式封装弹窗 创建一个独立的弹窗组件(如 Modal.vue),通过 v-if 或 v-show 控制显示隐藏: <template> <…