diff options
author | Scott Wheeler <wheeler@kde.org> | 2004-02-17 02:11:05 +0000 |
---|---|---|
committer | Scott Wheeler <wheeler@kde.org> | 2004-02-17 02:11:05 +0000 |
commit | 7fe6647435856631c8351a34d04d7e01acc79d1e (patch) | |
tree | 5486c40be464068751041cdeb090705422bb5396 /examples |
This commit was manufactured by cvs2svn to accommodate
a server-side copy/move.
git-svn-id: svn://anonsvn.kde.org/home/kde/trunk/kdesupport/taglib@288617 283d02a7-25f6-0310-bc7c-ecb5cbfe19da
Diffstat (limited to 'examples')
-rw-r--r-- | examples/Makefile.am | 17 | ||||
-rw-r--r-- | examples/framelist.cpp | 91 | ||||
-rw-r--r-- | examples/strip-id3v1.cpp | 40 | ||||
-rw-r--r-- | examples/tagreader.cpp | 77 | ||||
-rw-r--r-- | examples/tagreader_c.c | 73 | ||||
-rw-r--r-- | examples/tagwriter.cpp | 134 |
6 files changed, 432 insertions, 0 deletions
diff --git a/examples/Makefile.am b/examples/Makefile.am new file mode 100644 index 00000000..71665b99 --- /dev/null +++ b/examples/Makefile.am @@ -0,0 +1,17 @@ +bin_PROGRAMS = tagreader tagreader_c tagwriter framelist strip-id3v1 +tagreader_SOURCES = tagreader.cpp +tagreader_c_SOURCES = tagreader_c.c +tagwriter_SOURCES = tagwriter.cpp +framelist_SOURCES = framelist.cpp +strip_id3v1_SOURCES = strip-id3v1.cpp + +INCLUDES = \ + -I$(top_srcdir)/taglib \ + -I$(top_srcdir)/taglib/toolkit \ + -I$(top_srcdir)/taglib/mpeg \ + -I$(top_srcdir)/taglib/mpeg/id3v1 \ + -I$(top_srcdir)/taglib/mpeg/id3v2 \ + -I$(top_srcdir)/taglib/bindings/c + +LDADD = ../libtag.la +tagreader_c_LDADD = ../bindings/c/libtag_c.la diff --git a/examples/framelist.cpp b/examples/framelist.cpp new file mode 100644 index 00000000..01dfea06 --- /dev/null +++ b/examples/framelist.cpp @@ -0,0 +1,91 @@ +/* Copyright (C) 2003 Scott Wheeler <wheeler@kde.org> + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include <iostream> +#include <stdlib.h> +#include <unistd.h> + +#include <tbytevector.h> + +#include <mpegfile.h> + +#include <id3v2tag.h> +#include <id3v2frame.h> +#include <id3v2header.h> + +#include <id3v1tag.h> + +using namespace std; +using namespace TagLib; + +int main(int argc, char *argv[]) +{ + // process the command line args + + + for(int i = 1; i < argc; i++) { + + cout << "******************** \"" << argv[i] << "\"********************" << endl; + + MPEG::File f(argv[i]); + + ID3v2::Tag *id3v2tag = f.ID3v2Tag(); + + if(id3v2tag) { + + cout << "ID3v2." + << id3v2tag->header()->majorVersion() + << "." + << id3v2tag->header()->revisionNumber() + << ", " + << id3v2tag->header()->tagSize() + << " bytes in tag" + << endl; + + ID3v2::FrameList::ConstIterator it = id3v2tag->frameList().begin(); + for(; it != id3v2tag->frameList().end(); it++) + cout << (*it)->frameID() << " - \"" << (*it)->toString() << "\"" << endl; + } + else + cout << "file does not have a valid id3v2 tag" << endl; + + cout << endl << "ID3v1" << endl; + + ID3v1::Tag *id3v1tag = f.ID3v1Tag(); + + if(id3v1tag) { + cout << "title - \"" << id3v1tag->title() << "\"" << endl; + cout << "artist - \"" << id3v1tag->artist() << "\"" << endl; + cout << "album - \"" << id3v1tag->album() << "\"" << endl; + cout << "year - \"" << id3v1tag->year() << "\"" << endl; + cout << "comment - \"" << id3v1tag->comment() << "\"" << endl; + cout << "track - \"" << id3v1tag->track() << "\"" << endl; + cout << "genre - \"" << id3v1tag->genre() << "\"" << endl; + } + else + cout << "file does not have a valid id3v1 tag" << endl; + + cout << endl; + } +} diff --git a/examples/strip-id3v1.cpp b/examples/strip-id3v1.cpp new file mode 100644 index 00000000..ab36d711 --- /dev/null +++ b/examples/strip-id3v1.cpp @@ -0,0 +1,40 @@ +/* Copyright (C) 2003 Scott Wheeler <wheeler@kde.org> + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include <iostream> +#include <mpegfile.h> +#include <tstring.h> + +using namespace TagLib; + +int main(int argc, char *argv[]) +{ + for(int i = 1; i < argc; i++) { + + std::cout << "******************** Stripping ID3v1 Tag From: \"" << argv[i] << "\"********************" << std::endl; + + MPEG::File f(argv[i]); + f.strip(MPEG::File::ID3v1); + } +} diff --git a/examples/tagreader.cpp b/examples/tagreader.cpp new file mode 100644 index 00000000..76fe0d1a --- /dev/null +++ b/examples/tagreader.cpp @@ -0,0 +1,77 @@ +/* Copyright (C) 2003 Scott Wheeler <wheeler@kde.org> + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include <iostream> +#include <stdio.h> + +#include <fileref.h> +#include <tag.h> + +using namespace std; + +TagLib::String formatSeconds(int seconds) +{ + char secondsString[3]; + sprintf(secondsString, "%02i", seconds); + return secondsString; +} + +int main(int argc, char *argv[]) +{ + for(int i = 1; i < argc; i++) { + + cout << "******************** \"" << argv[i] << "\" ********************" << endl; + + TagLib::FileRef f(argv[i]); + + if(!f.isNull() && f.tag()) { + + TagLib::Tag *tag = f.tag(); + + cout << "-- TAG --" << endl; + cout << "title - \"" << tag->title() << "\"" << endl; + cout << "artist - \"" << tag->artist() << "\"" << endl; + cout << "album - \"" << tag->album() << "\"" << endl; + cout << "year - \"" << tag->year() << "\"" << endl; + cout << "comment - \"" << tag->comment() << "\"" << endl; + cout << "track - \"" << tag->track() << "\"" << endl; + cout << "genre - \"" << tag->genre() << "\"" << endl; + } + + if(!f.isNull() && f.audioProperties()) { + + TagLib::AudioProperties *properties = f.audioProperties(); + + int seconds = properties->length() % 60; + int minutes = (properties->length() - seconds) / 60; + + cout << "-- AUDIO --" << endl; + cout << "bitrate - " << properties->bitrate() << endl; + cout << "sample rate - " << properties->sampleRate() << endl; + cout << "channels - " << properties->channels() << endl; + cout << "length - " << minutes << ":" << formatSeconds(seconds) << endl; + } + } + return 0; +} diff --git a/examples/tagreader_c.c b/examples/tagreader_c.c new file mode 100644 index 00000000..ab8ad2c6 --- /dev/null +++ b/examples/tagreader_c.c @@ -0,0 +1,73 @@ +/* Copyright (C) 2003 Scott Wheeler <wheeler@kde.org> + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include <stdio.h> +#include <tag_c.h> + +#ifndef FALSE +#define FALSE 0 +#endif + +int main(int argc, char *argv[]) +{ + int i; + int seconds; + int minutes; + TagLib_File *file; + TagLib_Tag *tag; + const TagLib_AudioProperties *properties; + + taglib_set_strings_unicode(FALSE); + + for(i = 1; i < argc; i++) { + printf("******************** \"%s\" ********************\n", argv[i]); + + file = taglib_file_new(argv[i]); + tag = taglib_file_tag(file); + properties = taglib_file_audioproperties(file); + + printf("-- TAG --\n"); + printf("title - \"%s\"\n", taglib_tag_title(tag)); + printf("artist - \"%s\"\n", taglib_tag_artist(tag)); + printf("album - \"%s\"\n", taglib_tag_album(tag)); + printf("year - \"%i\"\n", taglib_tag_year(tag)); + printf("comment - \"%s\"\n", taglib_tag_comment(tag)); + printf("track - \"%i\"\n", taglib_tag_track(tag)); + printf("genre - \"%s\"\n", taglib_tag_genre(tag)); + + seconds = taglib_audioproperties_length(properties) % 60; + minutes = (taglib_audioproperties_length(properties) - seconds) / 60; + + printf("-- AUDIO --\n"); + printf("bitrate - %i\n", taglib_audioproperties_bitrate(properties)); + printf("sample rate - %i\n", taglib_audioproperties_samplerate(properties)); + printf("channels - %i\n", taglib_audioproperties_channels(properties)); + printf("length - %i:%02i\n", minutes, seconds); + + taglib_tag_free_strings(); + taglib_file_free(file); + } + + return 0; +} diff --git a/examples/tagwriter.cpp b/examples/tagwriter.cpp new file mode 100644 index 00000000..2a44cf7f --- /dev/null +++ b/examples/tagwriter.cpp @@ -0,0 +1,134 @@ +/* Copyright (C) 2004 Scott Wheeler <wheeler@kde.org> + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include <iostream> + +#include <stdio.h> +#include <sys/types.h> +#include <sys/stat.h> +#include <unistd.h> + +#include <tlist.h> +#include <fileref.h> +#include <tfile.h> +#include <tag.h> + +using namespace std; + +bool isArgument(const char *s) +{ + return strlen(s) == 2 && s[0] == '-'; +} + +bool isFile(const char *s) +{ + struct stat st; + return ::stat(s, &st) == 0 && (st.st_mode & (S_IFREG | S_IFLNK)); +} + +void usage() +{ + cout << endl; + cout << "Usage: tagwriter <fields> <files>" << endl; + cout << endl; + cout << "Where the valid fields are:" << endl; + cout << " -t <title>" << endl; + cout << " -a <artist>" << endl; + cout << " -A <album>" << endl; + cout << " -c <comment>" << endl; + cout << " -g <genre>" << endl; + cout << " -y <year>" << endl; + cout << " -T <track>" << endl; + cout << endl; + + exit(1); +} + +int main(int argc, char *argv[]) +{ + TagLib::List<TagLib::FileRef> fileList; + + while(argc > 0 && isFile(argv[argc - 1])) { + + TagLib::FileRef f(argv[argc - 1]); + + if(!f.isNull() && f.tag()) + fileList.append(f); + + argc--; + } + + if(fileList.isEmpty()) + usage(); + + for(int i = 1; i < argc - 1; i += 2) { + + if(isArgument(argv[i]) && i + 1 < argc && !isArgument(argv[i + 1])) { + + char field = argv[i][1]; + TagLib::String value = argv[i + 1]; + + TagLib::List<TagLib::FileRef>::Iterator it; + for(it = fileList.begin(); it != fileList.end(); ++it) { + + TagLib::Tag *t = (*it).tag(); + + switch (field) { + case 't': + t->setTitle(value); + break; + case 'a': + t->setArtist(value); + break; + case 'A': + t->setAlbum(value); + break; + case 'c': + t->setComment(value); + break; + case 'g': + t->setGenre(value); + break; + case 'y': + t->setYear(value.toInt()); + break; + case 'T': + t->setTrack(value.toInt()); + break; + default: + usage(); + break; + } + } + } + else + usage(); + } + + TagLib::List<TagLib::FileRef>::Iterator it; + for(it = fileList.begin(); it != fileList.end(); ++it) + (*it).file()->save(); + + return 0; +} |