Разработка системы Text-to-Speech (синтез речи)
TTS-система преобразует текст в натуральную речь. Современные нейронные TTS генерируют аудио, практически неотличимое от человеческого, при задержке 200–500 мс. Архитектура и выбор движка зависят от требований к качеству, латентности и объёму.
Архитектурные решения
Облачный TTS — быстрый старт, предсказуемое качество:
- OpenAI TTS: лучшее качество на английском, хорошее на русском
- ElevenLabs: самое натуральное звучание, клонирование голоса
- Yandex SpeechKit: оптимален для русскоязычных продуктов
Self-hosted TTS — контроль данных, предсказуемая стоимость:
- Coqui XTTS v2: мультиязычный, клонирование из 6 секунд
- Piper: легковесный, CPU-capable, хорошее качество на русском
- Silero TTS: российский open-source, отличный русский
Базовая система с FastAPI
from fastapi import FastAPI
from fastapi.responses import StreamingResponse
import io
import soundfile as sf
from TTS.api import TTS
app = FastAPI()
tts = TTS("tts_models/multilingual/multi-dataset/xtts_v2")
@app.post("/synthesize")
async def synthesize(text: str, language: str = "ru"):
wav = tts.tts(
text=text,
language=language,
speaker_wav="reference_voice.wav" # для клонирования
)
buffer = io.BytesIO()
sf.write(buffer, wav, samplerate=24000, format='WAV')
buffer.seek(0)
return StreamingResponse(buffer, media_type="audio/wav")
Выбор движка по сценарию
| Сценарий | Рекомендация | Причина |
|---|---|---|
| Голосовой бот | Yandex SpeechKit / Azure | Низкая латентность |
| Аудиокниги | Coqui XTTS / ElevenLabs | Максимальное качество |
| IVR меню | Piper / Silero | Простые фразы, низкие расходы |
| Брендированный голос | Fine-tuned XTTS | Уникальность |
Preprocessing текста
Перед подачей в TTS обязателен нормализатор: расшифровка аббревиатур, чисел, дат:
def normalize_for_tts(text: str, language: str = "ru") -> str:
# числа: "15 000 руб." → "пятнадцать тысяч рублей"
# даты: "01.03.2024" → "первое марта две тысячи двадцать четвёртого года"
# аббревиатуры: "ООО" → "общество с ограниченной ответственностью"
...
Сроки
- Базовая интеграция облачного TTS: 2–3 дня
- Self-hosted с очередью и кэшированием: 1 неделя
- Полная система с кастомным голосом: 3–4 недели







