diff --git a/public/src/tts.js b/public/src/tts.js index bd8c24a..8bdbf11 100644 --- a/public/src/tts.js +++ b/public/src/tts.js @@ -20,19 +20,19 @@ export function setTTSMode(mode) { } // Detect best audio format for this browser -// Chrome: mp3 works everywhere, MediaSource supports audio/mpeg -// Firefox: mp3 may lack decoders on Linux; opus (ogg) always works -// For MediaSource streaming: only Chrome supports audio/mpeg, nobody supports audio/ogg in MSE +// Chrome/Edge: mp3 works, MediaSource supports audio/mpeg for streaming +// Firefox: mp3 decoder often missing on Linux (canPlayType lies), use opus (ogg) +// For MediaSource streaming: only Chromium browsers support audio/mpeg in MSE function detectAudioFormat() { - const audio = document.createElement('audio'); - // Check if the browser can play mp3 at all - const canMp3 = audio.canPlayType('audio/mpeg') === 'probably' || audio.canPlayType('audio/mpeg') === 'maybe'; - if (canMp3) { - return { format: 'mp3', mime: 'audio/mpeg', mseMime: 'audio/mpeg' }; + const isFirefox = navigator.userAgent.includes('Firefox'); + if (isFirefox) { + // Firefox on Linux often claims mp3 support but lacks decoders + // Opus in Ogg container always works natively in Firefox + console.log("Firefox detected, using opus format for TTS"); + return { format: 'opus', mime: 'audio/ogg', mseMime: null }; } - // Fallback to opus (ogg container) - Firefox always supports this - console.log("Browser lacks mp3 support, using opus format"); - return { format: 'opus', mime: 'audio/ogg', mseMime: null }; // MSE doesn't support ogg + // Chromium-based browsers: mp3 works, MSE supports audio/mpeg + return { format: 'mp3', mime: 'audio/mpeg', mseMime: 'audio/mpeg' }; } const AUDIO_FORMAT = detectAudioFormat();