当前位置:首页 > VUE

vue实现语音录制

2026-01-18 04:10:28VUE

Vue 实现语音录制的方法

使用 Web Audio API 和 MediaRecorder

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

npm install recordrtc

在 Vue 组件中引入相关库:

import RecordRTC from 'recordrtc';

创建录音功能的核心代码:

export default {
  data() {
    return {
      recorder: null,
      audioChunks: [],
      audioBlob: null,
      audioUrl: null,
      isRecording: false
    };
  },
  methods: {
    async startRecording() {
      try {
        const stream = await navigator.mediaDevices.getUserMedia({ audio: true });
        this.recorder = new RecordRTC(stream, {
          type: 'audio',
          mimeType: 'audio/wav'
        });
        this.recorder.startRecording();
        this.isRecording = true;
      } catch (error) {
        console.error('Error accessing microphone:', error);
      }
    },
    stopRecording() {
      if (!this.recorder) return;
      this.recorder.stopRecording(() => {
        this.audioBlob = this.recorder.getBlob();
        this.audioUrl = URL.createObjectURL(this.audioBlob);
        this.isRecording = false;
        this.recorder.destroy();
        this.recorder = null;
      });
    }
  }
};

使用 vue-voice-recorder 插件

安装插件:

npm install vue-voice-recorder

在 Vue 项目中注册组件:

import VueVoiceRecorder from 'vue-voice-recorder';
Vue.use(VueVoiceRecorder);

在模板中使用:

<template>
  <div>
    <voice-recorder
      @start="onStart"
      @stop="onStop"
      @error="onError"
      @stream="onStream"
    />
    <audio v-if="audioUrl" :src="audioUrl" controls></audio>
  </div>
</template>

使用浏览器原生 API

纯浏览器 API 实现方案:

export default {
  methods: {
    async startNativeRecording() {
      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 = () => {
          this.audioBlob = new Blob(this.audioChunks);
          this.audioUrl = URL.createObjectURL(this.audioBlob);
        };

        this.mediaRecorder.start();
      } catch (err) {
        console.error('Error:', err);
      }
    },
    stopNativeRecording() {
      if (this.mediaRecorder) {
        this.mediaRecorder.stop();
        this.mediaRecorder.stream.getTracks().forEach(track => track.stop());
      }
    }
  }
};

注意事项

确保在 HTTPS 环境下测试,某些浏览器在非安全环境下会限制录音功能

iOS 设备有特殊限制,需要用户主动交互才能启动录音

录音前需要获取用户授权,处理可能的权限拒绝情况

不同浏览器支持的音频格式可能不同,建议测试目标浏览器的兼容性

录音文件大小可能较大,上传前考虑压缩或分段处理

vue实现语音录制

标签: 语音vue
分享给朋友:

相关文章

vue实现单词反转

vue实现单词反转

实现思路 在Vue中实现单词反转功能,可以通过多种方式完成。核心思路是利用JavaScript的字符串处理方法,将输入的单词或句子拆分为数组,反转数组后再拼接成字符串。 方法一:使用计算属性 通过计…

vue实现多级弹窗

vue实现多级弹窗

Vue 多级弹窗实现方法 方法一:使用动态组件与递归组件 在 Vue 中可以通过动态组件配合递归组件实现多级弹窗。定义一个基础弹窗组件,通过递归调用自身实现层级嵌套。 基础弹窗组件模板示例: &…

vue伪函数实现

vue伪函数实现

Vue 伪函数实现方法 伪函数(Mock Function)在 Vue 中常用于测试或模拟某些逻辑,以下是几种常见的实现方式: 使用 Jest 的 jest.fn() 在单元测试中,可以通过 Jes…

vue实现3d宇宙

vue实现3d宇宙

Vue实现3D宇宙效果 使用Three.js库 Three.js是一个强大的JavaScript 3D库,可以轻松集成到Vue项目中。安装Three.js依赖: npm install three…

vue实现双折线图

vue实现双折线图

实现双折线图的步骤 安装必要的依赖库(如 ECharts 或 Chart.js),这里以 ECharts 为例: npm install echarts --save 在 Vue 组件中引入 ECh…

vue实现画圆弧并着色

vue实现画圆弧并着色

在 Vue 中实现画圆弧并着色 使用 Canvas API 绘制圆弧 在 Vue 组件的 mounted 钩子中,通过 Canvas API 绘制圆弧。创建一个 canvas 元素并获取其上下文:…