This commit is contained in:
Timothy Jaeryang Baek
2026-04-01 05:40:32 -05:00
parent d7a5a903a6
commit 0f8d7982e1
@@ -58,6 +58,34 @@
return `${minutes}:${formattedSeconds}`; return `${minutes}:${formattedSeconds}`;
}; };
let wakeLock = null;
const requestWakeLock = async () => {
if ('wakeLock' in navigator) {
try {
wakeLock = await navigator.wakeLock.request('screen');
console.log('Wake Lock acquired');
wakeLock.addEventListener('release', () => {
console.log('Wake Lock released');
});
} catch (err) {
console.log('Wake Lock request failed:', err);
}
}
};
const releaseWakeLock = async () => {
if (wakeLock) {
try {
await wakeLock.release();
} catch (err) {
console.log('Wake Lock release failed:', err);
}
wakeLock = null;
}
};
let stream; let stream;
let speechRecognition; let speechRecognition;
@@ -216,11 +244,13 @@
mimeType: mineTypes.find((type) => MediaRecorder.isTypeSupported(type)) mimeType: mineTypes.find((type) => MediaRecorder.isTypeSupported(type))
}); });
mediaRecorder.onstart = () => { mediaRecorder.onstart = async () => {
console.log('Recording started'); console.log('Recording started');
loading = false; loading = false;
startDurationCounter(); startDurationCounter();
await requestWakeLock();
audioChunks = []; audioChunks = [];
analyseAudio(stream); analyseAudio(stream);
}; };
@@ -333,6 +363,8 @@
speechRecognition.stop(); speechRecognition.stop();
} }
await releaseWakeLock();
stopDurationCounter(); stopDurationCounter();
audioChunks = []; audioChunks = [];
visualizerData = Array(VISUALIZER_BUFFER_LENGTH).fill(0); visualizerData = Array(VISUALIZER_BUFFER_LENGTH).fill(0);
@@ -354,6 +386,8 @@
} }
clearInterval(durationCounter); clearInterval(durationCounter);
await releaseWakeLock();
if (stream) { if (stream) {
const tracks = stream.getTracks(); const tracks = stream.getTracks();
tracks.forEach((track) => track.stop()); tracks.forEach((track) => track.stop());
@@ -376,8 +410,15 @@
} }
}; };
const handleVisibilityChange = async () => {
if (recording && document.visibilityState === 'visible') {
await requestWakeLock();
}
};
onMount(() => { onMount(() => {
window.addEventListener('keydown', handleKeyDown); window.addEventListener('keydown', handleKeyDown);
document.addEventListener('visibilitychange', handleVisibilityChange);
// listen to width changes // listen to width changes
resizeObserver = new ResizeObserver(() => { resizeObserver = new ResizeObserver(() => {
@@ -396,6 +437,8 @@
onDestroy(() => { onDestroy(() => {
window.removeEventListener('keydown', handleKeyDown); window.removeEventListener('keydown', handleKeyDown);
document.removeEventListener('visibilitychange', handleVisibilityChange);
releaseWakeLock();
// remove resize observer // remove resize observer
resizeObserver.disconnect(); resizeObserver.disconnect();
}); });