Description of the iriver playlist file

This is NOT a official description of the file format. The file format is determined by reverse engineering and trial and error. Please understand that you are using this information at your own risk (see the license). Lots of thanks to Martin Owen for this wonderful page.

General format

The file usually has *.pla extension and it appears to be comprised of 512 bytes blocks.

Header

The first 512 bytes block is the header. The first 4 bytes are the number of tracks in the file is some kind of big-endian (???) format. For example if we have 24 tracks in the playlist the first 4 bytes will be:
0x000x000x000x18
The next 14 bytes are the the text iriver UMS PLA in ASCII:
0x690x720x690x760x650x720x20 0x550x4d0x530x200x500x4c0x41
According to the linked reference. the next 14 bytes are 0x00 followed by 480 bytes of playlist heading. Personally I have seen all the following 494 bytes as 0x00 all the time.

Track entry

The track entry appears to be in bigendian 16-bit format. That is each character is coded in 2 bytes. Usually - if there are only ASCII characters - one character will be encoded as 0x00 0xcc (where 0xcc is the ASCII code). The extra byte may be used for non-latin character sets but furter testing is necessary. This format limits the track path to 255 characters ((512 characters per block - 2 bytes file name index)/2 = 255). I have tried to generate a playlist with an entry that has more than 255 characters in it's path and the iriver plus 3 software crashes shamefully.

The first 2 bytes represent the index in the path where the file name starts. For example if the path for a file is "/folder1/subfolder2/song.mp3" the file name starts at index 20 and the first 2 bytes are:

0x000x14

The total size of the playlist file will be 512*(n + 1) bytes where n is the number of tracks in the playlist.