当前位置:首页 > VUE

vue中实现录音下载

2026-01-22 04:53:04VUE

Vue 中实现录音下载的方法

使用 Web Audio API 和 MediaRecorder

安装必要的依赖库(如需要):

npm install recordrtc

在 Vue 组件中引入相关库:

vue中实现录音下载

import RecordRTC from 'recordrtc';

创建录音逻辑:

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) => {
        if (event.data.size > 0) {
          this.audioChunks.push(event.data);
        }
      };

      this.mediaRecorder.onstop = () => {
        this.audioBlob = new Blob(this.audioChunks, { type: 'audio/wav' });
        this.audioUrl = URL.createObjectURL(this.audioBlob);
        this.audioChunks = [];
      };

      this.mediaRecorder.start();
    },

    stopRecording() {
      this.mediaRecorder.stop();
      this.mediaRecorder.stream.getTracks().forEach(track => track.stop());
    },

    downloadRecording() {
      const a = document.createElement('a');
      a.href = this.audioUrl;
      a.download = 'recording.wav';
      document.body.appendChild(a);
      a.click();
      setTimeout(() => {
        document.body.removeChild(a);
        URL.revokeObjectURL(this.audioUrl);
      }, 100);
    }
  }
};

使用第三方库简化实现

使用 vue-audio-recorder 插件:

vue中实现录音下载

npm install vue-audio-recorder

在组件中使用:

import VueAudioRecorder from 'vue-audio-recorder';

export default {
  components: {
    VueAudioRecorder
  },
  methods: {
    onRecordingComplete(audio) {
      const url = URL.createObjectURL(audio.blob);
      const a = document.createElement('a');
      a.href = url;
      a.download = 'recording.mp3';
      a.click();
    }
  }
};

注意事项

  • 需要 HTTPS 环境或 localhost 才能使用 getUserMedia API
  • 不同浏览器支持的音频格式可能不同
  • 长时间录音需要考虑内存管理
  • 移动端可能需要额外权限处理

样式和模板示例

<template>
  <div>
    <button @click="startRecording">开始录音</button>
    <button @click="stopRecording">停止录音</button>
    <button @click="downloadRecording" :disabled="!audioUrl">下载录音</button>
  </div>
</template>

兼容性处理

对于不支持 MediaRecorder 的浏览器,可以使用 RecordRTC 作为 fallback:

const recorder = new RecordRTC(stream, {
  type: 'audio',
  mimeType: 'audio/wav'
});

标签: vue
分享给朋友:

相关文章

vue实现异步

vue实现异步

Vue 实现异步操作的常见方法 Vue 提供了多种方式来处理异步操作,包括数据获取、事件处理等场景。 使用 async/await 在 Vue 方法中可以直接使用 async/await 语法处理异…

vue实现picker

vue实现picker

Vue 实现 Picker 组件的方法 在 Vue 中实现 Picker 组件可以通过多种方式完成,以下是几种常见的实现方法: 使用原生 HTML 和 CSS 实现 通过 Vue 的模板和样式绑定,…

vue实现getapp

vue实现getapp

Vue 中实现全局获取应用实例的方法 在 Vue 3 中,可以通过 getCurrentInstance 方法获取当前组件实例,但需要明确其使用场景和限制。以下是具体实现方式: 方法一:通过 get…

vue实现menu

vue实现menu

Vue 实现 Menu 的方法 使用 Element UI 的 Menu 组件 Element UI 提供了现成的 Menu 组件,适合快速实现导航菜单。安装 Element UI 后,可以直接使用…

vue实现队列

vue实现队列

Vue 实现队列功能 在 Vue 中实现队列功能可以通过多种方式完成,以下是几种常见的方法: 使用数组模拟队列 队列遵循先进先出(FIFO)原则,可以用数组的 push 和 shift 方法模拟入队…

vue 分页 实现

vue 分页 实现

Vue 分页实现方法 使用第三方库(如 Element UI) Element UI 提供了现成的分页组件 el-pagination,适合快速集成。 安装 Element UI: npm ins…