Tagging WAV files

Scott Wheeler wheeler at kde.org
Wed Aug 24 20:39:27 UTC 2011


On Aug 24, 2011, at 10:11 PM, patrick machielse wrote:

> I need to support tagging (read/write) .wav files. I've looked at the TagLib sources, and there is a generic rifffile (base) class and a specific wavfile (sub) class that seem useful.

There's no actual standard on this, so when I was writing the code, I basically just did the same thing in WAV that is done to AIFF in iTunes (since they're such closely related formats).

> In my program I need to support tags created by two programs specifically: Serato and Traktor. Experimentation seems to indicate that each app tags .wav files differently:
> 
> - Serato adds a complete ID3v2 tag to a RIFF chunk.
> - Traktor stores raw metadata directly in specific RIFF chunks.

That would surprise me since TagLib's WAV support was added specifically for Traktor and Traktor uses TagLib for reading / writing tags.  (I used to work for Native Instruments.)

> The wavfile module appeared to be what I needed to support Serato. However, Serato stores the tag in a chunk named 'id3' (lowercase) and wavfile expects it to be in 'ID3'. Editing the wav file results in a file with two ID3 tags in two separate chunks. (QTKit on Mac will refuse to play some of these files).

TagLib by default writes to "ID3 " but will read both "id3 " and "ID3 ".  Does Serato not read "ID3 " chunks?

> As far as I can tell there is no direct (public) support for writing to custom RIFF chunks.

setChunkData is protected, so it's fairly straightforward to use from a subclass.

> My analysis so far is that I will need to create a custom subclass of rifffile -- probably starting with the wavfile code. Is that correct, or is there an easier approach?

Really you'd just need to subclass File::RIFF::WAV and override save() -- which should be about 5 lines of code.  But I'd be interested to see what Serato does to see if it'd be possible to get something that works in all cases out of the box.

-Scott


More information about the taglib-devel mailing list