652 lines
		
	
	
		
			16 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
		
		
			
		
	
	
			652 lines
		
	
	
		
			16 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
|   | # old instrument format (<127)
 | |||
|  | 
 | |||
|  | this format is used in older versions of Furnace. | |||
|  | 
 | |||
|  | # header
 | |||
|  | 
 | |||
|  | .fui files use the following header: | |||
|  | 
 | |||
|  | ``` | |||
|  | size | description | |||
|  | -----|------------------------------------ | |||
|  |  16  | "-Furnace instr.-" format magic | |||
|  |   2  | format version | |||
|  |   2  | reserved | |||
|  |   4  | pointer to instrument data | |||
|  |   2  | wavetable count | |||
|  |   2  | sample count | |||
|  |   4  | reserved | |||
|  |  4?? | pointers to wavetables | |||
|  |  4?? | pointers to samples | |||
|  | ``` | |||
|  | 
 | |||
|  | instrument data follows. | |||
|  | 
 | |||
|  | this header is not present on instruments inside a .fur file. | |||
|  | 
 | |||
|  | # data
 | |||
|  | 
 | |||
|  | notes: | |||
|  | 
 | |||
|  | - the entire instrument is stored, regardless of instrument type. | |||
|  | - the macro range varies depending on the instrument type. | |||
|  | - "macro open" indicates whether the macro is collapsed or not in the instrument editor. | |||
|  |   - as of format version 120, bit 1-2 indicates macro mode: | |||
|  |     - 0: sequence (normal) | |||
|  |     - 1: ADSR | |||
|  |     - 2: LFO | |||
|  |   - see sub-section for information on how to interpret parameters. | |||
|  | - FM operator order is: | |||
|  |   - 1/3/2/4 (internal order) for OPN, OPM, OPZ and OPL 4-op | |||
|  |   - 1/2/?/? (? = unused) for OPL 2-op and OPLL | |||
|  | - meaning of extended macros varies depending on instrument type. | |||
|  | - meaning of panning macros varies depending on instrument type: | |||
|  |   - for hard-panned chips (e.g. FM and Game Boy): left panning is 2-bit panning macro (left/right) | |||
|  |   - otherwise both left and right panning macros are used | |||
|  | 
 | |||
