Novell Home

TagLib Sharp: News

From Developer Community

Whenever there is news about TagLib#, it will be posted here and on the main page.

This release is Closed Captioned for the hearing impaired

A new release is out today. The recurring theme lately has been performance gains, and this one is no exception.

Image:WarmFileLoadTimes74237.png

These numbers aren't as good as I had previously blogged about, and despite my best efforts, I have no clue what happened. My best guess is that I simply measured wrong the first time. Regardless, this almost a 60% improvement and brings all formats into the realm or reason.

In addition to this, this release boasts a new feature. Thanks to the help of Patrick Laplante we now have Lyrics support. Simply use file.Tag.Lyrics as you would any other property and feel the love.

--Kerrick 16:21, 14 March 2007 (MDT)

I do not regret the things I've done, but those I did not do.

Foolishly giving up many hours of sleep, I have solved one of the most prevalent problems Windows developers face, the inability to write ID3v2.3 files. With taglib-sharp-1.1.73998, you can now write files that Windows Media Player can understand. Those attached picture frames won't magically disappear, new text frames won't vanish, etc. And how, you might ask, can I use this glorious feature? Behold:

TagLib.Id3v2.Tag.RenderVersion = 3;

That's it. It is the only change you need to make to that program you gave up on (aside from downloading the sexy new DLL).


With that said, I will take this opportunity to shamelessly plug my Amazon Wishlist. Feel free to show your love.

--Kerrick 15:03, 9 March 2007 (MST)

Revision 73980

I just rolled this revision into Subversion. A few things have changed since my last post:

  • Support for reading files on Windows when they are already open. Thanks to Ion Todirel.
  • Remove empty strings at the end of text frames.
  • Use String.Empty instead of "". Significant speed improvements for TagLib.Mpeg.File
  • Support broken Id3v2 comments.
  • Added new abstract class, TagLib.NonContainer.File, and helper Tags which allows for better reading of odd tag combinations, like APE in the header, ID3v2 in the footer, etc. WavPack, MusePack, Flac, and Mpeg now inherit this.

One current problem with TagLib# is that will have problems with Windows Media Player, due to the fact that TagLib# writes ID3v2.4 and UTF8. Support for ID3v2.3 will come sooner or later, but I'm a little bogged down at the moment. (Expect the possibility of code from a mysterious third party!)

Also, the current implementation of MPEG4 (iTunes files) is very slow. I'm not really sure why this is, but it does to a heck of a lot more file calls than the other formats. If someone wants to look into this, or perhaps writing an entirely new MPEG4 implementation, let me know.


