当前位置:首页 > 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 卖座网实现 项目结构搭建 使用 Vue CLI 快速初始化项目,安装必要依赖如 Vue Router、Vuex、Axios。 创建核心目录结构:components(通用组件)、views(页…

vue实现遮罩

vue实现遮罩

Vue 实现遮罩层的方法 在 Vue 中实现遮罩层可以通过多种方式完成,以下是几种常见的方法: 方法一:使用 v-show 或 v-if 控制显示 通过 Vue 的指令动态控制遮罩层的显示与隐藏。…

vue实现级联

vue实现级联

Vue 实现级联选择器的方法 级联选择器(Cascader)是常见的表单组件,用于处理多层级联动数据选择(如省市区选择)。以下是几种实现方式: 基于 Element UI 的 el-cascader…

vue实现grid

vue实现grid

Vue 实现 Grid 布局的方法 使用 CSS Grid 布局 Vue 可以结合 CSS Grid 布局实现灵活的网格系统。CSS Grid 是现代浏览器原生支持的布局方案,无需额外依赖库。 &l…

vue实现switch

vue实现switch

Vue 实现 Switch 开关组件 在 Vue 中实现 Switch 开关组件可以通过自定义组件或使用现有 UI 库完成。以下是几种常见实现方式: 自定义 Switch 组件 创建一个基础 Sw…

vue实现数组

vue实现数组

Vue 实现数组操作的方法 在 Vue 中,数组的操作需要特别注意响应式的问题。Vue 提供了一些方法来确保数组的变动能够触发视图更新。 响应式数组方法 Vue 对以下数组方法进行了封装,确保它们能…