|  | ``` | |||
|  | size | description | |||
|  | -----|------------------------------------ | |||
|  |   4  | "INST" block ID | |||
|  |   4  | size of this block | |||
|  |   2  | format version (see header) | |||
|  |   1  | instrument type | |||
|  |      | - 0: SN76489/standard | |||
|  |      | - 1: FM (OPN) | |||
|  |      | - 2: Game Boy | |||
|  |      | - 3: C64 | |||
|  |      | - 4: Amiga/sample | |||
|  |      | - 5: PC Engine | |||
|  |      | - 6: AY-3-8910 | |||
|  |      | - 7: AY8930 | |||
|  |      | - 8: TIA | |||
|  |      | - 9: SAA1099 | |||
|  |      | - 10: VIC | |||
|  |      | - 11: PET | |||
|  |      | - 12: VRC6 | |||
|  |      | - 13: OPLL | |||
|  |      | - 14: OPL | |||
|  |      | - 15: FDS | |||
|  |      | - 16: Virtual Boy | |||
|  |      | - 17: Namco 163 | |||
|  |      | - 18: SCC | |||
|  |      | - 19: OPZ | |||
|  |      | - 20: POKEY | |||
|  |      | - 21: PC Speaker | |||
|  |      | - 22: WonderSwan | |||
|  |      | - 23: Lynx | |||
|  |      | - 24: VERA | |||
|  |      | - 25: X1-010 | |||
|  |      | - 26: VRC6 (saw) | |||
|  |      | - 27: ES5506 | |||
|  |      | - 28: MultiPCM | |||
|  |      | - 29: SNES | |||
|  |      | - 30: Sound Unit | |||
|  |      | - 31: Namco WSG | |||
|  |      | - 32: OPL (drums) | |||
|  |      | - 33: FM (OPM) | |||
|  |      | - 34: NES | |||
|  |      | - 35: MSM6258 | |||
|  |      | - 36: MSM6295 | |||
|  |      | - 37: ADPCM-A | |||
|  |      | - 38: ADPCM-B | |||
|  |      | - 39: SegaPCM | |||
|  |      | - 40: QSound | |||
|  |      | - 41: YMZ280B | |||
|  |      | - 42: RF5C68 | |||
|  |      | - 43: MSM5232 | |||
|  |      | - 44: T6W28 | |||
|  |   1  | reserved | |||
|  |  STR | instrument name | |||
|  |  --- | **FM instrument data** | |||
|  |   1  | alg (SUS on OPLL) | |||
|  |   1  | feedback | |||
|  |   1  | fms (DC on OPLL) | |||
|  |   1  | ams (DM on OPLL) | |||
|  |   1  | operator count | |||
|  |      | - this is either 2 or 4, and is ignored on non-OPL systems. | |||
|  |      | - always read 4 ops regardless of this value. | |||
|  |   1  | OPLL preset (>=60) or reserved | |||
|  |      | - 0: custom | |||
|  |      | - 1-15: pre-defined patches | |||
|  |      | - 16: drums (compatibility only!) | |||
|  |   2  | reserved | |||
|  |  --- | **FM operator data** × 4 | |||
|  |   1  | am | |||
|  |   1  | ar | |||
|  |   1  | dr | |||
|  |   1  | mult | |||
|  |   1  | rr | |||
|  |   1  | sl | |||
|  |   1  | tl | |||
|  |   1  | dt2 | |||
|  |   1  | rs | |||
|  |   1  | dt | |||
|  |   1  | d2r | |||
|  |   1  | ssgEnv | |||
|  |      | - bit 4: on (EG-S on OPLL) | |||
|  |      | - bit 0-3: envelope type | |||
|  |   1  | dam (for YMU759 compat; REV on OPZ) | |||
|  |   1  | dvb (for YMU759 compat; FINE on OPZ) | |||
|  |   1  | egt (for YMU759 compat; FixedFreq on OPZ) | |||
|  |   1  | ksl (EGShift on OPZ) | |||
|  |   1  | sus | |||
|  |   1  | vib | |||
|  |   1  | ws | |||
|  |   1  | ksr | |||
|  |   1  | operator enabled (>=114) or reserved | |||
|  |   1  | KVS mode (>=115) or reserved | |||
|  |      | - 0: off | |||
|  |      | - 1: on | |||
|  |      | - 2: auto (depending on alg) | |||
|  |  10  | reserved | |||
|  |  --- | **Game Boy instrument data** | |||
|  |   1  | volume | |||
|  |   1  | direction | |||
|  |   1  | length | |||
|  |   1  | sound length | |||
|  |  --- | **C64 instrument data** | |||
|  |   1  | triangle | |||
|  |   1  | saw | |||
|  |   1  | pulse | |||
|  |   1  | noise | |||
|  |   1  | attack | |||
|  |   1  | decay | |||
|  |   1  | sustain | |||
|  |   1  | release | |||
|  |   2  | duty | |||
|  |   1  | ring mod | |||
|  |   1  | osc sync | |||
|  |   1  | to filter | |||
|  |   1  | init filter | |||
|  |   1  | vol macro is cutoff (<187) or reserved | |||
|  |      | - from version 187 onwards, volume and cutoff macros are separate. | |||
|  |      | - if this is on and the version is less than 187, move the volume macro into the ALG one. | |||
|  |   1  | resonance | |||
|  |   1  | low pass | |||
|  |   1  | band pass | |||
|  |   1  | high pass | |||
|  |   1  | channel 3 off | |||
|  |   2  | cutoff | |||
|  |   1  | duty macro is absolute | |||
|  |   1  | filter macro is absolute | |||
|  |  --- | **Amiga instrument data** | |||
|  |   2  | initial sample | |||
|  |   1  | mode (>=82) or reserved | |||
|  |      | - 0: sample | |||
|  |      | - 1: wavetable | |||
|  |   1  | wavetable length (-1) (>=82) or reserved | |||
|  |  12  | reserved | |||
|  |  --- | **standard instrument data** | |||
|  |   4  | volume macro length | |||
|  |   4  | arp macro length | |||
|  |   4  | duty macro length | |||
|  |   4  | wave macro length | |||
|  |   4  | pitch macro length (>=17) | |||
|  |   4  | extra 1 macro length (>=17) | |||
|  |   4  | extra 2 macro length (>=17) | |||
|  |   4  | extra 3 macro length (>=17) | |||
|  |   4  | volume macro loop | |||
|  |   4  | arp macro loop | |||
|  |   4  | duty macro loop | |||
|  |   4  | wave macro loop | |||
|  |   4  | pitch macro loop (>=17) | |||
|  |   4  | extra 1 macro loop (>=17) | |||
|  |   4  | extra 2 macro loop (>=17) | |||
|  |   4  | extra 3 macro loop (>=17) | |||
|  |   1  | arp macro mode (<112) or reserved | |||
|  |      | - treat this value in a special way. | |||
|  |      | - before version 112, this byte indicates whether the arp macro mode is fixed or not. | |||
|  |      | - from that version onwards, the fixed mode is part of the macro values. | |||
|  |      | - to convert a <112 macro mode to a modern one, do the following: | |||
|  |      |   - is the macro mode set to fixed? | |||
|  |      |     - if yes, then: | |||
|  |      |       - set bit 30 of all arp macro values (this is the fixed mode bit) | |||
|  |      |       - does the macro loop? | |||
|  |      |         - if yes, then do nothing else | |||
|  |      |         - if no, then add one to the macro length, and set the last macro value to 0 | |||
|  |      |     - if no, then do nothing | |||
|  |   1  | reserved (>=17) or volume macro height (>=15) or reserved | |||
|  |   1  | reserved (>=17) or duty macro height (>=15) or reserved | |||
|  |   1  | reserved (>=17) or wave macro height (>=15) or reserved | |||
|  |  4?? | volume macro | |||
|  |      | - before version 87, if this is the C64 relative cutoff macro, its values were stored offset by 18. | |||
|  |  4?? | arp macro | |||
|  |      | - before version 31, this macro's values were stored offset by 12. | |||
|  |      | - from version 112 onward, bit 30 of a value indicates fixed mode. | |||
|  |  4?? | duty macro | |||
|  |      | - before version 87, if this is the C64 relative duty macro, its values were stored offset by 12. | |||
|  |  4?? | wave macro | |||
|  |  4?? | pitch macro (>=17) | |||
|  |  4?? | extra 1 macro (>=17) | |||
|  |  4?? | extra 2 macro (>=17) | |||
|  |  4?? | extra 3 macro (>=17) | |||
|  |   4  | alg macro length (>=29) | |||
|  |   4  | fb macro length (>=29) | |||
|  |   4  | fms macro length (>=29) | |||
|  |   4  | ams macro length (>=29) | |||
|  |   4  | alg macro loop (>=29) | |||
|  |   4  | fb macro loop (>=29) | |||
|  |   4  | fms macro loop (>=29) | |||
|  |   4  | ams macro loop (>=29) | |||
|  |   1  | volume macro open (>=29) | |||
|  |   1  | arp macro open (>=29) | |||
|  |   1  | duty macro open (>=29) | |||
|  |   1  | wave macro open (>=29) | |||
|  |   1  | pitch macro open (>=29) | |||
|  |   1  | extra 1 macro open (>=29) | |||
|  |   1  | extra 2 macro open (>=29) | |||
|  |   1  | extra 3 macro open (>=29) | |||
|  |   1  | alg macro open (>=29) | |||
|  |   1  | fb macro open (>=29) | |||
|  |   1  | fms macro open (>=29) | |||
|  |   1  | ams macro open (>=29) | |||
|  |  4?? | alg macro (>=29) | |||
|  |  4?? | fb macro (>=29) | |||
|  |  4?? | fms macro (>=29) | |||
|  |  4?? | ams macro (>=29) | |||
|  |  --- | **operator macro headers** × 4 (>=29) | |||
|  |   4  | AM macro length | |||
|  |   4  | AR macro length | |||
|  |   4  | DR macro length | |||
|  |   4  | MULT macro length | |||
|  |   4  | RR macro length | |||
|  |   4  | SL macro length | |||
|  |   4  | TL macro length | |||
|  |   4  | DT2 macro length | |||
|  |   4  | RS macro length | |||
|  |   4  | DT macro length | |||
|  |   4  | D2R macro length | |||
|  |   4  | SSG-EG macro length | |||
|  |   4  | AM macro loop | |||
|  |   4  | AR macro loop | |||
|  |   4  | DR macro loop | |||
|  |   4  | MULT macro loop | |||
|  |   4  | RR macro loop | |||
|  |   4  | SL macro loop | |||
|  |   4  | TL macro loop | |||
|  |   4  | DT2 macro loop | |||
|  |   4  | RS macro loop | |||
|  |   4  | DT macro loop | |||
|  |   4  | D2R macro loop | |||
|  |   4  | SSG-EG macro loop | |||
|  |   1  | AM macro open | |||
|  |   1  | AR macro open | |||
|  |   1  | DR macro open | |||
|  |   1  | MULT macro open | |||
|  |   1  | RR macro open | |||
|  |   1  | SL macro open | |||
|  |   1  | TL macro open | |||
|  |   1  | DT2 macro open | |||
|  |   1  | RS macro open | |||
|  |   1  | DT macro open | |||
|  |   1  | D2R macro open | |||
|  |   1  | SSG-EG macro open | |||
|  |  --- | **operator macros** × 4 (>=29) | |||
|  |  1?? | AM macro | |||
|  |  1?? | AR macro | |||
|  |  1?? | DR macro | |||
|  |  1?? | MULT macro | |||
|  |  1?? | RR macro | |||
|  |  1?? | SL macro | |||
|  |  1?? | TL macro | |||
|  |  1?? | DT2 macro | |||
|  |  1?? | RS macro | |||
|  |  1?? | DT macro | |||
|  |  1?? | D2R macro | |||
|  |  1?? | SSG-EG macro | |||
|  |  --- | **release points** (>=44) | |||
|  |   4  | volume macro release | |||
|  |   4  | arp macro release | |||
|  |   4  | duty macro release | |||
|  |   4  | wave macro release | |||
|  |   4  | pitch macro release | |||
|  |   4  | extra 1 macro release | |||
|  |   4  | extra 2 macro release | |||
|  |   4  | extra 3 macro release | |||
|  |   4  | alg macro release | |||
|  |   4  | fb macro release | |||
|  |   4  | fms macro release | |||
|  |   4  | ams macro release | |||
|  |  --- | **operator release points** × 4 (>=44) | |||
|  |   4  | AM macro release | |||
|  |   4  | AR macro release | |||
|  |   4  | DR macro release | |||
|  |   4  | MULT macro release | |||
|  |   4  | RR macro release | |||
|  |   4  | SL macro release | |||
|  |   4  | TL macro release | |||
|  |   4  | DT2 macro release | |||
|  |   4  | RS macro release | |||
|  |   4  | DT macro release | |||
|  |   4  | D2R macro release | |||
|  |   4  | SSG-EG macro release | |||
|  |  --- | **extended op macro headers** × 4 (>=61) | |||
|  |   4  | DAM macro length | |||
|  |   4  | DVB macro length | |||
|  |   4  | EGT macro length | |||
|  |   4  | KSL macro length | |||
|  |   4  | SUS macro length | |||
|  |   4  | VIB macro length | |||
|  |   4  | WS macro length | |||
|  |   4  | KSR macro length | |||
|  |   4  | DAM macro loop | |||
|  |   4  | DVB macro loop | |||
|  |   4  | EGT macro loop | |||
|  |   4  | KSL macro loop | |||
|  |   4  | SUS macro loop | |||
|  |   4  | VIB macro loop | |||
|  |   4  | WS macro loop | |||
|  |   4  | KSR macro loop | |||
|  |   4  | DAM macro release | |||
|  |   4  | DVB macro release | |||
|  |   4  | EGT macro release | |||
|  |   4  | KSL macro release | |||
|  |   4  | SUS macro release | |||
|  |   4  | VIB macro release | |||
|  |   4  | WS macro release | |||
|  |   4  | KSR macro release | |||
|  |   1  | DAM macro open | |||
|  |   1  | DVB macro open | |||
|  |   1  | EGT macro open | |||
|  |   1  | KSL macro open | |||
|  |   1  | SUS macro open | |||
|  |   1  | VIB macro open | |||
|  |   1  | WS macro open | |||
|  |   1  | KSR macro open | |||
|  |  --- | **extended op macros** × 4 (>=61) | |||
|  |  1?? | DAM macro | |||
|  |  1?? | DVB macro | |||
|  |  1?? | EGT macro | |||
|  |  1?? | KSL macro | |||
|  |  1?? | SUS macro | |||
|  |  1?? | VIB macro | |||
|  |  1?? | WS macro | |||
|  |  1?? | KSR macro | |||
|  |  --- | **OPL drums mode data** (>=63) | |||
|  |   1  | fixed frequency mode | |||
|  |   1  | reserved | |||
|  |   2  | kick frequency | |||
|  |   2  | snare/hi-hat frequency | |||
|  |   2  | tom/top frequency | |||
|  |  --- | **Sample instrument extra data** (>=67) | |||
|  |   1  | use note map | |||
|  |      | - only read the following two data structures if this is true! | |||
|  |  4?? | note frequency × 120 | |||
|  |      | - 480 bytes | |||
|  |  2?? | note sample × 120 | |||
|  |      | - 240 bytes | |||
|  |  --- | **Namco 163 data** (>=73) | |||
|  |   4  | initial waveform | |||
|  |   1  | wave position | |||
|  |   1  | wave length | |||
|  |   1  | wave mode: | |||
|  |      | - bit 1: update on change | |||
|  |      | - bit 0: load on playback | |||
|  |   1  | reserved | |||
|  |  --- | **even more macros** (>=76) | |||
|  |   4  | left panning macro length | |||
|  |   4  | right panning macro length | |||
|  |   4  | phase reset macro length | |||
|  |   4  | extra 4 macro length | |||
|  |   4  | extra 5 macro length | |||
|  |   4  | extra 6 macro length | |||
|  |   4  | extra 7 macro length | |||
|  |   4  | extra 8 macro length | |||
|  |   4  | left panning macro loop | |||
|  |   4  | right panning macro loop | |||
|  |   4  | phase reset macro loop | |||
|  |   4  | extra 4 macro loop | |||
|  |   4  | extra 5 macro loop | |||
|  |   4  | extra 6 macro loop | |||
|  |   4  | extra 7 macro loop | |||
|  |   4  | extra 8 macro loop | |||
|  |   4  | left panning macro release | |||
|  |   4  | right panning macro release | |||
|  |   4  | phase reset macro release | |||
|  |   4  | extra 4 macro release | |||
|  |   4  | extra 5 macro release | |||
|  |   4  | extra 6 macro release | |||
|  |   4  | extra 7 macro release | |||
|  |   4  | extra 8 macro release | |||
|  |   1  | left panning macro open | |||
|  |   1  | right panning macro open | |||
|  |   1  | phase reset macro open | |||
|  |   1  | extra 4 macro open | |||
|  |   1  | extra 5 macro open | |||
|  |   1  | extra 6 macro open | |||
|  |   1  | extra 7 macro open | |||
|  |   1  | extra 8 macro open | |||
|  |  --- | **even more macro data** (>=76) | |||
|  |  4?? | left panning macro | |||
|  |  4?? | right panning macro | |||
|  |  4?? | phase reset macro | |||
|  |  4?? | extra 4 macro | |||
|  |  4?? | extra 5 macro | |||
|  |  4?? | extra 6 macro | |||
|  |  4?? | extra 7 macro | |||
|  |  4?? | extra 8 macro | |||
|  |  --- | **FDS instrument data** (>=76) | |||
|  |   4  | modulation speed | |||
|  |   4  | modulation depth | |||
|  |   1  | init modulation table with first wave | |||
|  |   3  | reserved | |||
|  |  32  | modulation table | |||
|  |  --- | **OPZ instrument extra data** (>=77) | |||
|  |   1  | fms2 | |||
|  |   1  | ams2 | |||
|  |  --- | **wavetable synth data** (>=79) | |||
|  |   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 | |||
|  |  --- | **additional macro mode flags** (>=84) | |||
|  |   1  | volume macro mode | |||
|  |   1  | duty macro mode | |||
|  |   1  | wave macro mode | |||
|  |   1  | pitch macro mode | |||
|  |   1  | extra 1 macro mode | |||
|  |   1  | extra 2 macro mode | |||
|  |   1  | extra 3 macro mode | |||
|  |   1  | alg macro mode | |||
|  |   1  | fb macro mode | |||
|  |   1  | fms macro mode | |||
|  |   1  | ams macro mode | |||
|  |   1  | left panning macro mode | |||
|  |   1  | right panning macro mode | |||
|  |   1  | phase reset macro mode | |||
|  |   1  | extra 4 macro mode | |||
|  |   1  | extra 5 macro mode | |||
|  |   1  | extra 6 macro mode | |||
|  |   1  | extra 7 macro mode | |||
|  |   1  | extra 8 macro mode | |||
|  |  --- | **extra C64 data** (>=89) | |||
|  |   1  | don't test/gate before new note | |||
|  |  --- | **MultiPCM data** (>=93) | |||
|  |   1  | attack rate | |||
|  |   1  | decay 1 rate | |||
|  |   1  | decay level | |||
|  |   1  | decay 2 rate | |||
|  |   1  | release rate | |||
|  |   1  | rate correction | |||
|  |   1  | lfo rate | |||
|  |   1  | vib depth | |||
|  |   1  | am depth | |||
|  |  23  | reserved | |||
|  |  --- | **Sound Unit data** (>=104) | |||
|  |   1  | use sample | |||
|  |   1  | switch roles of phase reset timer and frequency | |||
|  |  --- | **Game Boy envelope sequence** (>=105) | |||
|  |   1  | length | |||
|  |  ??? | hardware sequence data | |||
|  |      | size is length*3: | |||
|  |      | 1 byte: command | |||
|  |      | - 0: set envelope | |||
|  |      | - 1: set sweep | |||
|  |      | - 2: wait | |||
|  |      | - 3: wait for release | |||
|  |      | - 4: loop | |||
|  |      | - 5: loop until release | |||
|  |      | 2 bytes: data | |||
|  |      | - for set envelope: | |||
|  |      |   - 1 byte: parameter | |||
|  |      |     - bit 4-7: volume | |||
|  |      |     - bit 3: direction | |||
|  |      |     - bit 0-2: length | |||
|  |      |   - 1 byte: sound length | |||
|  |      | - for set sweep: | |||
|  |      |   - 1 byte: parameter | |||
|  |      |     - bit 4-6: length | |||
|  |      |     - bit 3: direction | |||
|  |      |     - bit 0-2: shift | |||
|  |      |   - 1 byte: nothing | |||
|  |      | - for wait: | |||
|  |      |   - 1 byte: length (in ticks) | |||
|  |      |   - 1 byte: nothing | |||
|  |      | - for wait for release: | |||
|  |      |   - 2 bytes: nothing | |||
|  |      | - for loop/loop until release: | |||
|  |      |   - 2 bytes: position | |||
|  |  --- | **Game Boy extra flags** (>=106) | |||
|  |   1  | use software envelope | |||
|  |   1  | always init hard env on new note | |||
|  |  --- | **ES5506 data** (>=107) | |||
|  |   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 | |||
|  |  --- | **SNES data** (>=109) | |||
|  |   1  | use envelope | |||
|  |   1  | gain mode | |||
|  |   1  | gain | |||
|  |   1  | attack | |||
|  |   1  | decay | |||
|  |   1  | sustain | |||
|  |      | - bit 3: sustain mode (>=118) | |||
|  |   1  | release | |||
|  |  --- | **macro speeds/delays** (>=111) | |||
|  |   1  | volume macro speed | |||
|  |   1  | arp macro speed | |||
|  |   1  | duty macro speed | |||
|  |   1  | wave macro speed | |||
|  |   1  | pitch macro speed | |||
|  |   1  | extra 1 macro speed | |||
|  |   1  | extra 2 macro speed | |||
|  |   1  | extra 3 macro speed | |||
|  |   1  | alg macro speed | |||
|  |   1  | fb macro speed | |||
|  |   1  | fms macro speed | |||
|  |   1  | ams macro speed | |||
|  |   1  | left panning macro speed | |||
|  |   1  | right panning macro speed | |||
|  |   1  | phase reset macro speed | |||
|  |   1  | extra 4 macro speed | |||
|  |   1  | extra 5 macro speed | |||
|  |   1  | extra 6 macro speed | |||
|  |   1  | extra 7 macro speed | |||
|  |   1  | extra 8 macro speed | |||
|  |   1  | volume macro delay | |||
|  |   1  | arp macro delay | |||
|  |   1  | duty macro delay | |||
|  |   1  | wave macro delay | |||
|  |   1  | pitch macro delay | |||
|  |   1  | extra 1 macro delay | |||
|  |   1  | extra 2 macro delay | |||
|  |   1  | extra 3 macro delay | |||
|  |   1  | alg macro delay | |||
|  |   1  | fb macro delay | |||
|  |   1  | fms macro delay | |||
|  |   1  | ams macro delay | |||
|  |   1  | left panning macro delay | |||
|  |   1  | right panning macro delay | |||
|  |   1  | phase reset macro delay | |||
|  |   1  | extra 4 macro delay | |||
|  |   1  | extra 5 macro delay | |||
|  |   1  | extra 6 macro delay | |||
|  |   1  | extra 7 macro delay | |||
|  |   1  | extra 8 macro delay | |||
|  |  --- | **operator macro speeds/delay** × 4 (>=111) | |||
|  |   1  | AM macro speed | |||
|  |   1  | AR macro speed | |||
|  |   1  | DR macro speed | |||
|  |   1  | MULT macro speed | |||
|  |   1  | RR macro speed | |||
|  |   1  | SL macro speed | |||
|  |   1  | TL macro speed | |||
|  |   1  | DT2 macro speed | |||
|  |   1  | RS macro speed | |||
|  |   1  | DT macro speed | |||
|  |   1  | D2R macro speed | |||
|  |   1  | SSG-EG macro speed | |||
|  |   1  | DAM macro speed | |||
|  |   1  | DVB macro speed | |||
|  |   1  | EGT macro speed | |||
|  |   1  | KSL macro speed | |||
|  |   1  | SUS macro speed | |||
|  |   1  | VIB macro speed | |||
|  |   1  | WS macro speed | |||
|  |   1  | KSR macro speed | |||
|  |   1  | AM macro delay | |||
|  |   1  | AR macro delay | |||
|  |   1  | DR macro delay | |||
|  |   1  | MULT macro delay | |||
|  |   1  | RR macro delay | |||
|  |   1  | SL macro delay | |||
|  |   1  | TL macro delay | |||
|  |   1  | DT2 macro delay | |||
|  |   1  | RS macro delay | |||
|  |   1  | DT macro delay | |||
|  |   1  | D2R macro delay | |||
|  |   1  | SSG-EG macro delay | |||
|  |   1  | DAM macro delay | |||
|  |   1  | DVB macro delay | |||
|  |   1  | EGT macro delay | |||
|  |   1  | KSL macro delay | |||
|  |   1  | SUS macro delay | |||
|  |   1  | VIB macro delay | |||
|  |   1  | WS macro delay | |||
|  |   1  | KSR macro delay | |||
|  | ``` | |||
|  | 
 | |||
|  | ## interpreting macro mode values
 | |||
|  | 
 | |||
|  | - sequence (normal): I think this is obvious... | |||
|  | - ADSR: | |||
|  |   - `val[0]`: bottom | |||
|  |   - `val[1]`: top | |||
|  |   - `val[2]`: attack | |||
|  |   - `val[3]`: hold time | |||
|  |   - `val[4]`: decay | |||
|  |   - `val[5]`: sustain level | |||
|  |   - `val[6]`: sustain hold time | |||
|  |   - `val[7]`: decay 2 | |||
|  |   - `val[8]`: release | |||
|  | - LFO: | |||
|  |   - `val[11]`: speed | |||
|  |   - `val[12]`: waveform | |||
|  |     - 0: triangle | |||
|  |     - 1: saw | |||
|  |     - 2: pulse | |||
|  |   - `val[13]`: phase | |||
|  |   - `val[14]`: loop | |||
|  |   - `val[15]`: global (not sure how will I implement this) | |||
|  | 
 |