Проект представляет собой иерархическое меню с навигацией с помощью клавиш (пульта) и озвучкой всех пунктов меню.
Для работы проекта необходимы следующие зависимости:
evdev>=1.6.0 # для работы с пультом
gTTS>=2.3.1 # для озвучки текста (бесплатный синтез)
google-cloud-texttospeech>=2.14.1 # для работы с Google Cloud TTS (более качественный)
google-cloud-monitoring>=2.14.1 # для получения статистики использования API
python-vlc>=3.0.20000 # для воспроизведения аудио
python-magic>=0.4.27 # для определения типов файлов
Кроме того, проект использует следующие стандартные библиотеки Python:
- os, sys - для работы с файловой системой
- threading, subprocess - для многопоточности и запуска внешних процессов
- hashlib, json - для хеширования и работы с JSON
- datetime - для работы с датами
- glob - для поиска файлов по шаблону
- argparse - для обработки аргументов командной строки
Под Windows для воспроизведения звуков используется PowerShell и System.Media.SoundPlayer.
Под Linux для воспроизведения MP3-файлов требуется mpg123 и vlc.
- Клонируйте репозиторий:
git clone <repository-url>
cd <repository-directory>
- Установите зависимости:
pip install -r requirements.txt
- Для Linux установите необходимые пакеты:
sudo apt-get install mpg123 vlc libmagic1 udisks2 # Debian/Ubuntu
python run_menu.py
python run_menu.py --help
Доступные опции:
--no-tts- отключить озвучку--cache-dir DIR- указать директорию для кэширования звуков (по умолчанию "/home/aleks/cache_tts")--pre-generate- предварительно сгенерировать все звуки и выйти--debug- включить режим отладки с выводом диагностической информации--use-mp3- использовать MP3 вместо WAV (WAV обычно воспроизводится быстрее)--voice VOICE_ID- выбрать голос для озвучки (например: ru-RU-Standard-A)--tts-engine {gtts,google_cloud}- движок для синтеза речи (gttsилиgoogle_cloud)--google-cloud-credentials FILE- путь к файлу с учетными данными Google Cloud--show-metrics- показать подробную информацию об использовании Google Cloud API
Чтобы предварительно сгенерировать все звуки для меню (рекомендуется):
python run_menu.py --pre-generate
Для генерации озвучки с конкретным голосом:
python run_menu.py --pre-generate --voice ru-RU-Standard-B
Для генерации озвучки с использованием Google Cloud TTS:
python run_menu.py --pre-generate --tts-engine google_cloud --google-cloud-credentials credentials-google-api.json --debug
Это создаст все необходимые файлы озвучки в директории cache_tts.
KEY_UP- перемещение вверх по менюKEY_DOWN- перемещение вниз по менюKEY_SELECT- выбор текущего пункта менюKEY_BACK- возврат в родительское меню
В меню доступен пункт "Внешний носитель", который позволяет:
- Просматривать подключенные USB-накопители
- Отображать название и размер каждого накопителя
- Просматривать содержимое USB-накопителей
- Копировать файлы на USB-накопители (в разработке)
При отсутствии подключенных USB-накопителей выводится соответствующее сообщение.
Система автоматически монтирует USB-накопители при их подключении, используя udisks2. Поддерживаются различные файловые системы:
- FAT32
- NTFS
- exFAT
- ext2/3/4
- и другие
Перед физическим отключением USB-накопителя рекомендуется выйти из меню внешнего носителя для корректного размонтирования.
В системе доступны следующие голоса для озвучки:
ru-RU-Standard-A- Женский голос 1 (по умолчанию)ru-RU-Standard-B- Мужской голос 1ru-RU-Standard-C- Женский голос 2ru-RU-Standard-D- Мужской голос 2ru-RU-Standard-E- Женский голос 3
Выбор голоса доступен через меню: "Настройки" -> "Выбор голоса". Выбранный голос сохраняется между запусками программы.
Структура меню задается в методе create_menu_structure() класса MenuManager. Для добавления новых пунктов измените соответствующий код в файле menu/menu_manager.py.
Для настройки параметров озвучки измените параметры в конструкторе класса TTSManager в файле menu/tts_manager.py.
Для добавления новых голосов измените метод get_available_voices() в классе SettingsManager в файле menu/settings_manager.py.
Проект диктофона на Raspberry Pi с текстовой и голосовой навигацией по меню.
- Синтез речи с использованием Google Cloud Text-to-Speech API с поддержкой различных голосов
- Поддержка двух движков синтеза речи: gTTS (бесплатно) и Google Cloud TTS (более качественный, требует аккаунта)
- Возможность выбора голоса для озвучки меню
- Кэширование аудиофайлов, созданных Google Cloud TTS API (экономия на повторных запросах)
- Мониторинг использования Google Cloud API и отображение метрик в режиме отладки
- Надёжная система записи звука с использованием библиотеки SoundDevice
- Поддержка паузы и возобновления записи без потери данных
- Организация записей в различных папках (A, B, C)
- Голосовые уведомления о статусе записи
- Воспроизведение записей с поддержкой WAV и MP3 форматов
- Управление воспроизведением (пауза, перемотка, регулировка громкости)
- Удаление записей с подтверждением
- Переключение между записями в папке
- Проверка свободного места на диске перед записью с предупреждением при недостатке
- Автоматическое ограничение длительности записи (3 часа) для предотвращения ошибок
- Интеграция с Sentry для отслеживания ошибок в реальном времени
- Запись звука: Запись аудио с микрофона устройства в выбранную папку
- Пауза/возобновление: Возможность приостановить и продолжить запись
- Организация записей: Хранение записей в папках A, B и C
- Автоматическое именование: Создание файлов с именами на основе даты и времени
- Голосовое управление: Голосовые подтверждения всех действий с диктофоном
- Индикация времени: Отображение текущего времени записи с учетом пауз
- Контроль свободного места: Предупреждение, если на диске осталось менее 1 ГБ
- Ограничение длительности: Автоматическое завершение записи после 3 часов для безопасности
- Выбор папки: Возможность выбрать папку (A, B, C) для воспроизведения
- Список записей: Отображение списка записей, отсортированных по дате (от новых к старым)
- Управление воспроизведением: Пауза, перемотка, регулировка громкости
- Переключение между записями: Возможность переключаться между записями в папке
- Удаление записей: Удаление записей с подтверждением
- Ускоренное воспроизведение: Воспроизведение в 2x скорости при удержании клавиши
Система автоматически проверяет доступное место на диске перед началом записи. Если свободного места менее 1 ГБ, воспроизводится голосовое предупреждение:
Внимание, на устройстве осталось менее 1GB памяти, рекомендуется освободить память устройства
Для предотвращения ошибок из-за слишком длинных записей, система автоматически останавливает запись после 3 часов непрерывной работы. При этом воспроизводится системное сообщение:
Порог записи длительность 3 часа достигнут завершаю и сохраняю запись во избежание ошибок
Система интегрирована с Sentry для мониторинга ошибок в режиме реального времени. Это помогает быстро выявлять и исправлять проблемы, с которыми могут столкнуться пользователи.
Все операции с файловой системой и аудиоустройствами защищены обработчиками исключений, что повышает стабильность системы и предотвращает аварийное завершение программы.
KEY_SELECT- Пауза/возобновление записиKEY_BACK- Остановка и сохранение записи
KEY_SELECT- Пауза/возобновление воспроизведенияKEY_BACK- Остановка воспроизведения и возврат в менюKEY_LEFT(удержание) - Перемотка назадKEY_RIGHT(удержание) - Ускоренное воспроизведение (2x скорость)KEY_PAGEUP- Уменьшение громкостиKEY_PAGEDOWN- Увеличение громкостиKEY_POWER- Удаление текущей записи (с подтверждением)KEY_VOLUMEUP- Переключение на следующую композициюKEY_VOLUMEDOWN- Переключение на предыдущую композицию
Для работы диктофона требуются следующие библиотеки:
- sounddevice - для записи звука
- soundfile - для сохранения записанного звука
- numpy - для обработки аудиоданных
- pydub - для работы с аудиофайлами разных форматов
- mpg123 - для воспроизведения MP3 файлов (устанавливается отдельно)
Запись звука производится с помощью библиотеки SoundDevice, которая обеспечивает более надежную работу с аудиоустройствами по сравнению с PyAudio. Данные записи накапливаются в оперативной памяти и сохраняются в файл после остановки записи. Это позволяет избежать потери данных при паузе/возобновлении записи.
Воспроизведение аудиофайлов осуществляется с помощью системных утилит aplay (для WAV) и mpg123 (для MP3). Это обеспечивает надежное воспроизведение на различных устройствах, включая Raspberry Pi. Поддерживается управление громкостью, скоростью воспроизведения и перемотка.
Для голосовых уведомлений используется Google Cloud TTS или gTTS, а для звуковых сигналов - встроенная утилита aplay.
pip install -r requirements.txtpython run_menu.pypython run_menu.py --tts-engine google_cloud --google-cloud-credentials credentials-google-api.json --debug--no-tts- запуск без озвучки--debug- режим отладки с выводом диагностики--cache-dir DIR- указание директории для кэширования (по умолчанию/home/aleks/cache_tts)--use-mp3- использовать MP3 вместо WAV для воспроизведения--voice VOICE_ID- идентификатор голоса для озвучки (например,ru-RU-Standard-A)--tts-engine {gtts,google_cloud}- движок для синтеза речи (gttsилиgoogle_cloud)--google-cloud-credentials FILE- путь к файлу с учетными данными Google Cloud--show-metrics- показать подробную статистику использования Google Cloud API
- Создайте проект в Google Cloud и активируйте API для Text-to-Speech
- Создайте сервисный аккаунт и скачайте ключ в формате JSON
- Сохраните ключ как
credentials-google-api.jsonв корне проекта - Файл с ключом автоматически добавлен в
.gitignoreдля безопасности
ru-RU-Standard-A- Женский голос 1ru-RU-Standard-B- Мужской голос 1ru-RU-Standard-C- Женский голос 2ru-RU-Standard-D- Мужской голос 2ru-RU-Standard-E- Женский голос 3
При использовании Google Cloud TTS вы получите доступ к дополнительным голосам, качество которых значительно выше, чем у gTTS.
Система автоматически кэширует все аудиофайлы, созданные с помощью Google Cloud TTS API. При повторных запросах используются файлы из кэша, что не требует дополнительных расходов. Кэшированные файлы имеют префикс gc_ и хранятся в директории, указанной в параметре --cache-dir.
Google Cloud TTS API предоставляет 1 миллион бесплатных символов в месяц, после чего начинается тарификация. В режиме отладки система показывает текущее использование API и оставшееся количество бесплатных символов.