1. Read the status line
Hotplug labels the failure when it can. Denied is not no device. If the LED says denied, JavaScript is not allowed to reopen the mic. Click the padlock or site settings control next to the URL, set Microphone to Allow, reload, and request again.
2. Confirm a secure context
Camera and microphone APIs require HTTPS (or localhost). If you opened a downloaded HTML file from disk, most browsers will refuse. Use the hosted page on this origin.
3. Check the operating system, not the page
- Windows: Settings → Privacy → Microphone. Make sure desktop apps and the browser are both allowed. Click the taskbar volume icon and look at the input meter while you speak.
- macOS: System Settings → Privacy & Security → Microphone. Grant the browser. Laptop mics also fail when the hardware mute key is on.
- Linux: PipeWire/Pulse input may be muted or routed to a monitor device.
pavucontrolis faster than guessing.
4. Exclusive-mode software
NotReadableError usually means another process has the device. Close Discord, Zoom, Teams, OBS, and voice recorders. Some Windows “exclusive mode” checkboxes on the playback/recording device will starve the browser.
5. Wrong capsule
USB headsets, docks, and HDMI monitors all register as inputs. The OS may have selected a dead HDMI capture. Pick the real mic in sound settings, then reload the test. Hotplug currently opens the default device; if the default is wrong, the meter will be honest and silent.
6. Extensions and enterprise policy
Some privacy extensions block media. Corporate Chrome policies can disable getUserMedia entirely. Try a fresh profile if you can.
7. What success looks like
Permission LED on granted, RMS numbers moving when you talk, waveform wiggling. Then you are done. Nothing was uploaded. If you need the other direction, run the speaker test.