Мы в Telegram
Добавить новость
123ru.net
Работа
Июль
2020

Нужно написать функцию для анализа тега MP3 ID3v2 . Python

0
Нужно написать функцию для анализа тега MP3 ID3v2
Сигнатура функции: def parse_id3v2(file_path)

Описание формата:
ID3v2 tag contains metadata(artist, album name, song name, etc) of MP3 file.
usually (otherwise, don't parse) MP3 files start with ID3v2 tag, then audio data follows
ID3v2 tag consists of header and body, header (10 bytes in total):
ID3v2/file identifier "ID3"
ID3v2 version $04 00 (ID3v2 version 4), $03 00 (ID3v2 version 3)
ID3v2 flags %abcd0000 (1 byte, if `b` is set - extended header present)
ID3v2 size 4 * %0xxxxxxx (4 bytes, first bit of each byte always 0, 28 effective bits in total)

example:
b'ID3\x03\x00\x00\x00\x00\x03\x19'
ID3v2/file identifier b'ID3' (b'ID3' - the way Python handle binary data in ASCII range, equal to b'x49x44x33')
ID3v2 version $03
ID3v2 flags $00
ID3v2 size $00 00 03 19 = 409 bytes
tag body consists of one or more frames, followed one after another
tag frame consists of header and body (with actual data)
header (10 bytes in total), size format differs for ID3v2 version 3 and version 4:
Frame ID $xx xx xx xx (four ASCII characters)
Size (v4) 4 * %0xxxxxxx
size (v3) $xx xx xx xx (32 effective bits in total)
Flags $xx xx

Пример:
b'TYER\x00\x00\x00\x05\x00\x00\x002004'
Frame ID b'TYER'
Size $00 00 00 05 = 5 bytes
Flags $00 00
Data $00 b'2004' -- first byte - encoding (see below), followed by data (year of release)
There are several frame types. One of them, text information frames (identified by Frame ID starting with 'T' as in example above) should be parsed and binary data converted to string.

Text frame body format:

first byte is encoding, values:
$00 – ISO-8859-1 (LATIN-1, Identical to ASCII for values smaller than 0x80).
$01 – UTF-16 (UCS-2) encoded Unicode with BOM, in ID3v2.2 and ID3v2.3.
$02 – UTF-16BE encoded Unicode without BOM, in ID3v2.4.
$03 – UTF-8 encoded Unicode, in ID3v2.4.
then actual data follows
To convert to string use `decode` function, e.g. in REPL:
>>> b'\xd0\x9f\xd1\x80\xd0\xb8\xd0\xb2\xd0\xb5\xd1\x82, Python 3!'.decode('UTF-8')
'Привет, Python 3!'

Примечания:
this is educational task, don't implement all features described in specification, just what required in task
ensure your file starts with ID3 tag
ensure ID3v2's version is 3 or 4
don't parse files with extended header
realworld ID3 tags can be incorrectly constructed, be careful (use Python 'with' construct to open file, exceptions should be handled)
if it's not possible to parse file (for any reason: file not exists, no file read access, bad format, etc) return empty list
read only tag data from file, don't read it all, this decreases IO dramatically (2.5 VS 27 seconds on my 1.6 GB directory with MP3s)
it's ok to use "magic numbers" while parsing structures, e.g. version (major) occupies byte 4 in ID3 header, so can be accessed in following way: tag_header[3] (compare with tag_header_offset = 3; tag_header[tag_header_offset])
you may use hex editor or Python binascii module to investigate file content
see attached doc for more details
Your function should return list of tuples (in order of appearance) with tag data, tuple format:

Frame ID
size
binary data
for text fields data converted to string, otherwise None

Примеры:
>>> parse_id3v2('ariya_ulitsa_roz.mp3')
[(b'TIT2', 19, b'\x03\xd0\xa3\xd0\xbb\xd0\xb8\xd1\x86\xd0\xb0 \xd1\x80\xd0\xbe\xd0\xb7\x00', 'Улица роз\x00'), (b'TALB', 29, b'\x03\xd0\x93\xd0\xb5\xd1\x80\xd0\xbe\xd0\xb9 \xd0\xb0\xd1\x81\xd1\x84\xd0\xb0\xd0\xbb\xd1\x8c\xd1\x82\xd0\xb0\x00', 'Герой асфальта\x00'), (b'TCON', 13, b'\x03Heavy Metal\x00', 'Heavy Metal\x00'), (b'TDRC', 6, b'\x001987\x00', '1987\x00'), (b'TRCK', 5, b'\x005/6\x00', '5/6\x00'), (b'TPE1', 10, b'\x03\xd0\x90\xd1\x80\xd0\xb8\xd1\x8f\x00', 'Ария\x00')]

>>> parse_id3v2('01_epidemiya_pridumai_svetlii_mir_myzuka.me.mp3')
[(b'TALB', 61, b'\x01\xff\xfe\x1f\x04@\x048\x044\x04C\x04<\x040\x049\x04 \x00A\x042\x045\x04B\x04;\x04K\x049\x04 \x00<\x048\x04@\x04 \x00(\x00S\x00i\x00n\x00g\x00l\x00e\x00)\x00', 'Придумай светлый мир (Single)'), (b'TCON', 25, b'\x01\xff\xfeP\x00o\x00w\x00e\x00r\x00 \x00M\x00e\x00t\x00a\x00l\x00', 'Power Metal'), (b'TIT2', 43, b'\x01\xff\xfe\x1f\x04@\x048\x044\x04C\x04<\x040\x049\x04 \x00A\x042\x045\x04B\x04;\x04K\x049\x04 \x00<\x048\x04@\x04', 'Придумай светлый мир'), (b'TPE1', 19, b'\x01\xff\xfe-\x04?\x048\x044\x045\x04<\x048\x04O\x04', 'Эпидемия'), (b'TRCK', 13, b'\x01\xff\xfe0\x001\x00/\x000\x004\x00', '01/04'), (b'TYER', 11, b'\x01\xff\xfe2\x000\x001\x006\x00', '2016'), (b'TSSE', 13, b'\x03Lavf51.12.1\x00', 'Lavf51.12.1\x00'), (b'APIC', 58516, b'\x00image/jpg\x00\x03\x00\xff\xd8\xff\xe0\x00\x10JFIF\x00\x01\x01\x01\x00`\x00`\x00\x00\xff\xfe \x00?CREATOR: gd-jpeg v1.0 (using IJG JPEG v80), default quality\n\x00\xff\xdb ... #50kilobytes of hex data removed from example# ', None), (b'COMM', 34, b'\x01eng\xff\xfe\x00\x00\xff\xfe(\x00m\x00y\x00z\x00u\x00k\x00a\x00.\x00o\x00r\x00g\x00)\x00', None)]

Нужно убедиться, что парсер работает на mp3, которые я приложил в работе.

Спецификация:
http://id3.org/id3v2.3.0
http://id3.org/id3v2.4.0-structure
http://id3.org/id3v2.4.0-frames
Объединил в
ch14_id3v2_3in1.pdf , которую тоже приложил к работе.

Прикладываю само задание , mp3 файлы и спецификацию.
Если будет что-то непонятно - пишите.






Загрузка...


Губернаторы России
Москва

Собянин: Москва завершает переход на новый стандарт экстренной медпомощи


Спорт в России и мире
Москва

РОСГВАРДИЯ ОБЕСПЕЧИЛА ПРАВОПОРЯДОК ВО ВРЕМЯ ФУТБОЛЬНОГО МАТЧА «ЦСКА» - «СПАРТАК» В МОСКВЕ


Загрузка...

Все новости спорта сегодня


Новости тенниса
Ига Свёнтек

Свёнтек: я чувствую, что с каждым годом получаю всё большую поддержку


Загрузка...


123ru.net – это самые свежие новости из регионов и со всего мира в прямом эфире 24 часа в сутки 7 дней в неделю на всех языках мира без цензуры и предвзятости редактора. Не новости делают нас, а мы – делаем новости. Наши новости опубликованы живыми людьми в формате онлайн. Вы всегда можете добавить свои новости сиюминутно – здесь и прочитать их тут же и – сейчас в России, в Украине и в мире по темам в режиме 24/7 ежесекундно. А теперь ещё - регионы, Крым, Москва и Россия.


Загрузка...

Загрузка...

Экология в России и мире
Москва

Жёсткие экологические требования решат инновационные энерготехнологии





Путин в России и мире
Москва

Эксперт: корректировка порогов крупного и особо крупного ущерба по экономическим статьям оправдана и своевременна


Лукашенко в Беларуси и мире



123ru.netмеждународная интерактивная информационная сеть (ежеминутные новости с ежедневным интелектуальным архивом). Только у нас — все главные новости дня без политической цензуры. "123 Новости" — абсолютно все точки зрения, трезвая аналитика, цивилизованные споры и обсуждения без взаимных обвинений и оскорблений. Помните, что не у всех точка зрения совпадает с Вашей. Уважайте мнение других, даже если Вы отстаиваете свой взгляд и свою позицию. Ru24.net — облегчённая версия старейшего обозревателя новостей 123ru.net.

Мы не навязываем Вам своё видение, мы даём Вам объективный срез событий дня без цензуры и без купюр. Новости, какие они есть — онлайн (с поминутным архивом по всем городам и регионам России, Украины, Белоруссии и Абхазии).

123ru.net — живые новости в прямом эфире!

В любую минуту Вы можете добавить свою новость мгновенно — здесь.





Зеленский в Украине и мире

Навальный в России и мире


Здоровье в России и мире


Частные объявления в Вашем городе, в Вашем регионе и в России






Загрузка...

Загрузка...



Коммерсантъ

ДЭГ местного значения // Суд оставил в силе итоги электронного голосования на выборах президента



Москва

Онлайн марафон "Новинки" - Тренды светодизайна на выставке Light + Building 2024

Друзья 123ru.net


Информационные партнёры 123ru.net



Спонсоры 123ru.net