aboutsummaryrefslogtreecommitdiffstats
path: root/examples
diff options
context:
space:
mode:
authorScott Wheeler <wheeler@kde.org>2004-02-17 02:11:05 +0000
committerScott Wheeler <wheeler@kde.org>2004-02-17 02:11:05 +0000
commit7fe6647435856631c8351a34d04d7e01acc79d1e (patch)
tree5486c40be464068751041cdeb090705422bb5396 /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.am17
-rw-r--r--examples/framelist.cpp91
-rw-r--r--examples/strip-id3v1.cpp40
-rw-r--r--examples/tagreader.cpp77
-rw-r--r--examples/tagreader_c.c73
-rw-r--r--examples/tagwriter.cpp134
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;
+}