Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Visual C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 04.02.2012, 19:47   #1
halcyon
crafter
Форумчанин
 
Аватар для halcyon
 
Регистрация: 03.09.2011
Сообщений: 127
По умолчанию считывание mp3-тегов, VS C++

Уважаемые, у меня возникла жизненно-необходимая задача научиться находить теги в мп3 файле и выводить их на экран. Программа консольная. Подскажите, пожалуйста, в каком направлении копать, какие средства мне в этом могут помочь.
halcyon вне форума Ответить с цитированием
Старый 04.02.2012, 19:54   #2
pproger
C++ hater
СтарожилДжуниор
 
Аватар для pproger
 
Регистрация: 19.07.2009
Сообщений: 3,333
По умолчанию

http://id3lib.sourceforge.net/
I invented the term Object-Oriented, and I can tell you I did not have C++ in mind. (c)Alan Kay

My other car is cdr.

Q: Whats the object-oriented way to become wealthy?
A: Inheritance
pproger вне форума Ответить с цитированием
Старый 13.02.2012, 20:22   #3
halcyon
crafter
Форумчанин
 
Аватар для halcyon
 
Регистрация: 03.09.2011
Сообщений: 127
По умолчанию

к сожалению, не смог разобраться с архивом в нем сотни файлов. что делать, бог его знает.
halcyon вне форума Ответить с цитированием
Старый 13.02.2012, 23:26   #4
microbit
Форумчанин
 
Аватар для microbit
 
Регистрация: 26.09.2011
Сообщений: 176
По умолчанию

в википедии есть спецификации, извлекайте
http://ru.wikipedia.org/wiki/ID3_(метаданные)
microbit вне форума Ответить с цитированием
Старый 13.02.2012, 23:33   #5
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

спецификация второй версии тэгов уже не так проста в реализации.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 24.03.2012, 15:58   #6
halcyon
crafter
Форумчанин
 
Аватар для halcyon
 
Регистрация: 03.09.2011
Сообщений: 127
По умолчанию

Цитата:
Сообщение от microbit Посмотреть сообщение
в википедии есть спецификации, извлекайте
http://ru.wikipedia.org/wiki/ID3_(метаданные)
благодарю. Вот что у меня получилось (мне кажется как-то криво), подскажите как можно компактнее сделать. Еще не знаю как найти жанр и id3v2.
Код:
#include <cstdio>
#include <cstring>

struct tags
	{
		char name[31];
		char artist[31];
		char album[31];
		char year[5];
		char comment[31];
	};

int main(void)
	{
		FILE *fp;

		if((fp = fopen("m3.mp3", "rb")) == NULL)
			{
				printf("Error open file \n");
				getchar();
				return 1;
			}
		fseek(fp, -128, SEEK_END); 

		char ch, strt[4];
		for(int i = 0; i <= 2; i++)
			{
				strt[i] = getc(fp);
			}
		strt[3] = '\0';
		int t;
		tags track;
		printf("Title tag: %s \n", strt);
		if(!strcmp(strt, "TAG")) //printf("YEAH");
			{
				for(t = 0; t < 30; t++)
					{
						track.name[t] = getc(fp);
					}
				for(t = 0; t < 30; t++)
					{
						track.artist[t] = getc(fp);
					}
				for(t = 0; t < 30; t++)
					{
						track.album[t] = getc(fp);
					}
				for(t = 0; t < 4; t++)
					{
						track.year[t] = getc(fp);
					}
				for(t = 0; t < 30; t++)
					{
						track.comment[t] = getc(fp);
					}
				track.name[30] = '\0';
				track.artist[30] = '\0';
				track.album[30] = '\0';
				track.year[4] = '\0';
				track.comment[30] = '\0';
				printf("Track name: %s \n", track.name);
				printf("Artist: %s \n", track.artist);
				printf("Album: %s \n", track.album);
				printf("Year: %s \n", track.year);
				printf("Comment: %s \n", track.comment);
			}

		fclose(fp);
		getchar();
		return 0;
	}
halcyon вне форума Ответить с цитированием
Старый 24.03.2012, 20:41   #7
halcyon
crafter
Форумчанин
 
Аватар для halcyon
 
Регистрация: 03.09.2011
Сообщений: 127
По умолчанию

нашел жанры, последний байт в треке:
Код:
struct tags
	{
		char name[31];
		char artist[31];
		char album[31];
		char year[5];
		char comment[31];
		char genre;//[1];
	};
int main(void)
    {
        ....
        fseek(fp, -1, SEEK_END);
	track.genre =  getc(fp);
        ....
    }
halcyon вне форума Ответить с цитированием
Старый 24.03.2012, 21:08   #8
microbit
Форумчанин
 
Аватар для microbit
 
Регистрация: 26.09.2011
Сообщений: 176
По умолчанию

почему у вас длина полей не как в спецификации?
microbit вне форума Ответить с цитированием
Старый 24.03.2012, 21:17   #9
halcyon
crafter
Форумчанин
 
Аватар для halcyon
 
Регистрация: 03.09.2011
Сообщений: 127
По умолчанию

Цитата:
Сообщение от microbit Посмотреть сообщение
почему у вас длина полей не как в спецификации?
для нулевого байта, '\0' , ибо мусор выдает, почему то :\
halcyon вне форума Ответить с цитированием
Старый 24.03.2012, 21:55   #10
microbit
Форумчанин
 
Аватар для microbit
 
Регистрация: 26.09.2011
Сообщений: 176
По умолчанию

ошибся, думал считывает сразу 128 байт чтото типа такой структуры
struct tags
{
char tag[3];
char name[30];
char artist[30];
char album[30];
char year[4];
char comment[30];
char byte;
char track;
char style;
};
microbit вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ошибка при чтении mp3 тегов Anfall Мультимедиа в Delphi 12 25.07.2010 03:31
Добавление тегов sergiksergik Microsoft Office Excel 28 24.05.2010 21:49
Сферы тегов Zeraim Свободное общение 5 21.12.2009 19:11
Импорт тегов из файлов формата mp3 в базу данных sqlite antonych SQL, базы данных 2 06.12.2009 21:06
MediaPlayer - как сделать последовательное воспроизведение mp3 файлов (именно mp3) Kashp Компоненты Delphi 13 28.09.2007 08:38