User:MihaiEso/Esoteric formats/Simple Playlist (SPL)
SPL (.spl), also known as Simple PlayList, is a file format made by Mihai Popa. It's a simple playlist format, like M3U or PLS. I don't hate writing XML or JSON, but I don't need complex, b******t syntax.
Syntax
All SPL files must start with this:
{SPL File}
Comments are allowed, start with a hashtag (#) or double slash (//) then the text. Multi-line ones are also allowed (in C/C++/others syntax). Nesting IS ALSO allowed!
# Comment text (Python/Ruby/TCL/Makefile/others syntax)
// C/C++/C#/others comment syntax
/*
Multi-line
ones are
allowed!
*/
/* Hello! /* Nesting is /* also allowed! */ */ */
{Metadata} # Single-line comment after required part
[1]=example.mp3 /* Multi-line comment
after line!
Hello, world! */
After that, the next part comes (you can put this before the playlist contents or after. The examples and the Mp3tag export template currently exports with metadata part first):
{Metadata}
You can add a title, a generator and of course the number of entries, in this syntax:
[Title]=Simple Playlist [Generator]=Example [NumberOfEntries]=3
After that, the next part comes (you can put this before the playlist contents or after. The examples and the Mp3tag export template currently exports with body part after):
{Playlist Body}
That part, is the playlist body. The part is responsible for holding the paths to audio files.
Then, a line like this comes, contains order and audio file path (you can as many lines like this):
[1]=example.mp3
Examples
First example
{SPL File}
{Playlist Body}
[1]=example.mp3
[2]=vocal.wav
[3]=speech.spx
Commented
{SPL File} # This the magic number, must be the first line.
{Playlist Body} # Then the playlist body comes.
/* This is the playlist body.
It will hold paths to audio files. */
[1]=example.mp3 # First file, a MP3 file.
[2]=vocal.wav # Second file, a WAV file.
[3]=speech.spx # Third file, a Speex file.
# End of file!
Second example, with usage of metadata
{SPL File}
{Metadata}
[Title]=A example with metadata
[NumberOfEntries]=5
{Playlist Body}
[1]=example.mp3
[2]=vocal.wav
[3]=speech.spx
[4]=truespeech.wav
[5]=acapella.ogg
Commented
{SPL File} # This the magic number, must be the first line.
{Metadata} # Then the metadata part comes.
/* This is the metadata part.
It will hold simple metadata like:
title, generator and number of entries. */
[Title]=A example with metadata # The playlist title.
[NumberOfEntries]=5 # Number of entries.
{Playlist Body} # Then the playlist body comes.
/* This is the playlist body.
It will hold paths to audio files. */
[1]=example.mp3 # First file, a MP3 file.
[2]=vocal.wav # Second file, a WAV file.
[3]=speech.spx # Third file, a Speex file.
[4]=truespeech.wav # Fourth file, like the third file.
[5]=acapella.ogg # Fifth file, another vocal-only file but in Ogg Vorbis.
# End of file!
Third example, very short
{SPL File}
{Playlist Body}
[1]=file.mp3
Commented
{SPL File} # This the magic number, must be the first line.
{Metadata} # Then the metadata part comes.
/* This is the playlist body.
It will hold paths to audio files. */
[1]=example.mp3 # Just a file only!
# End of file!
Fourth example, generated by Mp3tag
{SPL File}
{Metadata}
[Title]=My Playlist, exported by Mp3tag v3.26
[Generator]=Mp3tag v3.26
[NumberOfEntries]=2
{Playlist Body}
[1]=Instrumental.mp3
[2]=Vocal.mp3
Commented
{SPL File}
# Generated by Mp3tag v3.26
{Metadata}
[Title]=My Playlist, exported by Mp3tag v3.26
[Generator]=Mp3tag v3.26
[NumberOfEntries]=2
{Playlist Body}
[1]=Instrumental.mp3
[2]=Vocal.mp3
# End of file!
Mp3tag Export Templates
With comments
$filename(spl,utf-8){SPL File}
# Generated by %_app%
{Metadata}
'['Title']'=My Playlist, exported by %_app%
'['Generator']'=%_app%
'['NumberOfEntries']'=%_max_counter%
{Playlist Body}
$loop(%_filename_ext%)'['%_counter%']'=%_filename_ext%
$loopend()# End of file!
Without comments
$filename(spl,utf-8){SPL File}
{Metadata}
'['Title']'=My Playlist, exported by %_app%
'['Generator']'=%_app%
'['NumberOfEntries']'=%_max_counter%
{Playlist Body}
$loop(%_filename_ext%)'['%_counter%']'=%_filename_ext%
$loopend()
Also avabile on this page!