This code works in Chrome, but fails with Subject's syntax error in Safari in line 2. Also, in iOS the Safari user is asked for permission to use their microphone but recording fails. All is well with Android Chrome.
index.js:
var recordAudio = function recordAudio() {
return new Promise(async function(resolve) {
var stream = await navigator.mediaDevices.getUserMedia({
audio: true
});
var mediaRecorder = new MediaRecorder(stream);
var audioChunks = [];
mediaRecorder.addEventListener("dataavailable", function(event) {
audioChunks.push(event.data);
});
var start = function start() {
audioChunks = [];
mediaRecorder.start();
};
var stop = function stop() {
return new Promise(function(resolve) {
mediaRecorder.addEventListener("stop", function() {
var audioBlob = new Blob(audioChunks);
var audioUrl = URL.createObjectURL(audioBlob);
var audio = new Audio(audioUrl);
var play = function play() {
return audio.play();
};
resolve({
audioChunks: audioChunks,
audioBlob: audioBlob,
audioUrl: audioUrl,
play: play
});
});
mediaRecorder.stop();
});
};
resolve({
start: start,
stop: stop
});
});
};