Как я могу прочитать кадры id3v2? - PullRequest
0 голосов
/ 20 июня 2011

Я пытаюсь прочитать кадры id3, и моя проблема в том, что я не могу получить полный заголовок.Когда заголовок mp3 длинный, мой результат - строка без конца и без первых 9 символов.Если название песни короткое, мой результат - название без первых 9 символов.

struct ID3V2frame
{
    char header[4];
    char *id3frame[readBytes];
    int sizze[4];
}frame;

fseek(file,10,SEEK_SET); // skip id3 header

fread(&frame.header,sizeof(frame),1,file);


readBytes = ((frame.sizze[0] & 127) << 21) |
((frame.sizze[1] & 127) << 14) |
((frame.sizze[2] & 127) << 7)  |
(frame.sizze[3] & 127); 

fread(&frame.id3frame,sizeof(frame),1,file);
if(strncmp(frame.header,"TIT2", 4) == 0)
    printf("%s",frame.id3frame);

1 Ответ

0 голосов
/ 20 июня 2011

Я знаю, что что-то не так, потому что sizeof(struct ID3V2frame) вернется:

sizeof(char[4]) + sizeof(char pointer) + sizeof(int[4])

Обратите внимание, что структура имеет указатель на символ, и указатель в вашей системе составляет, вероятно, 4 байта. Таким образом, вы fread () неверный размер и неправильный путь.

Я не знаю об ID3, но где-то в заголовке должен быть размер этой строки.

Редактировать: чтение документа

Обзор кадра ID3v2

Поскольку тег состоит из заголовка тега и тело тега с одним или несколькими кадры, все кадры состоит из заголовок кадра, за которым следует один или несколько поля, содержащие фактические Информация. Макет рамы заголовок:

Идентификатор кадра $ xx xx xx xx (четыре символа)

Размер $ хх хх хх хх

Флаги $ хх хх

Идентификатор кадра сопровождается размером дескриптор, делающий полный размер заголовка из десяти байтов в каждом кадре. Размер рассчитывается как размер кадра, исключая заголовок кадра (размер кадра - 10).

Ваша структура фрейма неверна.

После того, как вы исправили свою структуру и получили правильную сумму size, вы можете fread() size-10 байт получить содержимое кадра.

Будьте осторожны, потому что вам нужно проверить идентификатор кадра, чтобы увидеть, является ли он именем файла заголовка, поскольку в спецификации сказано, что они могут быть в ЛЮБОМ порядке.

Пожалуйста, обратитесь к документации. ID3v2 кажется хорошо документированным. Я смог получить всю эту информацию за 5 минут.

http://www.id3.org/id3v2.3.0

...