当前位置:首页 > 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

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 组件,使用响应式数据管理状态:

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

使用示例:

vue实现录音功能

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

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

相关文章

vue实现剪辑

vue实现剪辑

Vue 实现视频剪辑功能 在Vue中实现视频剪辑功能通常需要结合HTML5的<video>元素和第三方库(如FFmpeg.js或Video.js)。以下是几种常见的实现方法: 使用FFm…

vue实现token

vue实现token

Vue 中实现 Token 认证的方法 在 Vue 中实现 Token 认证通常涉及前端与后端的交互,包括 Token 的获取、存储、发送和刷新等操作。以下是具体实现步骤: 获取 Token 用户登…

jquery实现vue

jquery实现vue

jQuery 和 Vue.js 是两种不同理念的前端工具,jQuery 以 DOM 操作和事件驱动为核心,而 Vue.js 是数据驱动的现代化框架。如果想用 jQuery 实现类似 Vue 的功能(如…

vue实现slot

vue实现slot

Vue 中的 Slot 实现方法 Vue 的 slot 是一种内容分发机制,允许父组件向子组件插入内容。以下是几种常见的 Slot 实现方式: 默认 Slot 子组件通过 <slot>…

vue实现白板

vue实现白板

Vue实现白板功能 使用Vue实现白板功能可以通过HTML5的Canvas API结合Vue的响应式特性来完成。以下是实现白板功能的关键步骤: 安装依赖 在Vue项目中安装必要的依赖,如vue-dr…

vue实现尺子

vue实现尺子

Vue 实现尺子组件 实现一个尺子组件可以通过 Canvas 或纯 CSS 完成。以下是两种常见实现方式: 使用 Canvas 绘制尺子 通过 Canvas 动态绘制刻度线和数字,适合需要高精度或动…