TTS
Бесплатная озвучка текста для Mac голосами macOS, в том числе Siri. Вставленный текст или перетащенный файл читается вслух или сохраняется в MP3, без интернета; числа, даты и единицы по-русски и по-украински читаются правильно.
- Скачать для MacDMG · 1,7 МБ
brew install geragarazagh/tap/ tts - Гитхабисходный код
Apple silicon, macOS 13 или новее. Интерфейс на английском, украинском и русском.
Для продвинутых пользователей и языковых моделей
TTS говорит собственными голосами Apple. Речь начинается примерно через полсекунды и создаётся на самом Mac, поэтому приложение работает без интернета и ничего никуда не отправляет. Проверено, пока Siri читала длинный текст: процессы речи Apple не открыли ни одного сетевого соединения. Единственное, зачем приложение выходит в сеть, это ежедневная проверка обновлений.
Кнопка голоса открывает голоса языка текста с именами из Системных настроек: «Голос 1», «Голос 2» и так далее у Siri, иначе лучший голос macOS (украинский: Леся). Щелчок по имени выбирает голос; кнопка с волной рядом включает образец, который голос тут же произносит на выбранной скорости. Голоса Siri ещё не загружены: «Загрузить голоса Siri…» открывает нужную страницу Системных настроек. Скорость от 0,6× до 3,5×, её задаёт сам голос, слышна сразу; «Сохранить MP3» записывает весь текст тем же голосом и с той же скоростью. Предложение, которое звучит, подсвечено, текст прокручивается за ним; Command-плюс и Command-минус меняют размер текста. Пробел запускает и ставит на паузу, стрелки перематывают на 15 секунд.
Как это устроено
- Голоса: голоса Siri macOS показывает только программам с подписью Apple. Приложение поручает
osascript, части каждого Mac, свой скриптtts(JavaScript for Automation), который говорит через AVSpeechSynthesizer и потому получает все голоса, какие есть на Mac. Голоса Siri этим путём проверены на macOS 27, само приложение на 13, 14 и 26 с голосами, какие там были. Apple этот путь не описывает; если обновление его закроет, приложение будет говорить остальными голосами macOS. - Подготовка текста для русского и украинского: числа становятся словами в том падеже, который нужен предложению (предлог перед, существительное после: с 18 ГБ, до 12:00, з 08:00), вместе с датами, временем, годами, римскими веками, дробями, диапазонами, валютами, процентами, градусами и единицами; сокращения раскрываются, «ИИ» тоже в своём падеже. Знаки Markdown, эмодзи и ссылки (читаются как имя сайта) убираются. Русский проверочный текст с 35 числами прочитан верно целиком, украинский с 16 тоже; без этого шага Siri прочла верно 31 из 35.
- Каждый абзац получает свой язык. Русский, украинский, болгарский и казахский по их буквам и частым словам; кириллическая строка, по которой их не различить (заголовок, название, имя), берёт язык текста вокруг неё, а текст только из таких строк берёт первый из этих языков в списке языков Mac. Русский абзац с английскими словами читается одним голосом. Остальные языки через распознаватель языка Apple; строка латиницей, в языке которой распознаватель не уверен (имена, модели, числа), читается по-английски. Для языка без выбранного голоса берётся лучший голос того же рода, а из нескольких голосов Siri голос с наименьшим номером.
- Предложения произносятся по одному двумя вспомогательными процессами (при сохранении всеми производительными ядрами), каждое в файл, который растёт, пока голос говорит, поэтому предложение звучит, ещё пока создаётся, а подсветка точная. Паузы как у самой Siri: 0,32 с между предложениями на 1×, короче на большей скорости, вдвое длиннее между абзацами.
- Образцы голосов произносятся на Mac в момент нажатия: записей голосов Apple в приложении нет. По-русски голоса читают Воланда из «Мастера и Маргариты» Булгакова, по-украински начало «Энеиды» Котляревского, по-английски семь возрастов человека Шекспира; на других языках начало самого текста.
- Во время прослушивания звук лежит 16-битными отсчётами во временном файле без имени на диске (он удаляется в момент открытия), поэтому после приложения ничего не остаётся.
- MP3: LAME 4.0 (LGPL), моно, 48 кГц, VBR качество 2, около 48 МБ в час, с тегом LAME, чтобы плееры показывали точную длину; в комментарии файла сказано, что речь синтезирована.
- Скрипт работает и как программа для командной строки:
/Applications/TTS.app/Contents/Resources/tts -h(текстовый файл в MP3, M4A, WAV или AIFF, голос, скорость,-tпечатает текст так, как он будет прочитан,-Lпоказывает голоса).
Голоса Apple входят в macOS, и её лицензия разрешает созданную ими речь для личного некоммерческого использования.
Вопросы
Текст уходит с Mac?
Нет. Голоса говорят на самом Mac; в сеть приложение ходит только за проверкой обновлений.
Работает без интернета?
Да. Интернет нужен только один раз, чтобы загрузить голос Siri в Системных настройках.
Какие есть голоса?
Голоса macOS: голоса Siri на языках, на которых говорит Siri, среди них русский (Голос 1 и Голос 2), английский, немецкий, французский, испанский, итальянский, португальский, нидерландский, турецкий, арабский, японский, корейский и китайский, и остальные голоса Apple примерно для сорока языков, среди них украинский (Леся). Добавить или склонировать голос в приложении нельзя.
Откуда берутся голоса Siri?
Из Системных настроек, бесплатно. «Загрузить голоса Siri…» в списке голосов приложения открывает нужную страницу: на macOS 26 и новее «Универсальный доступ», «Чтение вслух», затем ⓘ рядом с «Голос системы» и язык; на macOS 13–15 «Универсальный доступ», «Устный контент», «Голос системы», «Управление голосами…».
Может читать выделенный текст в любом приложении?
Нет: это умеет сама macOS, в Системных настройках, «Универсальный доступ», «Чтение вслух» («Устный контент» до macOS 26), «Произносить выбранное».
Что стало с голосами версий 0.1 и 0.2?
Они были из скачиваемой модели Supertonic 3, которая хуже справлялась с числами и длинными текстами. Версия 0.3 говорит голосами macOS и при первом запуске удаляет ту модель, 401 МБ.
Обновления
Раз в день приложение читает ленту своего последнего релиза на GitHub (appcast.xml) через Sparkle. О самом Mac ничего не отправляется. Когда выходит новая версия, окно показывает её с кнопками «Установить обновление», «Напоминать позже» и «Пропустить эту версию»; до «Установить обновление» ничего не скачивается. «Проверить наличие обновлений» в меню приложения проверяет сразу.
Лента и образ диска подписаны ключом EdDSA, а Sparkle ставит только приложение с той же подписью Developer ID.
Настройки и удаление
Настройки (голоса, выбранные для каждого языка, скорость, размер текста) и время последней проверки обновлений лежат в defaults com.geragaraza.tts. Больше ничего не хранится: ни текста, ни истории, ни сохранённого состояния окна.
Чтобы удалить TTS: выйти, TTS.app в Корзину и defaults delete com.geragaraza.tts. Голоса Siri остаются в macOS; удаляются они в Системных настройках.
Если ставили через Homebrew, brew uninstall --zap tts закрывает его и удаляет приложение и настройки.
Подробности
- Версия: 0.5.
- Идентификатор:
com.geragaraza.tts. - Загрузка:
TTS.dmg, 1,7 МБ. - Нужно: Apple silicon, macOS 13 или новее.
- Разрешения: никаких. Сеть: чтобы проверить обновления.
- Подписано Developer ID и нотаризовано Apple.
- Интерфейс: английский, украинский, русский, по языку macOS.
- Код: Swift и AppKit, около 2 500 строк, скрипт
ttsна JavaScript for Automation, около 1 300 строк, LAME и Sparkle для обновлений. - Лицензия: MIT.
English Українська Русский