当前位置:首页 > VUE

vue.js实现录音

2026-02-21 19:53:42VUE

Vue.js 实现录音功能

在Vue.js中实现录音功能可以通过浏览器提供的MediaRecorder API完成。以下是一个完整的实现方案:

安装依赖(可选)

如果需要更高级的音频处理,可以安装recordrtc库:

npm install recordrtc

基础实现代码

创建一个Vue组件(如AudioRecorder.vue):

<template>
  <div>
    <button @click="startRecording" :disabled="isRecording">开始录音</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.audioChunks = [];

        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);
          stream.getTracks().forEach(track => track.stop());
        };

        this.mediaRecorder.start();
        this.isRecording = true;
      } catch (error) {
        console.error('录音错误:', error);
      }
    },

    stopRecording() {
      this.mediaRecorder.stop();
      this.isRecording = false;
    }
  }
}
</script>

使用RecordRTC增强版

如需更多功能(如录音时长限制、格式选择等):

import RecordRTC from 'recordrtc';

methods: {
  async startRecording() {
    const stream = await navigator.mediaDevices.getUserMedia({ audio: true });
    this.recorder = new RecordRTC(stream, {
      type: 'audio',
      mimeType: 'audio/wav',
      recorderType: RecordRTC.StereoAudioRecorder
    });
    this.recorder.startRecording();
    this.isRecording = true;
  },

  stopRecording() {
    this.recorder.stopRecording(() => {
      this.audioUrl = URL.createObjectURL(this.recorder.getBlob());
      this.isRecording = false;
    });
  }
}

注意事项

  • 需要在HTTPS环境或localhost下使用
  • 首次使用需要用户授权麦克风权限
  • 不同浏览器支持的音频格式可能不同
  • 移动端可能有额外的兼容性问题

保存录音文件

添加保存功能的方法:

vue.js实现录音

saveRecording() {
  const link = document.createElement('a');
  link.href = this.audioUrl;
  link.download = 'recording.wav';
  link.click();
}

这个实现提供了基础的录音功能,可以根据需求扩展更多特性如可视化、音频编辑等。

标签: vuejs
分享给朋友:

相关文章

vue实现主题

vue实现主题

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

vue实现切换

vue实现切换

Vue 实现切换功能的方法 在 Vue 中实现切换功能可以通过多种方式实现,以下是一些常见的方法: 使用 v-if 和 v-else 指令 通过条件渲染实现切换功能,适用于简单的显示/隐藏场景。…

vue实现抖动

vue实现抖动

Vue 实现抖动效果 在 Vue 中实现抖动效果可以通过 CSS 动画或 JavaScript 动画库来实现。以下是几种常见的方法: 使用 CSS 动画 通过定义 @keyframes 动画并在 V…

vue实现接口

vue实现接口

在 Vue 中实现接口请求 Vue 本身不直接提供 HTTP 请求功能,通常需要借助第三方库如 axios 或 fetch 来实现接口请求。以下是几种常见方法: 使用 axios 发送请求 安装 a…

vue首页实现

vue首页实现

实现Vue首页的基本步骤 创建一个Vue首页通常涉及项目初始化、页面结构设计、路由配置和组件开发。以下是具体实现方法: 初始化Vue项目 使用Vue CLI或Vite快速搭建项目结构: npm i…

vue实现popper

vue实现popper

Vue 实现 Popper 的方法 使用 Tippy.js 库 Tippy.js 是一个轻量级的 Popper.js 封装库,提供丰富的工具提示功能。安装 Tippy.js 及其 Vue 封装: n…