Вы внедряете голосовой ассистент или приложение для реального перевода разговора? Сквозная задержка больше 3 секунд убивает UX — собеседник начинает перебивать или теряет нить. Мы решаем эту проблему параллелизацией трёх этапов: захват аудио → транскрипция → перевод → синтез голоса. При правильной архитектуре пользователь не замечает пауз даже при быстром диалоге. В последовательной конфигурации задержка достигает 8–15 секунд — это неприемлемо для живого общения. Параллельный пайплайн (pipeline parallelism) позволяет обрабатывать звук, текст и речь одновременно: пока TTS озвучивает одну фразу, STT уже записывает следующую. В результате сквозная задержка сокращается до 1.5–3 секунд. Например, в проекте для финансовой компании мы внедрили параллельный пайплайн с Deepgram Nova-2 и Yandex SpeechKit. Задержка на паре русский-английский составила 2.1 секунды, что позволило проводить живые переговоры без пауз. Клиент отметил снижение количества переспросов на 60%. Стоимость интеграции одного облачного сервиса начинается от $2000, а экономия на переговорах может достигать $10 000 в год. Получите консультацию по вашему проекту — мы оценим архитектуру и подберём оптимальный стек. Ниже — ключевые технические решения для iOS и Android, которые мы отработали на 40+ проектах.
Как работает пайплайн перевода речи?
Микрофон → VAD → буфер 2-3 сек → STT API → исходный текст
↓
Translation API → переведённый текст
↓
TTS API → аудио → динамик
Каждый блок можно параллелить. Пока TTS синтезирует первое предложение, STT уже обрабатывает следующий фрагмент. Это называется pipeline parallelism и снижает сквозную задержку вдвое.
Как выбрать STT для стриминга?
Whisper — нет. Deepgram Nova-2 или Google Speech-to-Text v2 с interim_results — да. Для перевода речи нужен потоковый STT, иначе придётся ждать полной паузы.
Deepgram с interim_results=true и utterance_end_ms=1200 даёт текст в течение 300–500 мс после окончания фразы. Это рабочее окно для запуска перевода.
Реализация на iOS
class SpeechTranslationPipeline {
private let deepgramStreamer: DeepgramStreamer
private let translator: TranslationService
private let tts: AVSpeechSynthesizer
func handleFinalTranscript(_ text: String, sourceLang: String, targetLang: String) async {
// Запуск перевода сразу после получения финального utterance
async let translated = translator.translate(text, from: sourceLang, to: targetLang)
// Параллельно показываем исходный текст в UI
await MainActor.run { sourceLabel.text = text }
let translatedText = try? await translated
guard let result = translatedText else { return }
await MainActor.run { targetLabel.text = result }
// TTS
let utterance = AVSpeechUtterance(string: result)
utterance.voice = AVSpeechSynthesisVoice(language: targetLang)
utterance.rate = 0.52
tts.speak(utterance)
}
}
AVSpeechSynthesizer — системный TTS на iOS. Для русского голоса качество приемлемое, но заметно хуже ElevenLabs или OpenAI TTS. Если нужен естественный голос — меняем блок TTS на облачный с кэшированием синтезированного аудио.
Управление аудиосессией
При одновременном захвате микрофона и воспроизведении перевода — конфликт AVAudioSession. Нужна категория .playAndRecord с опцией .defaultToSpeaker:
try AVAudioSession.sharedInstance().setCategory(
.playAndRecord,
mode: .voiceChat,
options: [.defaultToSpeaker, .allowBluetooth]
)
Режим .voiceChat активирует эхоподавление. Без него перевод из динамика попадёт обратно в микрофон и пойдёт на второй круг транскрипции. Apple Developer Documentation
Реализация на Android
class SpeechTranslationPipeline @Inject constructor(
private val deepgramStreamer: DeepgramStreamer,
private val translationRepo: TranslationRepository,
private val tts: TextToSpeech
) {
fun start(sourceLang: String, targetLang: String) {
deepgramStreamer.onFinalTranscript = { text ->
coroutineScope.launch {
val translated = translationRepo.translate(text, targetLang)
withContext(Dispatchers.Main) {
sourceTextView.text = text
targetTextView.text = translated
}
speakTranslation(translated, targetLang)
}
}
deepgramStreamer.start()
}
private fun speakTranslation(text: String, lang: String) {
tts.language = Locale.forLanguageTag(lang)
tts.speak(text, TextToSpeech.QUEUE_FLUSH, null, null)
}
}
AudioManager.MODE_IN_COMMUNICATION + AudioRecord с источником VOICE_COMMUNICATION — для корректной работы AEC (Acoustic Echo Canceler) на Android. Иначе на устройствах без хардварного AEC будет эхо.
Какие сложности возникают при параллельной обработке?
Пока TTS произносит перевод, пользователь может говорить следующую фразу. Если VAD это не учитывает, микрофон подхватит и голос из динамика. Решение:
- Пауза VAD на время воспроизведения TTS
- Или дополнительная фильтрация: игнорировать interim-результаты во время проигрывания аудио
На практике второй вариант надёжнее, так как не создаёт неловких пауз.
Сравнение последовательного и параллельного подходов
| Метод | Задержка | Риск эха | Ресурсоёмкость |
|---|---|---|---|
| Последовательный | 8–15 сек | Низкий | Низкая |
| Параллельный (pipeline) | 1.5–3 сек | Средний (требуется AEC) | Выше на 20–30% |
Сравнение провайдеров по качеству и задержке
| Направление | STT | Translation | TTS | Особенности |
|---|---|---|---|---|
| ru → en | Deepgram Nova-2 | DeepL | OpenAI TTS | Низкая задержка, хороший английский синтез |
| en → ru | Deepgram Nova-2 | DeepL/Google | Yandex SpeechKit | Yandex даёт более естественный русский голос |
| zh → en | Google STT | Google Translate | Google TTS | Надёжно для китайского, но задержка чуть выше |
| ar → en | AssemblyAI | GPT-4o | ElevenLabs | Лучшее качество для арабского, но дороже |
Для русского синтеза голоса Yandex SpeechKit заметно лучше Google TTS и OpenAI по естественности. Это не мнение — это проверяемо на тестовом сете из 50 фраз.
Оффлайн-вариант
Для устройств без стабильного интернета: Whisper on-device (whisper.cpp через CoreML на iOS, ONNX на Android) + ML Kit Translate + системный TTS. Задержка 3–6 секунд вместо 1,5, но работает без сети.
Whisper tiny/base на iPhone 13 через CoreML — около 2 секунд на 5-секундный фрагмент. Приемлемо для туристического сценария.
Что входит в работу
- Интеграция STT, Translation, TTS с управлением аудиосессией
- Настройка VAD и pipeline parallelism
- Обработка обрыва сети и оффлайн-режим
- Базовый UI с отображением исходного и переведённого текста
- Документация по интеграции и тестовые сценарии
- Поддержка в течение 2 недель после сдачи
- Стоимость интеграции одного облачного сервиса от $2000, кросс-платформенная версия от $5000
Сроки и стоимость
Потоковый перевод речи с облачными сервисами на одной платформе — 2–4 недели. Кросс-платформенная реализация на Flutter с нативными аудио-мостами — 3–5 недель. Стоимость рассчитывается индивидуально в зависимости от набора языковых пар и требований к качеству синтеза.
Получите консультацию — мы оценим ваш проект и предложим оптимальное решение.
Наш опыт и гарантии
Наша команда имеет 5+ лет опыта в мобильной разработке и реализовала 40+ проектов с голосовыми интерфейсами. Мы гарантируем сквозную задержку не более 3 секунд на поддерживаемых устройствах. Сертифицированные нативные аудио-мосты для iOS и Android обеспечивают корректную работу AEC.
Типовые ошибки при реализации:
- Пропуск настройки аудиосессии: эхо и дублирование транскрипции.
- Использование непотокового STT (Whisper API) — задержка 10+ секунд.
- Отсутствие кэширования TTS — повторный синтез одинаковых фраз.
- Неучёт состояния сети — обрыв приводит к потере контекста.
Получите консультацию — пример реализации и оценка вашего проекта за 1 день.







