diff --git a/package.json b/package.json
index 1f945c19ac617b21e24f502a60dab73d756019eb..2f6d4d3782fcc6a6cad5c390d485b5c7a0a520c2 100644
--- a/package.json
+++ b/package.json
@@ -50,6 +50,7 @@
     "eslint-plugin-react": "^7.5.1",
     "file-loader": "1.1.6",
     "get-float-time-domain-data": "0.1.0",
+    "get-user-media-promise": "1.1.1",
     "gh-pages": "github:rschamp/gh-pages#publish-branch-to-subfolder",
     "html-webpack-plugin": "^2.30.0",
     "immutable": "3.8.1",
diff --git a/src/lib/audio/audio-recorder.js b/src/lib/audio/audio-recorder.js
index 528bb1eec28e9a020d37e7caa2ebb1cf11c97c58..2d1bcb91dd3bc3c3fbb686ed1f8252ce2117acae 100644
--- a/src/lib/audio/audio-recorder.js
+++ b/src/lib/audio/audio-recorder.js
@@ -1,4 +1,5 @@
 import 'get-float-time-domain-data';
+import getUserMedia from 'get-user-media-promise';
 import SharedAudioContext from './shared-audio-context.js';
 import {computeRMS} from './audio-util.js';
 
@@ -22,17 +23,19 @@ class AudioRecorder {
 
     startListening (onStarted, onUpdate, onError) {
         try {
-            navigator.getUserMedia({audio: true}, userMediaStream => {
-                if (!this.disposed) {
-                    this.started = true;
-                    onStarted();
-                    this.attachUserMediaStream(userMediaStream, onUpdate);
-                }
-            }, e => {
-                if (!this.disposed) {
-                    onError(e);
-                }
-            });
+            getUserMedia({audio: true})
+                .then(userMediaStream => {
+                    if (!this.disposed) {
+                        this.started = true;
+                        onStarted();
+                        this.attachUserMediaStream(userMediaStream, onUpdate);
+                    }
+                })
+                .catch(e => {
+                    if (!this.disposed) {
+                        onError(e);
+                    }
+                });
         } catch (e) {
             if (!this.disposed) {
                 onError(e);