ποΈ A lightweight React hook for audio recording using native Web APIs (MediaRecorder, getUserMedia). Start, stop, pause, resume audio recordings with customizable callbacks. Perfect for voice notes, interviews, podcasts, and real-time audio processing in
npm install use-audio-capture


A lightweight, zero-dependency React hook for audio recording using native Web APIs (MediaRecorder, getUserMedia). Perfect for building voice notes, podcasts, interviews, and real-time audio processing applications in React.
Stop struggling with complex audio libraries! This React hook leverages native browser APIs to provide:
- π― Simple API - Start recording with just one function call
- πͺΆ Lightweight - Zero external dependencies, uses native Web APIs
- π§ TypeScript Support - Fully typed for excellent developer experience
- ποΈ Full Control - Start, stop, pause, resume recordings programmatically
- π Real-time Data - Access audio chunks as they're recorded
- π¨ Error Handling - Built-in error management for robust applications
- π Cross-browser - Works in all modern browsers supporting MediaRecorder API
``bash`
npm install use-audio-capture
`bash`
yarn add use-audio-capture
`bash`
pnpm add use-audio-capture
Perfect for building:
- ποΈ Voice note applications
- π§ Podcast recording tools
- π Interview and meeting recorders
- π΅ Music practice apps
- π£οΈ Voice memos and dictation tools
- π± Audio chat applications
- π¬ Content creation platforms
- π Audio feedback systems
- π€ Karaoke and singing apps
- π Language learning tools with pronunciation
`tsx
import { useAudioCapture } from 'use-audio-capture';
export const VoiceRecorder = () => {
const { start, stop, pause, resume } = useAudioCapture({
onStart: () => console.log('ποΈ Recording started'),
onChunk: (blobEvent) => console.log('Blob event here'),
onStop: (event, chunks) => {
// You can create audio file from recorded chunks on stop
const blob = new Blob(chunks, { type: chunks[0].type });
const file = new File([blob], 'sampleFile.webm', {
type: chunks[0].type,
});
console.log(file);
},
onError: (_event, { error }) => {
console.error('Recording error:', error);
},
});
return (
π See Live Example | π¨ Storybook Demo
More Advanced Example
Component example built based on use-audio-capture hook - See live example
π API Reference
$3
`tsx
const { start, stop, pause, resume } = useAudioCapture(options);
`$3
| Function | Description | Usage |
| ---------- | ------------------------------------------ | ---------------- |
|
start() | Start audio recording | await start() |
| stop() | Stop recording and trigger onStop callback | await stop() |
| pause() | Pause current recording session | await pause() |
| resume() | Resume paused recording | await resume() |$3
| Callback | Triggered When | Parameters |
| ---------- | ------------------------ | ------------------------------------ |
|
onStart | Recording begins | (event, { mediaStream }) |
| onChunk | New audio data available | (blobEvent, { mediaStream }) |
| onStop | Recording stops | (event, chunks[], { mediaStream }) |
| onPause | Recording paused | (event, chunks[], { mediaStream }) |
| onResume | Recording resumed | (event, chunks[], { mediaStream }) |
| onError | Error occurs | (event, { mediaStream, error })` |This hook works in all modern browsers that support:
- MediaRecorder API
- getUserMedia API
| Browser | Support |
| ------- | ------- |
| Chrome | β
47+ |
| Firefox | β
29+ |
| Safari | β
14+ |
| Edge | β
79+ |
MIT Β© breeg554
---
Keywords: react hook, audio recording, web api, mediarecorder, getusermedia, voice notes, podcast, interview, real-time audio, browser recording, typescript, react audio, voice recorder, audio capture, microphone access