I should have a .NET2.0 dll ready tomorrow, so be prepared! (Sorry to the Windows community if I have been slow on getting to you or addressing your needs. I'm not use to the problems you've been facing and I've been having trouble keeping up.)

--Kerrick 20:14, 8 March 2007 (MST)

P.S. I'm starting to blog which includes TagLib#, among other things. Check it out.

TagLib# Update

TagLib# has been under a lot of development lately. While fixing a bug I accidentally introduced into the reading of files without ID3v2 tags, I found the main bottleneck which was slowing down Mpeg reading. The graph below the average WARM file load times between versions:

Image:TaglibSharpFileLoadTimes.png

This is not bad considering that a lot of my MP3's contain pictures, and the load time for those without is on par with Asf load times.

This, along with many, many other internal improvements, is really shaping TagLib# into a solid library. And since there's been a lot of interest, I'm adding files to the Release section to make it easier for developers to use. (I've been lazy about this, since my main users have been working straight from SVN.)

Download Revision 72728

--Kerrick 22:25, 12 February 2007 (MST)

The Current State of TagLib#

It's been a while since I released 1.0 and though many discussions and patches with Aaron Bockover from Banshee, there have been numerous improvements to the library and inclusion in the next version of Banshee.


For the most part, these changes have been API compatable, with a couple exceptions, mainly Exceptions. File.Save is now void and throws a ReadOnlyException if it can't read and TagLib.File.Create throws an UnsupportedTypeException when the type provided is unsupported. This will effect saving and some loading cases.

In the "Good News" department: File classes are now automatically registered, avoiding the need for manual registration; generic picture support is coming; various bugs have been squished; and TagLib# is now in the centralized and highly covetted MyRealBox Subversion: svn co svn://svn.myrealbox.com/source/trunk/taglib-sharp

Expect a new release in about a week.

--Kerrick 18:13, 7 September 2006 (MDT)

Just listening to my Windows Media music... on Muine!

That's right, after a relatively intense 3 days of coding, Muine subversion (revision 39) now has support for reading AND writing those delightful little files Windows Media Player creates. It actually wasn't that hard to code, as the ASF Specification is very, simple, clear, and easy to handle, much like MPEG-4 except with weird but well-documented metadata. It was interesting to see that "WM/TrackNumber" could be both a string and an integer.

Anyway, this addition comes in the wake of 1.0.0 and some other changes in TagLib# by Aaron Bockover aimed at making TagLib# the entagged killer I so badly want it to be. Here are some other small changes that made it into SVN.

  • Get rid of Windows format "\r\n" ("^M" for you people), using Unix "\n". Everyone is always so picky about this.
  • Don't crash in Gnome.Vfs when reading zero bytes.
  • Mark TagLib.AudioProperties.Length as obsolete. Developers should use the new System.TimeSpan based TagLib.AudioProperties.Duration.
  • Autotools are now done right.

The next release should be banshee-ready and NUnit approved. Word is still out on the approval of G-Unit.

--Kerrick 17:42, 22 August 2006 (MDT)

TagLib# "Not just done, done enough" 1.0.0 Released

Partially because I think everything is solved and partly because I don't think I'll be taken seriously without a solid, stable release, I'm announcing 1.0.0. Since the last release, I've wrapped things up with the following changes:

  • There is now a single TagLib.CombinedTag interface rather than each system using its own. The object is never reassigned in the TagLib.File, so you never have to worry about the your copy pointing nowhere (previously a problem).
  • There is now an easy way to get a certain tag type from a file using File.GetTag (type);
  • The file's structure is no longer stored in the file and is reaquired when it is time to save. (TagLib# doesn't keep the file open so it doesn't break remote access.)
  • Windows should be supported.
  • I'm happy with this release.

Release is available at the download page available in source archives and a compiled .Net 2.0 .dll for Windows.

As I will be busy soon, I am currently looking for co-maintainers and especially a Windows maintainer who can create a nice installer or whatever is best in that field.

--Kerrick 15:57, 18 August 2006 (MDT)

P.S. I am working on WMA support.

TagLib# "I ♥ Tangerines" 0.92

This release came out a while ago and I announced it on the list (for anyone who reads it), but I didn't get a chance to post it here.

A few things made it into this release: All files re-poll structure information on write because we don't keep them locked.

  • Fixed a bug in Id3v1 where nul bytes weren't removed from strings, so "Bob Marley" would be "Bob Marley\0\0\0\0\0\0\0\0\0\0\0\0\0\0". This lead to bad results when they were stored into Id3v2, because Id3v2 treats them as string separators and created a ton of empty strings.
  • Fixed XiphComment so storing an empty string list works.
  • Added support for WavPack.
  • Include an example Gnome VFS reader, a patch for Muine and a patch for Tangerine in the examples folder.

This is a must have release.

Get it here.

--Kerrick 00:12, 1 August 2006 (MDT)

TagLib# "Almost ready for Muine" 0.91

There's a new release of TagLib# available for download. This fixes some minor issues and makes TagLib# ready for use in Muine (patch coming soon). Get it here.

--Kerrick 18:37, 26 July 2006 (MDT)

Finally, a (pre)Release

I've negected this project a lot recently. I got a new laptop so I've been playing with new features plus the fact I can finally play Unreal Tournament on Linux. Also some stuff with my girlfriend's new job. And I have to move. But I am pleased to announce the first (almost) release of TagLib# 0.90 AKA 1.0RC1!!!

This release features a rewritten method for adding frames to the Id3v2 frame factory, a fix for FLAC writing speed, and some API consolidation.

Give it a try, file a bug, join the mailing lists. The more testing, the closer we are to 1.0.

(ALSO, does anyone know what functions to use to check file read/write support on Windows? I think we're just a hop, skip, and jump away.)

--Kerrick 15:13, 25 July 2006 (MDT)

Documentation efforts

cat en/*.xml en/*/*.xml |grep "To be added." |wc -l
2499

There are now just quarter of 10,000 items to be documented! :(

--Kerrick 13:29, 6 July 2006 (MDT)

API Incompatable Changes in taglib-sharp SVN

Just a reminder if anyone actually reads this, the code in Subversion is UNSTABLE and a moving target. As such, there have been some exciting new changes. Rather than calling ((TagLib.Mpeg.File) file).GetId3v2Tag (true); or (TagLib.Ogg.XiphComment) file.Tag; or any other way to get the specific tag you want, you can now use (TagLib.Id3v2.Tag) file.GetTag (TagLib.TagTypes.Id3v2, true); or (TagLib.Ogg.XiphComment) file.GetTag (TagLib.TagTypes.Xiph);. That's right, TagLib.File.GetTag () is now available to cut all the conditionals and typecasting out of your life.

Another exciting non-API-breaking feature is that TagLib.Id3v2.Tag.Comment now uses preferential detection to scan for a default comment language and also ignore false comments like iTunes normalization data.

Lastly, Windows support should be available in the very near future. Bugs have been debugged, warnings have been unwarned, and all that remains is a Windows-friendly way of checking file permissions before we can go full speed ahead with Windows support. (Maybe it's time I look into WMA tagging...)

--Kerrick 02:03, 6 July 2006 (MDT)

MuineTagger in Subversion

I've added MuineTagger, the poster child of TagLib#, to Subversion.

--Kerrick 12:55, 4 July 2006 (MDT)

TagLib# Subversion Ready To Go

File Downloads won't seem to set up, but have no fear, as Subversion is up and running! It's probably for the best though, as the software is still a moving target and a release probably isn't the best idea in the world.

An interesting thing to note is that I've removed the weird and ugly reflection code in exchange for a couple nice, clean, easy-to-use delegates. I've already documented the new FileTypeResolver delegate on the examples page.

You can download the current tree by following the instructions here or downloading the Subversion tarball.

--Kerrick 03:56, 4 July 2006 (MDT)

Project Started

The TagLib# project has just been registered with Novell Forge. I've been working on the project privately, so you can look forward to a full release when the project registration is complete.

--Kerrick 18:48, 2 July 2006 (MDT)

Novell® Making IT Work As One

© 2009 Novell, Inc. All Rights Reserved.