(audioContextSampleRate: number)
| 79 | |
| 80 | // Create and pre-warm a decoder worker (should be called early, e.g., on page load) |
| 81 | export const prewarmDecoderWorker = (audioContextSampleRate: number): Promise<void> => { |
| 82 | if (prewarmedWorkerReady && prewarmedSampleRate === audioContextSampleRate) { |
| 83 | console.log("Using existing prewarmed worker"); |
| 84 | return prewarmedWorkerReady; |
| 85 | } |
| 86 | |
| 87 | // Terminate old worker if sample rate changed |
| 88 | if (prewarmedWorker) { |
| 89 | prewarmedWorker.terminate(); |
| 90 | } |
| 91 | |
| 92 | console.log("Creating and prewarming decoder worker"); |
| 93 | lastWorkerError = null; |
| 94 | prewarmedWorker = createWorkerWithErrorTracking(); |
| 95 | prewarmedSampleRate = audioContextSampleRate; |
| 96 | |
| 97 | sendInitCommand(prewarmedWorker, audioContextSampleRate); |
| 98 | |
| 99 | prewarmedWorkerReady = new Promise((resolve) => { |
| 100 | // Give worker plenty of time to load WASM and process init |
| 101 | // 1000ms to be extra safe |
| 102 | setTimeout(() => { |
| 103 | console.log("Prewarmed decoder worker ready"); |
| 104 | resolve(); |
| 105 | }, 1000); |
| 106 | }); |
| 107 | |
| 108 | return prewarmedWorkerReady; |
| 109 | }; |
| 110 | |
| 111 | // Get the prewarmed worker after waiting for it to be ready |
| 112 | // Returns null if prewarm wasn't called or if worker had errors |
no test coverage detected