Document markup and improve choice tags
This commit is contained in:
@@ -9,7 +9,7 @@ export class BrowserTTSModule extends TTSHandlerModule {
|
||||
super('browser-tts', 'Browser TTS');
|
||||
|
||||
// Declare proper dependencies according to architecture principles
|
||||
this.dependencies = ['persistence-manager', 'localization'];
|
||||
this.dependencies = ['persistence-manager', 'localization', 'game-config'];
|
||||
|
||||
// Voice options
|
||||
this.voiceOptions = {
|
||||
@@ -57,6 +57,13 @@ export class BrowserTTSModule extends TTSHandlerModule {
|
||||
console.error('Browser TTS: Localization dependency not found');
|
||||
return false;
|
||||
}
|
||||
|
||||
this.addEventListener(document, 'preference-updated', (event) => {
|
||||
const { category, key } = event.detail || {};
|
||||
if (category === 'audio' && ['masterVolume', 'ttsVolume', 'masterVolumeEnabled', 'ttsVolumeEnabled'].includes(key) && this.currentUtterance) {
|
||||
this.currentUtterance.volume = this.getPlaybackVolume();
|
||||
}
|
||||
});
|
||||
|
||||
// Check if browser supports speech synthesis
|
||||
if (!window.speechSynthesis) {
|
||||
@@ -163,9 +170,9 @@ export class BrowserTTSModule extends TTSHandlerModule {
|
||||
*/
|
||||
async setupVoiceFromPreferences() {
|
||||
const persistenceManager = this.getModule('persistence-manager');
|
||||
const localization = this.getModule('localization');
|
||||
const gameConfig = this.getModule('game-config');
|
||||
|
||||
if (!persistenceManager || !localization || this.voices.length === 0) {
|
||||
if (!persistenceManager || this.voices.length === 0) {
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -173,7 +180,7 @@ export class BrowserTTSModule extends TTSHandlerModule {
|
||||
const preferredVoiceId = persistenceManager.getPreference('tts', 'browser_voice', '');
|
||||
|
||||
// Get current locale
|
||||
const currentLocale = localization.getLocale();
|
||||
const currentLocale = gameConfig?.getLocale?.() || 'en_US';
|
||||
|
||||
// If we have a preferred voice ID, use it
|
||||
if (preferredVoiceId && this.voices.some(v => v.id === preferredVoiceId)) {
|
||||
@@ -200,11 +207,11 @@ export class BrowserTTSModule extends TTSHandlerModule {
|
||||
return this.selectDefaultVoice();
|
||||
}
|
||||
|
||||
// Extract language code from locale (e.g., 'en-US' -> 'en')
|
||||
const langCode = locale.split('-')[0].toLowerCase();
|
||||
const normalizedLocale = String(locale).replace('_', '-').toLowerCase();
|
||||
const langCode = normalizedLocale.split('-')[0];
|
||||
|
||||
// First try to find a voice that exactly matches the locale
|
||||
let matchedVoice = this.voices.find(v => v.language && v.language.toLowerCase() === locale.toLowerCase());
|
||||
let matchedVoice = this.voices.find(v => v.language && v.language.toLowerCase() === normalizedLocale);
|
||||
|
||||
// If not found, try to find a voice for the language
|
||||
if (!matchedVoice && this.voicesByLang[langCode]) {
|
||||
@@ -220,6 +227,21 @@ export class BrowserTTSModule extends TTSHandlerModule {
|
||||
// Fall back to default voice
|
||||
return this.selectDefaultVoice();
|
||||
}
|
||||
|
||||
getPlaybackVolume() {
|
||||
const persistenceManager = this.getModule('persistence-manager');
|
||||
if (!persistenceManager) {
|
||||
return this.voiceOptions.volume || 1.0;
|
||||
}
|
||||
|
||||
const masterVolume = persistenceManager.getPreference('audio', 'masterVolume', 1.0);
|
||||
const ttsVolume = persistenceManager.getPreference('audio', 'ttsVolume', 1.0);
|
||||
const masterEnabled = persistenceManager.getPreference('audio', 'masterVolumeEnabled', true) !== false;
|
||||
const ttsEnabled = persistenceManager.getPreference('audio', 'ttsVolumeEnabled', true) !== false;
|
||||
const configuredVolume = this.voiceOptions.volume || 1.0;
|
||||
|
||||
return Math.max(0, Math.min(1, configuredVolume * (masterEnabled ? masterVolume : 0) * (ttsEnabled ? ttsVolume : 0)));
|
||||
}
|
||||
|
||||
/**
|
||||
* Select a default voice
|
||||
@@ -342,7 +364,7 @@ export class BrowserTTSModule extends TTSHandlerModule {
|
||||
|
||||
utterance.rate = this.voiceOptions.speed || 1.0;
|
||||
utterance.pitch = this.voiceOptions.pitch || 1.0;
|
||||
utterance.volume = this.voiceOptions.volume || 1.0;
|
||||
utterance.volume = this.getPlaybackVolume();
|
||||
|
||||
// Set up event handlers
|
||||
utterance.onstart = this.utteranceHandlers.start;
|
||||
@@ -484,7 +506,7 @@ export class BrowserTTSModule extends TTSHandlerModule {
|
||||
* @returns {boolean} - Success status (always false)
|
||||
*/
|
||||
speakPreloaded(preloadData, callback = null) {
|
||||
if (callback) {
|
||||
if (typeof callback === 'function') {
|
||||
callback({ success: false, reason: 'not_supported' });
|
||||
}
|
||||
return false;
|
||||
|
||||
Reference in New Issue
Block a user