Skip to content

aposazhennikov/rasbperry-dictaphone

Repository files navigation

Иерархическое меню с озвучкой для незрячих пользователей

Проект представляет собой иерархическое меню с навигацией с помощью клавиш (пульта) и озвучкой всех пунктов меню.

Требования

Для работы проекта необходимы следующие зависимости:

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.

Установка

  1. Клонируйте репозиторий:
git clone <repository-url>
cd <repository-directory>
  1. Установите зависимости:
pip install -r requirements.txt
  1. Для 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 - Мужской голос 1
  • ru-RU-Standard-C - Женский голос 2
  • ru-RU-Standard-D - Мужской голос 2
  • ru-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 Dictaphone

Проект диктофона на 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.txt

Запуск с gTTS (по умолчанию)

python run_menu.py

Запуск с Google Cloud TTS

python 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 TTS

  1. Создайте проект в Google Cloud и активируйте API для Text-to-Speech
  2. Создайте сервисный аккаунт и скачайте ключ в формате JSON
  3. Сохраните ключ как credentials-google-api.json в корне проекта
  4. Файл с ключом автоматически добавлен в .gitignore для безопасности

Доступные голоса

  • ru-RU-Standard-A - Женский голос 1
  • ru-RU-Standard-B - Мужской голос 1
  • ru-RU-Standard-C - Женский голос 2
  • ru-RU-Standard-D - Мужской голос 2
  • ru-RU-Standard-E - Женский голос 3

При использовании Google Cloud TTS вы получите доступ к дополнительным голосам, качество которых значительно выше, чем у gTTS.

Кэширование и экономия ресурсов

Система автоматически кэширует все аудиофайлы, созданные с помощью Google Cloud TTS API. При повторных запросах используются файлы из кэша, что не требует дополнительных расходов. Кэшированные файлы имеют префикс gc_ и хранятся в директории, указанной в параметре --cache-dir.

Google Cloud TTS API предоставляет 1 миллион бесплатных символов в месяц, после чего начинается тарификация. В режиме отладки система показывает текущее использование API и оставшееся количество бесплатных символов.

About

My project for blind person, who need to use Dictaphone with Calls, and voice accompaniment

Resources

Stars

Watchers

Forks

Releases

Packages

Used by

Contributors

Languages