id3lib-devel Mailing List for id3lib (Page 4)
Brought to you by:
t1mpy
You can subscribe to this list here.
2000 |
Jan
|
Feb
(6) |
Mar
(4) |
Apr
(86) |
May
(81) |
Jun
(53) |
Jul
(30) |
Aug
(14) |
Sep
(16) |
Oct
(14) |
Nov
(9) |
Dec
(17) |
---|---|---|---|---|---|---|---|---|---|---|---|---|
2001 |
Jan
(6) |
Feb
(41) |
Mar
(26) |
Apr
(10) |
May
(6) |
Jun
(17) |
Jul
(22) |
Aug
(51) |
Sep
(19) |
Oct
(19) |
Nov
(36) |
Dec
(83) |
2002 |
Jan
(31) |
Feb
(40) |
Mar
(45) |
Apr
(22) |
May
(6) |
Jun
(20) |
Jul
(58) |
Aug
(66) |
Sep
(54) |
Oct
(42) |
Nov
(49) |
Dec
(37) |
2003 |
Jan
(38) |
Feb
(36) |
Mar
(51) |
Apr
(41) |
May
(37) |
Jun
(41) |
Jul
(41) |
Aug
(31) |
Sep
(17) |
Oct
(33) |
Nov
(2) |
Dec
(23) |
2004 |
Jan
(27) |
Feb
(18) |
Mar
(24) |
Apr
(11) |
May
(16) |
Jun
(13) |
Jul
(20) |
Aug
(17) |
Sep
(3) |
Oct
(9) |
Nov
(2) |
Dec
(15) |
2005 |
Jan
(11) |
Feb
(15) |
Mar
(4) |
Apr
(4) |
May
(1) |
Jun
(6) |
Jul
|
Aug
(6) |
Sep
(2) |
Oct
(26) |
Nov
(5) |
Dec
(2) |
2006 |
Jan
(4) |
Feb
(3) |
Mar
(1) |
Apr
(3) |
May
|
Jun
(2) |
Jul
|
Aug
|
Sep
|
Oct
(3) |
Nov
(6) |
Dec
(3) |
2007 |
Jan
(5) |
Feb
|
Mar
(7) |
Apr
(1) |
May
(12) |
Jun
(3) |
Jul
(1) |
Aug
(4) |
Sep
|
Oct
|
Nov
(7) |
Dec
|
2008 |
Jan
(3) |
Feb
|
Mar
(2) |
Apr
(2) |
May
(3) |
Jun
(2) |
Jul
(3) |
Aug
|
Sep
(1) |
Oct
(4) |
Nov
|
Dec
|
2009 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
(8) |
2010 |
Jan
|
Feb
|
Mar
(2) |
Apr
(1) |
May
(3) |
Jun
(1) |
Jul
|
Aug
(4) |
Sep
|
Oct
|
Nov
|
Dec
|
2011 |
Jan
|
Feb
(2) |
Mar
(1) |
Apr
|
May
|
Jun
|
Jul
(1) |
Aug
(1) |
Sep
|
Oct
|
Nov
|
Dec
|
2013 |
Jan
|
Feb
(2) |
Mar
(1) |
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
(1) |
2017 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
(7) |
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
2020 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
(1) |
Dec
|
2022 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
(1) |
Oct
|
Nov
|
Dec
|
From: Richard L. <ce...@l-...> - 2007-05-24 17:21:22
|
On Thu, May 24, 2007 12:23 am, Jim Davis wrote: > In Windows XP , with Borland C++ Builder 6 , > I can compile my 3.8.3 id3lib wrapping object . > But static link fails : > > [Linker Error] > 'I:\COMMON\ID3LIB\383WIN\ID3LIB.LIB' > contains invalid OMF record , > type 0x21 (possibly COFF) If you haven't already, try Googling for the error message. Often-times, it's a generalized problem with a general solution, rather than some arcana particular to the software being compiled. Disclaimer: I don't use Windows, and this is a "Linux" answer :-) -- Some people have a "gift" link here. Know what I want? I want you to buy a CD from some indie artist. http://cdbaby.com/browse/from/lynch Yeah, I get a buck. So? |
From: Jim D. <ji...@ve...> - 2007-05-24 05:23:43
|
In Windows XP , with Borland C++ Builder 6 , I can compile my 3.8.3 id3lib wrapping object . But static link fails : [Linker Error] 'I:\COMMON\ID3LIB\383WIN\ID3LIB.LIB' contains invalid OMF record , type 0x21 (possibly COFF) Any help greatly appreciated . Jim D |
From: Nitin M <nit...@ho...> - 2007-05-24 03:19:41
|
Hi! I am working with the id3lib version 3.8.3. Can anyone please tell me how to execute the examples testpic, testcompression etc, and more importantly how do I verify whether test was successful or not. When I am running the scripts for these test cases from examples directory, I dont see anything in the screen, so how do I know whats happening? regards -Nitin _________________________________________________________________ Catch the complete World Cup coverage with MSN http://content.msn.co.in/Sports/Cricket/Default.aspx |
From: David M. C. <me...@da...> - 2007-05-20 18:19:52
|
> Can anyone supply me with the latest working versions of id3com.dll > and id3lib.dll [...] as I keep on trying ones compiled by > myself and from various user sites but keep getting some strange > results, unreadable characters and crashs etc.. i had the same problem and ended up just fixing the errors and bugs myself. the source code, even the head revision, is shakey at best. notably the Unicode handling is pretty busted. -dave |
From: David M. C. <me...@da...> - 2007-05-20 18:18:08
|
> I would like add the id3lib to my project, but I don't wish an > additional > DLL file, how can I compile the id3lib code with my project? just download the sources and add them to your project. keep in mind your project must be released under at least LGPL to do this. if you do not wish to use LGPL then you must use it as a DLL. -dave |
From: Matzy <ma...@ma...> - 2007-05-20 13:00:37
|
Hi everyone, Can anyone supply me with the latest working versions of id3com.dll and id3lib.dll for use with VB6 please as I keep on trying ones compiled by myself and from various user sites but keep getting some strange results, unreadable characters and crashs etc.. Many thanks No virus found in this outgoing message. Checked by AVG Free Edition. Version: 7.5.467 / Virus Database: 269.7.5/812 - Release Date: 19/05/2007 1:52 pm |
From: Bloodware - <blo...@gm...> - 2007-05-20 12:16:02
|
Hello, I would like add the id3lib to my project, but I don't wish an additional DLL file, how can I compile the id3lib code with my project? Thank you. |
From: Pavel P. <pou...@ya...> - 2007-05-16 13:52:43
|
For those who wish to build id3com project in VS2005 following changes have to be made in id3com project file after converting: Configuration Properties/C/C++/Language/Treat wchar_t as builtin type - set to No (to treat BSTR the same way as unsigned short) Configuration Properties/Linker/Input/Ignore Specific Library - remove libcmt(d).lib DLL built this way works fine for me as COM object and is usable through .NET too. Good Luck, Pavel ____________________________________________________________________________________Boardwalk for $500? In 2007? Ha! Play Monopoly Here and Now (it's updated for today's economy) at Yahoo! Games. http://get.games.yahoo.com/proddesc?gamekey=monopolyherenow |
From: Cedric T. <ce...@ph...> - 2007-04-02 07:27:30
|
rock8air wrote: > Hi > > I am new here. > > Is this thing is dead? > > > > Bye > > > The project lacks developers and administrators who have both the time and the long term interest to keep the project moving forward. So in that sense, yes it is (virtually) dead. - Cedric |
From: rock8air <roc...@fr...> - 2007-03-30 15:20:39
|
Hi I am new here. Is this thing is dead? Bye Tamas |
From: <jer...@gm...> - 2007-03-05 18:32:45
|
SGksCgpUaGlzIHBhdGNoIGZpeGVzIG9ubHkgYSBwcm9ibGVtIHdoZW4gd3JpdGluZyBVVEYtMTYg c3RyaW5ncyBhbmQgd29ya3MKcGVyZmVjdGx5IGZvciBtZS4KTm90ZSB0aGF0IHRoZSB2ZXJzaW9u IDMuOC4zIGRvZXNuJ3Qgc3VwcG9ydCBVVEYtOCBzdHJpbmdzLi4uCgpCdXQgYnkgdXNpbmcgdGhp cyBwYXRjaCwgeW91IHdpbGwgbm90IGhhdmUgcHJvYmxlbSB0byBzYXZlIHlvdXJzIHRhZ3MgdG8K VW5pY29kZS4uLgoKUmVnYXJkcywKSmVyb21lCgoKCjIwMDcvMy81LCBqb2huIHNlcnZldGFzIDxq b2huc2VydmV0YXNAeWFob28uZ3I+Ogo+Cj4gSGVsbG8uCj4KPiBBcyBpdCBpcyB3ZWxsIGtub3du LCB0aGVyZSBpcyBhIGJ1ZyBpbiBhbGwgdGhlIGxhc3QgcmVsZWFzZXMgb2YgaWQzbGliLAo+IHdo aWNoIGRvZXNuJ3QgYWxsb3dzIHRvIHJlY29kZSB0aGUgaXNvLTg4NTkgZW5jb2RlZCB0YWdzIGlu dG8gdXRmLTguCj4KPiBJdCBpcyBzYWlkIHRoYXQgdGhlIHNyYyBmaWxlIGhhcyB0byBiZSBwYXRj aGVkIHdpdGggdGhlIGJlbGxvdyBwYXRjaCAoCj4gaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wcm9q ZWN0L2Rvd25sb2FkaW5nLnBocD9ncm91cG5hbWU9ZWFzeXRhZyZmaWxlbmFtZT1wYXRjaF9pZDNs aWJfMy44LjNfVVRGMTZfd3JpdGluZ19idWcuZGlmZiZ1c2VfbWlycm9yPWJlbG5ldCkKPiBhdmFp bGFibGUgYXQgaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wcm9qZWN0L3Nob3dmaWxlcy5waHA/Z3Jv dXBfaWQ9NTIxNiwKPiBhbmQgdG8gYmUgcmVjb21waWxlZC4KPgo+IEkndmUgZG9uZSBpdCBzZXZl cmFsIHRpbWVzLCBhbHNvIGkgaGF2ZSB0cmllZCB0byBmdWxseSB1bmluc3RhbGwgZWFzeXRhZywK PiB0aGVuIGluc3RhbGwgdGhlIGlkM2xpYiwgYW5kIGFmdGVyIHRoYXQgcmVpbnN0YWxsIHRoZSBM QVNUIFZFUlNJT04gb2YKPiBlYXN5dGFnLCBidXQgYWdhaW4gbm90aGluZyBoYXBwZW5zLgo+Cj4g SXMgdGhlcmUgYW55b25lIG9mIHRoZSBkZXZlbG9wZXJzLCB0aGF0IGNvdWxkIGFuc3dlciBpZiB3 aWxsIGJlIHRoZXJlIGFueQo+IGF0dGVtcHQsIHNvIHRoYXQgdGhlIG5leHQgcmVsZWFzZSBvZiBp ZDNsaWIgbm90IHRvIGhhdmUgdGhpcyBidWc/Cj4KPiBUaGFuayB5b3UuCj4KPgo+IC0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQo+INfx5/Pp7O/w7+nl3/TlIFlhaG9vIQo+IMLh8eXo 3urh9OUg9OEg5e3v9+vn9Onq3CDs5+39IOzh9OEgKHNwYW0pOyDU7yBZYWhvbyEgTWFpbCDk6eHo 3fTl6SD05+0KPiDq4ev99OXx5yDk9e3h9N4g8PHv8/Th89/hIOrh9Nwg9PntIOXt7/fr5/Tp6v7t IOzn7fXs3PT57Qo+IGh0dHA6Ly9sb2dpbi55YWhvby5jb20vY29uZmlnL21haWw/LmludGw9Z3IK PiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tCj4gVGFrZSBTdXJ2ZXlzLiBFYXJuIENhc2guIEluZmx1ZW5jZSB0 aGUgRnV0dXJlIG9mIElUCj4gSm9pbiBTb3VyY2VGb3JnZS5uZXQncyBUZWNoc2F5IHBhbmVsIGFu ZCB5b3UnbGwgZ2V0IHRoZSBjaGFuY2UgdG8gc2hhcmUKPiB5b3VyCj4gb3BpbmlvbnMgb24gSVQg JiBidXNpbmVzcyB0b3BpY3MgdGhyb3VnaCBicmllZiBzdXJ2ZXlzLWFuZCBlYXJuIGNhc2gKPiBo dHRwOi8vd3d3LnRlY2hzYXkuY29tL2RlZmF1bHQucGhwP3BhZ2U9am9pbi5waHAmcD1zb3VyY2Vm b3JnZSZDSUQ9REVWREVWCj4gX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX18KPiBpZDNsaWItZGV2ZWwgbWFpbGluZyBsaXN0Cj4gaWQzbGliLWRldmVsQGxpc3Rz LnNvdXJjZWZvcmdlLm5ldAo+IGh0dHBzOi8vbGlzdHMuc291cmNlZm9yZ2UubmV0L2xpc3RzL2xp c3RpbmZvL2lkM2xpYi1kZXZlbAo+Cg== |
From: john s. <joh...@ya...> - 2007-03-05 16:29:07
|
Hello. As it is well known, there is a bug in all the last releases of id3lib, which doesn't allows to recode the iso-8859 encoded tags into utf-8. It is said that the src file has to be patched with the bellow patch (http://sourceforge.net/project/downloading.php?groupname=easytag&filename=patch_id3lib_3.8.3_UTF16_writing_bug.diff&use_mirror=belnet) available at http://sourceforge.net/project/showfiles.php?group_id=5216, and to be recompiled. I've done it several times, also i have tried to fully uninstall easytag, then install the id3lib, and after that reinstall the LAST VERSION of easytag, but again nothing happens. Is there anyone of the developers, that could answer if will be there any attempt, so that the next release of id3lib not to have this bug? Thank you. --------------------------------- Χρησιμοποιείτε Yahoo! Βαρεθήκατε τα ενοχλητικά μηνύ ματα (spam); Το Yahoo! Mail διαθέτει την καλύτερη δυνατή προστασία κατά των ενοχλητικών μηνυμάτων http://login.yahoo.com/config/mail?.intl=gr |
From: David M. C. <me...@da...> - 2007-03-03 19:09:43
|
On Mar 3, 2007, at 6:58 AM, Bloodware - wrote: > I was woundering, is there any good reason why the development of > the lib is > no longer active? i think the problem is just that nobody's bothered. i can tell you the reason i don't contribute is merely that it's a hassle to: 1) join and get approved as a contributor 2) use the version control system I know that 2) is no excuse, just laziness. I'm just saying there's a barrier for entry that's just too far above my threshold of what I'm willing to bother to do. I'm actually very close to simply co- opting the whole thing and putting up a Wiki with the source code, including all fixes that i've made, and others can do the same much more easily. For me a wiki is insanely simple to use. |
From: Bloodware - <blo...@gm...> - 2007-03-03 14:58:54
|
I was woundering, is there any good reason why the development of the lib is no longer active? -- Bloodware.net - Developing free software for the community. |
From: Veit H. <fre...@we...> - 2007-03-03 12:44:41
|
hi I know id3lib isn't very active. But could maybe the easytag patch be applied to the id3lib? Easytag ist used and I'm sure a normal user is not able to apply the patch, and it is also kind of annoying. wouldn't be much work or? Veit |
From: Cedric T. <ce...@ph...> - 2007-01-29 08:36:10
|
David M. Cotter wrote: > just wondering if this project is moving at all. it doesn't seem to > be? > Not really. See http://sourceforge.net/mailarchive/forum.php?thread_id=10196121&forum_id=5794 - Cedric |
From: David M. C. <me...@da...> - 2007-01-27 18:32:46
|
just wondering if this project is moving at all. it doesn't seem to be? |
From: <der...@es...> - 2007-01-17 09:57:05
|
Hi, Following the Windows readme instructions, id3lib and zlib compiles without any problem in Visual Studio 2005. But when it's time to build id3com, the following errors occurs : Error=091=09error C2664: 'SysAllocString' : cannot convert parameter 1 from 'unicode_t *' to 'const OLECHAR *'=09id3com\id3field.cpp=09101 Error=092=09error C2664: 'void ID3_Field::Set(uint32)' : cannot convert parameter 1 from 'BSTR' to 'uint32'=09id3com\id3field.cpp=09136 Error=094=09error C2664: 'ID3_Frame *ID3_Tag::Find(ID3_FrameID,ID3_FieldID,uint32) const' : cannot convert parameter 3 from 'BSTR' to 'uint32'=09id3com\id3tag.cpp=09610 Error=095=09error C2679: binary '=3D' : no operator found which takes a right-hand operand of type 'BSTR' (or there is no acceptable conversion)=09id3com\id3tag.cpp=09614 Error=096=09error C2664: 'ID3_Frame *ID3_Tag::Find(ID3_FrameID,ID3_FieldID,uint32) const' : cannot convert parameter 3 from 'BSTR' to 'uint32'=09id3com\id3tag.cpp=09636 Error=097=09error C2664: 'ID3_Frame *ID3_Tag::Find(ID3_FrameID,ID3_FieldID,uint32) const' : cannot convert parameter 3 from 'BSTR' to 'uint32'=09id3com\id3tag.cpp=09653 Error=098=09error C2679: binary '=3D' : no operator found which takes a right-hand operand of type 'BSTR' (or there is no acceptable conversion)=09id3com\id3tag.cpp=09657 Error=099=09error C2664: 'ID3_Frame *ID3_Tag::Find(ID3_FrameID,ID3_FieldID,uint32) const' : cannot convert parameter 3 from 'BSTR' to 'uint32'=09id3com\id3tag.cpp=09674 Error=0910=09error C2664: 'ID3_Frame *ID3_Tag::Find(ID3_FrameID,ID3_FieldID,uint32) const' : cannot convert parameter 3 from 'BSTR' to 'uint32'=09id3com\id3tag.cpp=09691 Error=0911=09error C2679: binary '=3D' : no operator found which takes a right-hand operand of type 'BSTR' (or there is no acceptable conversion)=09id3com\id3tag.cpp=09695 (3 is just a warning about the deprecated strcpy, we can freely ignore it) --=20 S=E9bastien Santoro Rue de la Science 14 - 6000 Charleroi - Belgique Tel +32 487 158 344 - skype://dereckson/ Espace Win - http://www.espace-win.info/ Open Your Windows - Ouvrez vos horizons Double V Network - http://www.double-v.com/ Double V - Passez =E0 la vitesse V V' |
From: Robert M. <rob...@gm...> - 2007-01-11 17:56:54
|
Hi all, finally i suceeded to embed the id3lib in my application (VC6) - all is compiled, built and running. however, whenever i get to the critical part shown bellow the system crashes at "myTag.Update()" (highlighted bellow). does someone has any idea? The applciation doesnt allow me to debug the code in ID3_Tag functions, thus, it is impossible to go through the internal lines. your attendance will be appreciated. thanks and best regards, robert try { ID3_Tag myTag; RemoveReadOnlyStatusThrowException(filename); myTag.Link(filename, ID3TT_ID3V2); ID3_Tag* pTag= &myTag; ID3_AddArtist(pTag,LPCTSTR(sArtist),TRUE); myTag.Update(ID3TT_ID3V2); } catch(CFileException* e) { throw e; } catch(...) { //Unknown Error throw it throw; } |
From: Tobias D. <ra...@td...> - 2007-01-10 16:11:18
|
jon bird wrote: > not too sure quite the state this is in wrt to id3lib, there seems to > have been various stabs at correcting it over the past few years, none > of which have made it into the main source code tree (that I can see). > So considering one of my customers threw up a problem which I tracked > down to this very issue, I've had a bit of a delve through the archives > and have managed to pull together the following: Just in case you're interested, I'm using the following "works for me" patch locally here. I'm using it and a slightly patched id3v2 to add unicode tags to my mp3s (in a utf-8 locale, but the new 'native' encoding type should work in all locales for unicode IIRC). Don't know if this solves any other unicode problems. patch for id3lib: -----------------------------------snip---------------------------------- diff -Naru -x Makefile.in -x Makefile -x libtool -x control -x config.h -x configure -x config.log -x config.status id3lib3.8.3-3.8.3/include/id3/globals.h id3lib3.8.3-3.8.3.patched/include/id3/globals.h --- id3lib3.8.3-3.8.3/include/id3/globals.h 2003-03-02 01:23:00.000000000 +0100 +++ id3lib3.8.3-3.8.3.patched/include/id3/globals.h 2005-07-08 23:36:05.000000000 +0200 @@ -141,12 +141,13 @@ ID3TE_UTF16, ID3TE_UTF16BE, ID3TE_UTF8, + ID3TE_NATIVE, ID3TE_NUMENCODINGS, ID3TE_ASCII = ID3TE_ISO8859_1, // do not use this -> use ID3TE_IS_SINGLE_BYTE_ENC(enc) instead ID3TE_UNICODE = ID3TE_UTF16 // do not use this -> use ID3TE_IS_DOUBLE_BYTE_ENC(enc) instead }; -#define ID3TE_IS_SINGLE_BYTE_ENC(enc) ((enc) == ID3TE_ISO8859_1 || (enc) == ID3TE_UTF8) +#define ID3TE_IS_SINGLE_BYTE_ENC(enc) ((enc) == ID3TE_ISO8859_1 || (enc) == ID3TE_UTF8 || (enc) == ID3TE_NATIVE) #define ID3TE_IS_DOUBLE_BYTE_ENC(enc) ((enc) == ID3TE_UTF16 || (enc) == ID3TE_UTF16BE) /** Enumeration of the various id3 specifications diff -Naru -x Makefile.in -x Makefile -x libtool -x control -x config.h -x configure -x config.log -x config.status id3lib3.8.3-3.8.3/include/id3/io_helpers.h id3lib3.8.3-3.8.3.patched/include/id3/io_helpers.h --- id3lib3.8.3-3.8.3/include/id3/io_helpers.h 2003-03-02 01:23:00.000000000 +0100 +++ id3lib3.8.3-3.8.3.patched/include/id3/io_helpers.h 2005-07-07 21:19:49.000000000 +0200 @@ -70,8 +70,8 @@ ID3_C_EXPORT size_t writeString(ID3_Writer&, String); ID3_C_EXPORT size_t writeText(ID3_Writer&, String); - ID3_C_EXPORT size_t writeUnicodeString(ID3_Writer&, String, bool = true); - ID3_C_EXPORT size_t writeUnicodeText(ID3_Writer&, String, bool = true); + ID3_C_EXPORT size_t writeUnicodeString(ID3_Writer&, String, bool = false); + ID3_C_EXPORT size_t writeUnicodeText(ID3_Writer&, String, bool = false); ID3_C_EXPORT size_t writeBENumber(ID3_Writer&, uint32 val, size_t); ID3_C_EXPORT size_t writeTrailingSpaces(ID3_Writer&, String, size_t); ID3_C_EXPORT size_t writeUInt28(ID3_Writer&, uint32); diff -Naru -x Makefile.in -x Makefile -x libtool -x control -x config.h -x configure -x config.log -x config.status id3lib3.8.3-3.8.3/src/field.cpp id3lib3.8.3-3.8.3.patched/src/field.cpp --- id3lib3.8.3-3.8.3/src/field.cpp 2003-03-02 01:23:00.000000000 +0100 +++ id3lib3.8.3-3.8.3.patched/src/field.cpp 2005-07-09 00:01:13.000000000 +0200 @@ -906,7 +906,7 @@ _changed(false), _fixed_size(def._fixed_size), _num_items(0), - _enc((_type == ID3FTY_TEXTSTRING) ? ID3TE_ASCII : ID3TE_NONE) + _enc((_type == ID3FTY_TEXTSTRING) ? ID3TE_NATIVE : ID3TE_NONE) { this->Clear(); } @@ -943,11 +943,11 @@ _text.erase(); if (_fixed_size > 0) { - if (this->GetEncoding() == ID3TE_UNICODE) + if (ID3TE_IS_DOUBLE_BYTE_ENC(this->GetEncoding())) { _text.assign(_fixed_size * 2, '\0'); } - else if (this->GetEncoding() == ID3TE_ASCII) + else if (ID3TE_IS_SINGLE_BYTE_ENC(this->GetEncoding())) { _text.assign(_fixed_size, '\0'); } diff -Naru -x Makefile.in -x Makefile -x libtool -x control -x config.h -x configure -x config.log -x config.status id3lib3.8.3-3.8.3/src/field_string_ascii.cpp id3lib3.8.3-3.8.3.patched/src/field_string_ascii.cpp --- id3lib3.8.3-3.8.3/src/field_string_ascii.cpp 2003-03-02 01:23:00.000000000 +0100 +++ id3lib3.8.3-3.8.3.patched/src/field_string_ascii.cpp 2005-07-09 00:41:13.000000000 +0200 @@ -48,6 +48,7 @@ if ((this->GetType() == ID3FTY_TEXTSTRING) && data) { String str(data); + this->SetEncoding(ID3TE_NATIVE); len = this->SetText_i(str); } return len; @@ -86,38 +87,45 @@ **/ size_t ID3_FieldImpl::Get(char* buffer, size_t maxLength) const { + ID3_TextEnc enc = this->GetEncoding(); size_t size = 0; - if (this->GetType() == ID3FTY_TEXTSTRING && - this->GetEncoding() == ID3TE_ASCII && - buffer != NULL && maxLength > 0) + if (this->GetType() != ID3FTY_TEXTSTRING || + buffer == NULL || maxLength <= 0) { - String data = this->GetText(); - size = dami::min(maxLength, data.size()); - ::memcpy(buffer, data.data(), size); - if (size < maxLength) - { - buffer[size] = '\0'; - } + return 0; } + String data = dami::convert(this->GetText(), enc, ID3TE_NATIVE); + /* + * maxLenght-1 is used to leave room for the terminating \0. + * Safe by default is good. + * http://www.courtesan.com/todd/papers/strlcpy.html + */ + size = dami::min(maxLength-1, data.size()); + data.copy(buffer, size); + buffer[size] = '\0'; return size; } size_t ID3_FieldImpl::Get(char* buf, size_t maxLen, size_t index) const { + ID3_TextEnc enc = this->GetEncoding(); size_t size = 0; - if (this->GetType() == ID3FTY_TEXTSTRING && - this->GetEncoding() == ID3TE_ASCII && - buf != NULL && maxLen > 0) + if (this->GetType() != ID3FTY_TEXTSTRING || + buf == NULL || maxLen <= 0) { - String data = this->GetTextItem(index); - size = dami::min(maxLen, data.size()); - ::memcpy(buf, data.data(), size); - if (size < maxLen) - { - buf[size] = '\0'; - } + return 0; } + String data = dami::convert(this->GetTextItem(index), enc, ID3TE_NATIVE); + /* + * maxLen-1 is used to leave room for the terminating \0. + * Safe by default is good. + * http://www.courtesan.com/todd/papers/strlcpy.html + */ + size = dami::min(maxLen-1, data.size()); + data.copy(buf, size); + buf[size] = '\0'; + return size; } @@ -135,7 +143,7 @@ { String data; if (this->GetType() == ID3FTY_TEXTSTRING && - this->GetEncoding() == ID3TE_ASCII) + ID3TE_IS_SINGLE_BYTE_ENC(this->GetEncoding())) { const char* raw = this->GetRawTextItem(index); if (raw != NULL) @@ -225,7 +233,7 @@ // ASSERT(_fixed_size == 0) _text += '\0'; - if (this->GetEncoding() == ID3TE_UNICODE) + if (ID3TE_IS_DOUBLE_BYTE_ENC(this->GetEncoding())) { _text += '\0'; } @@ -261,8 +269,7 @@ const char* ID3_FieldImpl::GetRawText() const { const char* text = NULL; - if (this->GetType() == ID3FTY_TEXTSTRING && - this->GetEncoding() == ID3TE_ASCII) + if (this->GetType() == ID3FTY_TEXTSTRING) { text = _text.c_str(); } @@ -271,16 +278,21 @@ const char* ID3_FieldImpl::GetRawTextItem(size_t index) const { + ID3_TextEnc enc = this->GetEncoding(); const char* text = NULL; - if (this->GetType() == ID3FTY_TEXTSTRING && - this->GetEncoding() == ID3TE_ASCII && - index < this->GetNumTextItems()) + if (this->GetType() != ID3FTY_TEXTSTRING || + index >= this->GetNumTextItems()) { - text = _text.c_str(); - for (size_t i = 0; i < index; ++i) - { - text += strlen(text) + 1; - } + return NULL; + } + if (ID3TE_IS_DOUBLE_BYTE_ENC(enc)) + { + return (char *) this->GetRawUnicodeTextItem(index); + } + text = _text.c_str(); + for (size_t i = 0; i < index; ++i) + { + text += strlen(text) + 1; } return text; } @@ -289,7 +301,7 @@ { String readEncodedText(ID3_Reader& reader, size_t len, ID3_TextEnc enc) { - if (enc == ID3TE_ASCII) + if (ID3TE_IS_SINGLE_BYTE_ENC(enc)) { return io::readText(reader, len); } @@ -298,7 +310,7 @@ String readEncodedString(ID3_Reader& reader, ID3_TextEnc enc) { - if (enc == ID3TE_ASCII) + if (ID3TE_IS_SINGLE_BYTE_ENC(enc)) { return io::readString(reader); } @@ -307,20 +319,20 @@ size_t writeEncodedText(ID3_Writer& writer, String data, ID3_TextEnc enc) { - if (enc == ID3TE_ASCII) + if (ID3TE_IS_SINGLE_BYTE_ENC(enc)) { return io::writeText(writer, data); } - return io::writeUnicodeText(writer, data); + return io::writeUnicodeText(writer, data, false); } size_t writeEncodedString(ID3_Writer& writer, String data, ID3_TextEnc enc) { - if (enc == ID3TE_ASCII) + if (ID3TE_IS_SINGLE_BYTE_ENC(enc)) { return io::writeString(writer, data); } - return io::writeUnicodeString(writer, data); + return io::writeUnicodeString(writer, data, false); } } diff -Naru -x Makefile.in -x Makefile -x libtool -x control -x config.h -x configure -x config.log -x config.status id3lib3.8.3-3.8.3/src/field_string_unicode.cpp id3lib3.8.3-3.8.3.patched/src/field_string_unicode.cpp --- id3lib3.8.3-3.8.3/src/field_string_unicode.cpp 2003-03-02 01:23:00.000000000 +0100 +++ id3lib3.8.3-3.8.3.patched/src/field_string_unicode.cpp 2005-07-09 00:00:08.000000000 +0200 @@ -49,10 +49,10 @@ size_t ID3_FieldImpl::Set(const unicode_t* data) { size_t size = 0; - if (this->GetType() == ID3FTY_TEXTSTRING && - this->GetEncoding() == ID3TE_UNICODE && data) + if (this->GetType() == ID3FTY_TEXTSTRING && data) { String text((const char*) data, ucslen(data) * 2); + this->SetEncoding(ID3TE_UTF16); size = this->SetText_i(text); } return size; @@ -62,7 +62,7 @@ { size_t size = 0; if (this->GetType() == ID3FTY_TEXTSTRING && - this->GetEncoding() == ID3TE_UNICODE) + ID3TE_IS_DOUBLE_BYTE_ENC(this->GetEncoding())) { String text((const char*) data, ucslen(data) * 2); size = this->AddText_i(text); @@ -93,26 +93,27 @@ size_t ID3_FieldImpl::Get(unicode_t *buffer, size_t maxLength) const { size_t length = 0; - if (this->GetType() == ID3FTY_TEXTSTRING && - this->GetEncoding() == ID3TE_UNICODE && - buffer != NULL && maxLength > 0) + if (this->GetType() != ID3FTY_TEXTSTRING || + buffer == NULL || maxLength <= 0) { - size_t size = this->Size(); - length = dami::min(maxLength, size); - ::memcpy((void *)buffer, (void *)_text.data(), length * 2); - if (length < maxLength) - { - buffer[length] = NULL_UNICODE; - } + return 0; } + String utf = dami::convert(_text, this->GetEncoding(), ID3TE_UTF16); + /* + * maxLenght-1 is used to leave room for the terminating \0. + * Safe by default is good. + * http://www.courtesan.com/todd/papers/strlcpy.html + */ + length = dami::min(maxLength-1, utf.size()/2); + utf.copy((char*)buffer, length * 2); + buffer[length] = NULL_UNICODE; return length; } const unicode_t* ID3_FieldImpl::GetRawUnicodeText() const { const unicode_t* text = NULL; - if (this->GetType() == ID3FTY_TEXTSTRING && - this->GetEncoding() == ID3TE_UNICODE) + if (this->GetType() == ID3FTY_TEXTSTRING) { text = (unicode_t *)_text.data(); } @@ -123,7 +124,7 @@ { const unicode_t* text = NULL; if (this->GetType() == ID3FTY_TEXTSTRING && - this->GetEncoding() == ID3TE_UNICODE && + ID3TE_IS_DOUBLE_BYTE_ENC(this->GetEncoding()) && index < this->GetNumTextItems()) { String unicode = _text + '\0' + '\0'; @@ -140,23 +141,28 @@ { size_t length = 0; size_t total_items = this->GetNumTextItems(); - if (this->GetType() == ID3FTY_TEXTSTRING && - this->GetEncoding() == ID3TE_UNICODE && - buffer != NULL && maxLength > 0 && itemNum < total_items) + if (this->GetType() != ID3FTY_TEXTSTRING || + buffer == NULL || maxLength <= 0 || itemNum >= total_items) { - const unicode_t* text = this->GetRawUnicodeTextItem(itemNum); - if (NULL != text) - { - size_t length = dami::min(maxLength, ucslen(text)); - ::memcpy(buffer, text, length * 2); - if (length < maxLength) - { - buffer[length] = NULL_UNICODE; - } - } + return 0; } + const unicode_t *raw = this->GetRawUnicodeTextItem(itemNum); + if (raw == NULL) + { + return 0; + } + String s; + s.append((char*) raw, ucslen(raw)*2); + String data = dami::convert(s, this->GetEncoding(), ID3TE_UTF16); + /* + * maxLenght-1 is used to leave room for the terminating \0. + * Safe by default is good. + * http://www.courtesan.com/todd/papers/strlcpy.html + */ + length = dami::min(maxLength-1, data.size()/2); + data.copy((char*)buffer, length * 2); + buffer[length] = NULL_UNICODE; + return length; } - - diff -Naru -x Makefile.in -x Makefile -x libtool -x control -x config.h -x configure -x config.log -x config.status id3lib3.8.3-3.8.3/src/helpers.cpp id3lib3.8.3-3.8.3.patched/src/helpers.cpp --- id3lib3.8.3-3.8.3/src/helpers.cpp 2003-03-02 01:23:00.000000000 +0100 +++ id3lib3.8.3-3.8.3.patched/src/helpers.cpp 2005-07-09 00:23:16.000000000 +0200 @@ -51,13 +51,19 @@ { return ""; } - ID3_TextEnc enc = fp->GetEncoding(); - fp->SetEncoding(ID3TE_ASCII); + + const char *rawtext = fp->GetRawText(); + if (rawtext == NULL) + { + return ""; + } + String raw; + raw.append(rawtext, fp->Size()); + raw.append("\0\0", 2); /* make sure we have enough terminating zeroes */ - String text(fp->GetRawText(), fp->Size()); + String res = convert(raw, fp->GetEncoding(), ID3TE_NATIVE); - fp->SetEncoding(enc); - return text; + return res; } String id3::v2::getStringAtIndex(const ID3_Frame* frame, ID3_FieldID fldName, @@ -69,16 +75,32 @@ } String text; ID3_Field* fp = frame->GetField(fldName); - if (fp && fp->GetNumTextItems() < nIndex) + if (fp && fp->GetNumTextItems() >= nIndex) + { + return ""; + } + const char *rawtext = fp->GetRawTextItem(nIndex); + if (rawtext == NULL) + { + return ""; + } + size_t rawlen = 0; + ID3_TextEnc enc = fp->GetEncoding(); + if (ID3TE_IS_DOUBLE_BYTE_ENC(enc)) + { + rawlen = ucslen((unicode_t *)rawtext)*2; + } + else { - ID3_TextEnc enc = fp->GetEncoding(); - fp->SetEncoding(ID3TE_ASCII); + rawlen = strlen(rawtext); + } + String raw; + raw.append(rawtext, rawlen); + raw.append("\0\0", 2); /* make sure we have enough terminating zeroes */ - text = fp->GetRawTextItem(nIndex); + String res = convert(raw, enc, ID3TE_NATIVE); - fp->SetEncoding(enc); - } - return text; + return res; } size_t id3::v2::removeFrames(ID3_TagImpl& tag, ID3_FrameID id) diff -Naru -x Makefile.in -x Makefile -x libtool -x control -x config.h -x configure -x config.log -x config.status id3lib3.8.3-3.8.3/src/io_helpers.cpp id3lib3.8.3-3.8.3.patched/src/io_helpers.cpp --- id3lib3.8.3-3.8.3/src/io_helpers.cpp 2003-03-02 01:23:00.000000000 +0100 +++ id3lib3.8.3-3.8.3.patched/src/io_helpers.cpp 2005-07-09 00:44:21.000000000 +0200 @@ -142,16 +142,8 @@ { break; } - if (bom == -1) - { - unicode += static_cast<char>(ch2); - unicode += static_cast<char>(ch1); - } - else - { - unicode += static_cast<char>(ch1); - unicode += static_cast<char>(ch2); - } + unicode += static_cast<char>(ch1); + unicode += static_cast<char>(ch2); } return unicode; } @@ -170,24 +162,8 @@ { unicode += ch1; unicode += ch2; - unicode += readText(reader, len); - } - else if (bom == 1) - { - unicode = readText(reader, len); - } - else - { - for (size_t i = 0; i < len; i += 2) - { - if (!readTwoChars(reader, ch1, ch2)) - { - break; - } - unicode += ch2; - unicode += ch1; - } } + unicode += readText(reader, len); return unicode; } @@ -363,12 +339,8 @@ // Write the BOM: 0xFEFF unicode_t BOM = 0xFEFF; writer.writeChars((const unsigned char*) &BOM, 2); - for (size_t i = 0; i < size; i += 2) - { - unicode_t ch = (data[i] << 8) | data[i+1]; - writer.writeChars((const unsigned char*) &ch, 2); - } } + writer.writeChars(&data[0], size); return writer.getCur() - beg; } diff -Naru -x Makefile.in -x Makefile -x libtool -x control -x config.h -x configure -x config.log -x config.status id3lib3.8.3-3.8.3/src/misc_support.cpp id3lib3.8.3-3.8.3.patched/src/misc_support.cpp --- id3lib3.8.3-3.8.3/src/misc_support.cpp 2005-07-08 00:52:31.000000000 +0200 +++ id3lib3.8.3-3.8.3.patched/src/misc_support.cpp 2005-07-09 00:15:52.000000000 +0200 @@ -31,8 +31,9 @@ #include "misc_support.h" //#include "field.h" #include "id3/utils.h" // has <config.h> "id3/id3lib_streams.h" "id3/globals.h" "id3/id3lib_strings.h" +#include "id3/helpers.h" -//using namespace dami; +using namespace dami; char *ID3_GetString(const ID3_Frame *frame, ID3_FieldID fldName) { @@ -41,13 +42,10 @@ ID3_Field* fld; if (NULL != frame && NULL != (fld = frame->GetField(fldName))) { -// ID3_Field* fld = frame->GetField(fldName); - ID3_TextEnc enc = fld->GetEncoding(); - fld->SetEncoding(ID3TE_ISO8869_1); - size_t nText = fld->Size(); + String str = id3::v2::getString(frame, fldName); + size_t nText = str.size(); text = new char[nText + 1]; - fld->Get(text, nText + 1); - fld->SetEncoding(enc); + str.copy(text, nText); } return text; } @@ -57,9 +55,10 @@ char *text = NULL; if (NULL != frame) { - size_t nText = frame->GetField(fldName)->Size(); + String str = id3::v2::getStringAtIndex(frame, fldName, nIndex); + size_t nText = str.size(); text = new char[nText + 1]; - frame->GetField(fldName)->Get(text, nText + 1, nIndex); + str.copy(text, nText); } return text; } diff -Naru -x Makefile.in -x Makefile -x libtool -x control -x config.h -x configure -x config.log -x config.status id3lib3.8.3-3.8.3/src/utils.cpp id3lib3.8.3-3.8.3.patched/src/utils.cpp --- id3lib3.8.3-3.8.3/src/utils.cpp 2003-03-02 01:23:00.000000000 +0100 +++ id3lib3.8.3-3.8.3.patched/src/utils.cpp 2005-07-08 23:48:42.000000000 +0200 @@ -41,6 +41,8 @@ // check if we have all unicodes #if (defined(ID3_ICONV_FORMAT_UTF16BE) && defined(ID3_ICONV_FORMAT_UTF16) && defined(ID3_ICONV_FORMAT_UTF8) && defined(ID3_ICONV_FORMAT_ASCII)) # include <iconv.h> +# include <locale.h> +# include <langinfo.h> # include <errno.h> #else # undef HAVE_ICONV_H @@ -54,7 +56,15 @@ dami::String unicode(size * 2, '\0'); for (size_t i = 0; i < size; ++i) { - unicode[i*2+1] = toascii(data[i]); + unsigned char c = data[i]; + if ((c & 0x80) == 0) + { + unicode[i*2+1] = c; + } + else + { + unicode[i*2+1] = '?'; + } } return unicode; } @@ -66,7 +76,15 @@ dami::String ascii(size, '\0'); for (size_t i = 0; i < size; ++i) { - ascii[i] = toascii(data[i*2+1]); + static unicode_t *c = (unicode_t *)&data[i*2]; + if ((*c & 0xff80) == 0) + { + ascii[i] = *c; + } + else + { + ascii[i] = '?'; + } } return ascii; } @@ -74,13 +92,13 @@ dami::String oldconvert(dami::String data, ID3_TextEnc sourceEnc, ID3_TextEnc targetEnc) { dami::String target; -#define ID3_IS_ASCII(enc) ((enc) == ID3TE_ASCII || (enc) == ID3TE_ISO8859_1 || (enc) == ID3TE_UTF8) -#define ID3_IS_UNICODE(enc) ((enc) == ID3TE_UNICODE || (enc) == ID3TE_UTF16 || (enc) == ID3TE_UTF16BE) - if (ID3_IS_ASCII(sourceEnc) && ID3_IS_UNICODE(targetEnc)) + if (ID3TE_IS_SINGLE_BYTE_ENC(sourceEnc) && + ID3TE_IS_DOUBLE_BYTE_ENC(targetEnc)) { target = mbstoucs(data); } - else if (ID3_IS_UNICODE(sourceEnc) && ID3_IS_ASCII(targetEnc)) + else if (ID3TE_IS_DOUBLE_BYTE_ENC(sourceEnc) && + ID3TE_IS_SINGLE_BYTE_ENC(targetEnc)) { target = ucstombs(data); } @@ -117,7 +135,7 @@ namespace { - String convert_i(iconv_t cd, String source) + String convert_i(iconv_t cd, String source, bool dbcs, bool bigendian) { String target; size_t source_size = source.size(); @@ -140,19 +158,52 @@ size_t nconv = iconv(cd, &source_str, &source_size, &target_str, &target_size); - if (nconv == (size_t) -1 && errno != EINVAL && errno != E2BIG) - { -// errno is probably EILSEQ here, which means either an invalid byte sequence or a valid but unconvertible byte sequence - return target; - } target.append(buf, ID3LIB_BUFSIZ - target_size); target_str = buf; target_size = ID3LIB_BUFSIZ; + if (nconv == (size_t)-1 && (errno == EILSEQ || errno == EINVAL)) + { + if (dbcs) + { + if (bigendian) + { + source_str[0] = '\0'; + source_str[1] = '?'; + } + else + { + source_str[0] = '?'; + source_str[1] = '\0'; + } + } + else + { + source_str[0] = '?'; + } + } + else if (nconv == (size_t)-1 && errno != E2BIG) /* unexpected error */ + { + return target; + } } while (source_size > 0); return target; } + const char* getNativeCharset(void) + { + static char *charset = NULL; + char *oldlocale = NULL; + + if (charset == NULL) { + oldlocale = setlocale(LC_CTYPE, ""); + charset = nl_langinfo(CODESET); + setlocale(LC_CTYPE, oldlocale); + } + + return charset; + } + const char* getFormat(ID3_TextEnc enc) { const char* format = NULL; @@ -173,7 +224,11 @@ case ID3TE_UTF8: format = ID3_ICONV_FORMAT_UTF8; break; - + + case ID3TE_NATIVE: + format = getNativeCharset(); + break; + default: break; } @@ -196,7 +251,9 @@ iconv_t cd = iconv_open (targetFormat, sourceFormat); if (cd != (iconv_t) -1) { - target = convert_i(cd, data); + target = convert_i(cd, data, + ID3TE_IS_DOUBLE_BYTE_ENC(sourceEnc), + sourceEnc == ID3TE_UTF16BE); if (target.size() == 0) { //try it without iconv -----------------------------------snip---------------------------------- patch for id3v2: -----------------------------------snip---------------------------------- diff -Naru id3v2-0.1.11/id3v2.1 id3v2-0.1.11.patched/id3v2.1 --- id3v2-0.1.11/id3v2.1 2002-02-14 20:35:31.000000000 +0100 +++ id3v2-0.1.11.patched/id3v2.1 2005-07-08 17:02:13.000000000 +0200 @@ -44,6 +44,12 @@ .B \-C, \-\-convert Converts id3v1 tag to id3v2 .TP +.B \-u, \-\-utf16 +Use UTF16 encoding instead of iso-8859-1 +.TP +.B \-U, \-\-utf8 +Use UTF8 encoding instead of iso-8859-1 +.TP .B \-a, \-\-artist ARTIST Set the artist information .TP diff -Naru id3v2-0.1.11/id3v2.cpp id3v2-0.1.11.patched/id3v2.cpp --- id3v2-0.1.11/id3v2.cpp 2005-07-07 22:22:10.000000000 +0200 +++ id3v2-0.1.11.patched/id3v2.cpp 2005-07-08 17:05:05.000000000 +0200 @@ -40,6 +40,8 @@ std::cout << " -s, --delete-v1 Deletes id3v1 tags" << std::endl; std::cout << " -D, --delete-all Deletes both id3v1 and id3v2 tags" << std::endl; std::cout << " -C, --convert Converts id3v1 tag to id3v2" << std::endl; + std::cout << " -u, --utf16 Use UTF-16 encoding instead of iso-8859-1" << std::endl; + std::cout << " -U, --utf8 Use UTF-8 encoding instead of iso-8859-1" << std::endl; std::cout << " -1, --id3v1-only Writes only id3v1 tag" << std::endl; std::cout << " -2, --id3v2-only Writes only id3v2 tag" << std::endl; std::cout << " -a, --artist \"ARTIST\" Set the artist information" << std::endl; @@ -87,6 +89,7 @@ int iOpt; int argCounter = 0; int ii; + int id3te = ID3TE_ISO8859_1; char tmp[TMPSIZE]; FILE * fp; @@ -124,6 +127,8 @@ { "convert", no_argument, &iLongOpt, 'C' }, { "id3v1-only", no_argument, &iLongOpt, '1' }, { "id3v2-only", no_argument, &iLongOpt, '2' }, + { "utf16", no_argument, &iLongOpt, 'u' }, + { "utf8", no_argument, &iLongOpt, 'U' }, // infomation to tag { "artist", required_argument, &iLongOpt, 'a' }, @@ -209,7 +214,7 @@ { "WXXX", required_argument, &optFrameID, ID3FID_WWWUSER }, { 0, 0, 0, 0 } }; - iOpt = getopt_long (argc, argv, "12hfLvlRdsDCa:A:t:c:g:y:T:", + iOpt = getopt_long (argc, argv, "12hfLvlRdsuUDCa:A:t:c:g:y:T:", long_options, &option_index); if (iOpt == -1 && argCounter == 0) @@ -240,6 +245,8 @@ case 'f': PrintFrameHelp(argv[0]);exit (0); case 'L': PrintGenreList(); exit (0); case 'v': PrintVersion(argv[0]); exit (0); + case 'u': id3te = ID3TE_UTF16BE; break; + case 'U': id3te = ID3TE_UTF8; break; // listing / remove / convert -- see list.cpp and convert.cpp case 'l': ListTag(argc, argv, optind, 0); @@ -415,6 +422,7 @@ } if (strlen(frameList[ii].data) > 0) { myFrame->Field(ID3FN_TEXT) = frameList[ii].data; + myFrame->Field(ID3FN_TEXTENC) = id3te; myTag.AttachFrame(myFrame); } break; @@ -462,11 +470,13 @@ if (text == NULL) { myFrame->Field(ID3FN_TEXT) = frameList[ii].data; + myFrame->Field(ID3FN_TEXTENC) = id3te; } else { *text = '\0'; text++; myFrame->Field(ID3FN_DESCRIPTION) = frameList[ii].data; myFrame->Field(ID3FN_TEXT) = text; + myFrame->Field(ID3FN_TEXTENC) = id3te; } if (strlen(ID3_GetString(myFrame, ID3FN_TEXT)) > 0) { myTag.AttachFrame(myFrame); @@ -484,6 +494,7 @@ if (text == NULL) { myFrame->Field(ID3FN_TEXT) = frameList[ii].data; + myFrame->Field(ID3FN_TEXTENC) = id3te; } else { *text = '\0'; text++; @@ -493,11 +504,13 @@ { myFrame->Field(ID3FN_DESCRIPTION) = frameList[ii].data; myFrame->Field(ID3FN_TEXT) = text; + myFrame->Field(ID3FN_TEXTENC) = id3te; } else { *lang = '\0'; lang++; myFrame->Field(ID3FN_DESCRIPTION) = frameList[ii].data; myFrame->Field(ID3FN_TEXT) = text; + myFrame->Field(ID3FN_TEXTENC) = id3te; myFrame->Field(ID3FN_LANGUAGE) = lang; } } -----------------------------------snip---------------------------------- -- Tobias PGP: http://9ac7e0bc.uguu.de このメールは十割再利用されたビットで作られています。 |
From: Ralf E. <ral...@gm...> - 2006-12-28 16:11:42
|
Hi Jon, I've read my name. I have written (or better improved) a Perl module using the id3lib. Included is a test-set that checks a lot of functionality. It used to crash the old id3lib at a couple of places. If you like you could send me your version and I try out if all obvious problems are corrected. BR, Ralf On Wed, 2006-12-27 at 21:01 +0000, jon bird wrote: > not too sure quite the state this is in wrt to id3lib, there seems to > have been various stabs at correcting it over the past few years, none > of which have made it into the main source code tree (that I can see). > So considering one of my customers threw up a problem which I tracked > down to this very issue, I've had a bit of a delve through the archives > and have managed to pull together the following: > > - run Ralf Engels patch file (which I believe to be listed on the site > as issue 1016290) against the 3.8.3 source code. From memory and having > re-read the posts from a couple of years ago, the approach seemed to > make a good degree of sense and aside from needing to revert to a newer > utils.cpp that seemed to go okay. > > - the last comment on the list I can find on this is that there was > difficulties building for Win32, this is true since it now requires > third party unicode conversion support. libunicode appears to be part of > Gnome so isn't really viable but I did link it successfully against the > win32 port of iconv (http://gettext.sourceforge.net/) and that worked > just fine (with my very limited testing). However that lib's GPL which > may well cause issues on the licensing front so I also coded up some > very rough and ready conversion routines to do the minimal necessary > conversions. > > - there is definitely something strange going on with the endian side of > things wrt to unicode, id3lib indicates my tags are little endian > unicode (which I believe is the case) but when passing to ivonv it needs > to be specified as big endian. Think its id3lib at fault here and > somehow its converting it to big endian but I've not explored this in > any depth, merely adjusting the conversion routines to cope (and add to > the general confusion). > > - finally, adjusted the c wrapper to call GetText rather than the (with > Ralf's mods) depreciated GetAscii/unicode etc. I think this is more in > the spirit of the thing and now reflects what the documentation > erroneously says, that the conversion happens transparently. > > It probably needs a bit more tidying up in that I've only done the > basics on the c interface but if anyone wants the mods, tell me where to > put them..... > > > j. |
From: jon b. <ne...@on...> - 2006-12-27 21:01:24
|
not too sure quite the state this is in wrt to id3lib, there seems to have been various stabs at correcting it over the past few years, none of which have made it into the main source code tree (that I can see). So considering one of my customers threw up a problem which I tracked down to this very issue, I've had a bit of a delve through the archives and have managed to pull together the following: - run Ralf Engels patch file (which I believe to be listed on the site as issue 1016290) against the 3.8.3 source code. From memory and having re-read the posts from a couple of years ago, the approach seemed to make a good degree of sense and aside from needing to revert to a newer utils.cpp that seemed to go okay. - the last comment on the list I can find on this is that there was difficulties building for Win32, this is true since it now requires third party unicode conversion support. libunicode appears to be part of Gnome so isn't really viable but I did link it successfully against the win32 port of iconv (http://gettext.sourceforge.net/) and that worked just fine (with my very limited testing). However that lib's GPL which may well cause issues on the licensing front so I also coded up some very rough and ready conversion routines to do the minimal necessary conversions. - there is definitely something strange going on with the endian side of things wrt to unicode, id3lib indicates my tags are little endian unicode (which I believe is the case) but when passing to ivonv it needs to be specified as big endian. Think its id3lib at fault here and somehow its converting it to big endian but I've not explored this in any depth, merely adjusting the conversion routines to cope (and add to the general confusion). - finally, adjusted the c wrapper to call GetText rather than the (with Ralf's mods) depreciated GetAscii/unicode etc. I think this is more in the spirit of the thing and now reflects what the documentation erroneously says, that the conversion happens transparently. It probably needs a bit more tidying up in that I've only done the basics on the c interface but if anyone wants the mods, tell me where to put them..... j. -- == jon bird - software engineer == <reply to address _may_ be invalid, real mail below> == <reduce rsi, stop using the shift key> == posted as: news 'at' onastick 'dot' clara.co.uk |
From: Robert M. <rob...@gm...> - 2006-12-14 18:07:27
|
Hi all, I need to create a DLL of the id3lib. i wanted to do it in ATL, but there are many errors. did any one implemented it in Visual C++, and in ATL in particular? your attendance will be appreciated. thanks, robert |
From: Swave <Swa...@gm...> - 2006-11-23 20:17:52
|
At 12:29 23.11.2006 +0200, you wrote: >hi all, > >i was trying to compile the id3com project, using visual C++. > >it cant find the <config.h> file. > >well, it isnt in the provided code. > >are you aware of such problem? any solution? The config.h usually is generated on Linux systems with configure. You can take the config.h.in (or something like that, I don't have the source), copy it to config.h and adjust it to your needs. Mostly it's only made of #defines about what is available or enabled. HTH bye Fabi |
From: Robert M. <rob...@gm...> - 2006-11-23 10:29:09
|
hi all, i was trying to compile the id3com project, using visual C++. it cant find the <config.h> file. well, it isnt in the provided code. are you aware of such problem? any solution? thanks, robert |