Проектирую интерфейс читалки книг для слабовидящего
Начало проекта читалки научно-популярной литературы для моего дедушки, Аркадия Николаевича. Он почти не видит и слушает аудиокниги с плеера, но их “поставщик” в последнее время не слишком надежен, поэтому подумалось собрать ему читалку книг через TTS на базе Raspberry Pi.
Вводные
- Видит АН очень плохо, так что классические экранные интерфейсы не подходят
- Тестировали читалку для Андроида - оказалось, что экран телефона не “считывает” дедушкины пальцы, поэтому этот вариант тоже отпал
- Доступа в интернет нет
- Есть десктоп, но ОЧЕНЬ старый (Р4 чего-то там)
- Голосовой ввод не пойдет: отлаживать малореально (от меня до АН 3313 км), а ошибок хотелось бы избежать
Железо
- Raspberry Pi - полноценная, так как читалке нужен процессор, а нам - аудиопорт
- Клавиатура - экспериментирую с нано-механикой с Али (5 кнопок, 6 кнопок)
- Звук - какие-то пассивные колонки? пока не выбрал
Софт
- TTS - RHvoice, у него из оффлайн решений самый качественный синтез
- Выбирал между Go и Python - остановился на Python, для него есть хоть какие-то библиотеки для RHvoice
- Книги скачал с Дигитеки, сконвертировал в txt для простоты чтения и обрезал неудобные для TTS оглавления и приложения
Интерфейс
Слишком много кнопок использовать не хочу: легко запутаться, да и не нужно.
Пока что основной кандидат - мини-клавиатура с 3 кнопками: up/down и enter. Возможно, с прозрачными клавишами и яркими ярлыками под ними?
Автомат состояний (собран с Mermaid):
graph TD;
СПИСОК{Список книг}
СПИСОК -->|up/down| НАЗВАНИЕ[читаем название + инструкции вниз/вверх/выбор]
СПИСОК -->|enter| ВЫБОР_НАЗВАНИЕ[выбор + читаем название]
ВЫБОР_НАЗВАНИЕ -->|enter| ЗАГРУЗКА{загружаем параграф}
ЗАГРУЗКА -->|не найдено| СБРОС_ЧИТАЕМ[сброс параграфа на 0]
ЗАГРУЗКА -->|найдено| ПАРАГРАФЫ[читаем параграфы, пока не кончатся]
СБРОС_ЧИТАЕМ --> ПАРАГРАФЫ
ПАРАГРАФЫ --> КОНЕЦ[параграфы кончились]
КОНЕЦ --> СБРОС_КОНЕЦ[сброс параграфа на 0]
СБРОС_КОНЕЦ --> НАЗВАНИЕ
ПАРАГРАФЫ -->|enter| НАЗВАНИЕ
НАЗВАНИЕ --> ОЖИДАНИЕ[не читаем ничего больше 30 минут]
ВЫБОР_НАЗВАНИЕ --> ОЖИДАНИЕ
ОЖИДАНИЕ --> СПИСОК
В общем-то, пост написал в основном чтобы самому в голове уложить эту диаграмму. Теперь попробую закодить.