# new Furnace instrument format the main issue with Furnace instrument files is that they are too big, even if the instrument is nothing more than the FM setup... the aim of this new format is to greatly reduce the size of a resulting instrument. # information this format is "featural", meaning that only used parameters are stored (depending on instrument types). this is the biggest improvement over the previous format, which stored everything including unused parameters. features which are not recognized by Furnace will be ignored. instruments are not compressed using zlib, unlike Furnace songs. all numbers are little-endian. the following fields may be found in "size": - `f` indicates a floating point number. - `STR` is a UTF-8 zero-terminated string. - `???` is an array of variable size. - `S??` is an array of `STR`s. - `1??` is an array of bytes. - `2??` is an array of shorts. - `4??` is an array of ints. the format may change across versions. a `(>=VER)` indicates this field is only present starting from format version `VER`, and `(=152) or reserved 2 | sample to play ``` # operator macro data (O1, O2, O3 and O4) similar to macro data, but using these macro codes: - 0: AM - 1: AR - 2: DR - 3: MULT - 4: RR - 5: SL - 6: TL - 7: DT2 - 8: RS - 9: DT - 10: D2R - 11: SSG-EG - 12: DAM - 13: DVB - 14: EGT - 15: KSL - 16: SUS - 17: VIB - 18: WS - 19: KSR # OPL drums mode data (LD) ``` size | description -----|------------------------------------ 1 | fixed frequency mode 2 | kick freq 2 | snare/hat freq 2 | tom/top freq ``` # SNES data (SN) ``` size | description -----|------------------------------------ 1 | attack/decay | - bit 4-6: decay | - bit 0-3: attack 1 | sustain/release | - bit 5-7: sustain | - bit 0-4: release 1 | flags | - bit 4: envelope on | - bit 3: make sustain effective (<131) | - bit 0-2: gain mode | - 0: direct | - 4: dec | - 5: exp | - 6: inc | - 7: bent 1 | gain 1 | decay 2/sustain mode (>=131) | - bit 5-6: sustain mode | - 0: direct | - 1: sustain (release with dec) | - 2: sustain (release with exp) | - 3: sustain (release with rel) | - bit 0-4: decay 2 ``` # Namco 163 data (N1) ``` size | description -----|------------------------------------ 4 | waveform 1 | wave pos 1 | wave len 1 | wave mode | **extra info** (>=164) 1 | enable per channel wave pos/len 8 | per channel wave pos | - only read if enabled. 8 | per channel wave len | - only read if enabled. ``` # FDS/Virtual Boy data (FD) ``` size | description -----|------------------------------------ 4 | mod speed 4 | mod depth 1 | init mod table with first wave 1?? | modulation table (32 entries) ``` # wavetable synth data (WS) ``` size | description -----|------------------------------------ 4 | first wave 4 | second wave 1 | rate divider 1 | effect | - bit 7: single or dual effect 1 | enabled 1 | global 1 | speed (+1) 1 | parameter 1 1 | parameter 2 1 | parameter 3 1 | parameter 4 ``` # list of samples (SL) ``` size | description -----|------------------------------------ 1 | number of samples 1?? | sample indexes... 4?? | pointers to samples... | - these use the Furnace sample format. ``` # list of wavetables (WL) ``` size | description -----|------------------------------------ 1 | number of wavetables 1?? | wavetable indexes... 4?? | pointers to wavetables... | - these use the Furnace wavetable format. ``` # MultiPCM data (MP) ``` size | description -----|------------------------------------ 1 | attack rate 1 | decay 1 rate 1 | decay level 1 | decay 2 rate 1 | release rate 1 | rate correction 1 | LFO rate 1 | vibrato depth 1 | AM depth ``` # Sound Unit data (SU) ``` size | description -----|------------------------------------ 1 | switch roles of phase reset timer and frequency ``` # ES5506 data (ES) ``` size | description -----|------------------------------------ 1 | filter mode | - 0: HPK2_HPK2 | - 1: HPK2_LPK1 | - 2: LPK2_LPK2 | - 3: LPK2_LPK1 2 | K1 2 | K2 2 | envelope count 1 | left volume ramp 1 | right volume ramp 1 | K1 ramp 1 | K2 ramp 1 | K1 slow 1 | K2 slow ``` # X1-010 data (X1) ``` size | description -----|------------------------------------ 4 | bank slot ```