
Парсинг метаданных DSF-файлов на Ассемблере

Парсинг метаданных DSF-файлов на Ассемблере
Во время очередного пиратского набега на торренты мне попался музыкальный альбом в формате DSF. Это контейнер для аудиопотока в супер-мега качестве, разработанный компаниями Sony и Philips. В результате и файлы получаются по 400-500 мегабайт на одну песню. Может быть для аудиофилов такое качество как-то можно обосновать, но для меня этот формат представляет исключительно спортивный интерес. А точнее, как из таких файлов извлечь метаданные.
В спецификации формата DSF внутренняя структура описана очень подробно, хотя там особо ничего и описывать не надо. Формат очень простой.
Первые четыре байта заголовка - сигнатура файла "DSD " (строка с пробелом в конце), затем QWORD с размером заголовка файла, это фиксированное значение 1Ch или 28 в десятичной системе счисления. Следующий QWORD - полный размер DSF-файла. Оставшиеся 8 байт - смещение от начала файла до блока метаданных. Если это значение нулевое, то метаданных в файле нет. Сами метаданные хранятся в стандартном формате ID3v2.
На первом этапе надо прочитать заголовок файла, проверить его принадлежность к DSF-формату, проверить наличие метаданных, а затем с помощью функции SetFilePointer передвинуть указатель от начала файла до обозначенной в заголовке позиции.
Code (Assembler) : Убрать нумерацию
- invoke CreateFile,sample,GENERIC_READ,\
- FILE_SHARE_READ,0,OPEN_EXISTING,0,0
- mov [desc],eax
- ; Прочитать заголовок файла
- invoke _lread,[desc],buff,28
- ; Проверить корректность формата
- cmp dword[buff],'DSD '
- jne loc_ret
- cmp dword[buff+4],1Ch
- jne loc_ret
- ; Проверить наличие метаданных
- cmp dword[buff+14h],0
- jnz @f
- cmp dword[buff+18h],0
- je loc_ret
- @@:
- ; Установить указатель файла на блок метаданных
- invoke SetFilePointer,[desc],\
- dword[buff+14h],buff+18h,FILE_BEGIN
- ; Что-то пошло не так
- cmp eax,-1
- je loc_ret
В приложении пример программы с исходным текстом, которая парсит метаданные из файла DSF и выводит их. Сам сэмпл не прикладываю, так как файлы слишком большие.
Просмотров: 359 | Комментариев: 0
Метки: Assembler, мультимедиа

Внимание! Статья опубликована больше года назад, информация могла устареть!
Комментарии
Отзывы посетителей сайта о статье
Комментариeв нет

Добавить комментарий
Заполните форму для добавления комментария
