Реализация синтеза речи (Text-to-Speech) в мобильном приложении

TRUETECH занимается разработкой, поддержкой и обслуживанием мобильных приложений iOS, Android, PWA. Имеем большой опыт и экспертизу для публикации мобильных приложений в популярные маркеты Google Play, App Store, Amazon, AppGallery и другие.
Разработка и поддержка любых видов мобильных приложений:
Информационные и развлекательные мобильные приложения
Новостные приложения, игры, справочники, онлайн-каталоги, погодные, фитнес и здоровье, туристические, образовательные, социальные сети и мессенджеры, квиз, блоги и подкасты, форумы, агрегаторы
Мобильные приложения электронной коммерции
Интернет-магазины, B2B-приложения, маркетплейсы, онлайн-обменники, кэшбэк-сервисы, биржи, дропшиппинг-платформы, программы лояльности, доставка еды и товаров, платежные системы
Мобильные приложения для управления бизнес-процессами
CRM-системы, ERP-системы, управление проектами, инструменты для команды продаж, учет финансов, управление производством, логистика и доставка, управление персоналом, системы мониторинга данных
Мобильные приложения электронных услуг
Доски объявлений, онлайн-школы, онлайн-кинотеатры, платформы предоставления электронных услуг, платформы кешбека, видеохостинги, тематические порталы, платформы онлайн-бронирования и записи, платформы онлайн-торговли

Это лишь некоторые из типы мобильных приложений, с которыми мы работаем, и каждый из них может иметь свои специфические особенности и функциональность, а также быть адаптированным под конкретные потребности и цели клиента.

Предлагаемые услуги
Показано 1 из 1 услугВсе 1735 услуг
Реализация синтеза речи (Text-to-Speech) в мобильном приложении
Простая
~2-3 рабочих дня
Часто задаваемые вопросы
Наши компетенции:
Этапы разработки
Последние работы
  • image_mobile-applications_feedme_467_0.webp
    Разработка мобильного приложения для компании FEEDME
    756
  • image_mobile-applications_xoomer_471_0.webp
    Разработка мобильного приложения для компании XOOMER
    624
  • image_mobile-applications_rhl_428_0.webp
    Разработка мобильного приложения для компании RHL
    1054
  • image_mobile-applications_zippy_411_0.webp
    Разработка мобильного приложения для компании ZIPPY
    947
  • image_mobile-applications_affhome_429_0.webp
    Разработка мобильного приложения для компании Affhome
    862
  • image_mobile-applications_flavors_409_0.webp
    Разработка мобильного приложения для компании FLAVORS
    445

Реализация синтеза речи (Text-to-Speech) в мобильном приложении

Text-to-Speech — одна из немногих мобильных AI-функций, где нативные API обеспечивают приемлемое качество из коробки без сторонних зависимостей. iOS AVSpeechSynthesizer и Android TextToSpeech работают on-device, поддерживают русский язык и не требуют интернета. Основная работа — правильная интеграция, управление очередью и выбор голоса.

AVSpeechSynthesizer на iOS

Базовый случай — три строки кода. Реальный продакшн сложнее.

let synthesizer = AVSpeechSynthesizer()
let utterance = AVSpeechUtterance(string: text)
utterance.voice = AVSpeechSynthesisVoice(language: "ru-RU")
utterance.rate = 0.5 // 0.0–1.0, default = 0.5
synthesizer.speak(utterance)

Голоса на iOS делятся на «compact» (встроенные, ~50 MB) и «enhanced» (качественнее, скачиваются ~300 MB). Enhanced-голоса используют нейросетевой синтез. Если устройство их не скачало — AVSpeechSynthesisVoice(identifier: "com.apple.voice.enhanced.ru-RU.Milena") вернёт nil. Нужна проверка и fallback на compact.

let enhanced = AVSpeechSynthesisVoice(identifier: "com.apple.voice.enhanced.ru-RU.Milena")
utterance.voice = enhanced ?? AVSpeechSynthesisVoice(language: "ru-RU")

Управление AVAudioSession — обязательно. TTS должен работать даже если приложение переключило сессию для записи микрофона или воспроизведения музыки. Категория .playback с mixWithOthers или .duckOthers в зависимости от требований.

Android TextToSpeech: инициализация и очередь

TextToSpeech требует асинхронной инициализации — распространённая ошибка: вызвать speak() до того, как onInit(status) вернул SUCCESS.

val tts = TextToSpeech(context) { status ->
    if (status == TextToSpeech.SUCCESS) {
        tts.language = Locale("ru", "RU")
        // только теперь можно вызывать speak()
    }
}

QUEUE_FLUSH — обрывает текущее высказывание и начинает новое. QUEUE_ADD — добавляет в очередь. Для последовательных уведомлений (например, озвучка шагов навигации) — QUEUE_ADD. Для ответов ассистента — QUEUE_FLUSH, чтобы не накапливалась очередь при быстром вводе.

UtteranceProgressListener — для отслеживания начала и конца высказывания:

tts.setOnUtteranceProgressListener(object : UtteranceProgressListener() {
    override fun onStart(utteranceId: String) { /* показать индикатор */ }
    override fun onDone(utteranceId: String) { /* скрыть индикатор */ }
    override fun onError(utteranceId: String) { /* обработать ошибку */ }
})

Каждому вызову speak() нужно передавать уникальный utteranceId — иначе callbacks не вызовутся корректно.

Управление скоростью и паузами

SSML (Speech Synthesis Markup Language) поддерживается iOS с версии 14.0:

let ssml = "<speak><prosody rate='slow'>Внимание</prosody>, <break time='500ms'/>следующая остановка.</speak>"
let utterance = AVSpeechUtterance(ssmlRepresentation: ssml)

На Android SSML поддержка зависит от движка (Google TTS поддерживает, Samsung TTS — частично). Для критичных случаев лучше разбить текст на несколько speak() вызовов с паузами через playSilentUtterance.

Регулировка скорости для доступности (accessibility): предоставьте пользователю контроль rate в настройках приложения. Пожилые пользователи часто предпочитают 0.35–0.4 вместо дефолтных 0.5.

Сроки

Базовая интеграция TTS с управлением очередью и обработкой голосов — 2–3 рабочих дня. Стоимость рассчитывается индивидуально.