Модераторы: bsa

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Чтение ID3V2, Из Мп3-файла 
:(
    Опции темы
Dobby
Дата 29.5.2008, 20:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 29.5.2008

Репутация: -2
Всего: нет



Привет всем...
Вообщем вопрос такой... к знающим людям...

Я хочу написать программу читающую id3v2 информацию из мп3 файла. Я перерыл уже довольно много инфы (в том числе и сайтик id3.org). Понял примерно че такое id3v2 и набросал на бумажке его примерную структуру. Но все равно осталось пару нерешенных вопросиков...
Например как узнать какой размер имеют данные хранящиеся в файле после заголовка какого-либо фрейма? Знаю что этот размер каким-то образом задается в этом самом заголовке, но как узнать его конкретную длину в байтах (т.е. ту длину которую необходимо прочитать)?
Например есть фрейм с ID: TIT2 (название песни). Этот Id, как я понял, записывается в заголовке фрейма в виде первых четырех байтов, а сам заголовок состоит из 10 байтов. Длина тела фрейма, как я понял, тоже хранится в этом заголовке, но в каком виде и как ее можно узнать?
Пока на этом стопорнулся. Дальше может еще какие-то непонятки появятся... 

Ну вообщем народ если можете, дайте пример такой программы на Си или хотя бы на словах объясните... Заранее благодарен...
PM MAIL   Вверх
MAKCim
Дата 29.5.2008, 21:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 2
Всего: 207



Dobby
ну и причем здесь С++?
вам явно в другой раздел, т. к вопрос явно лишь косвенным образом связан с С++


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
jonie
Дата 30.5.2008, 00:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 5613
Регистрация: 21.8.2005
Где: Владимир

Репутация: 6
Всего: 118



есть библиотека libid3 (вроде так зовется). попробуй использовать ее и забыть про формат 8) ну, или писать свою либу чтения формата...


--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
Dobby
Дата 30.5.2008, 05:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 29.5.2008

Репутация: -2
Всего: нет



Цитата(jonie @  30.5.2008,  00:45 Найти цитируемый пост)
есть библиотека libid3 (вроде так зовется). попробуй использовать ее и забыть про формат 8) 

Знаю я про эти готовые библы. Только вот смысл от них?  сам рассуди... Ну возьму я эту готовую функцию, но в итоге то я нех*ра не смогу понять...
плюс, пишу я прогу не для компа, а для сотки. А там про эти библы и вовсе забыть можно....
Цитата(MAKCim @  29.5.2008,  21:09 Найти цитируемый пост)
Dobby, ну и причем здесь С++?вам явно в другой раздел, т. к вопрос явно лишь косвенным образом связан с С++

Да почему же? Вопрос здесь напрямую связан с Си. Я спрашиваю: как на Си сделать программу читающую ID3V2 из файла? 

Это сообщение отредактировал(а) Dobby - 30.5.2008, 05:56
PM MAIL   Вверх
bronislav
Дата 30.5.2008, 06:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 334
Регистрация: 29.1.2008
Где: Украина::Донецк

Репутация: 2
Всего: 3



тут полное описание формата ID3v2. Все не читал, но просмотрев там все понятно. Если тебе понятен формат, то что тебе не понятно? Как побайтово читать?

Можно так:
Код

typedef char byte;
byte b1;
cin >> b1;
// или с помошью стандартной библиотеки (для C)
b1 = getshar();




--------------------
user posted image
иногда проще и быстрей обойти лужу, даже если кажется что она мелкая и путь напрямик короче - ведь она может скрывать открытый люк (с) mes
PM MAIL   Вверх
Dobby
Дата 30.5.2008, 09:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 29.5.2008

Репутация: -2
Всего: нет



Цитата

тут полное описание формата ID3v2.

да-да... читал я это уже....
Цитата

Все не читал, но просмотрев там все понятно. Если тебе понятен формат, то что тебе не понятно?

Ну я же все объяснил в первом посту: КАК МНЕ УЗНАТЬ РАЗМЕР ВСЕГО ТЭГА В МП3 ФАЙЛЕ?
А если быть точным то мне непонятно это предложение:
Цитата

The ID3v2 tag size is encoded with four bytes where the most significant bit (bit 7) is set to zero in every byte, making a total of 28 bits. The zeroed bits are ignored, so a 257 bytes long tag is represented as $00 00 02 01.

