Commit:
6aa592eParent:
2fef7a8Keep screen on during listening sessions via Wake Lock API
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
src/routes/+page.svelte
+25
-0
diff --git a/src/routes/+page.svelte b/src/routes/+page.svelte
index 781005d..21347b5 100644
@@ -13,8 +13,24 @@
let sourceNode: MediaStreamAudioSourceNode | null = null;
let stream: MediaStream | null = null;
let sampleBuffer: Float32Array = new Float32Array(0);
let wakeLock: WakeLockSentinel | null = null;
async function acquireWakeLock(): Promise<void> {
if (!("wakeLock" in navigator)) return;
try {
wakeLock = await navigator.wakeLock.request("screen");
} catch {
// not supported or permission denied — silent fail
}
}
function releaseWakeLock(): void {
wakeLock?.release();
wakeLock = null;
}
async function startListening() {
await acquireWakeLock();
startSession();
audioCtx = new AudioContext({ sampleRate: 48000 });
await audioCtx.audioWorklet.addModule("/audio-processor.js");
@@ -55,6 +71,7 @@
}
function stopListening() {
releaseWakeLock();
workletNode?.disconnect();
sourceNode?.disconnect();
stream?.getTracks().forEach((t) => t.stop());
@@ -84,6 +101,14 @@
}
</script>
<svelte:document
onvisibilitychange={() => {
if (document.visibilityState === "visible" && listening) {
acquireWakeLock();
}
}}
/>
<PatchBanner text="BirdGO" />
{#if birdnet.predictions.length > 0}