当前位置:首页 > VUE

vue实现语音录音

2026-01-18 19:47:42VUE

实现语音录音的基本步骤

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

安装依赖(可选)

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

vue实现语音录音

npm install recordrtc

核心代码实现

<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增强功能

如果需要更多功能如录音时间限制、格式选择等,可以使用RecordRTC:

vue实现语音录音

<script>
import RecordRTC from 'recordrtc';

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

    async stopRecording() {
      return new Promise(resolve => {
        this.recorder.stopRecording(() => {
          const blob = this.recorder.getBlob();
          this.audioUrl = URL.createObjectURL(blob);
          this.isRecording = false;
          resolve(blob);
        });
      });
    }
  }
}
</script>

兼容性处理

不同浏览器对音频格式的支持不同,可以添加格式检测:

getSupportedMimeType() {
  const types = [
    'audio/webm',
    'audio/wav',
    'audio/mpeg',
    'audio/mp4',
    'audio/ogg'
  ];
  return types.find(type => MediaRecorder.isTypeSupported(type)) || 'audio/wav';
}

保存录音文件

添加方法将录音保存为文件:

saveRecording() {
  const a = document.createElement('a');
  a.href = this.audioUrl;
  a.download = `recording_${new Date().toISOString()}.wav`;
  a.click();
}

注意事项

  1. 需要在HTTPS环境或localhost下使用getUserMedia API
  2. 首次使用需要用户授权麦克风权限
  3. 移动端浏览器可能有不同的行为限制
  4. 录音质量受设备麦克风影响

以上实现提供了基础的语音录音功能,可根据实际需求扩展更多特性如音频可视化、语音识别集成等。

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

相关文章

vue实现继承语法糖

vue实现继承语法糖

在Vue中实现继承可以通过多种方式模拟类继承的效果,以下是常见的几种方法: 使用mixins实现逻辑复用 通过Vue的mixins机制共享组件选项,达到类似继承的效果: const Bas…

vue实现多选题

vue实现多选题

Vue实现多选题的方法 使用Vue实现多选题功能,可以通过v-model绑定数组、动态渲染选项、以及处理选中状态来实现。以下是一个完整的实现示例: 基础实现代码 <template>…

vue实现$.extend

vue实现$.extend

Vue 实现类似 jQuery 的 $.extend 功能 在 Vue 中实现类似 jQuery 的 $.extend 功能,可以通过多种方式完成。$.extend 主要用于合并多个对象的属性,Vue…

vue实现复选

vue实现复选

Vue 实现复选框 在 Vue 中实现复选框可以通过 v-model 指令绑定数据,同时结合 input 元素的 type="checkbox" 属性来实现。以下是几种常见的实现方式: 单个复选框…

vue实现tabbar

vue实现tabbar

Vue 实现 TabBar 的方法 使用 Vue Router 实现基础 TabBar 安装 Vue Router 依赖: npm install vue-router 创建路由配置文件(route…

vue实现搜索查询

vue实现搜索查询

Vue 实现搜索查询的方法 双向绑定实现实时搜索 在Vue中可以通过v-model绑定输入框的值,结合计算属性或watch监听输入变化实现实时搜索。 <template> <i…