The current spectrum as count normalized bins (default REALTIME_AUDIO_BIN_COUNT).
Releases the analyser (and the meter-owned AudioContext, when it created one).
Instantaneous RMS level, 0..1 (0 = silence).
StaticForMeters a node inside an EXISTING graph (e.g. RealtimePcmPlayback's master
gain). The caller keeps ownership of the context — Close only disconnects
the analyser. Returns null when the analyser can't be created.
StaticForMeters the LOCAL microphone. Identical to ForStream EXCEPT it taps a CLONE of the mic's audio track(s), not the track(s) themselves.
Why the clone matters: the WebRTC realtime drivers add the mic track to an RTCPeerConnection
(pc.addTrack). Once a local track feeds the WebRTC pipeline, Chromium reads pure SILENCE from a
parallel MediaStreamAudioSourceNode over the SAME track — so the "Listening" meter never moves
while the user speaks even though the mic is live. A cloned track is independent of the PC sender
and meters reliably; it is stopped in Close. Harmless for the WS drivers (the clone is just
an extra short-lived track). Returns null when Web Audio / the stream has no usable audio track.
StaticForMeters a MediaStream (e.g. a remote WebRTC stream) via a private AudioContext. Returns
null when Web Audio / the stream isn't usable (tests, SSR, stopped tracks) — callers treat
null as "no metering available". For the LOCAL microphone use ForMicStream instead.
AnalyserNode-backed audio meter. Use the static factories — they are defensive (returnnullwhere Web Audio is unavailable) and encode the two ownership modes: stream meters own a privateAudioContext; graph meters tap a context the caller owns (and Close never closes it).