Розробка системи Speech-to-Speech (голосовий переклад у реальному часі) Speech-to-Speech (STS) перекладає мову однією мовою в мову іншою в реальному часі, зберігаючи характеристики голосу мовця. Це нетривіальне інженерне завдання: потрібно мінімізувати наскрізну затримку всього pipeline за збереження якості. ### Архітектура STS-системи```
STT → Translation → TTS
↓ ↓ ↓
~200мс ~100мс ~300мс
Total: ~600–1000мс
Компоненти: 1. **STT** — транскрибація джерела (Whisper streaming / Deepgram) 2. **MT** — машинний переклад (GPT-4o, DeepL API, NLLB) 3. **Voice Conversion** — перенесення характеристик голосу на синтезовану мову 4. **TTS** — синтез перекладеного тексту ##python
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**: не чекаємо кінця всієї фрази, перекладаємо та синтезуємо пропозиціями:python
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:python
Извлекаем speaker embedding из исходного аудио
Синтезируем перевод нейтральным голосом
Применяем voice conversion с embedding оригинала







