diff options
author | 2008-12-19 14:21:51 -0500 | |
---|---|---|
committer | 2008-12-19 14:21:51 -0500 | |
commit | 8a86c58f1bf64c7c431ab2bc4cbf86eb3e7af606 (patch) | |
tree | badbbad8aba24b5eeef55e886a80fa9da96a1f0c | |
download | fixID3-master.tar.xz fixID3-master.zip |
-rwxr-xr-x | compile.sh | 1 | ||||
-rw-r--r-- | fixID3.cpp | 110 |
2 files changed, 111 insertions, 0 deletions
diff --git a/compile.sh b/compile.sh new file mode 100755 index 0000000..f1fb39c --- /dev/null +++ b/compile.sh @@ -0,0 +1 @@ +g++ `taglib-config --libs` `taglib-config --cflags` fixID3.cpp -o fixID3 diff --git a/fixID3.cpp b/fixID3.cpp new file mode 100644 index 0000000..aa4055f --- /dev/null +++ b/fixID3.cpp @@ -0,0 +1,110 @@ +/* Copyright (C) 2008 Jason A. Donenfeld <Jason@zx2c4.com> */ + +/* Use at your own risk. */ + +#include <iostream> +#include <mpegfile.h> +#include <tstring.h> +#include <tag.h> +#include <id3v2tag.h> +#include <textidentificationframe.h> + +using namespace TagLib; +using namespace std; + +int main(int argc, char *argv[]) +{ + for(int i = 1; i < argc; i++) { + MPEG::File *file = new MPEG::File(argv[i]); + if(argc > 2) + cout << "--File " << i << " of " << argc - 1 << "--" << endl; + if(!file->isValid()) { + cout << "[!] Could not open " << argv[i] << "." << endl; + continue; + } + Tag *tag = file->tag(); + if(tag->isEmpty()) { + cout << "[!] No tags in " << argv[i] << "." << endl; + continue; + } + cout << "[*] Reading " << argv[i] << ":" << endl; + String artist = tag->artist().stripWhiteSpace(); + String album = tag->album().stripWhiteSpace(); + String title = tag->title().stripWhiteSpace(); + TagLib::uint track = tag->track(); + TagLib::uint year = tag->year(); + String genre = tag->genre().stripWhiteSpace(); + // COMMENTS ARE NOT SAVED. I HATE ID3 COMMENTS, SO THEY'RE STRIPPED OUT + String disc; + String bpm; + String composer; + String albumArtist; + String compilation; + if(file->ID3v2Tag()) { + if(!file->ID3v2Tag()->frameListMap()["TPOS"].isEmpty()) + disc = file->ID3v2Tag()->frameListMap()["TPOS"].front()->toString().stripWhiteSpace(); + if(!file->ID3v2Tag()->frameListMap()["TBPM"].isEmpty()) + bpm = file->ID3v2Tag()->frameListMap()["TBPM"].front()->toString().stripWhiteSpace(); + if(!file->ID3v2Tag()->frameListMap()["TCOM"].isEmpty()) + composer = file->ID3v2Tag()->frameListMap()["TCOM"].front()->toString().stripWhiteSpace(); + if(!file->ID3v2Tag()->frameListMap()["TPE2"].isEmpty()) + albumArtist = file->ID3v2Tag()->frameListMap()["TPE2"].front()->toString().stripWhiteSpace(); + if(!file->ID3v2Tag()->frameListMap()["TCMP"].isEmpty()) + compilation = file->ID3v2Tag()->frameListMap()["TCMP"].front()->toString().stripWhiteSpace(); + } + cout + << "\tArtist: " << artist << endl + << "\tComposer: " << composer << endl + << "\tAlbum: " << album << endl + << "\tAlbum Artist: " << albumArtist << endl + << "\tTitle: " << title << endl + << "\tTrack: " << track << endl + << "\tDisc: " << disc << endl + << "\tCompilation: " << compilation << endl + << "\tYear: " << year << endl + << "\tGenre: " << genre << endl; + cout << "[*] Stripping tags and saving." << endl; + file->strip(MPEG::File::AllTags); + file->save(); + delete file; + cout << "[*] Re-opening and re-writing new tags." << endl; + file = new MPEG::File(argv[i]); + tag = file->tag(); + tag->setArtist(artist); + tag->setAlbum(album); + tag->setTitle(title); + tag->setTrack(track); + tag->setYear(year); + tag->setGenre(genre); + ::ID3v2::TextIdentificationFrame *frame; + if(!disc.isEmpty()) { + frame = new ::ID3v2::TextIdentificationFrame("TPOS", ::ID3v2::FrameFactory::instance()->defaultTextEncoding()); + frame->setText(disc); + file->ID3v2Tag()->addFrame(frame); + } + if(!bpm.isEmpty()) { + frame = new ::ID3v2::TextIdentificationFrame("TBPM", ::ID3v2::FrameFactory::instance()->defaultTextEncoding()); + frame->setText(bpm); + file->ID3v2Tag()->addFrame(frame); + } + if(!composer.isEmpty()) { + frame = new ::ID3v2::TextIdentificationFrame("TCOM", ::ID3v2::FrameFactory::instance()->defaultTextEncoding()); + frame->setText(composer); + file->ID3v2Tag()->addFrame(frame); + } + if(!albumArtist.isEmpty()) { + frame = new ::ID3v2::TextIdentificationFrame("TPE2", ::ID3v2::FrameFactory::instance()->defaultTextEncoding()); + frame->setText(albumArtist); + file->ID3v2Tag()->addFrame(frame); + } + if(!compilation.isEmpty()) { + frame = new ::ID3v2::TextIdentificationFrame("TCMP", ::ID3v2::FrameFactory::instance()->defaultTextEncoding()); + frame->setText(compilation); + file->ID3v2Tag()->addFrame(frame); + } + cout << "[*] Saving file." << endl; + file->save(); + delete file; + cout << "[*] Success." << endl; + } +} |