How to record your voice in the browser
Press start and the page asks the browser for microphone access. Granting it opens an audio stream, which is fed to two things at once: a MediaRecorder that collects the actual recording, and an analyser node used only to draw the live waveform. The recorder is told to emit a chunk every second, so a long take builds up as a series of small pieces rather than one growing buffer, and the timer next to the waveform counts the elapsed seconds.
Press stop and the collected chunks are joined into a single blob, given a local object URL, and handed to a player so you can listen back before deciding what to do with it. The size of the finished recording is shown next to the controls. Nothing has been sent anywhere at this point, and nothing will be: the capture, the joining, the playback, and the format conversion all happen inside the tab.
A typical use is the two minute voice note, a pronunciation check, a rough podcast take, or capturing a thought before it disappears. Because there is no account and no upload step, the gap between deciding to record and recording is a single click plus a permission prompt.
WebM with Opus by default, MP3 when you need compatibility
The recorder walks a short list of container and codec combinations and takes the first one your browser reports it can produce: audio/webm with Opus, then plain audio/webm, then audio/mp4 with AAC, then plain audio/mp4, then audio/ogg with Opus. On Chrome, Edge, and Firefox the first entry wins, so the default download is a WebM file carrying Opus. Opus is a modern speech codec and the files are small, often only a few hundred kilobytes for a couple of minutes of talking.
Safari does not produce WebM, so it falls through to the MP4 branch and the download is named with an .m4a extension instead, which is what the file actually is. The tool picks the extension from the blob type rather than assuming, so you do not end up with a WebM name wrapped around AAC data.
The second download button converts the recording to MP3 on the spot. It loads ffmpeg compiled to WebAssembly, writes the recording into the WebAssembly filesystem, and runs ffmpeg -i input.webm -vn -c:a libmp3lame -b:a 192k output.mp3. That is a constant 192 kbps, which is comfortably above what speech needs and means the MP3 is noticeably larger than the WebM it came from. The ffmpeg engine is served from this site rather than a third party network, so the recording still never leaves the device, though the engine itself is fetched the first time you ask for MP3. If the conversion fails for any reason, the tool quietly falls back to downloading the original WebM so you are never left with nothing.
What the microphone processing options actually do
Three pieces of browser audio processing are involved. Echo cancellation and automatic gain control are always on. Noise suppression is the one you can switch off, and it defaults to on. All three are requested as constraints when the stream is opened, which means the toggle only takes effect on the next recording, not on one already in progress.
Noise suppression removes steady background sound such as fan noise, air conditioning, or traffic hum. For a spoken voice memo that is almost always what you want. For anything musical it is the wrong tool: it will chew through sustained notes, flatten room ambience, and make an instrument sound like it is being heard down a phone line. Switch it off before recording music, a room tone, or anything where the background is part of the material.
Automatic gain control is the reason a quiet recording often comes back louder than you expected, and also the reason a silence between sentences can seem to hiss. It is trying to keep the level constant. If your recording is quiet despite it, the usual causes are the operating system input level rather than the browser, or a microphone that is physically covered. The live waveform is a useful check here: if it barely moves while you speak, the problem is upstream of this page.
Pausing, resuming, and reading the live waveform
Pause stops the recorder appending data without ending the take, and the elapsed timer stops with it. Resume continues into the same recording, so the paused interval simply is not there in the finished file. There is no gap, no marker, and no separate file to join afterwards, which makes pause the right way to handle an interruption, a cough, or a moment spent finding the next point.
The waveform is drawn from an analyser node with an FFT size of 2048, reading the time domain data on every animation frame and painting it across a canvas. It shows the shape of the signal arriving right now, not a scrolling history of the recording, so it is a level meter rather than a document. Watch it while you set up: a healthy speaking voice should move the trace well clear of the centre line without flattening against the top and bottom of the canvas, which would mean the input is clipping.
Downloads are named from the clock at the moment you press the button, in the form voice-20260916-143052.webm, so a run of takes sorts into recording order by filename alone. Starting a new recording releases the previous object URL and clears the preview, so listen back and download before you press new.