20 December 2011

tagEditor, sample program utilize TagLib

In a recent post, I'v talked about TagLib.

And Now here's a full functional program:


/*
This SOURCE CODE is provided AS IS with NO WARRANTY OF ANY KIND, so always take a backup of your files first
@auther Mohammed Hewedy
*/
#include <iostream>
#include <cstring>
#include <taglib/fileref.h>
#include <taglib/tag.h>
#include <dirent.h>
using namespace std;
using namespace TagLib;
void modifyID3Data(char*, char*, char*);
void usage();
char* extractSongName(char* songName, char* fileName);
char* obtainFullPath(char* fullPath, char* dirName, char* FileName);
int main(int argc, char** argv)
{
if (argc != 3)
usage();
char* dirName = argv[1];
DIR* d = opendir(dirName);
char* artist = argv[2];
if (d)
{
dirent* dn;
while ( dn = readdir(d))
{
if (dn->d_type == DT_REG)
{
char* fileName = dn->d_name;
char fullPath[strlen(dirName) + strlen(fileName) + 1];
obtainFullPath(fullPath, dirName, fileName);
char songName[strlen(fileName)-3];
extractSongName(songName, fileName);
modifyID3Data(fullPath, artist, songName);
cout <<"Updating " << fileName <<endl;
}
}
closedir(d);
}
return 0;
}
char* obtainFullPath(char* fullPath, char* dirName, char* fileName)
{
strcpy(fullPath, dirName);
strcpy(&fullPath[strlen(dirName)], fileName);
}
char* extractSongName(char* songName, char* fileName)
{
int l = strlen(fileName);
strncpy(songName, fileName, l-4);
songName[l-4] = '\0';
return songName;
}
void modifyID3Data(char* fullFilePath, char* artist, char* songName)
{
FileRef f(fullFilePath);
cout << f.tag()->artist() << endl;
f.tag()->setArtist(artist);
f.tag()->setTitle(songName);
f.save();
}
void usage()
{
char* appName = "tagEditor";
char* desc = "updates a bulk of Dir of MP3 Files (and other formats, see http://developer.kde.org/~wheeler/taglib.html) "
"sets the Artist with <artist> and set the song title by its file name execluding the four character extentions";
char* disc = "This Program is provided AS IS with NO WARRANTY OF ANY KIND, so always take a backup of your files first.";
cout << "Usage: " << appName << " <dir> <artist>" <<endl << desc << endl << endl << disc << endl;
exit(1);
}
view raw tagEditor.cc hosted with ❤ by GitHub

No comments: