feat(tts): multi-voice switcher for EN & RU, Irina default voice, punctuation pause normalization and speed calibration

This commit is contained in:
Antigravity committed 2026-10-07 12:07:01 +03:00
1 parent 7893b353aa
commit 31e105b2c2
11 files changed
+486 -61

No files matched your search

+102
View File
@@ -512,6 +512,11 @@
<option value="business">💼 Работа & Бизнес</option>
<option value="cards">📚 Мои слова из словаря</option>
</select>
<select id="listening-voice-select" class="select-styled select-xs" title="Голос английского диктора">
<option value="en_US-lessac">👩 Paula (US)</option>
<option value="en_US-ryan">👨 Ryan (US)</option>
<option value="en_GB-alan">👨 Alan (UK)</option>
</select>
<select id="listening-speed-select" class="select-styled select-xs" title="Скорость речи">
<option value="1.0">⚡ 1.0x</option>
<option value="0.75">🐢 0.75x</option>
@@ -1184,6 +1189,12 @@
<span class="drawer-item-label">Переключить тему оформления</span>
</button>
</li>
<li>
<button class="drawer-nav-item" id="drawer-nav-voice-settings">
<span class="drawer-item-icon">🎙️</span>
<span class="drawer-item-label">Голоса озвучки (TTS)</span>
</button>
</li>
<li>
<button class="drawer-nav-item text-danger" id="drawer-nav-logout">
<span class="drawer-item-icon">🚪</span>
@@ -1392,6 +1403,97 @@
</div>
</div>
<!-- Voice Settings Modal -->
<div id="voice-settings-modal" class="modal-backdrop hidden">
<div class="modal-window voice-modal-window">
<div class="modal-header">
<h3>🎙️ Настройка дикторов (TTS)</h3>
<button id="voice-settings-close-btn" class="icon-btn" title="Закрыть">✕</button>
</div>
<div class="modal-body voice-modal-body">
<p class="modal-desc-sub">Выберите голос для озвучки английских и русских текстов. Нейросеть работает полностью автономно.</p>
<div class="voice-config-group">
<label class="voice-group-title">🇷🇺 Русский диктор (перевод и контекст):</label>
<div class="voice-options-grid">
<label class="voice-card-label">
<input type="radio" name="tts_voice_ru" value="ru_RU-irina" checked>
<div class="voice-card">
<div class="voice-card-head">
<strong>👩 Ирина</strong>
<span class="badge-recommended">Рекомендуется</span>
</div>
<small class="voice-card-desc">Плавный студийный голос, естественные паузы на тире и запятых, спокойный темп.</small>
<button type="button" class="btn btn-xs btn-outline voice-test-btn" data-lang="ru" data-voice="ru_RU-irina" data-text="Это важный проект — он требует внимания, концентрации и времени.">▶ Тест звука</button>
</div>
</label>
<label class="voice-card-label">
<input type="radio" name="tts_voice_ru" value="ru_RU-denis">
<div class="voice-card">
<div class="voice-card-head">
<strong>👨 Денис</strong>
</div>
<small class="voice-card-desc">Спокойный мужской тембр, ровная дикция.</small>
<button type="button" class="btn btn-xs btn-outline voice-test-btn" data-lang="ru" data-voice="ru_RU-denis" data-text="Это важный проект — он требует внимания, концентрации и времени.">▶ Тест звука</button>
</div>
</label>
<label class="voice-card-label">
<input type="radio" name="tts_voice_ru" value="ru_RU-dmitri">
<div class="voice-card">
<div class="voice-card-head">
<strong>👨 Дмитрий</strong>
</div>
<small class="voice-card-desc">Энергичный мужской голос с оптимизированным размеренным темпом.</small>
<button type="button" class="btn btn-xs btn-outline voice-test-btn" data-lang="ru" data-voice="ru_RU-dmitri" data-text="Это важный проект — он требует внимания, концентрации и времени.">▶ Тест звука</button>
</div>
</label>
</div>
</div>
<div class="voice-config-group" style="margin-top: 20px;">
<label class="voice-group-title">🇬🇧 / 🇺🇸 Английский диктор (слова, аудирование, книги):</label>
<div class="voice-options-grid">
<label class="voice-card-label">
<input type="radio" name="tts_voice_en" value="en_US-lessac" checked>
<div class="voice-card">
<div class="voice-card-head">
<strong>👩 Paula (US)</strong>
<span class="badge-recommended">По умолчанию</span>
</div>
<small class="voice-card-desc">Американский английский. Четкий академический женский голос.</small>
<button type="button" class="btn btn-xs btn-outline voice-test-btn" data-lang="en" data-voice="en_US-lessac" data-text="The quick brown fox jumps over the lazy dog.">▶ Test Voice</button>
</div>
</label>
<label class="voice-card-label">
<input type="radio" name="tts_voice_en" value="en_US-ryan">
<div class="voice-card">
<div class="voice-card-head">
<strong>👨 Ryan (US)</strong>
</div>
<small class="voice-card-desc">Американский английский. Естественный, выразительный мужской голос.</small>
<button type="button" class="btn btn-xs btn-outline voice-test-btn" data-lang="en" data-voice="en_US-ryan" data-text="The quick brown fox jumps over the lazy dog.">▶ Test Voice</button>
</div>
</label>
<label class="voice-card-label">
<input type="radio" name="tts_voice_en" value="en_GB-alan">
<div class="voice-card">
<div class="voice-card-head">
<strong>👨 Alan (UK)</strong>
<span class="badge-uk">British</span>
</div>
<small class="voice-card-desc">Британский английский (Received Pronunciation), классический мужской тембр.</small>
<button type="button" class="btn btn-xs btn-outline voice-test-btn" data-lang="en" data-voice="en_GB-alan" data-text="Good afternoon! The train to Oxford departs from platform four.">▶ Test Voice</button>
</div>
</label>
</div>
</div>
</div>
<div class="modal-footer">
<button type="button" id="voice-settings-save-btn" class="btn btn-primary">Сохранить выбор</button>
</div>
</div>
</div>
<!-- Wikipedia Settings Modal -->
<div id="wiki-settings-modal" class="modal-backdrop hidden">
<div class="modal-window wiki-modal-window">