You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
89 lines
2.5 KiB
JavaScript
89 lines
2.5 KiB
JavaScript
var micEl;
|
|
let chunks = [];
|
|
|
|
var mediaRecorder = false;
|
|
|
|
var sendFile = async function (blob) {
|
|
const formData = new FormData();
|
|
|
|
formData.append('userfile', blob, new Date() + ".webm");
|
|
|
|
const response = await fetch('upload.php', {
|
|
method: 'POST',
|
|
body: formData
|
|
});
|
|
|
|
|
|
return response.json()
|
|
}
|
|
|
|
var initRecording = function (autostart) {
|
|
if (navigator.mediaDevices && navigator.mediaDevices.getUserMedia) {
|
|
console.info("getUserMedia supported.");
|
|
|
|
navigator.mediaDevices
|
|
.getUserMedia({ audio: true })
|
|
.then((stream) => {
|
|
mediaRecorder = new MediaRecorder(stream);
|
|
console.log(mediaRecorder.mimeType);
|
|
console.log("should i autostarty", autostart);
|
|
|
|
mediaRecorder.ondataavailable = (e) => {
|
|
chunks.push(e.data);
|
|
};
|
|
|
|
mediaRecorder.onstop = (e) => {
|
|
console.log("got a call to stop");
|
|
var audioEl = document.querySelectorAll("audio")[0];
|
|
const blob = new Blob(chunks, {
|
|
type: mediaRecorder.mimeType
|
|
});
|
|
console.log(blob);
|
|
chunks = [];
|
|
const audioURL = window.URL.createObjectURL(blob);
|
|
audioEl.src = audioURL;
|
|
console.log(audioEl.src);
|
|
sendFile(blob).then((data) => {
|
|
document.querySelector(".fn-error").textContent = data
|
|
});
|
|
}
|
|
|
|
if (autostart) {
|
|
mediaRecorder.start();
|
|
}
|
|
})
|
|
} else {
|
|
console.error("not supported");
|
|
}
|
|
}
|
|
|
|
var startRecording = function (e) {
|
|
|
|
if (!mediaRecorder) {
|
|
console.log("did not initalise");
|
|
initRecording(true);
|
|
e.currentTarget.setAttribute("active", true);
|
|
} else {
|
|
|
|
if (mediaRecorder.state === "recording") {
|
|
console.log("recording was already happening")
|
|
mediaRecorder.stop();
|
|
e.currentTarget.setAttribute("active", false);
|
|
} else {
|
|
console.log("not yet recording, about tos tart");
|
|
mediaRecorder.start();
|
|
e.currentTarget.setAttribute("active", true);
|
|
}
|
|
}
|
|
|
|
|
|
}
|
|
window.onload = function () {
|
|
console.log("load app");
|
|
|
|
micEl = document.querySelector('.fn-start-recording');
|
|
|
|
micEl.addEventListener('click', startRecording);
|
|
|
|
|
|
} |