Синтезатор речи с ИИ на Repka-Pi 4

Синтезатор речи с ИИ на Repka-Pi 4

Современные микрокомпьютеры способны синтезировать речь с приемлемым качеством, используя нейросетевые технологии. В этой статье рассказывается, как добавить «голос» к российскому одноплатному компьютеру Repka-Pi 4.

Рассмотрены программные синтезаторы речи (TTS, Text-to-Speech) — eSpeak NG и Piper. Приведён пример реализации сервера синтеза речи на базе Piper и FastAPI, который запускается через systemd при старте системы и принимает HTTP-запросы от внешних клиентов. Запросы обрабатываются асинхронно: клиент отправляет текст и продолжает работу, не дожидаясь завершения озвучивания.

Ожидается скорое появление более мощного Repka-Pi 5 с оперативной памятью до 32 ГБ и производительностью, вдвое превышающей топовую модель Raspberry Pi 5. На таком устройстве можно будет использовать более крупные модели, а также совмещать синтез и распознавание речи. Это открывает возможности для применения в системах умного дома, киосках, говорящих игрушках и учебных проектах.

Краткая история синтезаторов речи

Развитие синтеза речи началось ещё в XVIII веке с механических устройств. Одним из первых примеров стала копия говорящей машины Фабера (1846 г.), в которой с помощью диафрагм и воздушного меха имитировались звуки человеческой речи. Другим устройством был Euphonia — гибрид акустических механизмов и клавиш.

Качество звука у таких устройств было низким, но они продемонстрировали саму возможность синтеза речи.

Электронные синтезаторы речи

В 1930 году Хомер Дадли из Bell Labs создал электронный синтезатор Voder (Voice Operating Demonstrator). Он использовал клавиши, педаль, генераторы тона и шума, а также фильтры для формирования речи.

В 1940–1950-х годах Haskins Labs разработал устройство Pattern Playback, которое воссоздавало речь из спектрограмм.

Синтез речи с помощью компьютеров

С появлением компьютеров начался новый этап. В 1961 году в Bell Labs на компьютере IBM 704 был синтезирован фрагмент песни Daisy Bell — это стало первым примером программного моделирования речевого тракта.

В 1968 году в Японии создали первую систему TTS, использовавшую формантный синтез на основе фонетических правил. В 1975–1978 годах появилась система MUSA — одна из первых систем синтеза в реальном времени. Она «говорила» на итальянском, но звучала как голос робота.

В 1980–1990-х годах развивались методы формантного синтеза с лингвистическим анализом текста. С 1990-х начали применять статистические подходы, но высокое качество стало возможным только с внедрением нейросетей.

Синтезатор eSpeak NG

eSpeak NG — это легковесный синтезатор с открытым исходным кодом, основанный на формантном синтезе. Голос генерируется алгоритмически, без использования записей реальных голосов, поэтому звучит неестественно — как «голос робота».

Главное преимущество — минимальные требования к ресурсам. Он работает даже на Repka-Pi 4 с 2 ГБ ОЗУ.

Подходит для озвучивания уведомлений, учебных проектов и других задач, где качество речи не критично.

Установка eSpeak NG

Установка проста: обновите пакеты и выполните установку через пакетный менеджер. После установки проверьте поддержку русского языка.

Запуск eSpeak NG из командной строки

Синтез текста выполняется командой:

Для английского языка:

Можно озвучить большой текст или содержимое файла:

В параметре -v можно выбрать голос:

  • ru — стандартный русский;
  • ru+m1…m7 — мужские голоса;
  • ru+f1…f5 — женские голоса.

Например, выбор женского голоса f5:

Запуск eSpeak NG из Python

Синтез можно запускать из Python-скрипта. Ниже — пример кода, тестирующего русские и английские голоса:

Запуск:

Синтезатор Piper TTS

Качество звука в eSpeak NG оставляет желать лучшего. Гораздо лучше работает Piper TTS — нейросетевой синтезатор, способный работать на Repka-Pi 4.

Он использует архитектуру VITS (Variational Inference with adversarial learning for end-to-end Text-to-Speech) и модели в формате ONNX. Благодаря оптимизации, синтез выполняется в реальном времени даже на слабых устройствах.

Piper TTS подходит для голосовых ассистентов, умных устройств, роботов и образовательных проектов.

Установка Piper TTS

Установка выполняется в виртуальном окружении:

Затем скачиваются голосовые модели:

