Реалізація потокового синтезу мовлення в реальному часі (Streaming TTS)

Проектуємо та впроваджуємо системи штучного інтелекту: від прототипу до production-ready рішення. Наша команда поєднує експертизу в машинному навчанні, дата-інжинірингу та MLOps, щоб AI працював не в лабораторії, а в реальному бізнесі.
Показано 1 з 1Усі 1566 послуг
Реалізація потокового синтезу мовлення в реальному часі (Streaming TTS)
Середній
від 1 дня до 3 днів
Часті запитання

Напрямки AI-розробки

Етапи розробки AI-рішення

Останні роботи

  • image_website-b2b-advance_0.webp
    Розробка сайту компанії B2B ADVANCE
    1284
  • image_web-applications_feedme_466_0.webp
    Розробка веб-додатків для компанії FEEDME
    1196
  • image_websites_belfingroup_462_0.webp
    Розробка веб-сайту для компанії БЕЛФІНГРУП
    901
  • image_ecommerce_furnoro_435_0.webp
    Розробка інтернет магазину для компанії FURNORO
    1119
  • image_logo-advance_0.webp
    Розробка логотипу компанії B2B Advance
    586
  • image_crm_enviok_479_0.webp
    Розробка веб-додатків для компанії Enviok
    853

Реалізація потокового синтезу мови в реальному часі (Streaming TTS) Streaming TTS починає відтворювати аудіо до завершення генерації всього тексту - time-to-first-audio падає з 1-3 с до 100-400 мс. Критично для голосових роботів, де користувач чує відповідь негайно. ### Принцип streaming TTS Текст розбивається на пропозиції → кожна пропозиція синтезується окремо → чанки віддаються клієнту в міру готовності. Поки клієнт слухає перший чанк, сервер готує другий. ### Реалізація з OpenAI TTS Streaming```python

from openai import AsyncOpenAI import asyncio

client = AsyncOpenAI()

async def stream_tts(text: str): """Потоковая генерация TTS через OpenAI""" async with client.audio.speech.with_streaming_response.create( model="tts-1", voice="alloy", input=text, response_format="pcm", # raw PCM для минимальной задержки ) as response: async for chunk in response.iter_bytes(chunk_size=4096): yield chunk ### WebSocket сервер для real-time TTSpython from fastapi import FastAPI, WebSocket from TTS.api import TTS import numpy as np import asyncio

app = FastAPI() tts = TTS("tts_models/multilingual/multi-dataset/xtts_v2").to("cuda")

def split_into_sentences(text: str) -> list[str]: import re sentences = re.split(r'(?<=[.!?])\s+', text) return [s.strip() for s in sentences if s.strip()]

@app.websocket("/tts-stream") async def tts_websocket(websocket: WebSocket): await websocket.accept() try: while True: text = await websocket.receive_text() sentences = split_into_sentences(text)

        for sentence in sentences:
            wav = await asyncio.get_event_loop().run_in_executor(
                None,
                lambda s=sentence: tts.tts(
                    text=s,
                    language="ru",
                    speaker_wav="default.wav"
                )
            )
            # Конвертируем в bytes и отправляем
            audio_bytes = (np.array(wav) * 32767).astype(np.int16).tobytes()
            await websocket.send_bytes(audio_bytes)

        # Сигнал конца синтеза
        await websocket.send_json({"type": "done"})
except Exception:
    await websocket.close()

### Оптимізація затримки **Chunk-based синтез**: розбиваємо текст на фрази по 10–20 слів, синтезуємо та стримаємо паралельно. **Предгенерація** для шаблонних фраз: &quot;Зачекайте, будь ласка&quot;, &quot;Один момент&quot; - кешуються та віддаються без синтезу. **ElevenLabs Streaming API**:python from elevenlabs.client import ElevenLabs

client = ElevenLabs() audio_stream = client.text_to_speech.convert_as_stream( voice_id="voice_id", text="Текст для потокового синтеза", model_id="eleven_turbo_v2_5", # 75 мс задержка )