From: <du...@us...> - 2009-04-17 12:56:31
|
Revision: 2321 http://gtkpod.svn.sourceforge.net/gtkpod/?rev=2321&view=rev Author: dudyk Date: 2009-04-17 12:56:27 +0000 (Fri, 17 Apr 2009) Log Message: ----------- Fixes in configure and added the patch Modified Paths: -------------- gtkpod/branches/taglib-branch/ChangeLog gtkpod/branches/taglib-branch/configure.in Added Paths: ----------- gtkpod/branches/taglib-branch/taglib_bindings.patch Modified: gtkpod/branches/taglib-branch/ChangeLog =================================================================== --- gtkpod/branches/taglib-branch/ChangeLog 2009-04-17 11:00:30 UTC (rev 2320) +++ gtkpod/branches/taglib-branch/ChangeLog 2009-04-17 12:56:27 UTC (rev 2321) @@ -1,5 +1,10 @@ 2009-04-17 David Kohen <dudyk at users.sourceforge.net> + * configure.in: Removed conflict markers, another fix for TagLib tests, should work now, testers are welcome + * taglib_bindings.patch: Added the patch file to the repository, for use against taglib-1.5 + +2009-04-17 David Kohen <dudyk at users.sourceforge.net> + * configure.in: Fixed tests and include for TagLib 2009-04-17 Paul Richardson <phantom_sf at users.sourceforge.net> Modified: gtkpod/branches/taglib-branch/configure.in =================================================================== --- gtkpod/branches/taglib-branch/configure.in 2009-04-17 11:00:30 UTC (rev 2320) +++ gtkpod/branches/taglib-branch/configure.in 2009-04-17 12:56:27 UTC (rev 2321) @@ -50,8 +50,6 @@ CFLAGS="$CFLAGS $GTK_CFLAGS $GLIB_CFLAGS $GMODULE_CFLAGS $GTHREAD_CFLAGS $LIBGLADE_CFLAGS $LIBGPOD_CFLAGS" LIBS="$LIBS $GTK_LIBS $GLIB_LIBS $GMODULE_LIBS $GTHREAD_LIBS $LIBGLADE_LIBS $LIBGPOD_LIBS" -<<<<<<< HEAD:gtkpod/trunk/configure.in -======= dnl Check for TagLib's C bindings AC_ARG_WITH(taglib, AC_HELP_STRING([--without-taglib],[Disable TagLib, use only id3lib (has problems writing tags)])) if test "x$with_taglib" != "xno"; then @@ -64,7 +62,7 @@ if test "x$have_taglib_pkg" = "xyes"; then OLD_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS $TAGLIB_C_CFLAGS" - AC_SEARCH_LIBS([taglib_id3v2_has_lyrics], ["tag_c tag"], taglib_has_lyrics=yes,taglib_has_lyrics=no) + AC_SEARCH_LIBS([taglib_id3v2_has_lyrics], ["tag_c"], taglib_has_lyrics=yes,taglib_has_lyrics=no) if test "x$taglib_has_lyrics" = "xyes"; then have_taglib="yes -- will build with TagLib support" AC_DEFINE(USE_TAGLIB, 1, [Define if you have TagLib support]) @@ -77,7 +75,6 @@ have_taglib="*no -- will build without taglib support (problems writing tags, especially lyrics)" fi ->>>>>>> Fixed configure for taglib:gtkpod/trunk/configure.in dnl we need 'flex' AM_PROG_LEX case "$LEX" in @@ -345,6 +342,7 @@ GLib2/GThread version : `$PKG_CONFIG gthread-2.0 --modversion` libgpod version ......: $libgpod_version gnome-vfs.............: $have_gnome_vfs + TagLib................: $have_taglib hal...................: $have_hal libcurl ..............: $have_curl mp4v2 ................: $have_mp4v2 Added: gtkpod/branches/taglib-branch/taglib_bindings.patch =================================================================== --- gtkpod/branches/taglib-branch/taglib_bindings.patch (rev 0) +++ gtkpod/branches/taglib-branch/taglib_bindings.patch 2009-04-17 12:56:27 UTC (rev 2321) @@ -0,0 +1,467 @@ +diff -ur taglib_orig/bindings/c/tag_c.cpp taglib-1.5/bindings/c/tag_c.cpp +--- taglib_orig/bindings/c/tag_c.cpp 2008-02-12 06:43:44.000000000 +0200 ++++ taglib-1.5/bindings/c/tag_c.cpp 2009-04-16 02:57:07.000000000 +0300 +@@ -1,6 +1,8 @@ + /*************************************************************************** + copyright : (C) 2003 by Scott Wheeler + email : wh...@kd... ++ added code copyright : (C) 2009 by David Kohen ++ email : dudyk NO-SPAM at users dot sourceforge dot net + ***************************************************************************/ + + /*************************************************************************** +@@ -35,6 +37,11 @@ + #include <tag.h> + #include <string.h> + #include <id3v2framefactory.h> ++#include <id3v2tag.h> ++#include "frames/unsynchronizedlyricsframe.h" ++#include "frames/attachedpictureframe.h" ++#include "frames/textidentificationframe.h" ++#include "frames/unknownframe.h" + + using namespace TagLib; + +@@ -275,3 +282,319 @@ + + ID3v2::FrameFactory::instance()->setDefaultTextEncoding(type); + } ++ ++/* Code added by David Kohen (c) 2009 */ ++ ++ID3v2::Tag* get_id3v2_tag(TagLib_File *file){ ++ const File *f = reinterpret_cast<const File *>(file); ++ const FileName fileName = f->name(); ++ String s; ++#ifdef _WIN32 ++ s = (wcslen((const wchar_t *) fileName) > 0) ? String((const wchar_t *) fileName) : String((const char *) fileName); ++#else ++ s = fileName; ++#endif ++ ++ ID3v2::Tag* t = NULL; ++ ++ if(s.size() > 4) { ++ if(s.substr(s.size() - 4, 4).upper() == ".MP3") ++ t=((TagLib::MPEG::File*)f)->ID3v2Tag(); ++ } ++ return t; ++} ++ ++BOOL taglib_id3v2_has_lyrics(TagLib_File *file){ ++ ID3v2::Tag* t = get_id3v2_tag(file); ++ ++ if (t){ ++ TagLib::ByteVector uslt("USLT",4); ++ return !t->frameList(uslt).isEmpty(); ++ } ++ return 0; ++} ++ ++char* taglib_id3v2_get_lyrics(TagLib_File *file){ ++ ID3v2::Tag* t = get_id3v2_tag(file); ++ ++ if (t){ ++ TagLib::ByteVector id("USLT",4); ++ ID3v2::FrameList fl=t->frameList(id); ++ if (!fl.isEmpty()){ ++ char *s = ::strdup(fl.front()->toString().toCString(unicodeStrings)); ++ if(stringManagementEnabled) ++ strings.append(s); ++ return s; ++ } ++ } ++ return 0; ++} ++ ++BOOL taglib_id3v2_set_lyrics(TagLib_File *file,const char* lyrics){ ++ ID3v2::Tag* t = get_id3v2_tag(file); ++ ++ if (t){ ++ TagLib::ByteVector id("USLT",4); ++ t->removeFrames(id); ++ ++ ID3v2::UnsynchronizedLyricsFrame *uslt_frame=new ++ ID3v2::UnsynchronizedLyricsFrame(ID3v2::FrameFactory::instance()->defaultTextEncoding()); ++ ++ if ((lyrics)&&(*lyrics!='\0')) { ++ String s2(lyrics, unicodeStrings ? String::UTF8 : String::Latin1); ++#if 0 ++ s2.append(String(" ", unicodeStrings ? String::UTF8 : String::Latin1)); ++#endif ++ uslt_frame->setText(s2); ++#if 0 ++ TagLib::ByteVector buff(uslt_frame->render()); ++ if (1==1) { ++ String::Type encoding=uslt_frame->textEncoding(); ++ buff.data()[buff.size()-1]='\0'; ++ if (!((encoding == String::Latin1) || (encoding == String::UTF8))) { ++ buff.resize(buff.size()+1,0); ++ } ++ ID3v2::UnknownFrame *uf=new ID3v2::UnknownFrame(buff); ++ t->addFrame(uf); ++ delete (uslt_frame); ++ //delete (buff); ++ } else { ++ t->addFrame(uslt_frame); ++ } ++#endif ++ t->addFrame(uslt_frame); ++ } ++ return 1; ++ } ++ return 0; ++} ++ ++BOOL taglib_id3v2_set_string_frame(TagLib_File *file,const char* data,const char* frame_id){ ++ ID3v2::Tag* t = get_id3v2_tag(file); ++ ++ if ((t)&&(strlen(frame_id)==4)){ ++ TagLib::ByteVector id(frame_id,4); ++ ++ ID3v2::FrameList fl=t->frameList(id); ++ ID3v2::TextIdentificationFrame *frame=NULL; ++ if (fl.isEmpty() && (data) && (*data!='\0')) { ++ frame=new ID3v2::TextIdentificationFrame(id,ID3v2::FrameFactory::instance()->defaultTextEncoding()); ++ fl.prepend(frame); ++ t->addFrame(frame); ++ } ++ if ((data) && (*data!='\0')) { ++ frame=(ID3v2::TextIdentificationFrame*)fl.front(); ++ frame->setText(String(data, unicodeStrings ? String::UTF8 : String::Latin1)); ++ } else { ++ t->removeFrames(id); ++ } ++ return 1; ++ } ++ return 0; ++} ++ ++char* taglib_id3v2_get_string_frame(TagLib_File *file,const char* frame_id){ ++ ID3v2::Tag* t = get_id3v2_tag(file); ++ ++ if ((t)&&(strlen(frame_id)==4)){ ++ TagLib::ByteVector id(frame_id,4); ++ ID3v2::FrameList fl=t->frameList(id); ++ if (!fl.isEmpty()){ ++ char *s2 = NULL; ++ if (id.startsWith("Y")) { ++ if ((id=="YTID")||(id=="YWFD")||(id=="YTDS")||(id=="YTDR")) { ++ ID3v2::TextIdentificationFrame *frame=new ++ ID3v2::TextIdentificationFrame(fl.front()->render()); ++ s2 = ::strdup(frame->toString().toCString(unicodeStrings)); ++ delete (frame); ++ } ++ } else { ++ s2 = ::strdup(fl.front()->toString().toCString(unicodeStrings)); ++ } ++ if(s2 && stringManagementEnabled) ++ strings.append(s2); ++ return s2; ++ } ++ } ++ return 0; ++} ++ ++char* taglib_id3v2_get_lyrics_detail(TagLib_File *file, char* description, char* lang){ ++ ID3v2::Tag* t = get_id3v2_tag(file); ++ ++ if (t){ ++ TagLib::ByteVector id("USLT",4); ++ ID3v2::FrameList fl=t->frameList(id); ++ if (!fl.isEmpty()){ ++ ID3v2::UnsynchronizedLyricsFrame *fr=NULL; ++ for(ID3v2::FrameList::Iterator it = fl.begin(); it != fl.end(); ++it){ ++ ID3v2::UnsynchronizedLyricsFrame *temp; ++ temp=(ID3v2::UnsynchronizedLyricsFrame *)*it; ++ if ((temp->description()==String(description)) && (temp->language()==lang)) ++ fr=(ID3v2::UnsynchronizedLyricsFrame *)*it; ++ } ++ if (fr) { ++ char *s = ::strdup(fr->toString().toCString(unicodeStrings)); ++ if(stringManagementEnabled) ++ strings.append(s); ++ return s; ++ } ++ } ++ } ++ return 0; ++} ++ ++BOOL taglib_id3v2_set_lyrics_detail(TagLib_File *file,const char* lyrics, char* description, char* lang){ ++ ID3v2::Tag* t = get_id3v2_tag(file); ++ ++ if (t){ ++ TagLib::ByteVector id("USLT",4); ++ ID3v2::FrameList fl=t->frameList(id); ++ ID3v2::UnsynchronizedLyricsFrame *fr=NULL; ++ if (!fl.isEmpty()){ ++ ID3v2::UnsynchronizedLyricsFrame *temp; ++ for(ID3v2::FrameList::Iterator it = fl.begin(); it != fl.end(); ++it){ ++ temp=(ID3v2::UnsynchronizedLyricsFrame *)*it; ++ if ((temp->description()==String(description, unicodeStrings ? String::UTF8 : String::Latin1)) && (temp->language()==lang)) ++ fr=(ID3v2::UnsynchronizedLyricsFrame *)*it; ++ } ++ if (fr) { ++ if ((lyrics)&&(*lyrics!='\0')) { ++ fr->setText(String(lyrics, unicodeStrings ? String::UTF8 : String::Latin1)); ++ } else { ++ t->removeFrame(fr,true); ++ } ++ } else { ++ ID3v2::UnsynchronizedLyricsFrame *uslt_frame=new ++ ID3v2::UnsynchronizedLyricsFrame(ID3v2::FrameFactory::instance()->defaultTextEncoding()); ++ ++ if ((lyrics)&&(*lyrics!='\0')) { ++ uslt_frame->setText(String(lyrics, unicodeStrings ? String::UTF8 : String::Latin1)); ++ if (description && (strlen(description) > 0)) ++ uslt_frame->setDescription(String(description, unicodeStrings ? String::UTF8 : String::Latin1)); ++ if (lang && (strlen(lang) == 3)) ++ uslt_frame->setLanguage(ByteVector(lang,3)); ++ t->addFrame(uslt_frame); ++ } ++ } ++ } else { ++ ID3v2::UnsynchronizedLyricsFrame *uslt_frame=new ++ ID3v2::UnsynchronizedLyricsFrame(ID3v2::FrameFactory::instance()->defaultTextEncoding()); ++ ++ if ((lyrics)&&(*lyrics!='\0')) { ++ uslt_frame->setText(String(lyrics, unicodeStrings ? String::UTF8 : String::Latin1)); ++ if (description && (strlen(description) > 0)) ++ uslt_frame->setDescription(String(description, unicodeStrings ? String::UTF8 : String::Latin1)); ++ if (lang && (strlen(lang) == 3)) ++ uslt_frame->setLanguage(ByteVector(lang,3)); ++ t->addFrame(uslt_frame); ++ } ++ } ++ ++ return 1; ++ } ++ return 0; ++} ++ ++ ++char* taglib_id3v2_get_user_string(TagLib_File *file,char* description){ ++ ID3v2::Tag* t = get_id3v2_tag(file); ++ ++ if (t){ ++ ID3v2::UserTextIdentificationFrame* f=ID3v2::UserTextIdentificationFrame::find(t,String(description, unicodeStrings ? String::UTF8 : String::Latin1)); ++ if (f) { ++ char *s=NULL; ++ s = ::strdup(f->toString().toCString(unicodeStrings)); ++ if(stringManagementEnabled) ++ strings.append(s); ++ return s; ++ } ++ } ++ return 0; ++} ++ ++BOOL taglib_id3v2_set_user_string(TagLib_File *file,const char* string,char* description){ ++ ID3v2::Tag* t = get_id3v2_tag(file); ++ ++ if (t){ ++ ID3v2::UserTextIdentificationFrame* f=ID3v2::UserTextIdentificationFrame::find(t,String(description, unicodeStrings ? String::UTF8 : String::Latin1)); ++ if (f) { ++ f->setText(String(string, unicodeStrings ? String::UTF8 : String::Latin1)); ++ } else { ++ f=new ID3v2::UserTextIdentificationFrame(unicodeStrings ? String::UTF8 : String::Latin1); ++ f->setDescription(String(description, unicodeStrings ? String::UTF8 : String::Latin1)); ++ f->setText(String(string, unicodeStrings ? String::UTF8 : String::Latin1)); ++ t->addFrame(f); ++ } ++ return 1; ++ } ++ return 0; ++} ++ ++BOOL taglib_id3v2_set_APIC(TagLib_File *file,const char* data,char type, unsigned int size){ ++ ID3v2::Tag* t = get_id3v2_tag(file); ++ ++ if (t){ ++ TagLib::ByteVector id("APIC",4); ++ ID3v2::FrameList fl=t->frameList(id); ++ ID3v2::AttachedPictureFrame* f=NULL; ++ if (!fl.isEmpty()){ ++ ID3v2::AttachedPictureFrame *temp; ++ for(ID3v2::FrameList::Iterator it = fl.begin(); it != fl.end(); ++it){ ++ temp=(ID3v2::AttachedPictureFrame *)*it; ++ if (temp->type()==type) ++ f=temp; ++ } ++ if (f) { ++ if ((size) && (data) && (*data)) { ++ f->setPicture(TagLib::ByteVector(data,size)); ++ } else { ++ t->removeFrame(f); ++ } ++ } else { ++ if ((size) && (data) && (*data)) { ++ f=new ID3v2::AttachedPictureFrame(); ++ f->setPicture(TagLib::ByteVector(data,size)); ++ f->setType((ID3v2::AttachedPictureFrame::Type)type); ++ t->addFrame(f); ++ } ++ } ++ } else { ++ if ((size) && (data) && (*data)) { ++ f=new ID3v2::AttachedPictureFrame(); ++ f->setPicture(TagLib::ByteVector(data,size)); ++ f->setType((ID3v2::AttachedPictureFrame::Type)type); ++ t->addFrame(f); ++ } ++ } ++ return 1; ++ } ++ return 0; ++} ++ ++BOOL taglib_id3v2_get_APIC(TagLib_File *file,char* buff,char type, unsigned int* size){ ++ ID3v2::Tag* t = get_id3v2_tag(file); ++ ++ if (t){ ++ TagLib::ByteVector id("APIC",4); ++ ID3v2::FrameList fl=t->frameList(id); ++ ID3v2::AttachedPictureFrame* f=NULL; ++ if (!fl.isEmpty()){ ++ ID3v2::AttachedPictureFrame *temp; ++ for(ID3v2::FrameList::Iterator it = fl.begin(); it != fl.end(); ++it){ ++ temp=(ID3v2::AttachedPictureFrame *)*it; ++ if (temp->type()==type) ++ f=temp; ++ } ++ if (f) { ++ if (size) { ++ *size=f->picture().size(); ++ if (buff && (*buff)) ++ memcpy(buff,f->picture().data(),f->picture().size()); ++ return 1; ++ } ++ } ++ } ++ } ++ return 0; ++} +diff -ur taglib_orig/bindings/c/tag_c.h taglib-1.5/bindings/c/tag_c.h +--- taglib_orig/bindings/c/tag_c.h 2008-01-26 22:18:58.000000000 +0200 ++++ taglib-1.5/bindings/c/tag_c.h 2009-04-15 20:10:05.000000000 +0300 +@@ -281,6 +281,60 @@ + + TAGLIB_C_EXPORT void taglib_id3v2_set_default_text_encoding(TagLib_ID3v2_Encoding encoding); + ++/*! ++ * This sets a string frame (T***). ++ */ ++TAGLIB_C_EXPORT BOOL taglib_id3v2_set_string_frame(TagLib_File *file,const char* data,const char* frame_id); ++/*! ++ * This gets a string frame (T***). ++ */ ++TAGLIB_C_EXPORT char* taglib_id3v2_get_string_frame(TagLib_File *file,const char* frame_id); ++/*! ++ * This gets a user string frame by description (TXXX). ++ */ ++TAGLIB_C_EXPORT char* taglib_id3v2_get_user_string(TagLib_File *file,char* description); ++/* The following function was not tested!! */ ++/*! ++ * This sets a user string frame with description (TXXX). ++ */ ++TAGLIB_C_EXPORT BOOL taglib_id3v2_set_user_string(TagLib_File *file,const char* string,char* description); ++/******************************************************************************* ++ * Functions for handling of lyrics (USLT) ++ *******************************************************************************/ ++ ++/*! ++ * This checks for lyrics (USLT). ++ */ ++TAGLIB_C_EXPORT BOOL taglib_id3v2_has_lyrics(TagLib_File *file); ++/*! ++ * This gets the first lyrics frame in the tag, ignoring description and language codes (USLT). ++ */ ++TAGLIB_C_EXPORT char* taglib_id3v2_get_lyrics(TagLib_File *file); ++/*! ++ * This sets a lyrics frame in the tag, instead of any other lyrics frame, with default description and language (USLT). ++ */ ++TAGLIB_C_EXPORT BOOL taglib_id3v2_set_lyrics(TagLib_File *file,const char* lyrics); ++/* The following function was not tested!! */ ++/*! ++ * This gets a lyrics frame in the tag, according to description and language codes (USLT). ++ */ ++TAGLIB_C_EXPORT char* taglib_id3v2_get_lyrics_detail(TagLib_File *file, char* description, char* lang); ++/* The following function was not tested!! */ ++/*! ++ * This sets a lyrics frame in the tag, according to description and language codes (USLT). ++ */ ++TAGLIB_C_EXPORT BOOL taglib_id3v2_set_lyrics_detail(TagLib_File *file,const char* lyrics, char* description, char* lang); ++/* The following function was not tested!! */ ++/*! ++ * This sets a "attachedpicture" frame in the tag, according to type codes (APIC). ++ */ ++TAGLIB_C_EXPORT BOOL taglib_id3v2_set_APIC(TagLib_File *file,const char* data,char type, unsigned int size); ++/*! ++ * This gets a "attachedpicture" frame in the tag, according to type codes, if the buffer is NULL, returns the ++ * needed buffer size (APIC). ++ */ ++TAGLIB_C_EXPORT BOOL taglib_id3v2_get_APIC(TagLib_File *file,char* buff,char type, unsigned int* size); ++ + #ifdef __cplusplus + } + #endif +diff -ur taglib_orig/examples/tagreader_c.c taglib-1.5/examples/tagreader_c.c +--- taglib_orig/examples/tagreader_c.c 2008-01-11 02:56:23.000000000 +0200 ++++ taglib-1.5/examples/tagreader_c.c 2009-04-11 17:49:19.000000000 +0300 +@@ -28,6 +28,9 @@ + #ifndef FALSE + #define FALSE 0 + #endif ++#ifndef ID3_FRAME_GROUP ++#define ID3_FRAME_GROUP "TPE2" ++#endif + + int main(int argc, char *argv[]) + { +@@ -52,14 +55,37 @@ + 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)); +- ++ 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)); ++ printf("group - \"%s\"\n",taglib_id3v2_get_string_frame (file, ID3_FRAME_GROUP)); ++ printf("group - \"%s\"\n",taglib_id3v2_get_string_frame (file, ID3_FRAME_GROUP)); ++ printf("composer - \"%s\"\n",taglib_id3v2_get_string_frame (file, "TCOM")); ++ printf("compilation- \"%s\"\n",taglib_id3v2_get_string_frame (file, "TCMP")); ++ printf("subtitle - \"%s\"\n",taglib_id3v2_get_string_frame (file, "TIT3")); ++ printf("lyrics - \"%s\"\n",taglib_id3v2_get_lyrics(file)); ++ printf("podcasturl - \"%s\"\n",taglib_id3v2_get_string_frame (file, "YTID")); ++ printf("podcastrss - \"%s\"\n",taglib_id3v2_get_string_frame (file, "YWFD")); ++ printf("description - \"%s\"\n",taglib_id3v2_get_string_frame (file, "YTDS")); ++ /*printf(" - \"%s\"\n",taglib_id3v2_get_string_frame (file, )); ++ printf(" - \"%s\"\n",taglib_id3v2_get_string_frame (file, ));*/ ++ printf("time_released - \"%s\"\n",taglib_id3v2_get_string_frame (file, "YTDR")); ++ printf("BPM - \"%s\"\n",taglib_id3v2_get_string_frame (file, "TBPM")); ++ printf("sort_artist - \"%s\"\n",taglib_id3v2_get_string_frame (file, "TSOP")); ++ printf("sort_album - \"%s\"\n",taglib_id3v2_get_string_frame (file, "TSOA")); ++ printf("sort_title - \"%s\"\n",taglib_id3v2_get_string_frame (file, "TSOT")); ++ printf("sort_albumartist- \"%s\"\n",taglib_id3v2_get_string_frame (file, "TSO2")); ++ printf("sort_composer - \"%s\"\n",taglib_id3v2_get_string_frame (file, "TSOC")); ++ /* ++ string = taglib_id3v2_get_string_frame (id3file, "TLEN"); ++ if (string) ++ { ++ tag->songlen = (guint32) strtoul (string, 0, 10); ++*/ + seconds = taglib_audioproperties_length(properties) % 60; + minutes = (taglib_audioproperties_length(properties) - seconds) / 60; + This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |