use-audio-capture
Version:
ποΈ 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
140 lines (104 loc) β’ 5.2 kB
Markdown
# ποΈ use-audio-capture
[](https://badge.fury.io/js/use-audio-capture)
[](https://opensource.org/licenses/MIT)
[](http://www.typescriptlang.org/)
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.
## π Why use-audio-capture?
**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
## π¦ Installation
```bash
npm install use-audio-capture
```
```bash
yarn add use-audio-capture
```
```bash
pnpm add use-audio-capture
```
## π― Use Cases
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
## π Quick Start
### Basic Audio Recording
```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 (
<div>
<button onClick={start}>ποΈ Start Recording</button>
<button onClick={stop}>βΉοΈ Stop</button>
<button onClick={pause}>βΈοΈ Pause</button>
<button onClick={resume}>βΆοΈ Resume</button>
</div>
);
};
```
[π **See Live Example**](https://stackblitz.com/edit/stackblitz-starters-m44ars?file=src%2FApp.tsx) | [π¨ **Storybook Demo**](https://breeg554.github.io/use-audio-capture/?path=/story/example-audiorecorder--basic)
## More Advanced Example
Component example built based on **use-audio-capture** hook - [See live example](https://stackblitz.com/edit/da22123fggadad?file=src%2Fcomponents%2FAudioPrecorder%2FRecorder.tsx)
## π API Reference
### Hook Usage
```tsx
const { start, stop, pause, resume } = useAudioCapture(options);
```
### Available Functions
| 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()` |
### Callback Options
| 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 })` |
## π Browser Support
This hook works in all modern browsers that support:
- [MediaRecorder API](https://developer.mozilla.org/en-US/docs/Web/API/MediaRecorder)
- [getUserMedia API](https://developer.mozilla.org/en-US/docs/Web/API/MediaDevices/getUserMedia)
| Browser | Support |
| ------- | ------- |
| Chrome | β
47+ |
| Firefox | β
29+ |
| Safari | β
14+ |
| Edge | β
79+ |
## π License
MIT Β© [breeg554](https://github.com/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