To record voice with a live waveform, open Zro7 Voice Recorder, hit Record, allow mic access, and watch the waveform draw in real time on the canvas. Stop to download WAV (uncompressed) or WebM (Opus). The whole pipeline — mic capture, waveform, encoding, download — is client-side WebAudio + MediaRecorder.
The WebAudio pipeline
getUserMedia({ audio: true })gets the mic stream.- Wrap it in an
AudioContextviacreateMediaStreamSource(stream). - Feed that into an
AnalyserNode(fftSize 2048, smoothingTimeConstant 0.6). - On each animation frame, call
getByteTimeDomainData(dataArray)and draw to canvas. - In parallel, feed the same stream into a
MediaRecorderto save the file.
Two waveform styles
- Time-domain (oscilloscope): connects samples with lines. Best for talking-head feedback.
- Frequency-domain (bars):
getByteFrequencyDatafor spectrum. Useful for tuning and music.
WAV vs WebM/Opus
WAV is uncompressed 16-bit PCM — perfect for editing but ~10 MB/min. WebM/Opus at 32 kbps is voice-quality at ~250 KB/min. Zro7 exports both; pick WAV if you'll edit in a DAW, WebM if you'll upload to a podcast host.
Latency and buffer size
The default AudioContext latency is fine for a visualizer. If you build a monitor (headphones), pass latencyHint: 'interactive' and be careful with feedback if the speakers aren't muted.
Steps
- Open Voice Recorder.
- Grant mic permission.
- Record — the waveform draws live.
- Stop, preview, and download WAV or WebM.
- Optional: normalize with Zro7 Normalize Audio.
Zro7