fix(useMicrophone): reset level to 0 on stop() - #213
Merged
childrentime merged 1 commit intoJul 30, 2026
Conversation
teardownAudioGraph() cancels the rAF loop, which is the only writer of `level`, so after stop() the value stays frozen at whatever the last frame measured. A meter bound to it keeps showing input long after the microphone has been released.
Owner
|
Thanks @ostapondo! A one-liner in exactly the right place — putting the reset in |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Description
After
stop(),useMicrophoneleaveslevelfrozen at the last value itmeasured instead of dropping to 0.
teardownAudioGraph()cancels the rAF loop, disconnects the source and nulls theanalyser — but that loop is the only writer of
level, so whatever it read onthe final frame stays in state indefinitely. A volume meter bound to
levelkeeps showing input after the microphone has been released, which reads as "still
recording" to the user.
Easy to see in the demo: talk into the mic until the bar moves, hit stop, and the
bar stays where it was.
One line in
teardownAudioGraph(). It also covers the device-switch path, wherethe graph is torn down and rebuilt — the meter now resets instead of briefly
showing the old device's level against the new stream.
Type of Change
Checklist
No doc change — this is the behaviour the docs already imply.
The new test sits next to
clears the analyser when stop() is called, whichcovers the analyser but never looked at
level. It uses the existing mockharness in that file and fails on
mainwith0.9921875instead of0.