Введение

PC-ОС

БП

Дисплей

Координатор

Обзор

Очень хочется назвать эту программу собственно плейером, но ничем, кроме эмоций, такое объяснение не оправдано. Плейер - это железка. Комплекс. Либо плейер - это mpg321 - он декодирует файлы и Vortex - он преобразует цифру в звук. Поэтому назовем объект рассмотрения этого раздела координатором.

Его задача: понимать пожелания пользователя (через клавиатуру и/или ИК ДУ) и в соответствии с ними управлять ОС, аппаратурой и mpg321.

Код координатора не слишком изящен, но он может являться примером взаимодействия с различными программными и аппаратными частями плейера: построение двунаправленной pipe и запуск mpg321, использования процедуры select, общения с com-портами, использования таймеров реального времени и т.д..

Заметки о пользовательском интерфейсе

Структура директорий коллекции следующая: всё храниться в /Data/_music. В этой директории присутствуют вложенные директории с именами/названиями исполнителей и директории дополнительных подгрупп (_Instrumental/, _Classic/, _Humour/ и т.д...). Внутри подгрупп могут быть отдельные файлы, директории с именами/названиями исполнителей или даже вложенные подгруппы (_Humour/_kvn/Megapolis/mix0.mp3). Плейер не интересуется именами файлов, но анализирует имена директорий на наличие первого символа, совпадающего с '_'. Директория, имя которой начинается с подчерка, считается подгруппой (таким образом и сама /Data/_music есть подгруппа), следующая по вложенности - именем/названием исполнителя, последняя по вложенности - альбомом.

Индикатор имеет всего 16 знакомест, поэтому бОльшая его часть работает в режиме бегущей строки. При обычном воспроизведении 13 знакомест отведено под строку, составленную из названия подгруппы (исключая /Data/_music) + название/имя исполнителя + альбом + имя файла либо id3-тег (понимаются только простейшие - v1 - теги). Т.е. эта строка, по сути, является полным путевым именем файла. Однако плейер может позиционировать её при первом выводе таким образом, чтобы на индикатор первым (до первого скролирования) была выведена определенная часть пути.

Три последних знакоместа отводятся под пробел и две цифры - проценты от уже воспроизведенного объёма текущего файла. Мне почему-то кажется это более удобным, чем общепринятое минуты:секунды.

В случае вывода пользовательского меню на индикатор строка не скролируется, все 16 знакомест отводятся под пункт меню.

После запуска плейера начинается воспроизведение очередного файла. Плейер управляется как с пульта так и с клавиатуры PC, поэтому все функции приводятся применительно к клавиатуре, в [] указываются клавиши ДУ.

  • "Пробел" [||] - пауза.
  • Стрелки вправо/влево [7, 9] - переход на предыдущий следующий файл. Строка на индикаторе позиционируется на имя файла, скролирование приостанавливается на пару секунд. [8] - тоже самое, но без смены воспроизводимого файла.
  • Стрелки вверх/вниз [4, 6] - переход к следующей/предыдущей директории. Строка на индикаторе позиционируется на имя директории, скроллинг приостанавливается. [5] - тоже, но без смены директории.
  • PageUp/PageDown [1, 3] - переход к следующему/предыдущему исполнителю (т.е. между директориями, непосредственно входящими в текущую подгруппу). Строка позиционируется на имя изменяемой директории, скроллинг замирает. [2] - тоже, но без смены директории.
  • Цифры 1..9 - запуск таймера выключения. 0 - остановка таймера. Таймер сработает через n * 5 минут (n - нажатая цифра - т.е. время от 5 минут до полутора часов) и остановит ОС. Звук на выходе системы исчезает, через ~5 минут усилитель отключит свое питание и питание PC (так я засыпаю под музыку).
  • Любая буквенная клавиша - переход к исполнителю в основной подгруппе, имя которого начинается на указанную букву, если клавиша нажата с Shift - то же самое, но подразумевается кирилическое значение клавиши.
  • '<' и '>' [<<, >>] - перемотка трека на несколько секунд назад и вперед.
  • F9 - перезапуск координатора (например, после переиндексации коллекции).
  • F10 - остановка ОС (ну, если хочется правильно выключить плейер. Несмотря на все предусмотренные меры, я стараюсь использовать эту функцию).
  • [Mode] - (только с ДУ) - переход в режим пользовательского меню.
  • [>10] - (только с ДУ) - подтверждение выбора в меню (требуется не для всех пунктов).

Пользовательское меню включает в себя следующие функции:

  • Volume - регулировка громкости.
  • Letter - переход к исполнителю в основной подгруппе, имя которого начинается на указанный символ. Символ можно задать как перебором стрелками, так и введя КОИ-8-код.
  • Track - номер трека в списке. Можно посмотреть текущий номер или перейти к другому.
  • Sleep - оставшееся до остановки время (в минутах). Можно установить новое значение.
  • Pan - регулировка стереобалланса.
  • Restart - перезапуск координатора.
  • Halt - остановка ОС.

На время работы меню часть клавиш ДУ переназначается (цифры, например, могут быть использованы для ввода значений, стрелки - для увеличения/уменьшения значений). Если пользователь вошел в меню, но никаких больше команд не поступило, по прошествии 15-и секунд индикатор перейдет в режим вывода бегущей строки, а через 60 секунд будут восстановлены и функции клавиш ДУ. При нажатии клавиш между 15 и 60-й секундами индикатор вновь вернётся к отображению пункта меню.

Связь с mpg321

Как уже было сказано ранее, общение координатора с mpg321 осуществляется через двунаправленный текстовый канал. Обмен происходит построчно. Координатор отправляет mpg321 команды, вроде таких: "load /Data/_music/test.mp3" или "quit", плейер отзывается "@P 0" (воспроизведение текущего файла закончено) или "@F 100 200 33.3 66.6" (текущая позиция воспроизведения). Подробности системы команд в мануале на mpg321.

Заметки о коде координатора

Ну что ж: ассемблер i8051 мы изучили, pascal'ем побаловались, shell'ом размялись - теперь возьмёмся за C :))

Исходник координатора здесь.

Практически, о нём было уже рассказано много, да и комментариев внутри кода - море, отмечу только, что на время отладки (когда к машине подключен обычный монитор) мной широко использовались возможности библиотеки curses - не удивляйтесь, что координатор использует её (эта библиотека управляет выводом на текстовый терминал - цвета, перемещение курсора, ввод клавиш...).

Вы можете, также, при наличии хорошего канала скачать полный дамп корневой файловой системы - в нём будет всё, кроме /Data (и, следовательно, координатора). Качать здесь, но ОСТОРОЖНО - все таки 47 Мб ! Дамп сделан tar'ом, без сжатия, tar после этого сжат rar'ом - это получилось компактнее, чем zip и bzip2. Ещё раз: это не инсталятор, а только дамп - для его разворачивания нужен живой Linux !

Владимир