diff --git a/src/react-components/ui-root.js b/src/react-components/ui-root.js
index 83ddd1177f5be71efe796f02043bdceedb2cc6cd..fc6727c2121cc8ec77f1894ce3be006f01f403d3 100644
--- a/src/react-components/ui-root.js
+++ b/src/react-components/ui-root.js
@@ -356,12 +356,12 @@ class UIRoot extends Component {
       mediaStream.addTrack(this.state.audioTrack);
 
       const AudioContext = window.AudioContext || window.webkitAudioContext;
-      const audioContext = new AudioContext();
-      const source = audioContext.createMediaStreamSource(mediaStream);
-      const analyzer = audioContext.createAnalyser();
+      const micLevelAudioContext = new AudioContext();
+      const micSource = micLevelAudioContext.createMediaStreamSource(mediaStream);
+      const analyzer = micLevelAudioContext.createAnalyser();
       const levels = new Uint8Array(analyzer.fftSize);
 
-      source.connect(analyzer);
+      micSource.connect(analyzer);
 
       const micUpdateInterval = setInterval(() => {
         analyzer.getByteTimeDomainData(levels);
@@ -383,7 +383,7 @@ class UIRoot extends Component {
         this.props.store.update({ lastUsedMicDeviceId: micDeviceId });
       }
 
-      this.setState({ micUpdateInterval });
+      this.setState({ micLevelAudioContext, micUpdateInterval });
     }
 
     this.setState({ mediaStream });
@@ -471,6 +471,12 @@ class UIRoot extends Component {
     }
 
     this.stopTestTone();
+
+    if (this.state.micLevelAudioContext) {
+      this.state.micLevelAudioContext.close();
+      clearInterval(this.state.micUpdateInterval);
+    }
+
     this.setState({ entryStep: ENTRY_STEPS.finished });
   };