List of known XSPF extensions
This page is intended as a list of XSPF extensions used in the wild. The goal is to list precise and up to date information which we will need your help with! Information given must be understandable and (at best) should be precise enough to be implementable. The more complete this list is the more likely is the future support of a specific extension in more than just one piece of software.
Example file from 360SoundCheck (Genre "Rock"):
<extension application="http://austin360.com"> <playlists> <playlist><![CDATA[Grupo Fantasma listening party]]></playlist> <playlist><![CDATA[Midweek Mini Sampler 1]]></playlist> <playlist><![CDATA[New In SoundCheck]]></playlist> <playlist><![CDATA[The Swed.u.s.h Connection 1]]></playlist> <playlist><![CDATA[The Swed.u.s.h Connection 2]]></playlist> <playlist><![CDATA[Yadira Brown]]></playlist> </playlists> </extension>
<extension application="http://austin360.com"> <id><![CDATA]></id> <genres> <genre><![CDATA[Alt-rock/Indie]]></genre> <genre><![CDATA[Rock]]></genre> </genres> <userRating><![CDATA[3.0]]></userRating> </extension>
Beep Media Player 2 ('BMPx'), AudioSource ('MPX')
<xspf:track> <xspf:location>file:///media/truecrypt1/Music/Beck/The%20Information/01%20Elevator%20Music.mp3</xspf:location> <xspf:identifier>fef01bd8-3479-4fe0-96a6-6814093046f7</xspf:identifier> <xspf:meta rel="http://musicbrainz.org/track">http://musicbrainz.org/mm-2.1/track/fef01bd8-3479-4fe0-96a6-6814093046f7</xspf:meta> <xspf:creator>Beck</xspf:creator> <xspf:album>The Information</xspf:album> <xspf:title>Elevator Music</xspf:title> <xspf:extension application="http://beep-media-player.org"> <bmp:volume-udi>/org/freedesktop/Hal/devices/volume_uuid_b8c216ec_0f52_4738_9c14_de5c541b444e</bmp:volume-udi> <bmp:device-udi>/org/freedesktop/Hal/devices/storage_serial_1ATA_SAMSUNG_HD502IJ_S13TJDWQ324836</bmp:device-udi> <bmp:volume-relative-path>media/truecrypt1/Music/Beck/The Information/01 Elevator Music.mp3</bmp:volume-relative-path> </xspf:extension> </xspf:track>
This extension stores additional information about the track's location based on data retrieved from HAL.
The goal is to store information about the locality of a track independent of a mount point (on UNIX-like systems).
This is a unique identifier for a "volume" (harddisk partition, other kinds of partitions, anything that can be mounted onto a directory).
This is a unique identifier for a device, on which the volume specified by volume-udi resides.
Both of these identifiers can be obtained from HAL for almost all kinds and types of storage media and partitions/volumes.
This is the path of/to the track, and starts from (and excluding of) the root directory of the named volume.
This way the location of a track is first identified by the volume-udi and device-udi, from which the current mount point of a volume (partition, etc.) can be identified, to which the volume-relative path is appended to finally obtain the fully qualified path to the track.
Example file from Project Opus (Artist Fred Eaglesmith):
Playlist / Album
<extension application="http://www.projectopus.com"> <po:info type="playlist" nid="10197" /> </extension>
The <po:info> element contains high level details about a playlist. The "type" attribute refers to the type of playlist being loaded - either an actual playlist, or an album. The "nid" (integer) is the internal ID of the playlist/album within Project Opus.
<extension application="http://www.projectopus.com"> <po:clip length="293000"/> <po:region name="Port Dover">http://www.projectopus.com/regionportal/1860</po:region> <po:tags> <tag tid="2593" size="9">catchy</tag> <tag tid="2019" size="12">upbeat</tag> </po:tags> <po:genre name="Country">http://www.projectopus.com/genre/20</po:genre> <po:uid>676</po:uid> <po:nid>3296</po:nid> <po:num_listens>232</po:num_listens> <po:license type="po" /> </extension>
This element contains playback information for the player(s). Right now there is just one integer for track "length" (in milliseconds).
The region element is used to display the locale of the given artist. Right now, the content of this element is the link to a region portal on Project Opus, while the "name" attribute is the actual name of the city or region.
Tags describe content on Project Opus in a similar manner as what is found on most tag enabled sites. Each tag has an internal ID in the "tid" attribute, while the "size" (integer) is used to govern the size of the tag in a tag cloud, also found in the player. The content of each tag element is the tag text itself.
Similar to the region element, the genre element is used to display the genre of the given song. Again, the content of this element is the link to a genre portal on Project Opus, while the "name" attribute is the actual name of the genre.
This element contains the user ID (an integer) of the content publisher.
This element contains the node ID (an integer) of a track.
The content of this element is the number of times the track has been listened to.
The license element only contains a "type" attribute, which indicates the type of license the song has. A value of "po" means the song is for sale on Project Opus. The other possible values are based on the song being free for download, and licensed through the Creative Commons. Possible CC values are as follows:
- "by-nc-nd" - Attribution-NonCommercial-NoDerivs 
- "by-nc-sa" - Attribution-NonCommercial-ShareAlike 
- "by-nc" - Attribution-NonCommercial 
- "by-nd" - Attribution-NoDerivs 
- "by-sa" - Attribution-ShareAlike 
- "by" - Attribution 
The Zirkoros Online extension contains additional song-specific data, specifically for usage in a video game, and aimed for easy customization by user.
<extension application="http://zirkoros-online.com/xspf/track/1/0/"> <zo:index>0</zo:index> <zo:flags fadein="yes" fadeout="yes" /> <zo:fadetime in="6" out="14" /> </extension>
Game-specific in-game identifier/index of the song, for looking up a song for a purpose, rather than a specific song. Unsigned integer, zero-based, duplicate indexes are not allowed.
The flags block contains song-specific flags. Currently recognized tags:
fadein = yes/no: Does the song (cross-)fade in? fadeout = yes/no: Does teh song (cross-)fade out?
If the "fadein" or "fadeout" flags are enabled, the fadetime block should contain the fade-in/-out durations as seconds, in the "in" & "out" tags, respectively. The values should be unsigned integers. Values of 0 aren't allowed - instead, the respective "fadein" or "fadeout" flag should be disabled. Currently recognized tags:
in: fade-in time, in seconds. out: fade-out time, in secnods.
YOUR EXTENSION HERE