ID3 Tag Library

De Wikijoan
Dreceres ràpides: navegació, cerca

Contingut

Instal.lació de la llibreria

Projecte i codi font:

$ sudo apt-get install libid3-3.8.3-dev
$ sudo apt-get install libid3-tools (ja havia quedat instal.lat)

Les utiltiats que conté són: This package contains some utilities that belong with id3lib, the software library for ID3v1 and ID3v2 tag manipulation. The utilities are: id3cp, id3tag, id3convert, id3info.

En el Ubuntu hi ha una utilitat gràfica que és easytag, i es pot utilitzar per visualitzar i canviar el valor dels tags.

$ id3info Txarango\ -\ Som\ persones.mp3 

*** Tag information for Txarango - Som persones.mp3
=== TIT2 (Title/songname/content description): Som persones
=== TPE1 (Lead performer(s)/Soloist(s)): Txarango
=== TALB (Album/Movie/Show title): El disc de la Marat� de TV3 (2
=== TYER (Year): 2012
=== TRCK (Track number/Position in set): 2
=== COMM (Comments): (ID3v1 Comment)[XXX]: 0
=== TCON (Content type): (17)
*** mp3 info
MPEG1/layer III
Bitrate: 192KBps
Frequency: 44KHz

Fixem-nos que TCON (Content type) = 17. Aquest és el valor que es correspon segons aquesta taula:

0.Blues
1.Classic Rock
2.Country
3.Dance
4.Disco
5.Funk
6.Grunge
7.Hip-Hop
8.Jazz
9.Metal
10.New Age
11.Oldies
12.Other
13.Pop
14.R&B
15.Rap
16.Reggae
17.Rock
18.Techno
19.Industrial
20.Alternative
21.Ska
22.Death Metal
23.Pranks
24.Soundtrack
25.Euro-Techno
26.Ambient
27.Trip-Hop
28.Vocal
29.Jazz+Funk
30.Fusion
31.Trance
32.Classical
33.Instrumental
34.Acid
35.House
36.Game
37.Sound Clip
38.Gospel
39.Noise
40.AlternRock
41.Bass
42.Soul
43.Punk
44.Space
45.Meditative
46.Instrumental Pop
47.Instrumental Rock
48.Ethnic
49.Gothic
50.Darkwave
51.Techno-Industrial
52.Electronic
53.Pop-Folk
54.Eurodance
55.Dream
56.Southern Rock
57.Comedy
58.Cult
59.Gangsta
60.Top 40
61.Christian Rap
62.Pop/Funk
63.Jungle
64.Native American
65.Cabaret
66.New Wave
67.Psychadelic
68.Rave
69.Showtunes
70.Trailer
71.Lo-Fi
72.Tribal
73.Acid Punk
74.Acid Jazz
75.Polka
76.Retro
77.Musical
78.Rock & Roll
79.Hard Rock

Programació

Anem a fer l'exemple mínim per llegir els tags d'un fitxer mp3. Parteixo del codi demo_info.cpp que trobem a la llibreria:

$ g++ -o id3_info id3_info.cpp -lid3

$ ./id3_info Txarango\ -\ Som\ persones.mp3
Txarango - Som persones.mp3

*** Tag information for Txarango - Som persones.mp3
=== TIT2 (Title/songname/content description): Som persones
=== TPE1 (Lead performer(s)/Soloist(s)): Txarango
=== TALB (Album/Movie/Show title): El disc de la Marat� de TV3 (2
=== TYER (Year): 2012
=== TRCK (Track number/Position in set):  frame
=== COMM (Comments):  frame
=== TCON (Content type): (17)

Hem simplificat al màxim el codi de manera que només utilitzem els tags més usuals, i el codi queda:

// g++ -o id3_info id3_info.cpp -lid3
// ./id3_info Txarango\ -\ Som\ persones.mp3

// és la simplificació màxima del codi demo_info.cpp que es troba en el codi font de la llibreria: id3lib-3.8.3
#include <id3/tag.h>
#include <id3/misc_support.h> //necessari per al mètode ID3_GetString

using namespace std;

void PrintInformation(const ID3_Tag &myTag)
{
  ID3_Tag::ConstIterator* iter = myTag.CreateIterator();
  const ID3_Frame* frame = NULL;
  while (NULL != (frame = iter->GetNext()))
  {
    const char* desc = frame->GetDescription();
    if (!desc) desc = "";
    cout << "=== " << frame->GetTextID() << " (" << desc << "): ";
    ID3_FrameID eFrameID = frame->GetID();
    switch (eFrameID)
    {
      case ID3FID_ALBUM:
      case ID3FID_COMPOSER:
      case ID3FID_CONTENTTYPE: //important. El valor és el tipus de música. Per ex, 17=Rock
      case ID3FID_TITLE:
      case ID3FID_SONGLEN:
      case ID3FID_ORIGYEAR:
      case ID3FID_LEADARTIST:
      case ID3FID_BAND:
      case ID3FID_YEAR:
      {
        char *sText = ID3_GetString(frame, ID3FN_TEXT);
        cout << sText << endl;
        delete [] sText;
        break;
      }

      default:
      {
        cout << " frame" << endl;
        break;
      }
    }
  }
  delete iter;
}

int main( int argc, char * const argv[])
{
	ID3_Tag myTag;

	const char* filename = NULL;
	filename = argv[1];
	cout << filename << endl;

    myTag.Link(filename, ID3TT_ALL);
    const Mp3_Headerinfo* mp3info;
    mp3info = myTag.GetMp3HeaderInfo();


    cout << endl << "*** Tag information for " << filename << endl;
    PrintInformation(myTag);

	return 0;
}

creat per Joan Quintana Compte, desembre 2014

Eines de l'usuari
Espais de noms
Variants
Accions
Navegació
IES Jaume Balmes
Màquines recreatives
CNC
Informàtica musical
joanillo.org Planet
Eines