PuxVoice
Телесуфлёр со слежением за голосом. Речь распознаётся на телефоне, без интернета — на русском и английском.
Что умеет
- Слежение за голосом. Текст прокручивается за тем, что произнесено. Пока диктор молчит или отходит от текста, текст стоит; если фраза перечитана с начала — возвращается.
- Распознавание на телефоне. Речь распознаётся на устройстве, без интернета. Языки — русский и английский, язык выбирается по тексту сценария.
- Зеркало. Отражение по горизонтали и по вертикали — для телесуфлёров со стеклом.
- Кадрирование рабочей области. Рамка поверх текста: стороны тянутся пальцем, текст перестраивается сразу. Нужна, когда корпус суфлёра закрывает часть экрана.
- Профили оборудования. Зеркало, рабочая область и размер шрифта сохраняются под именем конкретного суфлёра.
- Ручной режим. Прокрутка с постоянной скоростью в строках в минуту — на случай шума или чужого языка.
- Импорт документов. Сценарий создаётся из файла txt, docx, doc, odt, rtf, pdf или html; файл можно открыть из другого приложения через «Открыть с помощью» и «Поделиться».
- Чтение без рук. Кнопки громкости запускают, останавливают и отматывают текст; перед стартом идёт обратный отсчёт.
Дополнительно: инверсия цветов, подсветка зоны чтения, межстрочный интервал, выравнивание, верхний регистр, блокировка ориентации, оценка длительности чтения.
Как устроен
Android-приложение на Kotlin и Jetpack Compose, одна активити. Экран суфлёра — функция от набора настроек: зеркало, область, шрифт и инверсия — это преобразования отрисовки одного и того же текста, а не отдельные режимы. Текст ведёт один из двух источников позиции: постоянная скорость или голос.
Слежение за голосом состоит из двух независимых частей. Движок распознавания (Vosk, модели работают на телефоне) выдаёт поток гипотез — слова текущей фразы. Алгоритм сопоставления берёт шесть последних слов и ищет их в окне сценария от 25 слов назад до 40 вперёд методом локального выравнивания; слова сравниваются нечётко, чтобы падежные окончания и мелкие ошибки распознавания не останавливали текст. Продвижение на одно слово принимается сразу, скачок вперёд и возврат назад — только при трёх совпавших словах. Алгоритм описан спецификацией и не зависит от Android: он проверяется воспроизведением настоящих потоков распознавания.
Импорт документов сделан без офисных библиотек: docx и odt читаются как zip с XML, rtf и двоичный doc разбираются собственным кодом, для pdf используется PDFBox. Формат определяется по содержимому файла, а не по расширению. Для текстовых файлов кодировка подбирается из UTF-8, UTF-16, Windows-1251, KOI8-R и CP866; текст из любого формата приводится к одному виду — концы строк, пробелы, «й» и «ё», собранные из двух символов.
В версии 1.0.0 — 46 модульных тестов и проход по экранам на телефоне; импорт проверяется на документах, сохранённых Word во всех поддерживаемых форматах из одного текста.
Установка
- Ставится из магазина приложений. Публикация готовится; отдельного установочного файла на сайте нет.
- Нужен телефон с Android 8.0 или новее и около 300 МБ свободного места: голосовые модели входят в приложение и при первом включении слежения распаковываются.
- Разрешение одно — микрофон, запрашивается при включении слежения за голосом. При отказе приложение работает в ручном режиме.
- Интернет не нужен и не используется: разрешения на доступ в сеть у приложения нет.
- Сценарии и настройки хранятся только на телефоне. После удаления приложения они удаляются вместе с ним.
Управление
| Действие | Что происходит |
|---|---|
| Нажатие на экран | старт и пауза |
| Перетаскивание текста | перемотка |
| Щипок | размер шрифта |
Громкость − |
старт и пауза |
Громкость + |
назад на три строки |
| Кнопка «ИИ» | слежение за голосом вместо постоянной скорости |
Панель управления видна только на паузе.
Ограничения
- Числа, записанные цифрами, и слова, которых нет в словаре модели (имена, термины, названия), не распознаются: на них текст замирает и догоняет диктора на следующих словах.
- Языки распознавания — только русский и английский.
- Из документа берётся только текст: оформление, картинки, колонтитулы и сноски отбрасываются. Сохранить правки обратно в docx, odt или pdf нельзя.
- Из pdf с отсканированными страницами текст не извлекается. Абзацы в pdf восстанавливаются приблизительно.
- При каждом запуске показывается экран со сведениями об авторе; кнопка «Пропустить» становится активной через пять секунд.
- Версии для iOS пока нет.
Сторонние компоненты
| Компонент | Лицензия |
|---|---|
| Vosk (vosk-android) | Apache 2.0 |
| Голосовые модели vosk-model-small-ru и vosk-model-small-en-us (Alpha Cephei) | Apache 2.0 |
| PdfBox-Android (перенос Apache PDFBox) | Apache 2.0 |
| JNA | Apache 2.0 / LGPL 2.1 |
| AndroidX, Jetpack Compose, Room, DataStore | Apache 2.0 |
| Kotlin, kotlinx.coroutines | Apache 2.0 |





