Introduction
These are the projects saved by
FruityLoops 1 to 3 and by FL
Studio 4 and 5, as the program was called from version 4. They use the same two
chunks as every later FLP file, a short FLhd header and an
FLdt stream of events, but with fewer events and some older ways of
storing values.
This is the only era Image-Line has described in writing. “The FruityLoops FLP file format explained”, written for FruityLoops 1.7 and dated 1999, covers the header, the four ranges of event IDs that decide each value’s size, and the event IDs of the time. No source says whether FruityLoops 3, 4 or 5 changed that structure; open-source readers treat the whole era alike.
Structure
The header chunk holds a format field (0 for a full song), a channel count that the 1999 document calls “not really used”, and the timing resolution in pulses per quarter note. The data chunk holds the events. What sets these files apart:
- Text is single-byte and ends with a zero byte. The 1999 document already lists an old plain-text comments event (195) as “not used anymore”, replaced by comments in Rich Text format (198).
- Patterns are step data in the 1999 format, written as note-on and step events; note records in a single event appear later, at a version that is not recorded.
- Tempo is stored as whole beats per minute in event 66, with a fine adjustment in event 93 from version 3.4 according to PyFLP.
- Playlist entries are stored as one small event (129) per placed pattern, holding a position and a pattern number.
- Mixer inserts were far fewer. PyFLP estimates 5 up to version 1.6.5, 8 up to 2.0.1, 18 up to 3.0, 20 up to 3.3 and 64 up to 4.0.
- Newer events are missing. The event reference marks which events are in the 1999 list and which arrived later in the era.
Telling it apart
The FL Studio version text event (199), when present, starts with 1 to 5. The 1999 document warns that a version event “may contain an invalid version info”, so very old files may not identify themselves reliably. Other signs are text stored as single bytes, a tempo in event 66 with no event 156, and playlist items in event 129.
PyFLP’s documentation says its high-level reader can fail on very old files, and suggests reading their events with its low-level interface instead.
Variants
- FruityLoops 1 to FL Studio 5 – early projects: single-byte text, old tempo events and the 1999 layout
- FL Studio 6 to 11.4 – single-byte text, with volume and pan on a newer scale
- FL Studio 11.5 to 12 – every string but the version switches to UTF-16LE
- FL Studio 20 – multiple arrangements, 500 playlist tracks and 125 mixer inserts
- FL Studio 21 and later – 60-byte and longer playlist records, and an event that breaks the size rule
Links
Software
- FL Studio – Image-Line’s music production software, which still opens old projects (Windows, macOS)
Developers
- PyFLP – library that reads FLP files, with a low-level event interface for old files (Python)
- LMMS FLP importer – LMMS’s old importer, removed after LMMS 1.0, which handles many early events (C++)
Reference
- The FruityLoops FLP file format explained – Image-Line’s 1999 description for FruityLoops 1.7, mirrored in libflp