| 88 | 88 | return previewStrings[lang] ?? fallbackPreview; |
| 89 | 89 | } |
| 90 | 90 | |
| 91 | +/** |
| 92 | + * Registers a TTS provider. |
| 93 | + * @param {string} name Name of the TTS provider to register. |
| 94 | + * @param {function} provider Provider class. |
| 95 | + */ |
| 96 | +export function registerTtsProvider(name, provider) { |
| 97 | + if (!name || typeof name !== 'string') { |
| 98 | + throw new Error(`TTS provider name ${name} is not a valid string.`); |
| 99 | + } |
| 100 | + if (!provider || typeof provider !== 'function') { |
| 101 | + throw new Error(`TTS provider ${name} is not a valid provider class.`); |
| 102 | + } |
| 103 | + if (ttsProviders[name]) { |
| 104 | + throw new Error(`TTS provider ${name} is already registered.`); |
| 105 | + } |
| 106 | + ttsProviders[name] = provider; |
| 107 | + console.info(`Registered TTS provider: ${name}`); |
| 108 | + $('#tts_provider').append($('<option />').val(name).text(name)); |
| 109 | + |
| 110 | + // Load if it was previously selected |
| 111 | + if (extension_settings.tts.currentProvider === name) { |
| 112 | + loadTtsProvider(name); |
| 113 | + } |
| 114 | +} |
| 115 | + |
| 91 | 116 | const ttsProviders = { |
| 92 | 117 | AllTalk: AllTalkTtsProvider, |
| 93 | 118 | Azure: AzureTtsProvider, |