Use UA detection for audio format instead of canPlayType
Firefox on Linux reports canPlayType('audio/mpeg') as supported
but then fails to decode mp3. Use user-agent detection instead:
Firefox always gets opus (ogg), Chromium browsers get mp3.
This commit is contained in:
parent
74a1ea581c
commit
1a2a85c797
1 changed files with 11 additions and 11 deletions
|
|
@ -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();
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue