ID3 Tag Library
Salta a la navegació
Salta a la 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.
- id3cp - Copies tags from one file to another.
- id3tag - Tags an mp3 file with id3v1 and/or id3v2 tags
- id3convert - Converts between id3v1 and id3v2 tags of an mp3 file
- id3info - Display id3 tag information
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