
Кейс: телесуфлёр PuxVoice для Android со слежением за голосом
Любой, кто записывал видео по тексту, знает эту беду: взгляд бегает между камерой и бумажкой, а готовые приложения-суфлёры крутят текст с постоянной скоростью. Запнулся, вернулся к фразе, взял паузу, чтобы подумать, а текст уехал. Приходится перезаписывать дубль. Нам нужен был суфлёр, который подстраивается под человека, а не наоборот. Так появился PuxVoice, телесуфлёр для Android, который слушает диктора и двигает текст ровно за тем, что произнесено.
Первая версия вышла в RuStore в октябре 2026 года. В этом кейсе рассказываем, что умеет приложение, какие решения стоят за ним и почему оно работает без интернета.
Задача
Суфлёр нужен в двух ситуациях. Первая: телефон лежит под стеклом настоящего телесуфлёра, текст должен отражаться зеркально, а корпус устройства закрывает часть экрана. Вторая: телефон стоит рядом с камерой или в руке, и текст читается прямо с экрана. Обе ситуации надо было закрыть одним приложением.
Главное требование мы сформулировали так: текст идёт за голосом. Пока диктор молчит, текст стоит. Если диктор отошёл от сценария и говорит своими словами, текст ждёт. Если перечитал фразу с начала, текст возвращается. И всё это без интернета, потому что съёмка часто идёт там, где сети нет, а отправлять речь на чужие серверы не хотелось.
Что получилось
- Слежение за голосом. Речь распознаётся прямо на телефоне. Языки: русский и английский, язык выбирается по тексту сценария. Оговорки и импровизация не сбивают прокрутку.
- Для суфлёра со стеклом. Зеркало по горизонтали и по вертикали, кадрирование рабочей области рамкой прямо поверх текста, профили оборудования: зеркало, область и шрифт сохраняются под именем конкретного суфлёра.
- Сценарии из документов. Текст создаётся из файлов txt, docx, doc, odt, rtf, pdf и html. Файл можно открыть из другого приложения через «Открыть с помощью» или «Поделиться».
- Чтение без рук. Кнопки громкости запускают, останавливают и отматывают текст, перед стартом идёт обратный отсчёт, экран не гаснет.
- Ручной режим. Прокрутка с постоянной скоростью на случай шума или языка, которого приложение не знает.
- Конфиденциальность. У приложения нет разрешения на доступ в интернет. Звук, сценарии и настройки не покидают телефон. Единственное разрешение: микрофон.
Как устроено слежение за голосом
Это самая интересная часть проекта. Слежение состоит из двух независимых частей.
Первая часть: движок распознавания. Мы сравнили системное распознавание Android и свободный движок Vosk. Системное на части устройств отсутствует, а там, где есть, рассчитано на короткие запросы и само останавливается на паузах. Vosk работает на устройстве, выдаёт слова по мере произнесения и не требует сети. Голосовые модели для русского и английского входят в приложение, поэтому на телефоне нужно около 300 МБ свободного места.
Вторая часть: алгоритм сопоставления. Он берёт шесть последних распознанных слов и ищет их в окне сценария от 25 слов назад до 40 вперёд. Слова сравниваются нечётко, чтобы падежные окончания и мелкие ошибки распознавания не останавливали текст. Продвижение на одно слово принимается сразу, а скачок вперёд или возврат назад только при трёх совпавших словах подряд. Так суфлёр не «уезжает» от случайного совпадения и не дёргается.
Алгоритм описан отдельной спецификацией и не зависит от Android. Его проверяют тесты, которые воспроизводят настоящие потоки распознавания, записанные с телефона. Это же описание ляжет в основу версии для iPhone.
Импорт документов без тяжёлых библиотек
Сценарии приходят в самых разных форматах, и нам хотелось, чтобы приложение открывало их без «офисных» библиотек, которые на телефоне весят десятки мегабайт. Поэтому docx и odt читаются как zip-архивы с XML, rtf и старый doc разбираются собственным кодом, а для pdf взята компактная библиотека PdfBox. Формат определяется по содержимому файла, а не по расширению. Для текстовых файлов кодировка подбирается из UTF-8, UTF-16, Windows-1251, KOI8-R и CP866, так что сценарий из старого архива откроется без «кракозябр».
Импорт проверяется на документах, сохранённых Word из одного и того же текста во всех поддерживаемых форматах: на выходе текст должен совпасть.
На чём сделано
Приложение написано на Kotlin с интерфейсом на Jetpack Compose, работает на Android 8.0 и новее. Экран суфлёра построен как функция от настроек: зеркало, рабочая область, шрифт и инверсия это преобразования одного и того же текста, а не отдельные режимы. В версии 1.0.0 46 модульных тестов и инструментальные проверки на устройстве.
Распространение только через магазины: сначала RuStore, затем App Store, позже Google Play. Собственный механизм обновления приложению не нужен.
Что дальше
Версия для iPhone в работе: она пишется на Swift и SwiftUI по тем же спецификациям, первая сборка уже собирается в облаке и загружается в TestFlight. Карточка приложения со скриншотами и условиями использования живёт на нашей витрине приложений, а установить его можно из магазина RuStore: ищите PuxVoice в каталоге.
Нужно своё мобильное приложение?
PuxVoice показывает, как мы подходим к мобильной разработке: нативный стек на каждой платформе, работа без интернета там, где это важно для пользователя, спецификации до кода и тесты на настоящих данных. Если у вас есть задача под Android или iOS, напишите нам: обсудим, прикинем объём и покажем, как это может выглядеть.
Есть вопросы?
Можете обращаться по телефону +7 (911) 5-0000-45 по будням с 09:00 до 20:00.



















