
Security News
Vite Releases Technical Preview of Rolldown-Vite, a Rust-Based Bundler
Vite releases Rolldown-Vite, a Rust-based bundler preview offering faster builds and lower memory usage as a drop-in replacement for Vite.
awesome-recorder
Advanced tools
A powerful in-browser audio recorder for recording audio with voice activity detection and mp3 encoding.
Effortless audio recording with built-in Voice Activity Detection and optimized MP3 outputs in modern browsers.
awesome-recorder
is a lightweight, powerful JavaScript library designed for seamless audio capture directly in the browser. It automatically segments speech using advanced Voice Activity Detection (VAD), encoding spoken audio into compact MP3 filesβperfect for web apps, voice assistants, transcription services, and more.
npm install awesome-recorder
# or
yarn add awesome-recorder
# or
pnpm add awesome-recorder
import { Recorder } from "awesome-recorder";
const recorder = new Recorder();
// Listen for speech state changes (optional)
recorder.on("speechStateChanged", ({ isSpeaking }) => {
console.log(`User is speaking: ${isSpeaking}`);
});
// Start capturing audio segments
async function startRecording() {
try {
// Choose output format: "mp3" (default), "wav", or "pcm"
for await (const audioChunk of recorder.start("mp3")) {
console.log("Detected speech segment:", audioChunk);
// Play audio directly in browser (MP3/WAV only)
const audio = new Audio(URL.createObjectURL(audioChunk));
audio.play();
// Or trigger immediate download
const link = document.createElement("a");
link.href = URL.createObjectURL(audioChunk);
link.download = `speech-${Date.now()}.mp3`;
link.click();
}
} catch (error) {
console.error("Recording Error:", error);
}
}
// Stop recording gracefully
function stopRecording() {
recorder.stop();
}
Recorder
ClassMain class for handling recording and voice detection.
new Recorder(vadOptions?: Partial<RealTimeVADOptions> & { preprocessAudio?: (audio: Float32Array) => Float32Array });
preprocessAudio
.preload(): Promise<void>
Preloads the VAD model and FFmpeg WASM module.
.start(outputFormat?: "mp3" | "wav" | "pcm"): AsyncGenerator<File | Float32Array, void>
Starts audio recording, yielding segments upon speech detection:
"mp3"
(default): MP3 files"wav"
: WAV files"pcm"
: Raw PCM audio as Float32Array (16kHz sample rate).stop(): Promise<void>
Stops audio recording.
.on(event: string, callback: Function): void
Subscribes to recorder events.
.off(event: string, callback: Function): void
Unsubscribes from recorder events.
speechStateChanged
{ isSpeaking: boolean }
when speech state changes.By default, awesome-recorder
uses an optimized, custom FFmpeg WASM build from @hinagiku/ffmpeg-core
, specifically tailored for minimal size (~1.2 MB). However, you can easily use your own custom build if preferred:
import { setCoreURL, setWasmURL } from "awesome-recorder";
setCoreURL("https://your-cdn.com/ffmpeg-core.js");
setWasmURL("https://your-cdn.com/ffmpeg-core.wasm");
Fine-tune detection sensitivity and timing:
const recorder = new Recorder({
positiveSpeechThreshold: 0.9,
negativeSpeechThreshold: 0.7,
minSpeechFrames: 5,
preSpeechPadFrames: 15,
redemptionFrames: 10,
});
See the @ricky0123/vad-web
Documentation for detailed configuration options.
Stream recorded segments directly to your backend:
async function streamSegments(recorder: Recorder) {
let segmentCount = 0;
for await (const audioFile of recorder.start()) {
segmentCount++;
const formData = new FormData();
formData.append("segment", audioFile);
fetch("/api/upload-segment", {
method: "POST",
body: formData,
})
.then((res) => res.json())
.then((data) => console.log(`Uploaded segment ${segmentCount}:`, data))
.catch((err) => console.error("Upload failed:", err));
}
}
Compatible with modern browsers supporting:
AudioContext
)When using Vite, exclude @ffmpeg/ffmpeg
from dependency optimization:
// vite.config.js
export default {
optimizeDeps: {
exclude: ["@ffmpeg/ffmpeg"],
},
};
Check out the practical demo in the example directory:
Released under the MIT License.
β¨ Enjoy effortless, efficient, and powerful audio recording in your web apps! β¨
FAQs
A powerful in-browser audio recorder for recording audio with voice activity detection and mp3 encoding.
The npm package awesome-recorder receives a total of 3 weekly downloads. As such, awesome-recorder popularity was classified as not popular.
We found that awesome-recorder demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago.Β It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security News
Vite releases Rolldown-Vite, a Rust-based bundler preview offering faster builds and lower memory usage as a drop-in replacement for Vite.
Research
Security News
A malicious npm typosquat uses remote commands to silently delete entire project directories after a single mistyped install.
Research
Security News
Malicious PyPI package semantic-types steals Solana private keys via transitive dependency installs using monkey patching and blockchain exfiltration.