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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 05.07.2014, 04:29   #1
Pein95
Форумчанин
 
Регистрация: 25.04.2010
Сообщений: 881
По умолчанию mp3 прочитать idv3 теги

Код:
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <fstream>
#include <string>
#include <bitset>
#include <cmath>
using namespace std;


int main() {

  union MP3Header {
    char header[10];
    struct HeaderStruct {
      char tagIndicator[3];
      char version[2];
      char flags[1];
      char size[4];
    } headerStruct;
  };


  fstream file;
  file.open("file.mp3", ios::binary || ios::in);

  MP3Header header;
  //read header of idv3
  file.read(header.header, 10);


  //tag description
  char tag[4] = {0};
  strncpy(tag, header.headerStruct.tagIndicator, 3);
  cout << tag << endl;

  
  //get size
  string sizeTags = "";
  for (int i=0; i<4; i++) {
    bitset<8> bit_set = header.headerStruct.size[i];
    sizeTags += bit_set.to_string();
  }
  cout << sizeTags << endl;
  
  std::getchar();
  return 0;

}
здесь я пытаюсь прочитать заголовок idv3 тега.
Вопрос: Правильно ли я я это делаю, и правильно ли получаю размер?
Pein95 вне форума Ответить с цитированием
Старый 05.07.2014, 21:56   #2
Zenon
Пользователь
 
Регистрация: 03.07.2014
Сообщений: 32
По умолчанию

Ну если цель была получить поле размера в виде строки битов 0101010... как он там хранится, тогда все правильно. А если нужно число, выражающее именно размер, тогда неправильно.

Мне когда-то нужен был именно размер числом (чтобы пропустить id3 тег и перейти к началу звукового потока), и я накропал такое:
Код:
unsigned char data[10]; //'I', 'D', '3', ver, ver, flags, size, size, size, size
file.read(data, sizeof(data));
unsigned char *sz= data + 6;
unsigned size= ((sz[0] << 21) | (sz[1] << 14) | (sz[2] << 7) | sz[3]) + 10;
Zenon вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
mp3-теги victor5133 PHP 0 16.05.2014 18:59
Теги и форма zhenya.ya Помощь студентам 0 03.11.2012 17:10
XmlDocument и теги MAcK Общие вопросы Delphi 2 20.10.2010 12:12
mp3 теги Albenous Мультимедиа в Delphi 41 09.12.2008 10:49
MediaPlayer - как сделать последовательное воспроизведение mp3 файлов (именно mp3) Kashp Компоненты Delphi 13 28.09.2007 08:38