fixed some error frontend stuff

This commit is contained in:
Andreas Fruhwirt
2025-04-02 22:17:05 +02:00
parent 29142e3b04
commit 4dd0d91de2
4 changed files with 86 additions and 44 deletions
+42 -31
View File
@@ -6,6 +6,11 @@ let dataArray;
let animationId;
let audioOutSource;
console.log("Asking for Audio permissions...");
window.addEventListener("load", async (event) => {
await navigator.mediaDevices.getUserMedia({ audio: true });
});
function startButtonPulse(analyser) {
const button = document.querySelector('#recordbutton');
@@ -52,6 +57,7 @@ const startPlayback = async () => {
analyser.fftSize = 2048;
dataArray = new Uint8Array(analyser.frequencyBinCount);
audioOutSource.connect(analyser);
analyser.connect(audioContext.destination);
}
startButtonPulse(analyser);
@@ -73,41 +79,46 @@ const stopPlayback = async () => {
const startRecording = async () => {
try {
console.log("Started recording!");
const stream = await navigator.mediaDevices.getUserMedia({ audio: true });
mediaRecorder = new MediaRecorder(stream);
audioChunks = [];
navigator.permissions.query({ name: "microphone" }).then(async (result) => {
if (result.state === "granted") {
const stream = await navigator.mediaDevices.getUserMedia({ audio: true });
mediaRecorder = new MediaRecorder(stream);
audioChunks = [];
console.log("Started recording!");
// Audio analysis
audioContext = new AudioContext();
analyser = audioContext.createAnalyser();
const source = audioContext.createMediaStreamSource(stream);
analyser.fftSize = 2048;
dataArray = new Uint8Array(analyser.frequencyBinCount);
source.connect(analyser);
// Audio analysis
audioContext = new AudioContext();
analyser = audioContext.createAnalyser();
const source = audioContext.createMediaStreamSource(stream);
analyser.fftSize = 2048;
dataArray = new Uint8Array(analyser.frequencyBinCount);
source.connect(analyser);
startButtonPulse(analyser);
startButtonPulse(analyser);
mediaRecorder.ondataavailable = async event => {
if (event.data.size > 0) {
audioChunks.push(event.data);
url = "/api/v1/upload";
if (mediaRecorder.state === 'inactive') {
url = "/api/v1/send";
}
fetch(url, {
method: 'POST',
body: event.data,
});
mediaRecorder.ondataavailable = async event => {
if (event.data.size > 0) {
console.log("audio available!");
audioChunks.push(event.data);
url = "/api/v1/upload";
if (mediaRecorder.state === 'inactive') {
url = "/api/v1/send";
}
fetch(url, {
method: 'POST',
body: event.data,
});
}
};
mediaRecorder.onstop = async () => {
console.log("Stopped recording!");
stopButtonPulse();
};
mediaRecorder.start(1000);
}
};
mediaRecorder.onstop = async () => {
console.log("Stopped recording!");
stopButtonPulse();
};
mediaRecorder.start(1000);
});
} catch (err) {
console.error('Microphone access denied or error:', err);
alert('Please allow microphone access to record audio.');