Document markup and improve choice tags
This commit is contained in:
@@ -9,7 +9,7 @@ export class ApiTTSModuleBase extends TTSHandlerModule {
|
||||
super(id, name);
|
||||
|
||||
// Declare proper dependencies according to architecture principles
|
||||
this.dependencies = ['persistence-manager', 'localization'];
|
||||
this.dependencies = ['persistence-manager', 'localization', 'game-config'];
|
||||
|
||||
// Basic voice options
|
||||
this.voiceOptions = {
|
||||
@@ -86,7 +86,7 @@ export class ApiTTSModuleBase extends TTSHandlerModule {
|
||||
return;
|
||||
}
|
||||
|
||||
if (['masterVolume', 'ttsVolume', 'master_volume', 'tts_volume'].includes(key)) {
|
||||
if (['masterVolume', 'ttsVolume', 'masterVolumeEnabled', 'ttsVolumeEnabled', 'master_volume', 'tts_volume'].includes(key)) {
|
||||
this.applyCurrentVolume();
|
||||
}
|
||||
});
|
||||
@@ -129,9 +129,9 @@ export class ApiTTSModuleBase extends TTSHandlerModule {
|
||||
*/
|
||||
async setupVoiceFromPreferences() {
|
||||
const persistenceManager = this.getModule('persistence-manager');
|
||||
const localization = this.getModule('localization');
|
||||
const gameConfig = this.getModule('game-config');
|
||||
|
||||
if (!persistenceManager || !localization) {
|
||||
if (!persistenceManager) {
|
||||
console.error(`${this.name}: Required dependencies not found`);
|
||||
return false;
|
||||
}
|
||||
@@ -140,7 +140,7 @@ export class ApiTTSModuleBase extends TTSHandlerModule {
|
||||
const preferredVoiceId = persistenceManager.getPreference('tts', `${this.id}_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)) {
|
||||
@@ -194,7 +194,7 @@ export class ApiTTSModuleBase extends TTSHandlerModule {
|
||||
* @param {string} text - The text to synthesize.
|
||||
* @returns {Promise<Object>} - A promise that resolves with the audio data object.
|
||||
*/
|
||||
async generateSpeechAudio(text) {
|
||||
async generateSpeechAudio(text, options = {}) {
|
||||
// To be implemented by subclasses
|
||||
return { success: false, reason: 'not_implemented' };
|
||||
}
|
||||
@@ -206,10 +206,11 @@ export class ApiTTSModuleBase extends TTSHandlerModule {
|
||||
* @returns {Promise<Object>} - Resolves when audio finishes playing
|
||||
*/
|
||||
async speakPreloaded(preloadData, callback = null) {
|
||||
const completionCallback = typeof callback === 'function' ? callback : null;
|
||||
if (!preloadData || !preloadData.audioData) {
|
||||
console.error(`${this.name}: Invalid preloaded data`);
|
||||
const result = { success: false, reason: 'invalid_data' };
|
||||
if (callback) callback(result);
|
||||
if (completionCallback) completionCallback(result);
|
||||
return result;
|
||||
}
|
||||
|
||||
@@ -242,7 +243,7 @@ export class ApiTTSModuleBase extends TTSHandlerModule {
|
||||
}
|
||||
URL.revokeObjectURL(audioUrl);
|
||||
|
||||
if (callback) callback(result);
|
||||
if (completionCallback) completionCallback(result);
|
||||
resolve(result);
|
||||
};
|
||||
this.currentPlaybackFinish = finish;
|
||||
@@ -284,13 +285,15 @@ export class ApiTTSModuleBase extends TTSHandlerModule {
|
||||
'masterVolume',
|
||||
persistenceManager.getPreference('audio', 'master_volume', 1.0)
|
||||
);
|
||||
const masterEnabled = persistenceManager.getPreference('audio', 'masterVolumeEnabled', true) !== false;
|
||||
const ttsVolume = persistenceManager.getPreference(
|
||||
'audio',
|
||||
'ttsVolume',
|
||||
persistenceManager.getPreference('audio', 'tts_volume', 1.0)
|
||||
);
|
||||
const ttsEnabled = persistenceManager.getPreference('audio', 'ttsVolumeEnabled', true) !== false;
|
||||
|
||||
return Math.max(0, Math.min(1, masterVolume * ttsVolume));
|
||||
return Math.max(0, Math.min(1, (masterEnabled ? masterVolume : 0) * (ttsEnabled ? ttsVolume : 0)));
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -418,14 +421,14 @@ export class ApiTTSModuleBase extends TTSHandlerModule {
|
||||
* @param {string} text - Text to preload
|
||||
* @returns {Promise<Object>} - Preloaded speech data
|
||||
*/
|
||||
async preloadSpeech(text) {
|
||||
async preloadSpeech(text, options = {}) {
|
||||
if (!this.isReady) {
|
||||
return { success: false, reason: 'not_ready' };
|
||||
}
|
||||
|
||||
try {
|
||||
// Generate speech
|
||||
const result = await this.generateSpeechAudio(text);
|
||||
const result = await this.generateSpeechAudio(text, options);
|
||||
|
||||
if (!result.success) {
|
||||
return { success: false, reason: 'generation_failed' };
|
||||
|
||||
Reference in New Issue
Block a user