Document markup and improve choice tags
This commit is contained in:
@@ -14,6 +14,7 @@ class TTSFactoryModule extends BaseModule {
|
||||
this.dependencies = [
|
||||
'persistence-manager',
|
||||
'localization',
|
||||
'game-config',
|
||||
'browser-tts', // Browser TTS handler
|
||||
'kokoro-tts', // Kokoro TTS handler
|
||||
'elevenlabs-tts',// ElevenLabs TTS handler
|
||||
@@ -24,7 +25,7 @@ class TTSFactoryModule extends BaseModule {
|
||||
this.activeHandler = null;
|
||||
this.ttsAvailable = false;
|
||||
this.speed = 1; // Speech speed multiplier. 1.0 is normal speed.
|
||||
this.language = 'en-us';
|
||||
this.language = 'en_US';
|
||||
this.voice = '';
|
||||
this.volume = 1.0;
|
||||
|
||||
@@ -224,9 +225,10 @@ class TTSFactoryModule extends BaseModule {
|
||||
}
|
||||
});
|
||||
|
||||
document.addEventListener('locale-changed', (event) => {
|
||||
if (event.detail?.locale) {
|
||||
this.configure({ language: event.detail.locale });
|
||||
document.addEventListener('game:config', (event) => {
|
||||
const language = event.detail?.metadata?.language || event.detail?.locale;
|
||||
if (language) {
|
||||
this.configure({ language, persistLanguage: false });
|
||||
}
|
||||
});
|
||||
|
||||
@@ -403,7 +405,7 @@ class TTSFactoryModule extends BaseModule {
|
||||
'preferred_handler': 'none', // Development default: TTS disabled
|
||||
'enabled': false, // TTS disabled by default
|
||||
'voice': '', // Empty default - will be selected based on handler
|
||||
'language': 'en-US', // Default language
|
||||
'language': 'en_US', // Legacy stored value; game metadata now owns active TTS language
|
||||
'volume': 1.0, // Default volume
|
||||
'elevenlabs_api_key': '', // Empty API key by default
|
||||
'elevenlabs_api_url': 'https://api.elevenlabs.io/v1', // Default ElevenLabs API URL
|
||||
@@ -433,7 +435,8 @@ class TTSFactoryModule extends BaseModule {
|
||||
// Load other preferences we need for initialization
|
||||
const preferredHandler = persistenceManager.getPreference('tts', 'preferred_handler');
|
||||
console.log(`TTS Factory: Loaded preferred handler: ${preferredHandler || 'none'}`);
|
||||
this.language = persistenceManager.getPreference('tts', 'language', defaults.language);
|
||||
const gameConfig = this.getModule('game-config');
|
||||
this.language = String(gameConfig?.getLocale?.() || defaults.language).replace('_', '-').toLowerCase();
|
||||
this.voice = persistenceManager.getPreference('tts', 'voice', defaults.voice);
|
||||
this.volume = persistenceManager.getPreference('tts', 'volume', defaults.volume);
|
||||
|
||||
@@ -698,7 +701,7 @@ class TTSFactoryModule extends BaseModule {
|
||||
if (persistenceManager) {
|
||||
persistenceManager.updatePreference('tts', 'preferred_handler', id);
|
||||
this.voice = persistenceManager.getPreference('tts', 'voice', this.voice || '');
|
||||
this.language = persistenceManager.getPreference('tts', 'language', this.language || 'en-us');
|
||||
this.language = String(this.getModule('game-config')?.getLocale?.() || this.language || 'en_US').replace('_', '-').toLowerCase();
|
||||
this.speed = persistenceManager.getPreference('tts', 'speed', this.speed || 1.0);
|
||||
}
|
||||
|
||||
@@ -788,7 +791,7 @@ class TTSFactoryModule extends BaseModule {
|
||||
// Not cached, generate and cache
|
||||
if (typeof handler.preloadSpeech === 'function') {
|
||||
console.log(`TTS Factory: Generating and caching speech for hash ${hash}`);
|
||||
const preloadData = await handler.preloadSpeech(text);
|
||||
const preloadData = await handler.preloadSpeech(text, options);
|
||||
if (preloadData && preloadData.success) {
|
||||
// Cache the speech
|
||||
await this.cacheSpeech(hash, preloadData.audioData, preloadData.duration);
|
||||
@@ -822,7 +825,7 @@ class TTSFactoryModule extends BaseModule {
|
||||
* @param {number} [priority=5] - Priority for preloading (1-10, higher is more important)
|
||||
* @returns {Promise<Object>} - Preloaded speech data
|
||||
*/
|
||||
async preloadSpeech(text, priority = 5) {
|
||||
async preloadSpeech(text, options = {}) {
|
||||
// Check if we have an active handler
|
||||
if (!this.activeHandler || !this.ttsAvailable) {
|
||||
console.warn('TTS Factory: Cannot preload speech - no active handler or TTS not available');
|
||||
@@ -855,7 +858,7 @@ class TTSFactoryModule extends BaseModule {
|
||||
|
||||
// If the handler has a preloadSpeech method, use it
|
||||
if (typeof this.handlers[this.activeHandler].preloadSpeech === 'function') {
|
||||
const preloadData = await this.handlers[this.activeHandler].preloadSpeech(text);
|
||||
const preloadData = await this.handlers[this.activeHandler].preloadSpeech(text, options);
|
||||
|
||||
// Cache the generated speech data (extract audioData from result object)
|
||||
if (preloadData && preloadData.audioData) {
|
||||
@@ -1169,9 +1172,9 @@ class TTSFactoryModule extends BaseModule {
|
||||
}
|
||||
|
||||
if (typeof options.language === 'string' && options.language) {
|
||||
this.language = options.language.toLowerCase();
|
||||
this.language = options.language.replace('_', '-').toLowerCase();
|
||||
voiceOptions.language = this.language;
|
||||
if (persistenceManager) {
|
||||
if (persistenceManager && options.persistLanguage === true) {
|
||||
persistenceManager.updatePreference('tts', 'language', this.language);
|
||||
}
|
||||
}
|
||||
@@ -1215,7 +1218,7 @@ class TTSFactoryModule extends BaseModule {
|
||||
* @param {string} text - Text to preload
|
||||
* @returns {Promise<Object>} - Resolves with preloaded speech data
|
||||
*/
|
||||
async preloadSpeech(text) {
|
||||
async preloadSpeech(text, options = {}) {
|
||||
if (!this.activeHandler) {
|
||||
console.warn("TTS Factory: No active TTS handler for preload");
|
||||
return null;
|
||||
@@ -1243,7 +1246,7 @@ class TTSFactoryModule extends BaseModule {
|
||||
|
||||
// If the handler has a preloadSpeech method, use it
|
||||
if (typeof this.handlers[this.activeHandler].preloadSpeech === 'function') {
|
||||
const preloadData = await this.handlers[this.activeHandler].preloadSpeech(text);
|
||||
const preloadData = await this.handlers[this.activeHandler].preloadSpeech(text, options);
|
||||
|
||||
// Cache the generated speech data (extract audioData from result object)
|
||||
if (preloadData && preloadData.audioData) {
|
||||
@@ -1313,7 +1316,11 @@ class TTSFactoryModule extends BaseModule {
|
||||
|
||||
// If the handler has a speakPreloaded method, use it
|
||||
if (typeof this.handlers[this.activeHandler].speakPreloaded === 'function') {
|
||||
return await this.handlers[this.activeHandler].speakPreloaded(preloadData, options);
|
||||
return await this.handlers[this.activeHandler].speakPreloaded(preloadData, result => {
|
||||
document.dispatchEvent(new CustomEvent('tts:speechCompleted', {
|
||||
detail: { success: result?.success === true, error: result?.error }
|
||||
}));
|
||||
});
|
||||
} else {
|
||||
console.warn(`TTS Factory: Handler ${this.activeHandler} does not support speaking preloaded data`);
|
||||
return false;
|
||||
|
||||
Reference in New Issue
Block a user