ESFM: documentation

This commit is contained in:
tildearrow 2024-01-17 00:37:45 -05:00
parent 912c249a50
commit c1bf577ccf
2 changed files with 178 additions and 0 deletions

View 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 envelopes 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
View 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.