From 5c4accb9ffa65495dd988f66c9d1a66db369a672 Mon Sep 17 00:00:00 2001
From: Greg Fodor <gfodor@gmail.com>
Date: Fri, 6 Apr 2018 11:33:27 -0700
Subject: [PATCH] Close mic resources on entry

---
 src/react-components/ui-root.js | 16 +++++++++++-----
 1 file changed, 11 insertions(+), 5 deletions(-)

diff --git a/src/react-components/ui-root.js b/src/react-components/ui-root.js
index 83ddd1177..fc6727c21 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 });
   };
 
-- 
GitLab