mirror of
https://github.com/tildearrow/furnace.git
synced 2024-11-01 18:42:40 +00:00
ESFM: documentation
This commit is contained in:
parent
912c249a50
commit
c1bf577ccf
2 changed files with 178 additions and 0 deletions
77
doc/4-instrument/fm-esfm.md
Normal file
77
doc/4-instrument/fm-esfm.md
Normal file
|
@ -0,0 +1,77 @@
|
|||
# ESFM instrument editor
|
||||
|
||||
the ESFM editor is divided into 6 tabs:
|
||||
|
||||
- **FM**: for controlling the basic parameters of FM sound source.
|
||||
- **Macros (OP1)**: for macros controlling FM parameters of operator 1.
|
||||
- **Macros (OP2)**: for macros controlling FM parameters of operator 2.
|
||||
- **Macros (OP3)**: for macros controlling FM parameters of operator 3.
|
||||
- **Macros (OP4)**: for macros controlling FM parameters of operator 4.
|
||||
- **Macros**: for other macros (volume/arp/pitch/pan/noise mode).
|
||||
|
||||
## FM
|
||||
|
||||
ESFM is four-operator, but it is different from the rest of FM chips.
|
||||
|
||||
the concept of an algorithm does not exist in ESFM. instead, modulation routing is arbitrary, with each operator having output level and modulation input parameters.
|
||||
|
||||
these apply to the instrument as a whole:
|
||||
- **OP4 Noise Mode**: determines the mode used to produce noise in operator 4.
|
||||
- Normal: noise is disabled.
|
||||
- Snare: takes the snare noise generation mode from OPL. square + noise.
|
||||
- HiHat: ring modulates with operator 3 and adds noise.
|
||||
- Top: ring modulates with operator 3 and double pitch modulation input.
|
||||
- this mode is not emulated correctly. subject to change!
|
||||
|
||||
these apply to each operator:
|
||||
- the crossed-arrows button can be dragged to rearrange operators.
|
||||
- **Amplitude Modulation (AM)**: makes the operator affected by LFO tremolo.
|
||||
- **Sustain flag (SUS)**: when enabled, value of Sustain Level is in effect.
|
||||
- **AM Depth (AMD)**: when enabled, LFO tremolo is deeper.
|
||||
- **Attack Rate (AR)**: determines the rising time for the sound. the bigger the value, the faster the attack (0 to 15).
|
||||
- **Decay Rate (DR)**: determines the diminishing time for the sound. the higher the value, the shorter the decay. it's the initial amplitude decay rate (0 to 15).
|
||||
- **Sustain Level (SL)**: determines the point at which the sound ceases to decay and changes to a sound having a constant level. the sustain level is expressed as a fraction of the maximum level (0 to 15).
|
||||
- **Release Rate (RR)**: determines the rate at which the sound disappears after note off. the higher the value, the shorter the release (0 to 15).
|
||||
|
||||
- **Total Level (TL)**: represents the envelope’s highest amplitude, with 0 being the largest and 63 (decimal) the smallest. a change of one unit is about 0.75 dB.
|
||||
- **Output Level (OL)**: determines the volume at which the operator will be output.
|
||||
- **Modulation Input (MI)**: determines how much to take from the previous operator for modulation.
|
||||
- this controls feedback level in the case of operator 1.
|
||||
- **Key Scale Level (KSL)**: also known as "Level Scale". determines the degree to which the amplitude decreases according to the pitch.
|
||||
|
||||
![FM ADSR chart](FM-ADSRchart.png)
|
||||
|
||||
- **Key Scale Rate (KSR)**: also known as "Rate Scale". determines the degree to which the envelope execution speed increases according to the pitch.
|
||||
- **Frequency Multiplier (MULT)**: sets the coarse pitch offset in relation to the note (0 to 15). 0 is -1 octave, 1 is 0 octaves, 2 is 1 octave, 3 is 1 octave 7 semitones, and so on.
|
||||
- note that values 11, 13 and 14 behave as 10, 12 and 12 respectively.
|
||||
- **Waveform Select (WS)**: changes the waveform of the operator (0 to 7).
|
||||
- **Vibrato (VIB)**: makes the operator affected by LFO vibrato.
|
||||
- **FM Depth (FMD)**: when enabled, vibrato is deeper.
|
||||
|
||||
- **Tune**: sets the coarse tune of the operator.
|
||||
- **Detune**: sets the fine tune of the operator.
|
||||
|
||||
- **Left (L)**: output on the left channel.
|
||||
- **Right (R)**: output on the right channel.
|
||||
|
||||
### fixed frequency mode
|
||||
|
||||
each operator has a Fixed Frequency mode. once enabled, the operator runs at the specified frequency regardless of the note.
|
||||
|
||||
## macros
|
||||
|
||||
these macros allow you to control several parameters of FM per tick.
|
||||
|
||||
## OP1-OP4 Macros
|
||||
|
||||
all parameters are listed above.
|
||||
|
||||
## Macros
|
||||
|
||||
- **Volume**: volume sequence.
|
||||
- **Arpeggio**: pitch sequence.
|
||||
- **OP4 Noise Mode**: noise mode sequence.
|
||||
- **Panning**: enables output on left/right channels.
|
||||
- **Pitch**: fine pitch.
|
||||
- **Relative**: when enabled, pitch changes are relative to the current pitch.
|
||||
- **Phase Reset**: restarts all operators and resets the waveform to its start.
|
101
doc/7-systems/esfm.md
Normal file
101
doc/7-systems/esfm.md
Normal file
|
@ -0,0 +1,101 @@
|
|||
# ESS ESFM
|
||||
|
||||
an enhanced version of Yamaha's OPL3, adding many features which weren't present on the original chip, such as 4-op on all channels, coarse/fine detune, per-op panning, envelope delay, noise generator and advanced modulation routing (no more algorithms!).
|
||||
|
||||
the technology was present in many of ESS' sound cards (the ES1xxx series in particular).
|
||||
|
||||
## effects
|
||||
|
||||
- `10xy`: **set AM depth.**
|
||||
- `x` is the operator from 1 to 4. a value of `0` means "all operators".
|
||||
- `y` is either `0` (1dB, shallow) or `1` (4.8dB, deep).
|
||||
- `12xx`: **set operator 1 level.**
|
||||
- `13xx`: **set operator 2 level.**
|
||||
- `14xx`: **set operator 3 level.**
|
||||
- `15xx`: **set operator 4 level.**
|
||||
- `16xy`: **set multiplier of operator.**
|
||||
- `x` is the operator (1-4).
|
||||
- `y` is the new MULT value..
|
||||
- `17xy`: **set vibrato depth.**
|
||||
- `x` is the operator from 1 to 4. a value of `0` means "all operators".
|
||||
- `y` is either `0` (normal) or `1` (double).
|
||||
- `19xx`: **set attack of all operators.**
|
||||
- `1Axx`: **set attack of operator 1.**
|
||||
- `1Bxx`: **set attack of operator 2.**
|
||||
- `1Cxx`: **set attack of operator 3.**
|
||||
- `1Dxx`: **set attack of operator 4.**
|
||||
- `20xy`: **set panning of operator 1.**
|
||||
- `x` determines whether to output on left.
|
||||
- `y` determines whether to output on right.
|
||||
- `21xy`: **set panning of operator 2.**
|
||||
- `x` determines whether to output on left.
|
||||
- `y` determines whether to output on right.
|
||||
- `22xy`: **set panning of operator 3.**
|
||||
- `x` determines whether to output on left.
|
||||
- `y` determines whether to output on right.
|
||||
- `23xy`: **set panning of operator 4.**
|
||||
- `x` determines whether to output on left.
|
||||
- `y` determines whether to output on right.
|
||||
- `24xy`: **set output level of operator.**
|
||||
- `x` is the operator from 1 to 4. a value of `0` means "all operators".
|
||||
- `y` is the value.
|
||||
- `25xy`: **set modulation input level of operator.**
|
||||
- `x` is the operator from 1 to 4. a value of `0` means "all operators".
|
||||
- `y` is the value.
|
||||
- `26xy`: **set envelope delay of operator.**
|
||||
- `x` is the operator from 1 to 4. a value of `0` means "all operators".
|
||||
- `y` is the value.
|
||||
- `27xx`: **set operator 4 noise mode.**
|
||||
- `0`: noise off
|
||||
- `1`: square + noise
|
||||
- `2`: ring mod from operator 3 + noise
|
||||
- `3`: ring mod from operator 3 + double pitch modulation input
|
||||
- note: emulation issues. subject to change!
|
||||
- `2Axy`: **set waveform of operator.**
|
||||
- `x` is the operator from 1 to 4. a value of `0` means "all operators".
|
||||
- `y` is the value.
|
||||
- `2Exx`: **enable envelope hard reset.**
|
||||
- `2Fxy`: **set fixed frequency block (octave).**
|
||||
- `x` is the operator from 1 to 4.
|
||||
- `y` is the block/octave from 0 to 7.
|
||||
- `3xyy`: **set fixed frequency f-num.**
|
||||
- `x` contains operator number and high bits of f-num may be any of the following:
|
||||
- `0` to `3` for operator 1
|
||||
- `4` to `7` for operator 2
|
||||
- `8` to `B` for operator 3
|
||||
- `C` to `F` for operator 4
|
||||
- `y` are the lower bits of f-num.
|
||||
- `40xx`: **set operator 1 detune.**
|
||||
- `41xx`: **set operator 1 detune.**
|
||||
- `42xx`: **set operator 1 detune.**
|
||||
- `43xx`: **set operator 1 detune.**
|
||||
- `50xy`: **set AM of operator.**
|
||||
- `x` is the operator from 1 to 4. a value of `0` means "all operators".
|
||||
- `y` determines whether AM is on.
|
||||
- `51xy`: **set SL of operator.**
|
||||
- `x` is the operator from 1 to 4. a value of `0` means "all operators".
|
||||
- `y` is the value.
|
||||
- `52xy`: **set RR of operator.**
|
||||
- `x` is the operator from 1 to 4. a value of `0` means "all operators".
|
||||
- `y` is the value.
|
||||
- `53xy`: **set VIB of operator.**
|
||||
- `x` is the operator from 1 to 4. a value of `0` means "all operators".
|
||||
- `y` determines whether VIB is on.
|
||||
- `54xy`: **set KSL of operator.**
|
||||
- `x` is the operator from 1 to 4. a value of `0` means "all operators".
|
||||
- `y` is the value.
|
||||
- `55xy`: **set SUS of operator.**
|
||||
- `x` is the operator from 1 to 4. a value of `0` means "all operators".
|
||||
- `y` determines whether SUS is on.
|
||||
- `56xx`: **set DR of all operators.**
|
||||
- `57xx`: **set DR of operator 1.**
|
||||
- `58xx`: **set DR of operator 2.**
|
||||
- `59xx`: **set DR of operator 3.**
|
||||
- `5Axx`: **set DR of operator 4.**
|
||||
- `5Bxy`: **set KSR of operator.**
|
||||
- `x` is the operator from 1 to 4. a value of `0` means "all operators".
|
||||
- `y` determines whether KSR is on.
|
||||
|
||||
## info
|
||||
|
||||
this chip uses the [FM (ESFM)](../4-instrument/fm-esfm.md) instrument editor.
|
Loading…
Reference in a new issue