From 8a86c58f1bf64c7c431ab2bc4cbf86eb3e7af606 Mon Sep 17 00:00:00 2001 From: "Jason A. Donenfeld" Date: Fri, 19 Dec 2008 14:21:51 -0500 Subject: Initial commit. --- compile.sh | 1 + fixID3.cpp | 110 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 111 insertions(+) create mode 100755 compile.sh create mode 100644 fixID3.cpp 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 */ + +/* Use at your own risk. */ + +#include +#include +#include +#include +#include +#include + +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; + } +} -- cgit v1.2.3-59-g8ed1b