#include #include #include #include #include #include #include "genre.h" #include using namespace std; main() { struct dirent *direct; DIR *flacdir = opendir("."); if(flacdir != NULL) { while((direct = readdir(flacdir)) != NULL) { if(strstr(direct->d_name, ".flac")) { string file = (direct->d_name); //start tagcode string mp3name; string album; string artist; string title; string genre; string date; string preset; int preIdent=3; int ident=1; //this variable sets the filname format in readtag() ie [ album - artist - track - title.mp3 ] etc. //Start of code to read tags from the flac file. int trcknbr; //Track number to be converted to int from string using sstream. string tracknumber; string systrMeta = "metaflac --export-tags-to=metadata \"" + file + "\""; system(systrMeta.c_str()); fstream meta; meta.open("metadata", ios::in); if (meta.is_open()) { while(! meta.eof() ) { string testAlb = "album="; string testAlbUc = "ALBUM="; string testAlbUc1 = "Album="; string testArt = "artist="; string testArtUc = "ARTIST="; string testArtUc1 = "Artist="; string testTitl = "title="; string testTitlUc = "TITLE="; string testTitlUc1 = "Title="; string testGen = "genre="; string testGenUc = "GENRE="; string testGenUc1 = "Genre="; string testDate = "date="; string testDateUc = "DATE="; string testDateUc1 = "Date="; string testTrack = "tracknumber="; string testTrackUc = "TRACKNUMBER="; string testTrackUc1 = "TrackNumber="; string testTrackUc2 = "Tracknumber="; string line; // String to hold lines in metadata. getline(meta, line); static int i; for(i=0; i*\?\"|:", line[i])) line[i]=','; if(!(line.find(testAlb, 0)==string::npos) || !(line.find(testAlbUc, 0)==string::npos) || !(line.find(testAlbUc1, 0)==string::npos)) { album = line.substr (6,(line.length()-6)); } else if(!(line.find(testArt, 0)==string::npos) || !(line.find(testArtUc, 0)==string::npos) || !(line.find(testArtUc1, 0)==string::npos)) { artist = line.substr (7,(line.length()-7)); } else if(!(line.find(testTitl, 0)==string::npos) || !(line.find(testTitlUc, 0)==string::npos) || !(line.find(testTitlUc1, 0)==string::npos)) { title = line.substr (6,(line.length()-6)); } else if(!(line.find(testGen, 0)==string::npos) || !(line.find(testGenUc, 0)==string::npos) || !(line.find(testGenUc1, 0)==string::npos)) { genre = line.substr (6,(line.length()-6)); } else if(!(line.find(testDate, 0)==string::npos) || !(line.find(testDateUc, 0)==string::npos) || !(line.find(testDateUc1, 0)==string::npos)) { date = line.substr (5,(line.length()-5)); } else if(!(line.find(testTrack, 0)==string::npos) || !(line.find(testTrackUc, 0)==string::npos) || !(line.find(testTrackUc1, 0)==string::npos) || !(line.find(testTrackUc2, 0)==string::npos)) { tracknumber = line.substr (12,(line.length()-12)); } else continue; } } meta.close(); unlink("metadata"); stringstream(tracknumber) >> trcknbr; stringstream strm; strm << trcknbr; string str(strm.str()); string track; string wavStr = file.substr(0, (file.length()-5)) + ".wav"; string noTagStr = file.substr(0, (file.length()-5)) + ".mp3"; if(trcknbr <= 9) track = "0" + str; else track = str; if(ident==1) { if(!title.empty() && !tracknumber.empty()) mp3name = track + " - " + title + ".mp3"; else mp3name = noTagStr; } else if(ident==2) { if(!title.empty() && !artist.empty()) mp3name = artist + " - " + title + ".mp3"; else mp3name = noTagStr; } else if(ident==3) { if(!title.empty() && !tracknumber.empty() && !album.empty() && !artist.empty()) mp3name = artist + " - " + album + " - " + track + " - " + title + ".mp3"; else mp3name = noTagStr; } else mp3name = noTagStr; //End of code reading tags from flac file. //Make lame string string genreStr; if(testgenre(genre.c_str())==0) { genreStr=""; cout << "Genre Tag incorrect or not present..." << endl; } else genreStr = genre; if(preIdent==1) preset = "lame --preset medium"; else if(preIdent==2) preset = "lame --preset standard"; else if(preIdent==3) preset = "lame --preset insane"; else preset = "lame --preset extreme"; string lameSysStr = preset + " \"" + wavStr +"\" --tt \"" + title + "\" --ta \"" + artist + "\" --tl \"" + album + "\" --ty \"" + date + "\" --tc \"Uberstandard - ubershare.org\"" + " --tn \"" + track + "\" --tg \"" + genreStr + "\" --add-id3v2 \"" + mp3name + "\""; cout << "\n****************************************************" << endl; cout << "File: " << file << endl; cout << "Artist:\t\t " << artist << endl; cout << "Album:\t\t " << album << endl; cout << "Title:\t\t " << title << endl; cout << "Genre:\t\t " << genre << endl; cout << "Date:\t\t " << date << endl; cout << "Tracknumber:\t " << tracknumber << endl; cout << "Output mp3 name: " << mp3name << endl; //cout << "Filename to use if tags are not present:\n"; //cout << lameSysStr << endl; //cout << noTagStr << endl; cout << "****************************************************\n" << endl; //finish tagcode string systr = "flac -ds \"" + file + "\""; system(systr.c_str()); system(lameSysStr.c_str()); unlink(wavStr.c_str()); } } } cout << "End of directory listing." << endl; closedir(flacdir); return 0; }