feat(tts): integrate autonomous Piper neural TTS with zero-latency pre-warming for words and context
This commit is contained in:
+13
-4
@@ -5,7 +5,7 @@
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no, viewport-fit=cover">
|
||||
<title>Notes — Персональный тренажер и словарь английского языка</title>
|
||||
<meta name="description" content="Защищённый персональный тренажёр и словарь английского языка с интервальными повторениями SRS SM-2, контекстным поиском и озвучкой">
|
||||
<link rel="stylesheet" href="/static/css/style.css?v=5.5">
|
||||
<link rel="stylesheet" href="/static/css/style.css?v=6.4">
|
||||
|
||||
<!-- PWA meta and icons -->
|
||||
<link rel="manifest" href="/manifest.json">
|
||||
@@ -319,7 +319,10 @@
|
||||
<p id="fc-back-def" class="detail-text"></p>
|
||||
</div>
|
||||
<div class="fc-back-detail-box" id="fc-back-context-box">
|
||||
<span class="detail-label">Контекст:</span>
|
||||
<div class="fc-detail-header-row" style="display: flex; align-items: center; justify-content: space-between;">
|
||||
<span class="detail-label">Контекст:</span>
|
||||
<button type="button" id="fc-back-context-audio-btn" class="icon-btn audio-xs-btn" title="Озвучить предложение контекста">🔊</button>
|
||||
</div>
|
||||
<p id="fc-back-context" class="detail-text"></p>
|
||||
</div>
|
||||
<div class="fc-back-detail-box" id="fc-back-notes-box">
|
||||
@@ -1671,13 +1674,19 @@
|
||||
<button type="button" id="popup-translate-sentence-btn" class="btn btn-xs btn-outline popup-sentence-btn" title="Перевести всё предложение через локальный ИИ">
|
||||
🌐 Перевести предложение
|
||||
</button>
|
||||
<button type="button" id="popup-audio-sentence-btn" class="btn btn-xs btn-outline popup-sentence-audio-btn" title="Озвучить всё предложение нейросетью">
|
||||
🔊 Озвучить
|
||||
</button>
|
||||
<span id="popup-ai-source-badge" class="popup-ai-source-badge hidden">⚡ Local AI</span>
|
||||
</div>
|
||||
<div id="popup-sentence-loading" class="popup-sentence-loading hidden">
|
||||
<span class="spinner-sm"></span> Локальный ИИ переводит...
|
||||
</div>
|
||||
<div id="popup-sentence-translation-wrap" class="popup-sentence-translation-wrap hidden">
|
||||
<div class="popup-sentence-ru" id="popup-sentence-ru"></div>
|
||||
<div class="popup-sentence-ru-row" style="display: flex; align-items: flex-start; justify-content: space-between; gap: 8px;">
|
||||
<div class="popup-sentence-ru" id="popup-sentence-ru"></div>
|
||||
<button type="button" id="popup-audio-ru-btn" class="icon-btn audio-xs-btn" style="flex-shrink: 0;" title="Озвучить русский перевод">🔊 RU</button>
|
||||
</div>
|
||||
<div id="popup-context-meaning-wrap" class="popup-context-meaning-wrap hidden">
|
||||
<span class="context-meaning-label">🎯 В контексте:</span>
|
||||
<strong id="popup-context-meaning-val" class="context-meaning-val"></strong>
|
||||
@@ -1697,7 +1706,7 @@
|
||||
<!-- Audio Element for native streaming -->
|
||||
<audio id="global-audio-player" preload="none"></audio>
|
||||
|
||||
<script type="module" src="/static/js/app.js?v=5.5"></script>
|
||||
<script type="module" src="/static/js/app.js?v=6.4"></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
|
||||
Reference in New Issue
Block a user