Наверное все знают, что в моторолах встроенный плеер (не DAP) может играть только одну песню, либо плейлисты.
Причем создавать плейлисты на самом телефоне очень неудобно, т.к. вся музыка вываливается в общем списке, без поиска и сортировки по алфавиту. С флешкой объемом 1 гиг или более этот процесс становится изощренной формой мазохизма.
Налицо потребность в средстве создания плейлистов на компьютере.
Формат плейлистов .pla (или .apl на старых телефонах) длительное время не был разобран, но недавно FaberfoX с ModMyMoto выложил программу Playlist Maker. Программа консольная, глючная, тяжелая, не имеет настроек и требует очень специфической организации папок с музыкой, но при этом работает.
Причем камрад FaberfoX не горит желанием публиковать исходники или хотя бы спецификацию формата, предлагая всем желающим разбираться самостоятельно.
Я подумал: "чем мы хуже?", посидел над .pla файлами и расковырял этот формат. Вообще я хотел бы написать свою прогу для работы с плейлистами, но сейчас мне не хватает свободного времени. Так что выкладываю информацию, может кому-нибудь пригодится.
Для интересующихся: необходимо владение хекс-редактором с доступом к диску, например WinHex (XVI32 не подходит) и представление о структурах файловой системы FAT. Также обязательно понимание принципа организации длинных имен (т.наз. LFN).
1. Где встречаются эти плейлисты и с чем их едят?
Описываемый формат плейлистов используется во всех GSM P2K телефонах Моторола. В данном случае нас интересуют только модели с картой памяти MicroSD (E398, E1, V635, V3i, L7, L7e, L9, K1, Z3, W510).
В "старых" моделях плейлисты имеют расширение .apl, в "новых" (семейство K1/Z3/L7e/L9/W510) - .pla. И в тех и других есть также файлы слайдшоу .pvl, они представляют значительно меньший интерес, но формат у них тот же самый.
Независимо от расширения, формат файлов .pla, .apl, .pvl одинаковый.
2. Структура плейлистов
Файлы имеют бинарный формат с записями фиксированной длины. Вместо пути к файлам там находятся указатели на структуры файловой системы, относящиеся к этим файлам. Все числа представлены в формате big-endian.
Заголовок - 8 байт
- 2 байта - число записей
- 2 байта - интервал между файлами в секундах (только для слайдшоу; для плейлистов всегда 1)
- 4 байта - не используются
Запись - 8 байт
- 2 байта - тип памяти (для L9: 01 01 - карта, 02 00 - телефон; для L7: 01 40 - карта, код телефона проверяйте сами
- 2 байта - индекс последней по счету LFN записи файла (первой по очереди, т.к. записи идут в обратном порядке) в директории
- 4 байта - номер логического сектора директории
Примечания:
Рис. 1. Файл плейлиста в WinHex
На рис.1 мы видим файл .pla, содержащий 4 записи, 2-я запись соответствует файлу \mobile\audio\New Music\AC-DC - Highway to Hell.mp3
В директории \mobile\audio\New Music этот файл (точнее, его последняя LFN запись) находится в логическом секторе 0x00000f48 (3912), индекс записи - 0x0c (12).
Рис. 2. Сектор директории в WinHex
На рис.2 мы видим сектор 3912 диска, принадлежащий директории \mobile\audio\New Music.
Записи с 12 по 14 содержат длинное имя файла "AC-DC - Highway to Hell.mp3", запись 15 - его короткое имя и остальные параметры (размер, № первого кластера, даты создания и модификации).
Хорошую спецификацию по LFN можно найти здесь: http://home.teleport.com/~brainy/lfn.htm
Добавлено позже (15.4.2008, 17:38):
В качестве примера написал небольшую консольную прогу, которая читает плейлист и выдает имена файлов.
Требуется один параметр - полный путь к плейлисту, включая букву диска. Плейлист должен быть на карте памяти, которая должна находиться в телефоне (подключенном в режиме mass storage), или в ридере. Не используйте прогу с файлами на жестком диске - защита от дурака не предусмотрена.
Пример:
Сообщение отредактировал blackbox - 15.4.2008, 14:10
Причем создавать плейлисты на самом телефоне очень неудобно, т.к. вся музыка вываливается в общем списке, без поиска и сортировки по алфавиту. С флешкой объемом 1 гиг или более этот процесс становится изощренной формой мазохизма.
Налицо потребность в средстве создания плейлистов на компьютере.
Формат плейлистов .pla (или .apl на старых телефонах) длительное время не был разобран, но недавно FaberfoX с ModMyMoto выложил программу Playlist Maker. Программа консольная, глючная, тяжелая, не имеет настроек и требует очень специфической организации папок с музыкой, но при этом работает.
Причем камрад FaberfoX не горит желанием публиковать исходники или хотя бы спецификацию формата, предлагая всем желающим разбираться самостоятельно.
Я подумал: "чем мы хуже?", посидел над .pla файлами и расковырял этот формат. Вообще я хотел бы написать свою прогу для работы с плейлистами, но сейчас мне не хватает свободного времени. Так что выкладываю информацию, может кому-нибудь пригодится.
Для интересующихся: необходимо владение хекс-редактором с доступом к диску, например WinHex (XVI32 не подходит) и представление о структурах файловой системы FAT. Также обязательно понимание принципа организации длинных имен (т.наз. LFN).
1. Где встречаются эти плейлисты и с чем их едят?
Описываемый формат плейлистов используется во всех GSM P2K телефонах Моторола. В данном случае нас интересуют только модели с картой памяти MicroSD (E398, E1, V635, V3i, L7, L7e, L9, K1, Z3, W510).
В "старых" моделях плейлисты имеют расширение .apl, в "новых" (семейство K1/Z3/L7e/L9/W510) - .pla. И в тех и других есть также файлы слайдшоу .pvl, они представляют значительно меньший интерес, но формат у них тот же самый.
Независимо от расширения, формат файлов .pla, .apl, .pvl одинаковый.
2. Структура плейлистов
Файлы имеют бинарный формат с записями фиксированной длины. Вместо пути к файлам там находятся указатели на структуры файловой системы, относящиеся к этим файлам. Все числа представлены в формате big-endian.
Заголовок - 8 байт
- 2 байта - число записей
- 2 байта - интервал между файлами в секундах (только для слайдшоу; для плейлистов всегда 1)
- 4 байта - не используются
Запись - 8 байт
- 2 байта - тип памяти (для L9: 01 01 - карта, 02 00 - телефон; для L7: 01 40 - карта, код телефона проверяйте сами
- 2 байта - индекс последней по счету LFN записи файла (первой по очереди, т.к. записи идут в обратном порядке) в директории
- 4 байта - номер логического сектора директории
Примечания:
- Естественно, прочитать запись можно только в том случае, если файл находится на карте, телефон подключен к компьютеру в режиме съемного диска или сама карта находится в ридере.
Записи для файлов, находящихся в памяти телефона, прочитать нельзя. - В 3-м параметре всегда находится текущий сектор, а не начальный, при этом 2-й параметр (индекс записи в директории) указывается от начала этого сектора, а не от начала директории (даже если директория занимает больше одного сектора).
Смещение от начала сектора = индекс * 32.
Рис. 1. Файл плейлиста в WinHex
На рис.1 мы видим файл .pla, содержащий 4 записи, 2-я запись соответствует файлу \mobile\audio\New Music\AC-DC - Highway to Hell.mp3
В директории \mobile\audio\New Music этот файл (точнее, его последняя LFN запись) находится в логическом секторе 0x00000f48 (3912), индекс записи - 0x0c (12).
Рис. 2. Сектор директории в WinHex
На рис.2 мы видим сектор 3912 диска, принадлежащий директории \mobile\audio\New Music.
Записи с 12 по 14 содержат длинное имя файла "AC-DC - Highway to Hell.mp3", запись 15 - его короткое имя и остальные параметры (размер, № первого кластера, даты создания и модификации).
Хорошую спецификацию по LFN можно найти здесь: http://home.teleport.com/~brainy/lfn.htm
Добавлено позже (15.4.2008, 17:38):
В качестве примера написал небольшую консольную прогу, которая читает плейлист и выдает имена файлов.
Требуется один параметр - полный путь к плейлисту, включая букву диска. Плейлист должен быть на карте памяти, которая должна находиться в телефоне (подключенном в режиме mass storage), или в ридере. Не используйте прогу с файлами на жестком диске - защита от дурака не предусмотрена.
Пример:
Код
playlist.exe "J:\mobile\audio\All Music.pla"
Сообщение отредактировал blackbox - 15.4.2008, 14:10