Если конечно сможешь, то переведи. Только рад буду....
PM MAIL   Вверх
MAKCim
Дата 30.5.2008, 09:20 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 2
Всего: 207



Цитата(Dobby @  30.5.2008,  05:43 Найти цитируемый пост)
Вопрос здесь напрямую связан с Си. Я спрашиваю: как на Си сделать программу читающую ID3V2 из файла? 

использовать fread()


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
jonie
Дата 30.5.2008, 09:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 5613
Регистрация: 21.8.2005
Где: Владимир

Репутация: 6
Всего: 118



Цитата

Знаю я про эти готовые библы. Только вот смысл от них?  сам рассуди... Ну возьму я эту готовую функцию, но в итоге то я нех*ра не смогу понять...
плюс, пишу я прогу не для компа, а для сотки. А там про эти библы и вовсе забыть можно....
сотка\комп ничего не меняет. если библиотека кросплатформенная.
ты хочешь написать какое-то ПО не зная (ну или притворяясь) языка. это путь в никуда. тебе тут мб и подскажут в общих чертах, но копать все-равно тебе. сначала стоит подучить язык, перед тем как что-либо писать вообще... тем более для мобильных устройств, где отладка несколько затруднительна.


--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
Dobby
Дата 30.5.2008, 09:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 29.5.2008

Репутация: -2
Всего: нет



Цитата(MAKCim @  30.5.2008,  09:20 Найти цитируемый пост)
использовать fread()

Да ты петросян просто какой-то. Не знаешь -  не пиши вообще... 
Извините за оффтопик...

Добавлено через 8 минут и 57 секунд
Цитата

ты хочешь написать какое-то ПО не зная (ну или притворяясь) языка. это путь в никуда. тебе тут мб и подскажут в общих чертах, но копать все-равно тебе. 

Вот и копаю щас...
И вообще я разве тебе говорю: "напиши мне готовую программу"?
Цитата

сначала стоит подучить язык, перед тем как что-либо писать вообще... 

Я не говорю что я знаю язык Си от и до, но написать такую программу, я думаю смогу, если сначала понять че писать вообще...
Чуть выше твоего поста я написал:
Цитата

Ну я же все объяснил в первом посту: КАК МНЕ УЗНАТЬ РАЗМЕР ВСЕГО ТЭГА В МП3 ФАЙЛЕ?
А если быть точным то мне непонятно это предложение:
Цитата

The ID3v2 tag size is encoded with four bytes where the most significant bit (bit 7) is set to zero in every byte, making a total of 28 bits. The zeroed bits are ignored, so a 257 bytes long tag is represented as $00 00 02 01.

Если конечно сможешь, то переведи. Только рад буду....

Цитата

тем более для мобильных устройств, где отладка несколько затруднительна.

В этом я абсолютно с тобой согласен. Но тем не менее я же пишу...
PM MAIL   Вверх
bronislav
Дата 30.5.2008, 11:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 334
Регистрация: 29.1.2008
Где: Украина::Донецк

Репутация: 2
Всего: 3



Цитата

The ID3v2 tag size is encoded with four bytes where the most significant bit (bit 7) is set to zero in every byte, making a total of 28 bits. The zeroed bits are ignored, so a 257 bytes long tag is represented as $00 00 02 01.

Размер тега ID3v2 кодируется четырьмя байтами, где каждый старший бит (бит 7) установлен в ноль, в каждом байте, оставляя задействоваными всего 28 бит. Нулевые биты игнорируются. Таким образом таг длиной 257 байт представляется как $00 00 02 01


--------------------
user posted image
иногда проще и быстрей обойти лужу, даже если кажется что она мелкая и путь напрямик короче - ведь она может скрывать открытый люк (с) mes
PM MAIL   Вверх
MAKCim
Дата 30.5.2008, 11:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 2
Всего: 207



Цитата(Dobby @  30.5.2008,  09:37 Найти цитируемый пост)
Да ты петросян просто какой-то. Не знаешь -  не пиши вообще... 

господин вы хороший
вопрос был в чем? 
Цитата(Dobby @  30.5.2008,  05:43 Найти цитируемый пост)
Вопрос здесь напрямую связан с Си. Я спрашиваю: как на Си сделать программу читающую ID3V2 из файла? 

