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)
 | ||
| 
 | 
