Author Topic: ID3v2 new 'Subsong System' idea  (Read 2144 times)


  • Posts: 932
ID3v2 new 'Subsong System' idea
« on: 24 Jun '12 - 15:06 »

This is not going to be directly BASS related, but may be of some interest for developers of audio applications.

When I was developing MP3 Stream Editor, sometime around 2005, I implemented a 'Subsong System'. It was for a basic need for specifying artist, title and seek position for songs in a single album audio file in ID3v2 tag. It was usefull then, but now I would like to store all those extra information like playcount, composer and so on for the songs in an album audio file.
My idea is developing an extension to ID3v2 by simply using a TXXX frame with an XML file content. My idea is to make it's structure as the same as the ID3v2 standard as it can be.
The main structure would be subsong ID of some kind with child nodes with the same IDs as ID3v2 frames and the structure of those nodes as the same as it's ID3v2 specification.
It would be completely unicode with support for (don't know right now for what purpose) binary data base64 encoded.
Why would this be good beside replacing my old 'Subsong System'? I think the most useful side is the album cover pictures issue.
If you convert an album to multiple audio files you have the problem that cover art pictures need to be put in all separate files. I had this problem when I encoded Micheal Jackson's HIStory album (2CDs) with 30 cover art pictures. One probably don't want to put all 30 cover art pictures in all single audio files.
Another good side would be that information that is global for the album would reside in the existing ID3v2 tag and only the extra, per song information, would be in the TXXX frame.
Maybe the XML structure should be supporting a single item only also so the whole XML format would be also usable as a standalone tagging system (in the future?) which can be simply used by any existing tagging system simply by storing this XML file in a field.
Of course this would be a completely free format, especially if it is based on ID3v2, which is free, as it would be.

If I develop this, it would be with my ID3v2 Delphi Library, so Delphi users would have instantly access to this information.

What do you think, any suggestions, caveats?

Thanx for your time!


  • Posts: 160
Re: ID3v2 new 'Subsong System' idea
« Reply #1 on: 24 Jun '12 - 17:34 »
Did you know about CUE sheets?

There are similar to the "Subsong System", they store Interpret & Song Title and a Time Position, so the CDs get ripped at once in one Audio File and using the CUE for example the VLC Player still an know where the different Tracks start,end and which Interpret&Title they have. Also when you burn it on a CD the Cues are useful to make the different Tracks.


  • Posts: 932
Re: ID3v2 new 'Subsong System' idea
« Reply #2 on: 25 Jun '12 - 13:03 »
Yes, I have a CUE sheet reading/writing component: CUE Sheet Library :)

It's good becouse many programs support CUE sheets. But you can't store all those ID3v2 fields in them and I don't like the idea to have 2 separate files that belong together.
But in my app. there is an option to generate a CUE sheet from my 'Subsong System'. So you can convert it if you want.


  • Posts: 160
Re: ID3v2 new 'Subsong System' idea
« Reply #3 on: 25 Jun '12 - 15:01 »
I personally think its the best if each MP3 File is tagged with Informations like Song, Artist etc. and if the MP3 File is nonsplitted I think a CUE is enough and for including a cover, you can just put 1 jpg File in the same Folder which would be read as a Cover (coverart.jpg has to be the Filename I think) for that Album by most Media Players.

I think the "Industry" has already covered the Problems of defining Covers and for Dividing Nonstop/Nonsplitted MP3 into single Tracks/Artist Information etc. Also providing more Informations has been covered by providing Composer etc. in the ID3v2 Tags.

I might be wrong but I don't think there is a real need/interest of the feature/Idea you described.

However there are other Parts, for example Audio Feature Extraction, Analysis, Audio Comparisation etc. which has not been covered yet much and is very challenging too which could need some Attention and "Boost" by Programmers.
For example to find Ways to compare two Songs and define how "similar" they are close to how Humeans do - Speed (Beat/BPM Detection), Frequency Levels (How Much High&Low Parts), Dynamics (How fast/often the Volume Changes) and others.


  • Posts: 932
Re: ID3v2 new 'Subsong System' idea
« Reply #4 on: 15 Sep '12 - 09:26 »
Thinking about this I came up with I think a nice solution. What I implemented after all is the following:

In ID3v2 tag I create a SUBS frame. This SUBS frame is nothing else then a complete ID3v2 tag.

My specs. are very simple:
  • The ID3v2 tag in the SUBS frame must contain a TSPS frame. This is a textual frame with a single number representing the start of a subsong in the stream in ms.
  • Optionally there can be a usual TLEN frame, representing the length of the subsong (same format as the TSPS frame).
  • Not needed but recommended is that the SUBS frames are in ascending order in the tag.

That's all!

I think this solution is quite simple and straightforward, all the ID3v2 frames are supported for a subsong (so one can even have a different album cover picture for all the subsongs) and developers will like this solution because you just simply seek to the SUBS frame content start and you can use all your existing ID3v2 loading code.

All this is already implemented in MP3 Stream Editor so it can be used to create and edit these kind of files.

Also with my ID3v2 Library one can simply use the .LoadFromStream() methode on a 'parent' ID3v2 tag's SUBS frame data, as it is also a TStream descendant.