|
ОбзорОчень хочется назвать эту программу собственно плейером, но ничем, кроме эмоций, такое объяснение не оправдано. Плейер - это железка. Комплекс. Либо плейер - это 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, поэтому все функции приводятся применительно к клавиатуре, в [] указываются клавиши ДУ.
Пользовательское меню включает в себя следующие функции:
На время работы меню часть клавиш ДУ переназначается (цифры, например, могут быть использованы для ввода значений, стрелки - для увеличения/уменьшения значений). Если пользователь вошел в меню, но никаких больше команд не поступило, по прошествии 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 ! |