UNPKG

aiabm

Version:

AI Audiobook Maker - Convert PDFs and text files to audiobooks using OpenAI TTS or Thorsten-Voice (native German)

94 lines (81 loc) 3.17 kB
/** * Unified preview texts for all TTS providers * Provides consistent voice comparison across different providers */ const PREVIEW_TEXTS = { // German preview texts german: { short: "Das ist eine Vorschau der ausgewählten Stimme für deutsche Texte.", long: "Willkommen beim AI Audiobook Maker! Diese deutsche Stimme wandelt Ihren Text in natürlich klingende Sprache um. Sie können die Geschwindigkeit und Qualität nach Ihren Wünschen anpassen." }, // English preview texts english: { short: "This is a preview of the selected voice for English texts.", long: "Welcome to AI Audiobook Maker! This English voice converts your text into natural-sounding speech. You can adjust the speed and quality to match your preferences." }, // French preview texts french: { short: "Ceci est un aperçu de la voix sélectionnée pour les textes français.", long: "Bienvenue dans AI Audiobook Maker! Cette voix française convertit votre texte en parole naturelle. Vous pouvez ajuster la vitesse et la qualité selon vos préférences." }, // Default fallback default: { short: "This is a preview of the selected voice.", long: "Welcome to AI Audiobook Maker! This voice will convert your text into natural-sounding speech with customizable speed and quality settings." } }; /** * Get preview text based on voice language and length preference * @param {string} language - Language code (de, en, fr) * @param {string} length - 'short' or 'long' * @returns {string} Preview text */ function getPreviewText(language = 'en', length = 'short') { // Map language codes const langMap = { 'de': 'german', 'en': 'english', 'fr': 'french', 'german': 'german', 'english': 'english', 'french': 'french' }; const mappedLang = langMap[language?.toLowerCase()] || 'default'; const texts = PREVIEW_TEXTS[mappedLang] || PREVIEW_TEXTS.default; return texts[length] || texts.short; } /** * Detect language from voice name or value * @param {string|object} voice - Voice identifier or voice object * @returns {string} Language code */ function detectVoiceLanguage(voice) { const voiceStr = (typeof voice === 'string' ? voice : (voice?.value || voice?.name || '')).toLowerCase(); // German indicators if (voiceStr.includes('de-') || voiceStr.includes('german') || voiceStr.includes('deutsch') || voiceStr.includes('thorsten')) { return 'de'; } // French indicators if (voiceStr.includes('fr-') || voiceStr.includes('french') || voiceStr.includes('français')) { return 'fr'; } // Default to English return 'en'; } /** * Generate cache-friendly filename for preview * @param {string} provider - TTS provider name * @param {string} voice - Voice identifier * @param {string} language - Language code * @returns {string} Cache filename */ function getPreviewCacheFilename(provider, voice, language) { const sanitizedVoice = voice.replace(/[^a-zA-Z0-9]/g, '_'); return `preview_${provider}_${sanitizedVoice}_${language}.wav`; } module.exports = { PREVIEW_TEXTS, getPreviewText, detectVoiceLanguage, getPreviewCacheFilename };