Double-post and all, but a couple hours of hacking has brought me to a state where I can now read all the items from the file... but the "integer table" is still a mystery for me. I'm _guessing_ it's some sort of a pointer table (key, value, key, value) to the global string table (henceforth "data table") on the top of the file, but the offsets don't quite make sense. See for yourself: this is the dump from my program so far.
It can read the header, the data table and split/enumerate its entries (since they all seemed to be \0-delimited):
Data length: 617
Data entr.s: 50
0 : file://H:\whatever\M-FLO\m-flo astromantic\06 m-flo - way u move (dragon ash).mp3
1 : album
2 : artist
3 : comment
4 : date
5 : genre
6 : title
7 : tracknumber
8 : astromantic
9 : m-flo
10 : --==More Volume Please==--
11 : 2004
12 : Hip-Hop
13 : way u move (dragon ash)
14 : 6
15 : enc_delay
16 : 576
17 : enc_padding
18 : 1440
19 : mp3_accurate_length
20 : yes
21 : bitrate
22 : 192
23 : codec
24 : MP3
25 : encoding
26 : lossy
27 : channels
28 : 2
29 : samplerate
30 : 44100
31 : mp3_stereo_mode
32 : stereo
33 : tool
34 : LAME3.92
35 : codec_profile
36 : CBR
37 : tagtype
38 : id3v2|id3v1
39 : file://E:\Music\mp3\Minotaur Shock\Chiff-Chaffs & Willow Warblers\04 Minotaur Shock - Moray Arrival.mp3
40 : Chiff-Chaffs & Willow Warblers
41 : Minotaur Shock
42 : 2001
43 : Electronic
44 : Moray Arrival
45 : 04
46 : 2004
47 : 204
48 : extrainfo
49 : VBR
Then it begins enumerating the items, which it does properly (at least the file sizes and durations both seem to be correct):
<__main__.FPLFile instance at 0x00A455A8>
albumpeak -1.0
dtn 49
duration 490.56
rgalbum -1000.0
rgtrack -1000.0
size 11776995
trackpeak -1.0
unk1 1
unk2 0
unk3 0
unk4 0
unk5 128107706786250000
252 bytes read, offset 37d
8:10
But then comes the "item table" (the low integer values Zacw mentions). I think this is a key-value mapping of some sort, indexing the data table. This would make sense, since a playlist is bound to contain many instances of the same string. Then again, this limits the amount of unique strings to.. a bit over 4 billion. 2^32.
The first four entries seem bogus, perhaps 4 (edit: or 5) more unknowns added since Zacw's studies (which reminds me: The item table item count is not one byte, but four.) If four, this would set entry #5, or "82" in our example, as the first real data entry. It would then make sense that this is the pointer for the actual file path, and the rest are key-value pairs. However, like my script says, the data table does not have entry #82, so there's some other magic going on. Also, both files quote 82 as itemdata #5. (The first three entries do change though.)
00007 tracknumber
00012 Hip-Hop
00022 192
00000 file://H:\whatever\M-FLO\m-flo astromantic\06 m-flo - way u move (dragon ash).mp3
00082 <not found>
00001 album
00088 <not found>
00002 artist
00095 <not found>
00003 comment
00103 <not found>
00004 date
00108 <not found>
00005 genre
00114 <not found>
00006 title
00120 <not found>
00007 tracknumber
00132 <not found>
00144 <not found>
00150 <not found>
00177 <not found>
00182 <not found>
00190 <not found>
00214 <not found>
00216 <not found>
00226 <not found>
00230 <not found>
00242 <not found>
00247 <not found>
00267 <not found>
00271 <not found>
00279 <not found>
00283 <not found>
00289 <not found>
00293 <not found>
00302 <not found>
00308 <not found>
00317 <not found>
00319 <not found>
00330 <not found>
00336 <not found>
00352 <not found>
00359 <not found>
00364 <not found>
00373 <not found>
00387 <not found>
00391 <not found>
00399 <not found>
And, as you can see, there's a lot of entries in the item table.
The correct data for this file is:
Artist Name : m-flo
Track Title : way u move (dragon ash)
Album Title : astromantic
Date : 2004
Genre : Hip-Hop
Track Number : 6
Comment : --==More Volume Please==--
Here's the next file, for comparison and fun.
<__main__.FPLFile instance at 0x00A45670>
albumpeak -1.0
dtn 44
duration 308.813333333
rgalbum -1000.0
rgtrack -1000.0
size 7876736
trackpeak -1.0
unk1 1
unk2 411
unk3 0
unk4 0
unk5 127327008231875000
232 bytes read, offset 465
5:8
00006 title
00011 2004
00019 mp3_accurate_length
00000 file://H:\whatever\M-FLO\m-flo astromantic\06 m-flo - way u move (dragon ash).mp3
00082 <not found>
00001 album
00088 <not found>
00002 artist
00103 <not found>
00003 comment
00108 <not found>
00004 date
00114 <not found>
00005 genre
00120 <not found>
00006 title
00515 <not found>
00546 <not found>
00561 <not found>
00566 <not found>
00577 <not found>
00591 <not found>
00216 <not found>
00226 <not found>
00230 <not found>
00594 <not found>
00247 <not found>
00267 <not found>
00271 <not found>
00599 <not found>
00283 <not found>
00289 <not found>
00293 <not found>
00302 <not found>
00308 <not found>
00317 <not found>
00319 <not found>
00330 <not found>
00603 <not found>
00613 <not found>
00336 <not found>
00352 <not found>
00391 <not found>
00399 <not found>
The correct data here is
Artist Name : Minotaur Shock
Track Title : Moray Arrival
Album Title : Chiff-Chaffs & Willow Warblers
Date : 2001
Genre : Electronic
Track Number : 04
~~
I hope someone can make some sense of this data. I'll try and continue hacking tonight and tomorrow and so on.
Would, of course, be nice if someone (=the developer of FB2k) would come up with some official documentation on the file format. I found the m3u and m3u8 (what's that anyway?) exports lacking - only the filename? ._.