Ollama TTS: как озвучить текст моделью Phonon — для этого в Ollama есть встроенная речевая модель, которой нужна версия 0.40.11 или новее. Модель Phonon читает текст вслух прямо в терминале, аудио отдаётся потоком, а для работы нужен Apple Silicon Mac.
Минимальная версия и платформа
Официальная документация Ollama и страница модели называют минимальной версией 0.40.9, а анонс в блоге вендора — 0.40.11. Ориентируйтесь на более свежую цифру: ставьте Ollama 0.40.11 или новее, тогда речевые команды точно доступны. Если установленная версия старше, сначала обновите Ollama.
Платформа — Apple Silicon Mac. В блоге Ollama прямо сказано, что речевые модели доступны для macOS, а поддержка Windows и Linux обозначена как coming soon. На Apple Silicon Ollama ускоряется через MLX, фреймворк машинного обучения Apple. Вендор приводит замер: на MacBook Pro с M5 Max Ollama оказалась на 35% быстрее следующего по скорости движка — собственного рантайма Gradium. Точность реализации совпадает с эталонной по метрике word error rate в Hugging Face Transformers. Цифра 35% — замер самого вендора на MacBook Pro с M5 Max, на другом Mac скорость может отличаться.
Практический вывод для выбора железа: если у вас Mac на чипе Apple Silicon, встроенный TTS запускается одной командой. На Windows и Linux встроенная озвучка пока недоступна, поэтому там нужен внешний движок или облачный сервис — об этом ниже в таблице выбора.
Загрузка модели phonon
Модель ставится обычной командой pull, как и любой другой тег Ollama:
ollama pull phonon
Без тега скачивается вариант по умолчанию — Phonon 31M English. Страница модели сообщает, что он включает один голос с именем default. Для другого языка или мультиязычного чекпоинта нужен тег 40M, например ollama pull phonon:40m-fr.
Проверить, что установилось, и увидеть список голосов можно так:
ollama show phonon
Документация отмечает: ollama show phonon и /api/show показывают возможности модели как speech, а голоса — в поле voices. По странице модели на Apple M5 Max загруженная модель занимает в памяти 121 МБ для 31M English и 141 МБ для каждого 40M-варианта. Аудио на выходе — 24 кГц, моно.
Команды озвучки: текст, голос, пайп
Базовый запуск читает строку вслух через динамики компьютера:
ollama run phonon "Hello from Ollama."
Выбор голоса делается флагом --voice:
ollama run phonon --voice Zoey "Hi, this is Zoey."
Документация уточняет: имена голосов работают в любом регистре и с диакритикой или без неё. Текст из другой программы принимается через пайп:
echo "Text from another program works too." | ollama run phonon
Пайп читается по мере поступления: текст начинает звучать, как только приходит первая пара предложений. Это ключевое свойство потоковой отдачи — не нужно ждать, пока сгенерируется весь текст целиком. Для длинных материалов документация задаёт лимит: до 4096 знаков на запрос, а ollama run сам разбивает более длинный текст по абзацам и предложениям.
Интерактивный режим и выход
Запуск без текста открывает интерактивный режим:
ollama run phonon
Появляется приглашение >>>, куда построчно вводится текст. Каждая строка озвучивается после нажатия Enter. Остановить текущую речь можно сочетанием Ctrl+C. Выход из режима — команда /bye или Ctrl+D. Такой режим удобен для проверки голосов и произношения отдельных фраз: вводите строку, слушаете, меняете формулировку. Для пакетной обработки файлов он не подходит — там работает пайп или API.
Запись в WAV при перенаправлении вывода
Когда вывод перенаправляется, ollama run пишет WAV-файл вместо воспроизведения. Это работает и на серверах без динамиков:
ollama run phonon "Save this to a file." > speech.wav
Формат по умолчанию — WAV: 16 бит, моно, 24 кГц. Документация предупреждает об особенности заголовка: он записывается до того, как длина файла известна, поэтому поля размера содержат максимальное значение. При программной обработке файла учитывайте, что поля размера в заголовке не совпадают с фактической длиной. Альтернатива в API — сырые 16-битные little-endian сэмплы без заголовка через response_format: pcm.
Чтобы услышать удалённый сервер, Ollama запускают на своём компьютере и указывают на сервер — звук идёт там, где выполняется команда:
OLLAMA_HOST=my-server:11434 ollama run phonon "Hello from the server."
Связка LLM → TTS через пайп
Документация даёт готовый пример: ответ чат-модели уходит прямо в Phonon.
ollama run gemma4 --hidethinking "Tell me a fun fact about owls in two sentences." | ollama run phonon
Ответ начинает звучать после первых одного-двух предложений, потому что текст озвучивается по мере поступления. Так ответы чат-модели озвучиваются одной строкой в терминале, без отдельного TTS-пайплайна на Python. Тот же приём работает с любой моделью, которая пишет в stdout.
Для интеграции в код есть OpenAI-совместимый эндпоинт /v1/audio/speech. Существующий код на OpenAI SDK требует только нового base URL. Пример из документации:
curl http://localhost:11434/v1/audio/speech \
-H "Content-Type: application/json" \
-d '{
"model": "phonon",
"voice": "default",
"input": "Hello from Ollama."
}' --output speech.wav
Ответ стримится по мере генерации аудио, поэтому воспроизведение можно начинать сразу. Неподдерживаемые опции — другие форматы, скорости, инструкции — возвращают ошибку 400. Неизвестный голос тоже даёт 400 со списком доступных голосов. Запросы chat, completion и embedding к речевой модели возвращают 400: она умеет только синтез речи.
Голоса и языковые варианты
Голоса приходят из каталога Gradium. Документация перечисляет английские голоса Zoey, Easton и Freya; блог вендора приводит Hadley. Страница модели при этом говорит, что вариант по умолчанию (31M English) включает один голос с именем default. Источники расходятся в описании набора, поэтому проверяйте доступные голоса командой ollama show phonon для конкретного тега и не рассчитывайте, что каждый голос есть в каждой сборке.
Языковые варианты по блогу и странице модели:
| Тег | Язык | Размер модели |
|---|---|---|
| phonon (31m-en, en) | английский | 31M |
| phonon:40m-en | английский | 40M |
| phonon:40m-fr (fr) | французский | 40M |
| phonon:40m-de (de) | немецкий | 40M |
| phonon:40m-es (es) | испанский | 40M |
| phonon:40m-pt (pt) | португальский | 40M |
| phonon:40m-multilingual (multilingual) | все пять языков | 40M |
Русского языка среди вариантов нет: встроенный TTS Ollama русский текст не озвучивает. Для русского нужен внешний движок или облачный сервис. Ещё одна деталь из документации: цены, числа, символы, адреса почты и URL перед озвучкой разворачиваются в слова, поэтому $4.59 звучит как «4 dollars and 59 cents». Время и числовые даты читаются как написано — пишите даты словами (October 23), чтобы звучало естественно. По документации эмодзи, маркеры списков и символы markdown вроде * и # пропускаются, а страница модели предупреждает, что заголовки Markdown могут прозвучать вслух, поэтому подавайте в модель чистый текст.
Лицензии: Apache 2.0 и CC BY-NC 4.0
Лицензии различаются по чекпоинтам. 31M English выпущен под Apache 2.0 — коммерческое использование разрешено. Все 40M-чекпоинты — английский, французский, немецкий, испанский, португальский и мультиязычный — выпущены под CC BY-NC 4.0, которая ограничивает применение некоммерческими целями.
Практическое следствие: если проект коммерческий и нужен английский, берите 31M English. Если нужен французский, немецкий, испанский, португальский или мультиязычный режим в коммерческом продукте, лицензия 40M этого не позволяет — потребуется другой движок с подходящей лицензией. Для личных и исследовательских задач ограничение не мешает.
Таблица выбора способа озвучки
| Критерий | Встроенный Phonon | Внешний движок (Bark, XTTS-v2) | Облачный сервис |
|---|---|---|---|
| Язык | английский, французский, немецкий, испанский, португальский, мультиязычный | по документации движка | по документации сервиса |
| Русский | недоступен | по документации движка | по документации сервиса |
| Лицензия | 31M — Apache 2.0; 40M — CC BY-NC 4.0 | по документации движка | по условиям сервиса |
| Платформа | Apple Silicon Mac | по документации движка | браузер или API |
| Установка | ollama pull phonon |
сборка окружения движка | регистрация и ключ |
| Клонирование голоса | не заявлено | по документации движка | по документации сервиса |
Требования к железу, лицензии и тарифы внешних движков и облачных сервисов сверяйте с документацией конкретного движка или условиями сервиса. Для встроенного варианта всё проверяется командами из этой статьи.
Частые вопросы
Какая версия Ollama нужна для озвучки текста?
Документация и страница модели называют 0.40.9, анонс в блоге вендора — 0.40.11. Ставьте 0.40.11 или новее, чтобы речевые команды были доступны без сюрпризов.
Работает ли Phonon на Windows и Linux?
Речевые модели доступны для macOS. Поддержка Windows и Linux обозначена вендором как coming soon, поэтому встроенная озвучка на этих системах сейчас не запускается.
Можно ли озвучить русский текст через Ollama?
Среди языковых вариантов Phonon есть английский, французский, немецкий, испанский, португальский и мультиязычный чекпоинт. Русского среди них нет, поэтому для русской озвучки нужен внешний движок или облачный сервис.
Как сохранить озвучку в файл?
Перенаправьте вывод команды ollama run phonon "текст" > speech.wav. При перенаправлении Ollama пишет WAV-файл вместо воспроизведения, формат — 16 бит, моно, 24 кГц.
Можно ли использовать Phonon в коммерческом продукте?
31M English выпущен под Apache 2.0, коммерческое использование разрешено. Все 40M-чекпоинты под CC BY-NC 4.0 ограничены некоммерческими целями, поэтому для коммерции на этих языках нужен другой движок.
