Unofficial M3U and PLS Specification
Winamp playlists are just a text file containing links to the location of
the proper file. You can crate or edit a playlist in any text editor. It
could be anything to MP3, WMA, or even another playlist. Just because
something is in a playlist, doesn't mean Winamp can play it though. Winamp
will just skip over unknown file formats. This document will hopefully toy
to clarify the differences of the playlist formats available.
A list of links to files makes a valid generic playlist. The entry can be
relative (i.e. \files\song.mp3) or specific (i.e. c:\media\files\son.mp3).
Also, URLs can he inserted to point to a stream or a file on the Internet.
Here are a few sample generic MP3/PLS files:
A Simple M3U
Alternative\Band - Song.mp3
Classical\Other Band - New Song.mp3
F:\more music\foo - bar.mp3
- Alternative and Classical are sub-directories of the directory that this
playlist is stored in.
- "Song" and "New Song" are in sub-directories that this playlist is stored
- "Crap" is in the same directory that the playlist is stored in.
- "Foo - Bar" is in the specified directory, which may or may not be the
same directory the playlist is in.
- http://www.site.com:8000/listen.pls is a Shoutcast stream.
- "Mine" is a MP3 stored on a web server somewhere.
These path options hold true of the extended playlists described below.
Let's first look at an extended M3U file then I will describe everything
#EXTINF:233,Everclear - So Much For The Afterglow
Alternative\everclear - SMFTA.mp3
#EXTINF:227,Weird Al - Everything You Know Is Wrong
Comedy\Weird Al - Everything You Know Is Wrong.mp3
#EXTINF:187,Weird Al Yankovic - This is the Life
Weird Al - This Is The Life.mp3
#EXTINF:129,Weird Al: Bad Hair Day - Gump
#EXTINF:-1,My Cool Stream
Explanation of entries:
#EXTM3U At the VERY top of the Extended M3U file is this header,
which signifies this is an extended M3U file. '#EXTM#U" must be all capital
#EXTINF:233,Everclear - So Much For The Afterglow: This is the line
that tends to confuse people. Let's break it up into parts
- #EXTINF:: This signifies this is an Extended Information field. It
ends with a colorn (:).
- 233,: This is the time of the file in seconds followed by a comma.
(233 seconds = 3:53). On the last entry there is a negative one, this is
usually seen on streams, it tells the program to ignore the time entry.
- Everclear - So Much For The Afterglow: Title to display. This is
usually the title read from the file name or ID3 tags. This also can be the
name of a stream. No characters follow the title.
Alternative\everclear - SMFTA.mp3: File location as described above
with basic playlists.
Extended PLS (PLSv2)
Same playlist from the M3U section in PLS format.
File1=Alternative\everclear - SMFTA.mp3
Title1=Everclear - So Much For The Afterglow
File2=Comedy\Weird Al - Everything You Know Is Wrong.mp3
Title2=Weird Al - Everything You Know Is Wrong
File3=Weird Al - This Is The Life.mp3
Title3=Weird Al Yankovic - This is the Life
Title4=Weird Al: Bad Hair Day - Gump
Title5=My Cool Stream
Explanation of entries:
[playlist]: Signifies that this is a playlist. This is case
File#=: Location of the file in any of the formats described above.
This is also case sensitive. Also the # sign after "File" signifies what
file number it is. The first file in the playlist is "File1", the second is
"File2" and so on.
Title#=: Title to display. This is usually the title read from the
file name or ID3 tags. Like the other fields, this is case sensitive. This
also can be the name of a stream. Like "File#" the pound sign (#) is
replaced by the entry number that is in the playlist.
Length#=": Length in seconds, this is aloe case sensitive. On the
last entry there is a negative one, this is usually seen on streams, it
tells the program to ignore the time entry. Like "File#" the pound sign (#)
is replaced by the entry number that is in the playlist.
NumberOfEntries=#: The total number of entries in the playlist. This
should match the last number on the "File#", "Title#", and "Length#" fields.
Also case sensitive.
Version=2: This required entry near the bottom tells the player what
format the PLS is in. Older versions of the PLS format did not include this.
Like everything else, it is case sensitive.