Разработка системы Speech-to-Speech (голосовой перевод в реальном времени)
Speech-to-Speech (STS) переводит речь на одном языке в речь на другом в реальном времени, сохраняя характеристики голоса говорящего. Это нетривиальная инженерная задача: нужно минимизировать сквозную задержку всего pipeline при сохранении качества.
Архитектура STS-системы
STT → Translation → TTS
↓ ↓ ↓
~200мс ~100мс ~300мс
Total: ~600–1000мс
Компоненты:
- STT — транскрибация источника (Whisper streaming / Deepgram)
- MT — машинный перевод (GPT-4o, DeepL API, NLLB)
- Voice Conversion — перенос характеристик голоса на синтезированную речь
- TTS — синтез переведённого текста
Реализация async pipeline
import asyncio
from openai import AsyncOpenAI
client = AsyncOpenAI()
async def speech_to_speech_pipeline(
audio_chunk: bytes,
source_lang: str,
target_lang: str,
speaker_voice: str = "alloy"
) -> bytes:
# Этап 1: STT
transcript_response = await client.audio.transcriptions.create(
model="whisper-1",
file=("audio.wav", audio_chunk, "audio/wav"),
language=source_lang
)
transcript = transcript_response.text
if not transcript.strip():
return b""
# Этап 2: Перевод
translation_response = await client.chat.completions.create(
model="gpt-4o-mini",
messages=[
{"role": "system", "content": f"Переведи на {target_lang}. Только перевод, без пояснений."},
{"role": "user", "content": transcript}
],
temperature=0.1
)
translated = translation_response.choices[0].message.content
# Этап 3: TTS
tts_response = await client.audio.speech.create(
model="tts-1",
voice=speaker_voice,
input=translated,
response_format="pcm"
)
return tts_response.content
Оптимизация задержки
Sentence-level streaming: не ждём конца всей фразы, переводим и синтезируем предложениями:
async def streaming_sts(text_stream):
buffer = ""
async for word in text_stream:
buffer += word
# Переводим при обнаружении конца предложения
if buffer.endswith((".", "!", "?")):
yield await translate_and_synthesize(buffer)
buffer = ""
Сохранение голоса говорящего
Для сохранения характеристик голоса при переводе используем voice conversion:
# Извлекаем speaker embedding из исходного аудио
# Синтезируем перевод нейтральным голосом
# Применяем voice conversion с embedding оригинала
Сроки реализации
- Базовый STS без сохранения голоса: 1 неделя
- С voice conversion и streaming: 3–4 недели
- Production-система с масштабированием: 6–8 недель