Дополнительные голоса доступны на сайте huggingface.co.

Запуск Piper TTS из командной строки

Для проверки синтеза используйте команду:

Результат сохраняется в файл большой_текст.wav, который можно воспроизвести через aplay:

Для озвучивания текста из файла без сохранения в файл:

В этом случае аудио передаётся напрямую в aplay. Сообщение о отсутствии GPU можно игнорировать — Repka-Pi 4 не имеет GPU.

На слабом процессоре может появиться предупреждение о недостаточной скорости генерации аудио. На более мощном Repka-Pi 5 такой проблемы, вероятно, не будет. Качество звука на Repka-Pi 4 остаётся удовлетворительным.

Запуск Piper TTS из Python

Piper можно интегрировать в Python-приложения. Установите зависимости:

Пример программы piper_stream_aplay.py воспроизводит синтезированную речь через aplay, не создавая временный WAV-файл.

Параметры задаются в начале: путь к Piper, модель ONNX, частота дискретизации, формат и устройство вывода.

Функция main проверяет наличие файла с текстом и вызывает speak_from_file.

Функция speak_from_file читает текст, запускает Piper в режиме потока с параметром --output_raw (сырой PCM-аудио), затем передаёт данные в aplay.

После завершения синтеза программа ждёт окончания воспроизведения.

Запуск:

Другой пример — piper-stream.py — использует библиотеку sounddevice для прямого воспроизведения через PulseAudio, без внешних утилит.

Он также обрабатывает ошибки (отсутствие файла, пустой текст) и завершается с кодом ошибки при проблемах.

Запуск:

Предупреждения о производительности можно игнорировать — они не влияют на качество звука.

Сервер синтеза речи на базе Piper и Repka-Pi 4

Разработан сервер синтеза речи на основе Piper и FastAPI. Он использует многопоточность и очередь задач, чтобы не блокировать клиент.

Сервер запускается на Repka-Pi 4, слушает порт 8000 и принимает HTTP-запросы как локально, так и по сети.

Отправка текста для озвучивания:

Клиент быстро передаёт текст и продолжает работу. Синтез выполняется в фоновом потоке. Задержка — от одной до нескольких секунд, в зависимости от длины текста.

Исходный код сервера

Сервер tts_server_pcm.py доступен в GitHub. При старте он загружает модели, чтобы избежать задержек при первом запросе.

Установка зависимостей:

Основные компоненты:

Функция synthesize_text преобразует текст в аудио: разбивает на строки, очищает их, синтезирует каждую через Piper, объединяет фрагменты и добавляет паузы в начале и конце. Результат — массив int16 в формате NumPy.

Класс AudioPlayerThread управляет воспроизведением в отдельном потоке. Метод init_stream настраивает аудиопоток через sounddevice, а run запускает воспроизведение.

Метод audio_worker — фоновый обработчик очереди. Он ждёт задач, запускает синтез и воспроизведение.

Контекстный менеджер lifespan инициализирует audio_worker как демон при старте и очищает очередь при остановке.

Маршруты:

POST /say принимает текст, добавляет задачу в очередь и сразу отвечает клиенту. Пример запроса:

GET /status возвращает JSON с состоянием сервера: общий статус, идёт ли воспроизведение, количество задач в очереди и частота дискретизации.

Пример ответа, когда сервер готов:

Когда сервер занят:

Если в очереди два текста:

Unit-файл для автозапуска

Чтобы сервер запускался при загрузке, создайте unit-файл /etc/systemd/system/tts-server.service:

Команды управления сервисом:

Проверка статуса:

Включение автозапуска:

Просмотр логов:

Клиент сервера синтеза речи

Отправлять текст можно через curl:

IP-адрес Repka-Pi можно узнать командой ip a.

Пример Python-клиента tts_client_pcm_play.py:

Он читает текст из файла и отправляет его на сервер POST-запросом. Запуск:

На Repka-Pi 4 доступны как лёгкие, но низкокачественные синтезаторы, так и качественные решения вроде Piper TTS. Все они работают с русским языком при 2 ГБ ОЗУ и без GPU.

С выходом Repka-Pi 5 можно ожидать поддержку более сложных моделей и ускорение синтеза.

Возможности применения широки: озвучивание уведомлений, читалки книг, голосовые помощники. При добавлении распознавания речи и логики принятия решений можно создать локального «помощника» без зависимости от облачных сервисов.

Границы для творчества — только воображение.

Читать оригинал