Первая сборка: живые субтитры с переводом
Сегодня заработала первая версия нашего приложения. Вы выбираете программу, которая играет звук, или микрофон. Приложение распознаёт английскую речь и показывает её в небольшом окне, а под каждой строкой — русский перевод. Всё происходит на самом Маке.
Что оно умеет
Приложение живёт в строке меню. В меню — список программ, которые можно слушать, и микрофоны. Программы, которые сейчас молчат, из списка не пропадают: видеозвонок ещё не начался, вкладка браузера на паузе, а выбрать их нужно заранее. Те, что играют звук, стоят первыми.
Субтитры выводятся в окне поверх всех остальных. Его можно перетащить за фон и растянуть за уголок, положение и размер запоминаются. В окне можно показывать только английский, только русский или оба сразу — английская строка сверху. Шрифты, цвета и прозрачность фона настраиваются в отдельном окне.
Когда вы нажимаете «Остановить», сессия сохраняется целиком. Окно «Недавние транскрибации» хранит последние 50 сессий, любую можно скопировать текстом. Сессия, в которой никто ничего не сказал, не сохраняется.
Два решения
Как поймать звук одной программы. Обычный путь — фреймворк записи экрана. Мы его не взяли: он просит разрешение на запись экрана и держит в строке меню индикатор записи всё время работы. Мы используем системный способ подключиться к звуку одного процесса. У него своё разрешение и нет экранного индикатора. Браузеры и мессенджеры играют звук из нескольких служебных процессов, поэтому мы группируем их по программе, которой они принадлежат, и слушаем все сразу.
Не ждать конца фразы. Человек говорит предложение четыре-восемь секунд, и пустой экран всё это время выглядит как поломка. Поэтому мы показываем растущий текст. Распознавание Apple в быстром режиме отдаёт новый текст примерно раз в секунду; без этого режима он приходил раз в 3,8 секунды. Последние слова ещё мигают и поправляются, но это лучше ожидания.
Перевод приходит позже распознавания, и тут была главная ловушка. Текст прилетает пачками, а первое обновление пачки часто обрывок вроде «So». Мы ждём 150 миллисекунд и переводим самое свежее обновление. У каждого обновления есть номер, а перевод более старого текста выбрасывается — опоздавший ответ не затрёт новую строку.
Что в комплекте
В тот же день появились значок приложения и установщик: образ диска с короткой инструкцией внутри и готовый рецепт для установки через Homebrew. Пока приложению нужна macOS 26 — оно использует новое распознавание речи от Apple. Просит три разрешения: звук других программ, микрофон и распознавание речи.
Эта версия понимает только английский и переводит только на русский. Следующий шаг — текст под курсором мыши.