Introduction
These are the projects saved by
FL Studio 9 up to version 11.4,
from 2009 to 2014. The file keeps the FLhd header and FLdt
event stream of earlier versions and still stores its text as single bytes. What sets
it apart is the size of two records: each note takes 24 bytes instead of 20, and each
playlist item 32 bytes instead of 28.
No document from Image-Line covers these versions. What is known comes from open-source readers and from an FL Studio 10.0.9 file examined for this site. The exact versions at which some changes happened are not recorded.
Structure
The file is a 14-byte header chunk and a data chunk holding one long stream of events. The differences from earlier and later files that readers rely on are:
- Notes. The note records in each pattern notes event (224) are 24 bytes long. The new bytes hold a group field at offset 14, and pan, velocity and the modulation bytes move four bytes along. The FL Studio 10.0.9 file examined for this site has 24-byte records.
- Playlist items. The playlist items event (233) holds 32-byte records, again with a new group field at offset 14. There is one playlist of 199 tracks, and the track is stored as 198 minus the track index.
- Text is still single-byte, the version included. PyFLP reads it as ASCII; another reader, flpkit, reads it as Latin-1, which also covers accented letters.
- Volume and pan are on the scale used since version 6.0, 100 times larger than in earlier files.
- Mixer inserts. FL Studio 9.0.0 raised the number of insert tracks to 99, “for a total of 105”, according to Image-Line’s changelog. PyFLP’s estimates give 105 insert slots up to version 9.0 and 127 after it.
- Data folder. PyFLP dates the data folder event (202) to FL Studio 9.
No source records the version that brought in the larger note and playlist records. This site places it at 9.0, because the new bytes in both are group fields and FL Studio 9.0.0 introduced “note & Playlist clip grouping”. That is an inference.
The tempo is still stored in the word events 66 (whole BPM) and 93 (fine part) in the FL Studio 10.0.9 file. Event 156, which holds the BPM times 1000, was in use by 2014, when the node-flp reader added it, but the version that brought it in is not known, so a reader should accept either.
Telling it apart
The explorer’s parser for this variant accepts a file when the FL Studio version text event (199) is 9.0 or later and below 11.5, every pattern notes event holds whole 24-byte records, and the playlist items event holds whole 32-byte records with 20480 at offset 4.
The version is what decides. The record sizes alone cannot, because one event can be a whole number of both the old and the new records: 120 bytes is six 20-byte notes or five 24-byte ones. The size check only turns away a file whose records do not fit.
Variants
- FruityLoops 1 to FL Studio 5 – the 1999 layout: single-byte text, 20-byte notes and 28-byte playlist items
- FL Studio 6 to 8 – channel volume and pan on a scale 100 times larger
- FL Studio 9 to 11.4 – 24-byte note records and 32-byte playlist items
- FL Studio 11.5 to 12 – every string but the version switches to UTF-16LE
- FL Studio 20 – multiple arrangements, with tracks counted down from 499
- FL Studio 21 – 60-byte playlist items with fades and gain
- FL Studio 2024 and 2025 – 80-byte playlist items and a one-byte event 172
- FL Studio 2026 – 88-byte playlist items with clip offsets in ticks
Links
Software
- FL Studio – Image-Line’s music production software, which still opens these projects (Windows, macOS)
Developers
- PyFLP – library that reads and writes FLP files, the source of the 24-byte note and 32-byte playlist layouts (Python)
- DawVert – converter between DAW formats, which reads the playlist start and end offsets (Python)
- node-flp – FLP reader ported from LMMS’s old importer, which added the newer tempo event in 2014 (JavaScript)
Reference
- FL Studio changelog – Image-Line’s list of changes in each version, including the grouping and insert changes of 9.0.0