читать файл можно через fread()
все остальное к С не имеет никакого отношения
это и было озвучено в моем первом посте


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
Dobby
Дата 30.5.2008, 12:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 29.5.2008

Репутация: -2
Всего: нет



Цитата
Размер тега ID3v2 кодируется четырьмя байтами, где каждый старший бит (бит 7) установлен в ноль, в каждом байте, оставляя задействоваными всего 28 бит. Нулевые биты игнорируются. Таким образом таг длиной 257 байт представляется как $00 00 02 01

Да перевел то я перевел это... Только вот вопрос лично к тебе: ты знаешь как перевести $00 00 02 01 в число 257?
Цитата(MAKCim @  30.5.2008,  11:45 Найти цитируемый пост)
вопрос был в чем? 

Ну давай будем говорить на твоем языке...
Вопрос во-первых был к "знающим людям"... 
Во-вторых, когда я задавал "вопрос", я предпологал получить на него ХОТЬ КАКОЙ-ТО ОТВЕТ.
Цитата(MAKCim @  30.5.2008,  11:45 Найти цитируемый пост)

Цитата

Вопрос здесь напрямую связан с Си. Я спрашиваю: как на Си сделать программу читающую ID3V2 из файла?
 читать файл можно через fread() все остальное к С не имеет никакого отношения это и было озвучено в моем первом посте

Об этом я и говорю... Не знаешь - не пиши вообще... 

З.Ы. Тебе можно совет дать? Ты успокойся немного... Ты может че-то и знаешь, но твоя набыченность на всех людей ни к чему тебя не приведет...
PM MAIL   Вверх
Void
Дата 30.5.2008, 13:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


λcat.lolcat
****


Профиль
Группа: Участник Клуба
Сообщений: 2206
Регистрация: 16.11.2004
Где: Zürich

Репутация: 2
Всего: 173



Цитата(Dobby @  30.5.2008,  14:39 Найти цитируемый пост)
Да перевел то я перевел это...

Но, видимо, все равно ничего не понял.
Цитата(Dobby @  30.5.2008,  14:39 Найти цитируемый пост)
как перевести $00 00 02 01 в число 257?

Код
#include <stdio.h>
#include <stdint.h>

int id3v2_get_size(const uint8_t *p)
{
    return ((uint32_t)p[0] << 21) +
           ((uint32_t)p[1] << 14) +
           ((uint32_t)p[2] << 7 ) +
                      p[3];
}

int main(void)
{
    uint8_t tag[] = { 0x00, 0x00, 0x02, 0x01 };
    printf("%d\n", id3v2_get_size(tag));
    return 0;
}



--------------------
“Coming back to where you started is not the same as never leaving.” — Terry Pratchett
PM MAIL WWW GTalk   Вверх
MAKCim
Дата 30.5.2008, 15:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 2
Всего: 207



Dobby
Цитата(Dobby @  30.5.2008,  12:39 Найти цитируемый пост)
З.Ы. Тебе можно совет дать? Ты успокойся немного... Ты может че-то и знаешь, но твоя набыченность на всех людей ни к чему тебя не приведет... 

вообще говоря, я крайне лояльно ко всем отношусь
это подтверждается тем, что я тебе ни минус не поставил, ни предупреждение не влепил
хотя мог бы и по делу
это во-первых
во-вторых, если ты не можешь по готовой спецификации написать программу, то ты вдвойне ошибся разделом


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
Dobby
Дата 1.6.2008, 20:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 29.5.2008

Репутация: -2
Всего: нет



MAKCim
Конкретно посвящаю этот пост тебе...
Возможно мне и нужно было бы подучить язык Си (а это любому полезно). Возможно я пока и не могу написать эту программу (но обязательно напишу). Возможно ты и лучше меня это можешь сделать. 
Может быть ты мне дашь примеры программ, написанных тобой? А заодно буду рад услышать критику практика на мой скромный труд, например, вот [B]здесь[/B]. Наверное мне там люди по ошибке "Спасибо" говорят?..
Такие люди как ты встречаются... Недавно на телесусе услышал нечто подобное. Помощи никакой. Ну ниче. Разобрался в чипсетах. Думаю и здесь будет такая же история. По крайней мере, надеюсь на это. Годам к 18-19 уверен, буду легко такие задачки прощелкивать. Вообщем, кинешь ссылки на свои работы ок?
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0911 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.