当前位置:首页 > VUE

vue实现录音功能

2026-01-19 16:46:12VUE

使用 Vue 实现录音功能

浏览器兼容性检查

确保浏览器支持 MediaDevices.getUserMedia API。现代浏览器如 Chrome、Firefox、Edge 和 Safari 均支持该功能。可以通过以下代码检查兼容性:

if (!navigator.mediaDevices || !navigator.mediaDevices.getUserMedia) {
  console.error('录音功能不支持当前浏览器');
}

获取用户麦克风权限

调用 getUserMedia 请求用户麦克风权限。配置参数中 audio: true 表示仅请求音频权限。

navigator.mediaDevices.getUserMedia({ audio: true })
  .then(stream => {
    // 处理音频流
  })
  .catch(err => {
    console.error('无法访问麦克风:', err);
  });

初始化录音上下文

使用 AudioContextMediaStreamAudioSourceNode 创建音频处理上下文。需要先暂停上下文以避免自动播放策略限制。

const audioContext = new (window.AudioContext || window.webkitAudioContext)();
audioContext.suspend(); // 初始状态暂停
const sourceNode = audioContext.createMediaStreamSource(stream);

配置录音处理器

通过 ScriptProcessorNodeAudioWorklet 处理音频数据。以下示例使用较兼容的 ScriptProcessorNode

vue实现录音功能

const processor = audioContext.createScriptProcessor(4096, 1, 1);
sourceNode.connect(processor);
processor.connect(audioContext.destination);

let audioChunks = [];
processor.onaudioprocess = e => {
  audioChunks.push(e.inputBuffer.getChannelData(0));
};

控制录音状态

通过 audioContext.resume()suspend() 控制录音启停:

// 开始录音
audioContext.resume();

// 停止录音
audioContext.suspend();
processor.disconnect();
sourceNode.disconnect();

导出音频文件

使用 MediaRecorder API 可直接生成音频文件(需浏览器支持):

const mediaRecorder = new MediaRecorder(stream);
let recordedChunks = [];

mediaRecorder.ondataavailable = e => {
  if (e.data.size > 0) recordedChunks.push(e.data);
};

mediaRecorder.onstop = () => {
  const blob = new Blob(recordedChunks, { type: 'audio/wav' });
  const url = URL.createObjectURL(blob);
  // 可通过 <a download> 或上传到服务器
};

// 开始/停止
mediaRecorder.start();
mediaRecorder.stop();

Vue 组件集成示例

将逻辑封装为 Vue 组件,使用响应式数据管理状态:

vue实现录音功能

export default {
  data() {
    return {
      isRecording: false,
      audioBlob: null
    };
  },
  methods: {
    async startRecording() {
      try {
        const stream = await navigator.mediaDevices.getUserMedia({ audio: true });
        this.mediaRecorder = new MediaRecorder(stream);
        this.mediaRecorder.start();
        this.isRecording = true;
      } catch (err) {
        console.error(err);
      }
    },
    stopRecording() {
      this.mediaRecorder.stop();
      this.isRecording = false;
      this.mediaRecorder.stream.getTracks().forEach(track => track.stop());
    }
  }
};

注意事项

  • iOS 设备需在用户交互事件中触发 getUserMedia,如按钮点击事件
  • 部分浏览器要求页面为 HTTPS 环境才允许访问麦克风
  • 长时间录音需注意内存管理,可分段保存音频数据

第三方库简化实现

如需快速实现,可考虑以下库:

  1. vue-audio-recorder: 专为 Vue 设计的录音组件
  2. recordrtc: 功能全面的录音库,支持多种音频格式
  3. wavesurfer.js: 带可视化波形的录音解决方案

安装示例:

npm install vue-audio-recorder

使用示例:

import VueAudioRecorder from 'vue-audio-recorder';
Vue.use(VueAudioRecorder);

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

相关文章

vue 实现toast

vue 实现toast

vue 实现 toast 的方法 在 Vue 中实现 Toast 提示功能可以通过多种方式,以下是几种常见的实现方法: 使用第三方库 Vue 生态中有许多成熟的 Toast 库,例如 vue-toa…

vue实现框架

vue实现框架

Vue 框架实现的核心方法 基础项目搭建 使用 Vue CLI 或 Vite 快速初始化项目。Vue CLI 适合传统项目,Vite 更适合现代轻量级应用。安装后通过命令行工具选择所需配置(如 Rou…

vue 实现回复

vue 实现回复

Vue 实现回复功能 在 Vue 中实现回复功能通常涉及表单提交、数据绑定和列表渲染。以下是实现步骤和代码示例: 数据绑定与表单 <template> <div>…

vue diff实现

vue diff实现

Vue Diff 算法实现原理 Vue 的虚拟 DOM Diff 算法(即 patch 过程)是其高效渲染的核心,主要通过对比新旧虚拟节点的差异,最小化 DOM 操作。以下是关键实现要点: 同层级比…

vue实现选人

vue实现选人

实现选人功能的基本思路 在Vue中实现选人功能通常涉及以下核心环节:数据绑定、用户交互处理、状态管理以及界面渲染。以下是具体实现方法: 数据准备与组件结构 创建包含人员信息的数组,通常从API获取或…

vue 实现图钉

vue 实现图钉

实现图钉效果的步骤 在Vue中实现图钉(固定位置)效果,可以通过CSS的position: sticky属性或监听滚动事件动态修改元素样式。以下是两种常见方法: 方法一:使用CSS的position…