当前位置:首页 > React

react如何实现录音

2026-02-26 04:48:06React

使用浏览器原生API实现录音

React中实现录音功能可以借助浏览器的MediaRecorder API。需要获取用户麦克风权限并处理音频数据流。

import React, { useState, useRef } from 'react';

const AudioRecorder = () => {
  const [isRecording, setIsRecording] = useState(false);
  const [audioURL, setAudioURL] = useState('');
  const mediaRecorderRef = useRef(null);
  const audioChunksRef = useRef([]);

  const startRecording = async () => {
    try {
      const stream = await navigator.mediaDevices.getUserMedia({ audio: true });
      mediaRecorderRef.current = new MediaRecorder(stream);

      mediaRecorderRef.current.ondataavailable = (event) => {
        audioChunksRef.current.push(event.data);
      };

      mediaRecorderRef.current.onstop = () => {
        const audioBlob = new Blob(audioChunksRef.current);
        const audioUrl = URL.createObjectURL(audioBlob);
        setAudioURL(audioUrl);
        audioChunksRef.current = [];
      };

      mediaRecorderRef.current.start();
      setIsRecording(true);
    } catch (err) {
      console.error('Error accessing microphone:', err);
    }
  };

  const stopRecording = () => {
    if (mediaRecorderRef.current) {
      mediaRecorderRef.current.stop();
      mediaRecorderRef.current.stream.getTracks().forEach(track => track.stop());
      setIsRecording(false);
    }
  };

  return (
    <div>
      <button onClick={isRecording ? stopRecording : startRecording}>
        {isRecording ? 'Stop Recording' : 'Start Recording'}
      </button>
      {audioURL && (
        <audio controls src={audioURL} />
      )}
    </div>
  );
};

export default AudioRecorder;

使用第三方库简化实现

对于更复杂的录音需求,可以考虑使用专门的React录音库如react-media-recorder

import React from 'react';
import { useReactMediaRecorder } from 'react-media-recorder';

const RecordView = () => {
  const {
    status,
    startRecording,
    stopRecording,
    mediaBlobUrl
  } = useReactMediaRecorder({ audio: true });

  return (
    <div>
      <p>{status}</p>
      <button onClick={startRecording}>Start Recording</button>
      <button onClick={stopRecording}>Stop Recording</button>
      <audio src={mediaBlobUrl} controls />
    </div>
  );
};

处理音频格式和质量

可以通过配置MediaRecorder的mimeType参数来指定音频格式:

react如何实现录音

const options = {
  audioBitsPerSecond: 128000,
  mimeType: 'audio/webm'
};
const mediaRecorder = new MediaRecorder(stream, options);

常见音频格式包括:

  • audio/webm (Chrome/Firefox)
  • audio/mp4 (Safari)
  • audio/ogg

保存录音文件

将录音保存为文件可以通过创建下载链接实现:

react如何实现录音

const handleDownload = () => {
  const a = document.createElement('a');
  a.href = audioURL;
  a.download = 'recording.webm';
  document.body.appendChild(a);
  a.click();
  document.body.removeChild(a);
};

错误处理和兼容性检查

在开始录音前应该检查浏览器兼容性:

if (!navigator.mediaDevices || !window.MediaRecorder) {
  alert('Your browser does not support audio recording');
  return;
}

处理可能的权限拒绝情况:

const startRecording = async () => {
  try {
    const stream = await navigator.mediaDevices.getUserMedia({ audio: true });
    // ... recording setup
  } catch (err) {
    if (err.name === 'NotAllowedError') {
      alert('Microphone access was denied');
    } else {
      console.error('Recording error:', err);
    }
  }
};

服务器端上传处理

如需将录音上传到服务器,可以使用FormData:

const uploadRecording = async () => {
  const audioBlob = await fetch(audioURL).then(r => r.blob());
  const formData = new FormData();
  formData.append('audio', audioBlob, 'recording.webm');

  try {
    const response = await fetch('/api/upload', {
      method: 'POST',
      body: formData
    });
    // handle response
  } catch (error) {
    console.error('Upload failed:', error);
  }
};

分享给朋友:

相关文章

vue如何实现计算

vue如何实现计算

Vue 实现计算的方法 Vue 提供了多种方式来实现计算逻辑,包括计算属性、方法、侦听器等。以下是几种常见的实现方式: 计算属性(Computed Properties) 计算属性是基于它们的响应式…

vue如何实现冒泡

vue如何实现冒泡

Vue 实现冒泡排序的步骤 在 Vue 中实现冒泡排序,可以通过数据绑定和计算属性来动态展示排序过程。以下是一个完整的实现示例。 示例代码 <template> <div>…

react如何运行

react如何运行

运行React项目的步骤 安装Node.js 确保系统已安装Node.js(建议版本12以上),可从官网下载并安装。Node.js自带npm包管理器,用于后续依赖安装。 创建React项目 使用官方…

react 如何调试

react 如何调试

调试 React 应用的方法 使用 React Developer Tools 安装 Chrome 或 Firefox 的 React Developer Tools 扩展,可以检查组件树、状态和 p…

react如何开发

react如何开发

React 开发基础步骤 安装 Node.js 和 npm/yarn 确保系统已安装 Node.js(包含 npm)或 Yarn。React 项目依赖这些工具管理包和运行脚本。官方推荐使用 Node.…

react如何安装

react如何安装

安装React的步骤 确保已安装Node.js(建议版本12或更高),可通过以下命令检查版本: node -v npm -v 使用Create React App快速搭建项目(推荐): npx c…