feat(radio): replace robot TTS with Piper Neural voices & add instant voice preview
- Integrate local Piper ONNX neural TTS engine (Dmitri, Irina, Denis, Ruslan) - Add GET /api/radio/preview-voice endpoint with cached pre-rendered samples - Add '▶ Прослушать голос' button in Web UI for 1-click preview before generating - Add automated filter to strip LLM refusals and fall back to clean radio phrasing
This commit is contained in:
1 parent
e5afeb06cc
commit
4ed8e0c71a
7 files changed
+183
-24
No files matched your search
@@ -147,7 +147,7 @@
|
||||
<section class="card radio-card">
|
||||
<div class="radio-header">
|
||||
<div class="radio-header-title">
|
||||
<h2>🎙️ AI Радио <span class="badge badge-radio">AI DJ Эфир</span> <span class="badge badge-llm">🤖 Qwen 2.5 + Edge-TTS</span></h2>
|
||||
<h2>🎙️ AI Радио <span class="badge badge-radio">AI DJ Эфир</span> <span class="badge badge-llm">🤖 Qwen 2.5 + Piper Neural</span></h2>
|
||||
<p class="radio-subtitle">
|
||||
Персональный радиоэфир: AI-ведущий объявляет погоду, время суток и делает динамичные подводки перед песнями в отдельном плейлисте «AI Радио».
|
||||
</p>
|
||||
@@ -159,12 +159,18 @@
|
||||
|
||||
<!-- Radio Host Voice & Context Row -->
|
||||
<div class="radio-settings-row">
|
||||
<div class="radio-voice-group">
|
||||
<div class="radio-voice-group" style="flex-wrap: wrap;">
|
||||
<label for="radioVoiceSelect" class="radio-voice-label">Голос ведущего:</label>
|
||||
<select id="radioVoiceSelect" class="radio-voice-select">
|
||||
<option value="ru-RU-DmitryNeural" selected>🎙️ Дмитрий (Харизматичный)</option>
|
||||
<option value="ru-RU-SvetlanaNeural">🎙️ Светлана (Мягкий)</option>
|
||||
<option value="ru_RU-dmitri-medium" selected>🎙️ Дмитрий (Энергичный DJ)</option>
|
||||
<option value="ru_RU-irina-medium">🎙️ Ирина (Естественный женский)</option>
|
||||
<option value="ru_RU-denis-medium">🎙️ Денис (Глубокий баритон)</option>
|
||||
<option value="ru_RU-ruslan-medium">🎙️ Руслан (Спокойный ведущий)</option>
|
||||
<option value="gtts_ru">🎙️ Google (Стандартный робот)</option>
|
||||
</select>
|
||||
<button id="radioVoicePreviewBtn" type="button" class="btn-sm btn-play-preview" title="Послушать сэмпл выбранного голоса">
|
||||
▶ Прослушать голос
|
||||
</button>
|
||||
</div>
|
||||
<div class="radio-status-badge-wrap">
|
||||
<span id="radioStatusLabel" class="badge badge-context">Эфир готов к запуску</span>
|
||||
|
||||
Reference in new issue
Block a user