Introduction
Version 1 of the patch file of SimSynth, the first subtractive synthesizer of
FruityLoops. A patch holds three
oscillators, an LFO, three envelopes of five points and a block of settings, in
exactly 989 bytes. It is the same structure as
version 2 with everything cut down: the
records are 220 bytes instead of 286, the envelopes 22 bytes instead of 1,266, and
there is no riff and no comment. FruityLoops 3 ships files of this version (its
SS_Instruments and SS_Effects folders hold 73 different
ones). Its ss2wav.dll refuses a version below 2 with an error code, and
the 16-bit ss2wav16.dll beside it is presumably the reader of version
1.
The format is not published. The sizes are certain: they add up to the file size
exactly, and all 146 real files (73 different ones) on this site’s machine fit. The
record and envelope layouts are the version 2 layout of the loader in
ss2wav.dll, cut down; they were matched to the real files (the defaults
and the value ranges agree) but the version 1 loader itself was not read. The names
of fields are inferred, as on the version 2 page, and the last block is listed by
position only.
Structure
0x0000HeaderSYNTH, the version 1 and a revision9 bytes0x0009Records oscillator 1, 2, 3 and the LFO4 × 220 bytes0x0379Envelopes three, each five times, five levels and a flag3 × 22 bytes0x03BBSettings 17 words34 bytes
All numbers are little-endian 16-bit words, signed where a field can be negative.
Header
| Offset | Size | Field | Meaning |
|---|---|---|---|
0x00 | 5 | Signature | The characters SYNTH |
0x05 | 2 | Version | 1 |
0x07 | 2 | Revision | 2 (28 files) or 3 (45 files). The same field the version 2 loader uses to bring old files up to date; what it means in version 1 is not known |
Oscillator and LFO records
Four records of 220 bytes from 0x0009, at 0x0009,
0x00E5, 0x01C1 and 0x029D: oscillator 1, 2 and
3, then the LFO. The ten words are those of version 2; the text buffer at the end is
200 bytes instead of 266.
| Offset | Size | Field | Meaning |
|---|---|---|---|
0x00 | 2 | Detune (inferred), signed | Zero in most patches; 3, 8, −1, 100, 300 and 500 are seen |
0x02 | 2 | Level (inferred) | 0 to 99. 50 (24 of the 73 files’ first oscillators) and 99 (29) are the common values |
0x04 | 2 | Pitch offset (inferred), signed | In cents: 0, ±1200, 2400, 700 and others. In the LFO record usually 12, which looks like its rate |
0x06 | 2 | Pulse width (inferred) | 0 to 255; 255 in 65 of the 70 first oscillators and in every LFO |
0x08 | 2 | Amount (inferred), signed | A modulation amount: 0, ±100, ±500 and others |
0x0A | 2 | Off switch (inferred) | 0 or 1; always 0 in oscillator 1, 1 in oscillators 2 and 3 of most files |
0x0C, 0x0E, 0x10 | 2 each | Switches 1, 2 and 3 (inferred) | Each 0 or 1 |
0x12 | 2 | Shape (inferred) | 0 to 4; 1 or 2 in most |
0x14 | 200 | Wave file path | Zero-terminated text: NA when there is none. 12 files hold a path such as C:\SIMSYNTH\WHONK.OSC or C:\ZAPP\WAVEY\ORGAN.OSC in an oscillator whose shape is 2 or 4 |
Envelopes
Three envelopes of 22 bytes from 0x0379: five times, five levels and a
flag. A new patch has the points time 0, level 255 and time 400, level 0 in each, and
the flag 0 in the first and 1 in the other two, as in version 2.
| Offset | Size | Field |
|---|---|---|
0x00 | 10 | Times (inferred): five words |
0x0A | 10 | Levels (inferred): five words, 0 to 255 |
0x14 | 2 | Flag (inferred) |
Settings
The last 34 bytes, from 0x03BB, are 17 words. They hold the filter,
amplifier and chorus values, which version 2 keeps in its settings blocks, but which
word is which is not worked out. In the blank patch the first is 128, the next two
0, the fourth and fifth −128, and the later words include 48, 302, 3,097
(0x0C19) and 8,788 (0x2254); the last two are defaults
that the version 2 loader also uses.
Worked example
The start of VIBE.SYN, from FruityLoops 3’s SS_Instruments:
0000: 53 59 4E 54 48 01 00 03 00 SYNTH, version 1, revision 3
0009: 03 00 detune 3
000B: 63 00 level 99
000D: 00 00 pitch offset 0
000F: FF 00 pulse width 255
0011: 00 00 00 00 amount 0, off switch 0
0015: 00 00 00 00 00 00 switches 0, 0, 0
001B: 02 00 shape 2
001D: 4E 41 00 … wave file path "NA"
00E5: oscillator 2 begins (0x9 + 220)
Telling it apart
The file starts with SYNTH and the word 1 at offset 5, and is exactly
989 bytes long. Version 2 has a 2 there and is
6,763 bytes. Other programs’ .syn files do not start with
SYNTH.
Not described
This page is partial: the file has no published specification, and these things are guessed or unknown, in the reference and in the viewer.
| Item | Reference | Viewer |
|---|---|---|
| The version 1 loader | Not read: the layout was matched to real files and to the version 2 loader, not taken from ss2wav16.dll | Reads only files of exactly 989 bytes |
| Record fields | Names and meanings are inferred from defaults and value ranges; the shape values are not named | Shows the numbers with “inferred” in the name |
| Envelopes | What the flag does and which envelope drives what are not known | Lists the five points; draws no picture |
| Settings (17 words) | Position only; no word is named | Shows them as unnamed words |
| Revision | What 2 and 3 mean in version 1 is not known | Shows the number only |
| Wave files | The format of the .OSC files the paths name is not described | Shows the path as text, does not open the file |
Variants
- SimSynth patch, version 1 – 989-byte patches of the first SimSynth, with five-point envelopes
- SimSynth patch, version 2 – 6,763-byte patches of SimSynth 2 and SimSynth Live, with 300-point envelopes, a riff and a comment
Links
Software
- FL Studio – Image-Line’s music software; its SimSynth Live generator opens these patches too (Windows, macOS)
- FruityLoops 3 – the release whose SimSynth folders hold the patches this page was checked on (Windows)