improve the new ins format idea
This commit is contained in:
parent
969c8256c1
commit
e5bc0c06d8
|
@ -4,46 +4,75 @@ the main issue with Furnace instrument files is that they are too big, even if t
|
||||||
|
|
||||||
the aim of this new format is to greatly reduce the size of a resulting instrument.
|
the aim of this new format is to greatly reduce the size of a resulting instrument.
|
||||||
|
|
||||||
|
# header
|
||||||
|
|
||||||
```
|
```
|
||||||
size | description
|
size | description
|
||||||
-----|------------------------------------
|
-----|------------------------------------
|
||||||
6 | "FURINS" format magic
|
4 | "FINS" format magic
|
||||||
2 | format version
|
2 | format version
|
||||||
1 | instrument type
|
2 | instrument type
|
||||||
??? | feature bits
|
??? | features...
|
||||||
4 | instrument length (if wave/sample bits are on)
|
|
||||||
```
|
```
|
||||||
|
|
||||||
the "feature bits" field is a variable length bitfield. bit 7 in a byte indicates "read one more byte".
|
a feature uses the following format:
|
||||||
|
|
||||||
the feature bits are:
|
```
|
||||||
|
size | description
|
||||||
|
-----|------------------------------------
|
||||||
|
2 | feature code
|
||||||
|
2 | length of block
|
||||||
|
??? | data...
|
||||||
|
```
|
||||||
|
|
||||||
- 0: has wavetables
|
the following feature codes are recognized:
|
||||||
- 1: has samples
|
|
||||||
- 2: has name
|
- `FM`: FM ins data
|
||||||
- 3: FM data
|
- `MA`: macro data
|
||||||
- 4: FM data size (1: 2-op, 0: 4-op)
|
- `64`: C64 ins data
|
||||||
- 5: FM data includes OPL/OPZ data
|
- `GB`: Game Boy ins data
|
||||||
- if off, only read an op until ssgEnv.
|
- `SM`: sample ins data
|
||||||
- if on, read everything else.
|
- `O1`: operator 1 macros
|
||||||
- 6: Game Boy data
|
- `O2`: operator 2 macros
|
||||||
- 7: (continue in next byte)
|
- `O3`: operator 3 macros
|
||||||
- 8: C64 data
|
- `O4`: operator 4 macros
|
||||||
- 9: Amiga data
|
- `LD`: OPL drums mode data
|
||||||
- 10: standard data (macros)
|
- `SN`: SNES ins data
|
||||||
- 11: operator macros
|
- `N1`: Namco 163 ins data
|
||||||
- 12: release points
|
- `FD`: FDS ins data
|
||||||
- 13: op release points
|
- `WS`: wavetable synth data
|
||||||
- 14: extended op macros
|
- `SL`: list of samples
|
||||||
- 15: (continue in next byte)
|
- `WL`: list of wavetables
|
||||||
- 16: OPL drums mode data
|
- `MP`: MultiPCM ins data
|
||||||
- 17: Amiga sample map data
|
- `SU`: Sound Unit ins data
|
||||||
- 18: Namco 163 data
|
- `ES`: ES5506 ins data
|
||||||
- 19: extra macros
|
|
||||||
- 20: FDS data
|
# FM data (FM)
|
||||||
- 21: OPZ data
|
|
||||||
- 22: wavetable synth data
|
```
|
||||||
- 23: (continue in next byte)
|
size | description
|
||||||
- 24: additional macro modes
|
-----|------------------------------------
|
||||||
- 25: extra C64 data
|
1 | operator count
|
||||||
- 26: MultiPCM data
|
-----|------------------------------------
|
||||||
|
| **base data**
|
||||||
|
| /7 6 5 4 3 2 1 0|
|
||||||
|
1 | |x| ALG |x| FB |
|
||||||
|
1 | |FMS2 |AMS| FMS |
|
||||||
|
1 | |AM2|4| LLPatch |
|
||||||
|
1 | |KV4|KV3|KV2|KV1|
|
||||||
|
-----|------------------------------------
|
||||||
|
| **operator data × opCount**
|
||||||
|
| /7 6 5 4 3 2 1 0|
|
||||||
|
1 | |r| D T | MULT |
|
||||||
|
| \- KSR
|
||||||
|
1 | |s| T L |
|
||||||
|
| \- SUS
|
||||||
|
1 | |R S|v| A R |
|
||||||
|
| \- VIB
|
||||||
|
1 | |A|KSL| D R |
|
||||||
|
| \- AM
|
||||||
|
1 | |e|x| D2R |
|
||||||
|
| \- EGT
|
||||||
|
1 | | S L | R R |
|
||||||
|
1 | | DVB | SSG |
|
||||||
|
1 | | DAM | W S |
|
||||||
|
|
Loading…
Reference in New Issue