From 6ede173d2cba7ea47ad5b3db161fdd6e531706f4 Mon Sep 17 00:00:00 2001 From: Electric Keet Date: Tue, 27 Jun 2023 14:06:23 -0700 Subject: [PATCH 1/5] SNES docs (and other tweaks) --- doc/4-instrument/README.md | 4 +- doc/4-instrument/amiga.md | 4 +- doc/4-instrument/snes.md | 46 +++++++++ doc/4-instrument/x1_010.md | 6 +- doc/7-systems/amiga.md | 2 + doc/7-systems/nes.md | 183 +++++++++++++++++++++++++----------- doc/7-systems/snes.md | 188 ++++++++++++++++++++++++++++--------- 7 files changed, 325 insertions(+), 108 deletions(-) create mode 100644 doc/4-instrument/snes.md diff --git a/doc/4-instrument/README.md b/doc/4-instrument/README.md index 96ae8821..2f424c53 100644 --- a/doc/4-instrument/README.md +++ b/doc/4-instrument/README.md @@ -10,7 +10,7 @@ double-click to open the instrument editor. every instrument can be renamed and have its type changed. -depending on the instrument type, there are currently 13 different types of an instrument editor: +depending on the instrument type, there are many different types of instrument editor: - [FM synthesis](fm.md) - for use with YM2612, YM2151 and FM block portion of YM2610. - [Standard](standard.md) - for use with NES and Sega Master System's PSG sound source and its derivatives. @@ -29,7 +29,7 @@ depending on the instrument type, there are currently 13 different types of an i - [Konami SCC / Bubble System WSG](scc.md) - for use with Konami SCC and Wavetable portion in Bubble System's sound hardware. - [Namco 163](n163.md) - for use with Namco 163. - [Konami VRC6](vrc6.md) - for use with VRC6's PSG sound source. - +- [SNES](snes.md) - for use with SNES S-APU. # macros diff --git a/doc/4-instrument/amiga.md b/doc/4-instrument/amiga.md index fc76c866..3d7a606f 100644 --- a/doc/4-instrument/amiga.md +++ b/doc/4-instrument/amiga.md @@ -1,4 +1,4 @@ -# Amiga/PCM sound sourceinstrument editor +# Amiga/PCM sound source instrument editor The PCM instrument editor consists of a sample selector and several macros: @@ -8,7 +8,7 @@ The PCM instrument editor consists of a sample selector and several macros: # Macros -- **Volume**: volume sequence WARNING: it works only on Amiga system, as of version 0.5.5!! +- **Volume**: volume sequence. _warning:_ it works only on Amiga system, as of version 0.5.5! - **Arpeggio**: pitch sequence - **Waveform**: sample sequence - **Panning (left)**: output level for left channel diff --git a/doc/4-instrument/snes.md b/doc/4-instrument/snes.md new file mode 100644 index 00000000..bdd4812c --- /dev/null +++ b/doc/4-instrument/snes.md @@ -0,0 +1,46 @@ +# SNES instrument editor + +these tabs are unique to the editor for SNES instruments. + + + +# SNES + +**Use envelope** enables the ADSR volume envelope. if it's on: + +- **A**: attack rate. +- **D**: decay rate. +- **S**: sustain level. +- **D2**: decay rate during sustain. +- **R**: release rate. +- **Sustain/release mode**: + - **Direct**: note release acts as note cut. + - **Effective (linear decrease)**: after release, volume lowers by subtractions of 1/64 steps. + - **Effective (exponential decrease)**: after release, volume decays exponentially. see [gain chart](../7-systems/snes.md). + - **Delayed (write R on release)**: after release, waits until A and D have completed before starting exponential decrease. + +if envelope is off, select gain mode as described below. + + + +# Macros + +- **Volume**: volume. +- **Arpeggio**: pitch in half-steps. +- **Noise Freq**: preset frequency of noise generator. +- **Waveform**: waveform. +- **Panning (left)**: output level of left channel. +- **Panning (right)**: output level of right channel. +- **Pitch**: fine pitch. +- **Special**: bitmap of flags. + - invert left: inverts output of left channel. + - invert right: inverts output of right channel. + - pitch mod: modulates pitch using previous channel's output. + - echo: enables echo. + - noise: enables noise generator. +- **Gain**: sets mode and value of gain. + - 0 – 127: direct gain from 0 to 127 + - 128 – 159: linear gain from -0 to -31 + - 160 – 191: exponential gain from -0 to -31 + - 192 – 223: linear gain from +0 to +31 + - 224 – 255: exponential gain from +0 to +31 diff --git a/doc/4-instrument/x1_010.md b/doc/4-instrument/x1_010.md index 2311f74d..8be27f05 100644 --- a/doc/4-instrument/x1_010.md +++ b/doc/4-instrument/x1_010.md @@ -1,11 +1,11 @@ # X1-010 instrument editor -X1-010 instrument editor consists of 7 macros. +X1-010 instrument editor consists of these macros. - **Volume**: volume levels sequence - **Arpeggio**: pitch sequence -- **Waveform**: spicifies wavetables sequence +- **Waveform**: specifies wavetables sequence - **Envelope Mode**: allows shaping an envelope -- **Envelope**: spicifies envelope shape sequence, it's also wavetable. +- **Envelope**: specifies envelope shape sequence, it's also wavetable. - **Auto envelope numerator**: sets the envelope to the channel's frequency multiplied by numerator - **Auto envelope denominator**: sets the envelope to the channel's frequency divided by denominator diff --git a/doc/7-systems/amiga.md b/doc/7-systems/amiga.md index 25fc4321..8f49bd12 100644 --- a/doc/7-systems/amiga.md +++ b/doc/7-systems/amiga.md @@ -4,6 +4,8 @@ a computer with a desktop OS, lifelike graphics and 4 channels of PCM sound in 1 in this very computer music trackers were born... +imported MOD files use this chip, and will set A-4 tuning to 436. + # effects - `10xx`: **toggle low-pass filter.** `0` turns it off and `1` turns it on. diff --git a/doc/7-systems/nes.md b/doc/7-systems/nes.md index 0a92628e..40963c1c 100644 --- a/doc/7-systems/nes.md +++ b/doc/7-systems/nes.md @@ -6,10 +6,17 @@ also known as Famicom. it is a five-channel sound generator: first two channels # effects -- `11xx`: **write to delta modulation counter.** this may be used to attenuate the triangle and noise channels. +- `11xx`: **write to delta modulation counter.** range is `00` to `7F`. this may be used to attenuate the triangle and noise channels down to about half normal volume. - will not work if a sample is playing. - `12xx`: **set duty cycle or noise mode of channel.** - - may be `0` to `3` for the pulse channels and `0` or `1` for the noise channel. + - may be `0` to `3` for the pulse channels: + - `0`: 12.5% + - `1`: 25% + - `2`: 50% + - `3`: 75% (inverted) + - may be `0` or `1` for the noise channel: + - `0`: long (15-bit LFSR, 32767-step) + - `1`: short (9-bit LFSR, 93-step) - `13xy`: **setup sweep up.** - `x` is the time. - `y` is the shift. @@ -48,62 +55,126 @@ also known as Famicom. it is a five-channel sound generator: first two channels - only works in DPCM mode. - see table below for possible values. -# DPCM frequency table +# tables -val | NTSC | PAL -----|----------:|----------: - 00 | 4181.7Hz | 4177.4Hz - 01 | 4709.9Hz | 4696.6Hz - 02 | 5264.0Hz | 5261.4Hz - 03 | 5593.0Hz | 5579.2Hz - 04 | 6257.9Hz | 6023.9Hz - 05 | 7046.3Hz | 7044.9Hz - 06 | 7919.3Hz | 7917.2Hz - 07 | 8363.4Hz | 8397.0Hz - 08 | 9419.9Hz | 9446.6Hz - 09 | 11186.1Hz | 11233.8Hz - 0A | 12604.0Hz | 12595.5Hz - 0B | 13982.6Hz | 14089.9Hz - 0C | 16884.6Hz | 16965.4Hz - 0D | 21306.8Hz | 21315.5Hz - 0E | 24858.0Hz | 25191.0Hz - 0F | 33143.9Hz | 33252.1Hz +## short noise frequencies (NTSC) -# length counter table +note | arpeggio | fundamental | MIDI note | pitch +:---- | -------: | ----------: | --------: | :---------- +`C-0` | @0 | 4.7 Hz | -9.47 | `d_1` + 53¢ +`C#0` | @1 | 9.5 Hz | 2.53 | `D-0` + 53¢ +`D-0` | @2 | 18.9 Hz | 14.55 | `D-1` + 55¢ +`D#0` | @3 | 25.3 Hz | 19.53 | `G-1` + 53¢ +`E-0` | @4 | 37.9 Hz | 26.55 | `D-2` + 55¢ +`F-0` | @5 | 50.6 Hz | 31.57 | `G-2` + 57¢ +`F#0` | @6 | 75.8 Hz | 38.55 | `D-3` + 55¢ +`G-0` | @7 | 95.3 Hz | 42.51 | `F#3` + 51¢ +`G#0` | @8 | 120.3 Hz | 46.55 | `A#3` + 55¢ +`A-0` | @9 | 150.4 Hz | 50.41 | `D-4` + 41¢ +`A#0` | @10 | 200.5 Hz | 55.39 | `G-4` + 39¢ +`B-0` | @11 | 300.7 Hz | 62.41 | `D-5` + 41¢ +`C-1` | @12 | 601.4 Hz | 74.41 | `D-6` + 41¢ +`C#1` | @13 | 1202.8 Hz | 86.41 | `D-7` + 41¢ +`D-1` | @14 | 2405.6 Hz | 98.41 | `D-8` + 41¢ +`D#1` | @15 | 4811.2 Hz | 110.41 | `D-9` + 41¢ -val | raw | NTSC | PAL | Dendy | NTSC 5-step | PAL 5-step | Dendy 5-step -----|----:|------:|------:|------:|------------:|-----------:|-------------: - 00 | 10 | 83ms | 100ms | 84ms | 104ms | 125ms | 105ms - 01 | 254 | 2.1s | 2.5s | 2.1s | 2.6s | 3.2s | 2.7s - 02 | 20 | 166ms | 200ms | 168ms | 208ms | 250ms | 210ms - 03 | 2 | 17ms | 20ms | 17ms | 21ms | 25ms | 21ms - 04 | 40 | 333ms | 400ms | 336ms | 417ms | 500ms | 421ms - 05 | 4 | 33ms | 40ms | 34ms | 42ms | 50ms | 42ms - 06 | 80 | 667ms | 800ms | 673ms | 833ms | 1.0s | 841ms - 07 | 6 | 50ms | 60ms | 50ms | 63ms | 75ms | 63ms - 08 | 160 | 1.3s | 1.6s | 1.3s | 1.7s | 2.0s | 1.7s - 09 | 8 | 67ms | 80ms | 67ms | 83ms | 100ms | 84ms - 0A | 60 | 500ms | 600ms | 505ms | 625ms | 750ms | 631ms - 0B | 10 | 83ms | 100ms | 84ms | 104ms | 125ms | 105ms - 0C | 14 | 117ms | 140ms | 118ms | 146ms | 175ms | 147ms - 0D | 12 | 100ms | 120ms | 101ms | 125ms | 150ms | 126ms - 0E | 26 | 217ms | 260ms | 219ms | 271ms | 325ms | 273ms - 0F | 14 | 117ms | 140ms | 118ms | 145ms | 175ms | 147ms - 10 | 12 | 100ms | 120ms | 101ms | 125ms | 150ms | 126ms - 11 | 16 | 133ms | 160ms | 135ms | 167ms | 200ms | 168ms - 12 | 24 | 200ms | 240ms | 202ms | 250ms | 300ms | 252ms - 13 | 18 | 150ms | 180ms | 151ms | 188ms | 225ms | 189ms - 14 | 48 | 400ms | 480ms | 404ms | 500ms | 600ms | 505ms - 15 | 20 | 167ms | 200ms | 168ms | 208ms | 250ms | 210ms - 16 | 96 | 800ms | 960ms | 807ms | 1.0s | 1.2s | 1.0s - 17 | 22 | 183ms | 220ms | 185ms | 229ms | 275ms | 231ms - 18 | 192 | 1.6s | 1.9s | 1.6s | 2.0s | 2.4s | 2.0s - 19 | 24 | 200ms | 240ms | 202ms | 250ms | 300ms | 252ms - 1A | 72 | 600ms | 720ms | 606ms | 750ms | 900ms | 757ms - 1B | 26 | 217ms | 260ms | 219ms | 271ms | 325ms | 273ms - 1C | 16 | 133ms | 160ms | 135ms | 167ms | 200ms | 168ms - 1D | 28 | 233ms | 280ms | 235ms | 292ms | 350ms | 294ms - 1E | 32 | 267ms | 320ms | 269ms | 333ms | 400ms | 336ms - 1F | 30 | 250ms | 300ms | 252ms | 313ms | 375ms | 315ms +reference: [NESdev](https://www.nesdev.org/wiki/APU_Noise) + +## length counter table + + + + + +value | raw | NTSC | PAL | Dendy | NTSC 5-step | PAL 5-step | Dendy 5-step +-----:|----:|------:|------:|------:|------------:|-----------:|-------------: + `03` | 2 | 17ms | 20ms | 17ms | 21ms | 25ms | 21ms + `05` | 4 | 33ms | 40ms | 34ms | 42ms | 50ms | 42ms + `07` | 6 | 50ms | 60ms | 50ms | 63ms | 75ms | 63ms + `09` | 8 | 67ms | 80ms | 67ms | 83ms | 100ms | 84ms + `00` | 10 | 83ms | 100ms | 84ms | 104ms | 125ms | 105ms + `0B` | 10 | 83ms | 100ms | 84ms | 104ms | 125ms | 105ms + `0D` | 12 | 100ms | 120ms | 101ms | 125ms | 150ms | 126ms + `10` | 12 | 100ms | 120ms | 101ms | 125ms | 150ms | 126ms + `0C` | 14 | 117ms | 140ms | 118ms | 146ms | 175ms | 147ms + `0F` | 14 | 117ms | 140ms | 118ms | 145ms | 175ms | 147ms + `1C` | 16 | 133ms | 160ms | 135ms | 167ms | 200ms | 168ms + `11` | 16 | 133ms | 160ms | 135ms | 167ms | 200ms | 168ms + `13` | 18 | 150ms | 180ms | 151ms | 188ms | 225ms | 189ms + `02` | 20 | 166ms | 200ms | 168ms | 208ms | 250ms | 210ms + `15` | 20 | 167ms | 200ms | 168ms | 208ms | 250ms | 210ms + `17` | 22 | 183ms | 220ms | 185ms | 229ms | 275ms | 231ms + `12` | 24 | 200ms | 240ms | 202ms | 250ms | 300ms | 252ms + `19` | 24 | 200ms | 240ms | 202ms | 250ms | 300ms | 252ms + `0E` | 26 | 217ms | 260ms | 219ms | 271ms | 325ms | 273ms + `1B` | 26 | 217ms | 260ms | 219ms | 271ms | 325ms | 273ms + `1D` | 28 | 233ms | 280ms | 235ms | 292ms | 350ms | 294ms + `1F` | 30 | 250ms | 300ms | 252ms | 313ms | 375ms | 315ms + `1E` | 32 | 267ms | 320ms | 269ms | 333ms | 400ms | 336ms + `04` | 40 | 333ms | 400ms | 336ms | 417ms | 500ms | 421ms + `14` | 48 | 400ms | 480ms | 404ms | 500ms | 600ms | 505ms + `0A` | 60 | 500ms | 600ms | 505ms | 625ms | 750ms | 631ms + `1A` | 72 | 600ms | 720ms | 606ms | 750ms | 900ms | 757ms + `06` | 80 | 667ms | 800ms | 673ms | 833ms | 1.0s | 841ms + `16` | 96 | 800ms | 960ms | 807ms | 1.0s | 1.2s | 1.0s + `08` | 160 | 1.3s | 1.6s | 1.3s | 1.7s | 2.0s | 1.7s + `18` | 192 | 1.6s | 1.9s | 1.6s | 2.0s | 2.4s | 2.0s + `01` | 254 | 2.1s | 2.5s | 2.1s | 2.6s | 3.2s | 2.7s reference: [NESdev](https://www.nesdev.org/wiki/APU_Length_Counter) + +## DPCM frequency table + +value | NTSC | PAL +------|----------:|----------: + `00` | 4181.7Hz | 4177.4Hz + `01` | 4709.9Hz | 4696.6Hz + `02` | 5264.0Hz | 5261.4Hz + `03` | 5593.0Hz | 5579.2Hz + `04` | 6257.9Hz | 6023.9Hz + `05` | 7046.3Hz | 7044.9Hz + `06` | 7919.3Hz | 7917.2Hz + `07` | 8363.4Hz | 8397.0Hz + `08` | 9419.9Hz | 9446.6Hz + `09` | 11186.1Hz | 11233.8Hz + `0A` | 12604.0Hz | 12595.5Hz + `0B` | 13982.6Hz | 14089.9Hz + `0C` | 16884.6Hz | 16965.4Hz + `0D` | 21306.8Hz | 21315.5Hz + `0E` | 24858.0Hz | 25191.0Hz + `0F` | 33143.9Hz | 33252.1Hz diff --git a/doc/7-systems/snes.md b/doc/7-systems/snes.md index e5546d4c..9595511b 100644 --- a/doc/7-systems/snes.md +++ b/doc/7-systems/snes.md @@ -1,8 +1,8 @@ -# Super Nintendo Entertainment System (SNES)/Super Famicom +# Super Nintendo Entertainment System (SNES) / Super Famicom the successor to NES to compete with Genesis, packing superior graphics and sample-based audio. -its audio system, developed by Sony, features a DSP chip, SPC700 CPU and 64KB of dedicated SRAM used by both. +its Sony-developed audio system features a DSP chip, SPC700 CPU, and 64KB of dedicated SRAM used by both. this whole system itself is pretty much a separate computer that the main CPU needs to upload its program and samples to. Furnace communicates with the DSP directly and provides a full 64KB of memory. this memory might be reduced excessively on ROM export to make up for playback engine and pattern data. you can go to window > statistics to see how much memory your samples are using. @@ -25,55 +25,153 @@ Furnace also allows the SNES to use wavetables (and the wavetable synthesizer) i - `10xx`: **set waveform.** - `11xx`: **toggle noise mode.** - `12xx`: **toggle echo on this channel.** -- `13xx`: **toggle pitch modulation.** -- `14xy`: **toggle inverting the left or right channels.** (x: left, y: right). -- `15xx`: **set envelope mode.** - - 0: ADSR. - - 1: gain (direct). - - 2: linear decrement. - - 3: exponential decrement. - - 4: linear increment. - - 5: bent line (inverse log) increment. +- `13xx`: **toggle pitch modulation.** frequency modulation by the previous channel's output. no effect on channel 1. +- `14xy`: **toggle inverting the left or right channels.** `x` is left, `y` is right. +- `15xx`: **set envelope mode.** see gain chart below for `1` through `5`. + - `0`: ADSR mode. + - `1`: gain (direct). volume holds at one level. + - `2`: linear decrement. volume lowers by subtractions of 1/64. + - `3`: exponential decrement. volume lowers by multiplications of 255/256. + - `4`: linear increment. volume rises by additions of 1/64. + - `5`: bent line (inverse log) increment. volume rises by additions of 1/64 until 3/4, then additions of 1/256. - `16xx`: **set gain.** `00` to `7F` if direct, `00` to `1F` otherwise. - `18xx`: **enable echo buffer.** - `19xx`: **set echo delay.** range is `0` to `F`. -- `1Axx`: **set left echo channel volume.** - - this is a signed number. +- `1Axx`: **set left echo channel volume.**\ + `1Bxx`: **set right echo channel volume.**\ + `1Cxx`: **set echo feedback.** + - all of these are signed numbers. - `00` to `7F` for 0 to 127. - `80` to `FF` for -128 to -1. - - setting this to -128 is not recommended as it may cause echo output to overflow and therefore click. -- `1Bxx`: **set right echo channel volume.** - - this is a signed number. - - `00` to `7F` for 0 to 127. - - `80` to `FF` for -128 to -1. - - setting this to -128 is not recommended as it may cause echo output to overflow and therefore click. -- `1Cxx`: **set echo feedback.** - - this is a signed number. - - `00` to `7F` for 0 to 127. - - `80` to `FF` for -128 to -1. - - setting this to -128 is not recommended as it may cause echo output to overflow and therefore click. -- `1Dxx`: **set noise generator frequency.** range is `00` to `1F`. -- `1Exx`: **set left dry / global volume.** - - this does not affect echo. -- `1Fxx`: **set right dry / global volume.** - - this does not affect echo. -- `20xx`: **set attack.** range is `0` to `F`. - - only in ADSR envelope mode. -- `21xx`: **set decay.** range is `0` to `7`. - - only in ADSR envelope mode. -- `22xx`: **set sustain.** range is `0` to `7`. - - only in ADSR envelope mode. -- `23xx`: **set release.** range is `00` to `1F`. - - only in ADSR envelope mode. -- `30xx`: **set echo filter coefficient 0.** -- `31xx`: **set echo filter coefficient 1.** -- `32xx`: **set echo filter coefficient 2.** -- `33xx`: **set echo filter coefficient 3.** -- `34xx`: **set echo filter coefficient 4.** -- `35xx`: **set echo filter coefficient 5.** -- `36xx`: **set echo filter coefficient 6.** -- `37xx`: **set echo filter coefficient 7.** + - setting these to -128 is not recommended as it may cause echo output to overflow and therefore click. +- `1Dxx`: **set noise generator frequency.** range is `00` to `1F`. see noise frequencies chart below. +- `1Exx`: **set left dry / global volume.**\ + `1Fxx`: **set right dry / global volume.** + - these do not affect echo. +- `20xx`: **set attack.** range is `0` to `F`.\ + `21xx`: **set decay.** range is `0` to `7`.\ + `22xx`: **set sustain.** range is `0` to `7`.\ + `23xx`: **set release.** range is `00` to `1F`. + - these four are only used in ADSR envelope mode. see ADSR chart below. +- `30xx`: **set echo filter coefficient 0.**\ + `31xx`: **set echo filter coefficient 1.**\ + `32xx`: **set echo filter coefficient 2.**\ + `33xx`: **set echo filter coefficient 3.**\ + `34xx`: **set echo filter coefficient 4.**\ + `35xx`: **set echo filter coefficient 5.**\ + `36xx`: **set echo filter coefficient 6.**\ + `37xx`: **set echo filter coefficient 7.** - all of these are signed numbers. - `00` to `7F` for 0 to 127. - `80` to `FF` for -128 to -1. - _Note:_ Be sure the sum of all coefficients is between -128 and 127. sums outside that may result in overflow and therefore clicking. + - see [SnesLab](https://sneslab.net/wiki/FIR_Filter) for a full explanation and examples. + +# tables + +## ADSR + +| attack | 0→1 time | decay | 1→S time | sustain | ratio | release | S→0 time +| -----: | -------: | ----: | -------: | ------: | :---: | ------: | -------: +| `00` | 4.1 sec | `00` | 1.2 sec | `00` | 1/8 | `00` | ∞ +| `01` | 2.5 sec | `01` | 740 msec | `01` | 2/8 | `01` | 38 sec +| `02` | 1.5 sec | `02` | 440 msec | `02` | 3/8 | `02` | 28 sec +| `03` | 1.0 sec | `03` | 290 msec | `03` | 4/8 | `03` | 24 sec +| `04` | 640 msec | `04` | 180 msec | `04` | 5/8 | `04` | 19 sec +| `05` | 380 msec | `05` | 110 msec | `05` | 6/8 | `05` | 14 sec +| `06` | 260 msec | `06` | 74 msec | `06` | 7/8 | `06` | 12 sec +| `07` | 160 msec | `07` | 37 msec | `07` | 1 | `07` | 9.4 sec +| `08` | 96 msec | | | | | `08` | 7.1 sec +| `09` | 64 msec | | | | | `09` | 5.9 sec +| `0A` | 40 msec | | | | | `0A` | 4.7 sec +| `0B` | 24 msec | | | | | `0B` | 3.5 sec +| `0C` | 16 msec | | | | | `0C` | 2.9 sec +| `0D` | 10 msec | | | | | `0D` | 2.4 sec +| `0E` | 6 msec | | | | | `0E` | 1.8 sec +| `0F` | 0 msec | | | | | `0F` | 1.5 sec +| | | | | | | `10` | 1.2 sec +| | | | | | | `11` | 880 msec +| | | | | | | `12` | 740 msec +| | | | | | | `13` | 590 msec +| | | | | | | `14` | 440 msec +| | | | | | | `15` | 370 msec +| | | | | | | `16` | 290 msec +| | | | | | | `17` | 220 msec +| | | | | | | `18` | 180 msec +| | | | | | | `19` | 150 msec +| | | | | | | `1A` | 110 msec +| | | | | | | `1B` | 92 msec +| | | | | | | `1C` | 74 msec +| | | | | | | `1D` | 55 msec +| | | | | | | `1E` | 37 msec +| | | | | | | `1F` | 18 msec + +reference: [Super Famicom Development Wiki](https://wiki.superfamicom.org/spc700-reference#dsp-voice-register:-adsr-1097) + +## gain + +value | linear inc. | bent line inc. | linear dec. | exponent dec. +----: | ----------: | -------------: | ----------: | ------------: + `00` | ∞ | ∞ | ∞ | ∞ + `01` | 4.1 sec | 7.2 sec | 4.1 sec | 38 sec + `02` | 3.1 sec | 5.4 sec | 3.1 sec | 28 sec + `03` | 2.6 sec | 4.6 sec | 2.6 sec | 24 sec + `04` | 2.0 sec | 3.5 sec | 2.0 sec | 19 sec + `05` | 1.5 sec | 2.6 sec | 1.5 sec | 14 sec + `06` | 1.3 sec | 2.3 sec | 1.3 sec | 12 sec + `07` | 1.0 sec | 1.8 sec | 1.0 sec | 9.4 sec + `08` | 770 msec | 1.3 sec | 770 msec | 7.1 sec + `09` | 640 msec | 1.1 sec | 640 msec | 5.9 sec + `0A` | 510 msec | 900 msec | 510 msec | 4.7 sec + `0B` | 380 msec | 670 msec | 380 msec | 3.5 sec + `0C` | 320 msec | 560 msec | 320 msec | 2.9 sec + `0D` | 260 msec | 450 msec | 260 msec | 2.4 sec + `0E` | 190 msec | 340 msec | 190 msec | 1.8 sec + `0F` | 160 msec | 280 msec | 160 msec | 1.5 sec + `10` | 130 msec | 220 msec | 130 msec | 1.2 sec + `11` | 96 msec | 170 msec | 96 msec | 880 msec + `12` | 80 msec | 140 msec | 80 msec | 740 msec + `13` | 64 msec | 110 msec | 64 msec | 590 msec + `14` | 48 msec | 84 msec | 48 msec | 440 msec + `15` | 40 msec | 70 msec | 40 msec | 370 msec + `16` | 32 msec | 56 msec | 32 msec | 290 msec + `17` | 24 msec | 42 msec | 24 msec | 220 msec + `18` | 20 msec | 35 msec | 20 msec | 180 msec + `19` | 16 msec | 28 msec | 16 msec | 150 msec + `1A` | 12 msec | 21 msec | 12 msec | 110 msec + `1B` | 10 msec | 18 msec | 10 msec | 92 msec + `1C` | 8 msec | 14 msec | 8 msec | 74 msec + `1D` | 6 msec | 11 msec | 6 msec | 55 msec + `1E` | 4 msec | 7 msec | 4 msec | 37 msec + `1F` | 2 msec | 3.5 msec | 2 msec | 18 msec + +reference: [Super Famicom Development Wiki](https://wiki.superfamicom.org/spc700-reference#dsp-voice-register:-gain-1156) + +## noise frequencies + +value | freq. | value | freq. +----: | -----: | ----: | -------: +`00` | 0 Hz | `10` | 500 Hz +`01` | 16 Hz | `11` | 667 Hz +`02` | 21 Hz | `12` | 800 Hz +`03` | 25 Hz | `13` | 1.0 KHz +`04` | 31 Hz | `14` | 1.3 KHz +`05` | 42 Hz | `15` | 1.6 KHz +`06` | 50 Hz | `16` | 2.0 KHz +`07` | 63 Hz | `17` | 2.7 KHz +`08` | 83 Hz | `18` | 3.2 KHz +`09` | 100 Hz | `19` | 4.0 KHz +`0A` | 125 Hz | `1A` | 5.3 KHz +`0B` | 167 Hz | `1B` | 6.4 KHz +`0C` | 200 Hz | `1C` | 8.0 KHz +`0D` | 250 Hz | `1D` | 10.7 KHz +`0E` | 333 Hz | `1E` | 16 KHz +`0F` | 400 Hz | `1F` | 32 KHz + +reference: [Super Famicom Development Wiki](https://wiki.superfamicom.org/spc700-reference#dsp-register:-flg-1318) + + + +# resources + +- [SNES-format BRR samples](https://www.smwcentral.net/?p=section&s=brrsamples) at SMW Central From 0d43a1a572421f8b55b92e593dabf6540735d189 Mon Sep 17 00:00:00 2001 From: Electric Keet Date: Fri, 30 Jun 2023 20:25:12 -0700 Subject: [PATCH 2/5] More little stuff. --- doc/1-intro/concepts.md | 2 +- doc/2-interface/song-info.md | 2 +- doc/4-instrument/README.md | 2 +- doc/4-instrument/snes.md | 10 +++++----- doc/7-systems/nes.md | 2 +- doc/7-systems/pcspkr.md | 2 +- doc/7-systems/pet.md | 2 +- doc/7-systems/ricoh.md | 2 +- doc/7-systems/x1-010.md | 2 +- 9 files changed, 13 insertions(+), 13 deletions(-) diff --git a/doc/1-intro/concepts.md b/doc/1-intro/concepts.md index cee6e9ad..130e2ae8 100644 --- a/doc/1-intro/concepts.md +++ b/doc/1-intro/concepts.md @@ -32,5 +32,5 @@ The **order list** is a smaller spreadsheet showing the overall song structure. Different chips have different capabilities. Even within the same chip, each channel may have its own ways of making sound. - Some channels use one or more waveform **generators** (sine, square, noise...) to build up a sound. - Of special note are **[FM (frequency modulation)](../4-instrument/fm.md)** channels, which use a number of generators called **operators** that can interact to make very complex sounds. -- Some channels use **[samples](../6-sample/README.md)** – recordings of sounds, often with defined loop points to allow a note to sustain. +- Some channels use **[samples](../6-sample/README.md)** - recordings of sounds, often with defined loop points to allow a note to sustain. - Some channels use **[wavetables](../5-wave/README.md)**, which are like very short samples of fixed length that automatically loop. \ No newline at end of file diff --git a/doc/2-interface/song-info.md b/doc/2-interface/song-info.md index 5ba682a2..7919e7be 100644 --- a/doc/2-interface/song-info.md +++ b/doc/2-interface/song-info.md @@ -11,7 +11,7 @@ All of this metadata will be included in a VGM export. This isn't the case for a # subsongs -This window allows one to create **subsongs** – multiple individual songs within a single file. Each song has its own order list and patterns, but all songs within a file share the same chips, samples, and so forth. +This window allows one to create **subsongs** - multiple individual songs within a single file. Each song has its own order list and patterns, but all songs within a file share the same chips, samples, and so forth. - The drop-down box selects the current subsong. - The **`+`** button adds a new subsong. diff --git a/doc/4-instrument/README.md b/doc/4-instrument/README.md index 2f424c53..4afd2a07 100644 --- a/doc/4-instrument/README.md +++ b/doc/4-instrument/README.md @@ -94,6 +94,6 @@ Finally, the sequence of values can be directly edited in the text box at the bo ![LFO macro editor](macro-LFO.png) - **Bottom** and **Top** determine the range of values generated by the macro. (Bottom can be larger than Top to invert the waveform!) -- **Speed** is how quickly the values change – the frequency of the oscillator. +- **Speed** is how quickly the values change - the frequency of the oscillator. - **Phase** is which part of the waveform the macro will start at, measured in 1/1024 increments. - **Shape** is the waveform used. Triangle is the default, and Saw and Square are exactly as they say. diff --git a/doc/4-instrument/snes.md b/doc/4-instrument/snes.md index bdd4812c..0887e9a6 100644 --- a/doc/4-instrument/snes.md +++ b/doc/4-instrument/snes.md @@ -39,8 +39,8 @@ if envelope is off, select gain mode as described below. - echo: enables echo. - noise: enables noise generator. - **Gain**: sets mode and value of gain. - - 0 – 127: direct gain from 0 to 127 - - 128 – 159: linear gain from -0 to -31 - - 160 – 191: exponential gain from -0 to -31 - - 192 – 223: linear gain from +0 to +31 - - 224 – 255: exponential gain from +0 to +31 + - 0 - 127: direct gain from 0 to 127 + - 128 - 159: linear gain from -0 to -31 + - 160 - 191: exponential gain from -0 to -31 + - 192 - 223: linear gain from +0 to +31 + - 224 - 255: exponential gain from +0 to +31 diff --git a/doc/7-systems/nes.md b/doc/7-systems/nes.md index 40963c1c..4837df48 100644 --- a/doc/7-systems/nes.md +++ b/doc/7-systems/nes.md @@ -13,7 +13,7 @@ also known as Famicom. it is a five-channel sound generator: first two channels - `0`: 12.5% - `1`: 25% - `2`: 50% - - `3`: 75% (inverted) + - `3`: 75% - may be `0` or `1` for the noise channel: - `0`: long (15-bit LFSR, 32767-step) - `1`: short (9-bit LFSR, 93-step) diff --git a/doc/7-systems/pcspkr.md b/doc/7-systems/pcspkr.md index 42330b06..a6a55ba6 100644 --- a/doc/7-systems/pcspkr.md +++ b/doc/7-systems/pcspkr.md @@ -1,6 +1,6 @@ # PC Speaker -40 years of one square beep – and still going! Single channel, no volume control... +40 years of one square beep - and still going! Single channel, no volume control... # real output diff --git a/doc/7-systems/pet.md b/doc/7-systems/pet.md index f3e51bca..9b7e3b5b 100644 --- a/doc/7-systems/pet.md +++ b/doc/7-systems/pet.md @@ -2,7 +2,7 @@ a computer from 1977 which was leader on US schools back then. subsequently the Apple II took its throne. -maybe no better than a computer terminal, but somebody discovered a way to update the screen at turbo rate – and eventually its sound "chip" (it was nothing more than an 8-bit shift register) was abused as well. +maybe no better than a computer terminal, but somebody discovered a way to update the screen at turbo rate - and eventually its sound "chip" (it was nothing more than an 8-bit shift register) was abused as well. some of these didn't even have sound... diff --git a/doc/7-systems/ricoh.md b/doc/7-systems/ricoh.md index e84a5db3..51832602 100644 --- a/doc/7-systems/ricoh.md +++ b/doc/7-systems/ricoh.md @@ -1,6 +1,6 @@ # Ricoh RF5C68 -YM2612's sidekick – poor man's SNES DSP. 8-channel PCM sample-based synthesizer used in Sega CD, Fujitsu FM Towns and some of Sega's arcade machines. supports up to 64KB of external PCM data. +YM2612's sidekick - poor man's SNES DSP. 8-channel PCM sample-based synthesizer used in Sega CD, Fujitsu FM Towns and some of Sega's arcade machines. supports up to 64KB of external PCM data. # effects diff --git a/doc/7-systems/x1-010.md b/doc/7-systems/x1-010.md index dc46f465..5f110aba 100644 --- a/doc/7-systems/x1-010.md +++ b/doc/7-systems/x1-010.md @@ -8,7 +8,7 @@ Allumer rebadged it for their own arcade hardware. it has 16 channels, which can all be switched between PCM sample or wavetable playback mode. wavetable playback needs to paired with envelope, similar to AY PSG, but shapes are stored in RAM and as such are user-definable. -in Furnace, this chip can be configured for original arcade mono output or stereo output – it simulates early 'incorrect' emulation on some mono hardware, but it is also based on the assumption that each channel is connected to each output. +in Furnace, this chip can be configured for original arcade mono output or stereo output - it simulates early 'incorrect' emulation on some mono hardware, but it is also based on the assumption that each channel is connected to each output. # waveform types From a9d4bf1fdcb09abfba0786d20ef9e619ae54bd98 Mon Sep 17 00:00:00 2001 From: Electric Keet Date: Fri, 30 Jun 2023 20:41:16 -0700 Subject: [PATCH 3/5] Accurate number! Well, accurate enough. --- doc/7-systems/nes.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/doc/7-systems/nes.md b/doc/7-systems/nes.md index 4837df48..c3ccb706 100644 --- a/doc/7-systems/nes.md +++ b/doc/7-systems/nes.md @@ -6,7 +6,8 @@ also known as Famicom. it is a five-channel sound generator: first two channels # effects -- `11xx`: **write to delta modulation counter.** range is `00` to `7F`. this may be used to attenuate the triangle and noise channels down to about half normal volume. +- `11xx`: **write to delta modulation counter.** range is `00` to `7F`. + - this may be used to attenuate the triangle and noise channels; at `7F`, they will be at about 57% volume. - will not work if a sample is playing. - `12xx`: **set duty cycle or noise mode of channel.** - may be `0` to `3` for the pulse channels: From f64aeda9ec013626f03a9fd067e9d726f4203699 Mon Sep 17 00:00:00 2001 From: Electric Keet Date: Fri, 30 Jun 2023 21:23:55 -0700 Subject: [PATCH 4/5] Abbreviating the abbreviations. Shortening to `msec` and `sec` to `ms` and `s` respectively. --- doc/7-systems/snes.md | 128 +++++++++++++++++++++--------------------- 1 file changed, 64 insertions(+), 64 deletions(-) diff --git a/doc/7-systems/snes.md b/doc/7-systems/snes.md index 9595511b..9284c5a0 100644 --- a/doc/7-systems/snes.md +++ b/doc/7-systems/snes.md @@ -73,38 +73,38 @@ Furnace also allows the SNES to use wavetables (and the wavetable synthesizer) i | attack | 0→1 time | decay | 1→S time | sustain | ratio | release | S→0 time | -----: | -------: | ----: | -------: | ------: | :---: | ------: | -------: -| `00` | 4.1 sec | `00` | 1.2 sec | `00` | 1/8 | `00` | ∞ -| `01` | 2.5 sec | `01` | 740 msec | `01` | 2/8 | `01` | 38 sec -| `02` | 1.5 sec | `02` | 440 msec | `02` | 3/8 | `02` | 28 sec -| `03` | 1.0 sec | `03` | 290 msec | `03` | 4/8 | `03` | 24 sec -| `04` | 640 msec | `04` | 180 msec | `04` | 5/8 | `04` | 19 sec -| `05` | 380 msec | `05` | 110 msec | `05` | 6/8 | `05` | 14 sec -| `06` | 260 msec | `06` | 74 msec | `06` | 7/8 | `06` | 12 sec -| `07` | 160 msec | `07` | 37 msec | `07` | 1 | `07` | 9.4 sec -| `08` | 96 msec | | | | | `08` | 7.1 sec -| `09` | 64 msec | | | | | `09` | 5.9 sec -| `0A` | 40 msec | | | | | `0A` | 4.7 sec -| `0B` | 24 msec | | | | | `0B` | 3.5 sec -| `0C` | 16 msec | | | | | `0C` | 2.9 sec -| `0D` | 10 msec | | | | | `0D` | 2.4 sec -| `0E` | 6 msec | | | | | `0E` | 1.8 sec -| `0F` | 0 msec | | | | | `0F` | 1.5 sec -| | | | | | | `10` | 1.2 sec -| | | | | | | `11` | 880 msec -| | | | | | | `12` | 740 msec -| | | | | | | `13` | 590 msec -| | | | | | | `14` | 440 msec -| | | | | | | `15` | 370 msec -| | | | | | | `16` | 290 msec -| | | | | | | `17` | 220 msec -| | | | | | | `18` | 180 msec -| | | | | | | `19` | 150 msec -| | | | | | | `1A` | 110 msec -| | | | | | | `1B` | 92 msec -| | | | | | | `1C` | 74 msec -| | | | | | | `1D` | 55 msec -| | | | | | | `1E` | 37 msec -| | | | | | | `1F` | 18 msec +| `00` | 4.1 s | `00` | 1.2 s | `00` | 1/8 | `00` | ∞ +| `01` | 2.5 s | `01` | 740 ms | `01` | 2/8 | `01` | 38 s +| `02` | 1.5 s | `02` | 440 ms | `02` | 3/8 | `02` | 28 s +| `03` | 1.0 s | `03` | 290 ms | `03` | 4/8 | `03` | 24 s +| `04` | 640 ms | `04` | 180 ms | `04` | 5/8 | `04` | 19 s +| `05` | 380 ms | `05` | 110 ms | `05` | 6/8 | `05` | 14 s +| `06` | 260 ms | `06` | 74 ms | `06` | 7/8 | `06` | 12 s +| `07` | 160 ms | `07` | 37 ms | `07` | 1 | `07` | 9.4 s +| `08` | 96 ms | | | | | `08` | 7.1 s +| `09` | 64 ms | | | | | `09` | 5.9 s +| `0A` | 40 ms | | | | | `0A` | 4.7 s +| `0B` | 24 ms | | | | | `0B` | 3.5 s +| `0C` | 16 ms | | | | | `0C` | 2.9 s +| `0D` | 10 ms | | | | | `0D` | 2.4 s +| `0E` | 6 ms | | | | | `0E` | 1.8 s +| `0F` | 0 ms | | | | | `0F` | 1.5 s +| | | | | | | `10` | 1.2 s +| | | | | | | `11` | 880 ms +| | | | | | | `12` | 740 ms +| | | | | | | `13` | 590 ms +| | | | | | | `14` | 440 ms +| | | | | | | `15` | 370 ms +| | | | | | | `16` | 290 ms +| | | | | | | `17` | 220 ms +| | | | | | | `18` | 180 ms +| | | | | | | `19` | 150 ms +| | | | | | | `1A` | 110 ms +| | | | | | | `1B` | 92 ms +| | | | | | | `1C` | 74 ms +| | | | | | | `1D` | 55 ms +| | | | | | | `1E` | 37 ms +| | | | | | | `1F` | 18 ms reference: [Super Famicom Development Wiki](https://wiki.superfamicom.org/spc700-reference#dsp-voice-register:-adsr-1097) @@ -113,37 +113,37 @@ reference: [Super Famicom Development Wiki](https://wiki.superfamicom.org/spc700 value | linear inc. | bent line inc. | linear dec. | exponent dec. ----: | ----------: | -------------: | ----------: | ------------: `00` | ∞ | ∞ | ∞ | ∞ - `01` | 4.1 sec | 7.2 sec | 4.1 sec | 38 sec - `02` | 3.1 sec | 5.4 sec | 3.1 sec | 28 sec - `03` | 2.6 sec | 4.6 sec | 2.6 sec | 24 sec - `04` | 2.0 sec | 3.5 sec | 2.0 sec | 19 sec - `05` | 1.5 sec | 2.6 sec | 1.5 sec | 14 sec - `06` | 1.3 sec | 2.3 sec | 1.3 sec | 12 sec - `07` | 1.0 sec | 1.8 sec | 1.0 sec | 9.4 sec - `08` | 770 msec | 1.3 sec | 770 msec | 7.1 sec - `09` | 640 msec | 1.1 sec | 640 msec | 5.9 sec - `0A` | 510 msec | 900 msec | 510 msec | 4.7 sec - `0B` | 380 msec | 670 msec | 380 msec | 3.5 sec - `0C` | 320 msec | 560 msec | 320 msec | 2.9 sec - `0D` | 260 msec | 450 msec | 260 msec | 2.4 sec - `0E` | 190 msec | 340 msec | 190 msec | 1.8 sec - `0F` | 160 msec | 280 msec | 160 msec | 1.5 sec - `10` | 130 msec | 220 msec | 130 msec | 1.2 sec - `11` | 96 msec | 170 msec | 96 msec | 880 msec - `12` | 80 msec | 140 msec | 80 msec | 740 msec - `13` | 64 msec | 110 msec | 64 msec | 590 msec - `14` | 48 msec | 84 msec | 48 msec | 440 msec - `15` | 40 msec | 70 msec | 40 msec | 370 msec - `16` | 32 msec | 56 msec | 32 msec | 290 msec - `17` | 24 msec | 42 msec | 24 msec | 220 msec - `18` | 20 msec | 35 msec | 20 msec | 180 msec - `19` | 16 msec | 28 msec | 16 msec | 150 msec - `1A` | 12 msec | 21 msec | 12 msec | 110 msec - `1B` | 10 msec | 18 msec | 10 msec | 92 msec - `1C` | 8 msec | 14 msec | 8 msec | 74 msec - `1D` | 6 msec | 11 msec | 6 msec | 55 msec - `1E` | 4 msec | 7 msec | 4 msec | 37 msec - `1F` | 2 msec | 3.5 msec | 2 msec | 18 msec + `01` | 4.1 s | 7.2 s | 4.1 s | 38 s + `02` | 3.1 s | 5.4 s | 3.1 s | 28 s + `03` | 2.6 s | 4.6 s | 2.6 s | 24 s + `04` | 2.0 s | 3.5 s | 2.0 s | 19 s + `05` | 1.5 s | 2.6 s | 1.5 s | 14 s + `06` | 1.3 s | 2.3 s | 1.3 s | 12 s + `07` | 1.0 s | 1.8 s | 1.0 s | 9.4 s + `08` | 770 ms | 1.3 s | 770 ms | 7.1 s + `09` | 640 ms | 1.1 s | 640 ms | 5.9 s + `0A` | 510 ms | 900 ms | 510 ms | 4.7 s + `0B` | 380 ms | 670 ms | 380 ms | 3.5 s + `0C` | 320 ms | 560 ms | 320 ms | 2.9 s + `0D` | 260 ms | 450 ms | 260 ms | 2.4 s + `0E` | 190 ms | 340 ms | 190 ms | 1.8 s + `0F` | 160 ms | 280 ms | 160 ms | 1.5 s + `10` | 130 ms | 220 ms | 130 ms | 1.2 s + `11` | 96 ms | 170 ms | 96 ms | 880 ms + `12` | 80 ms | 140 ms | 80 ms | 740 ms + `13` | 64 ms | 110 ms | 64 ms | 590 ms + `14` | 48 ms | 84 ms | 48 ms | 440 ms + `15` | 40 ms | 70 ms | 40 ms | 370 ms + `16` | 32 ms | 56 ms | 32 ms | 290 ms + `17` | 24 ms | 42 ms | 24 ms | 220 ms + `18` | 20 ms | 35 ms | 20 ms | 180 ms + `19` | 16 ms | 28 ms | 16 ms | 150 ms + `1A` | 12 ms | 21 ms | 12 ms | 110 ms + `1B` | 10 ms | 18 ms | 10 ms | 92 ms + `1C` | 8 ms | 14 ms | 8 ms | 74 ms + `1D` | 6 ms | 11 ms | 6 ms | 55 ms + `1E` | 4 ms | 7 ms | 4 ms | 37 ms + `1F` | 2 ms | 3.5 ms | 2 ms | 18 ms reference: [Super Famicom Development Wiki](https://wiki.superfamicom.org/spc700-reference#dsp-voice-register:-gain-1156) @@ -174,4 +174,4 @@ reference: [Super Famicom Development Wiki](https://wiki.superfamicom.org/spc700 # resources -- [SNES-format BRR samples](https://www.smwcentral.net/?p=section&s=brrsamples) at SMW Central +- [SNES-format BRR samples](https://www.smwcentral.net/?p=stion&s=brrsamples) at SMW Central From 51facaff8ede95ff2fd8c52811de01d4dd373bd5 Mon Sep 17 00:00:00 2001 From: Electric Keet Date: Fri, 30 Jun 2023 21:27:46 -0700 Subject: [PATCH 5/5] Trying again, no spaces this time. --- doc/7-systems/snes.md | 126 +++++++++++++++++++++--------------------- 1 file changed, 63 insertions(+), 63 deletions(-) diff --git a/doc/7-systems/snes.md b/doc/7-systems/snes.md index 9284c5a0..9888291c 100644 --- a/doc/7-systems/snes.md +++ b/doc/7-systems/snes.md @@ -73,38 +73,38 @@ Furnace also allows the SNES to use wavetables (and the wavetable synthesizer) i | attack | 0→1 time | decay | 1→S time | sustain | ratio | release | S→0 time | -----: | -------: | ----: | -------: | ------: | :---: | ------: | -------: -| `00` | 4.1 s | `00` | 1.2 s | `00` | 1/8 | `00` | ∞ -| `01` | 2.5 s | `01` | 740 ms | `01` | 2/8 | `01` | 38 s -| `02` | 1.5 s | `02` | 440 ms | `02` | 3/8 | `02` | 28 s -| `03` | 1.0 s | `03` | 290 ms | `03` | 4/8 | `03` | 24 s -| `04` | 640 ms | `04` | 180 ms | `04` | 5/8 | `04` | 19 s -| `05` | 380 ms | `05` | 110 ms | `05` | 6/8 | `05` | 14 s -| `06` | 260 ms | `06` | 74 ms | `06` | 7/8 | `06` | 12 s -| `07` | 160 ms | `07` | 37 ms | `07` | 1 | `07` | 9.4 s -| `08` | 96 ms | | | | | `08` | 7.1 s -| `09` | 64 ms | | | | | `09` | 5.9 s -| `0A` | 40 ms | | | | | `0A` | 4.7 s -| `0B` | 24 ms | | | | | `0B` | 3.5 s -| `0C` | 16 ms | | | | | `0C` | 2.9 s -| `0D` | 10 ms | | | | | `0D` | 2.4 s -| `0E` | 6 ms | | | | | `0E` | 1.8 s -| `0F` | 0 ms | | | | | `0F` | 1.5 s -| | | | | | | `10` | 1.2 s -| | | | | | | `11` | 880 ms -| | | | | | | `12` | 740 ms -| | | | | | | `13` | 590 ms -| | | | | | | `14` | 440 ms -| | | | | | | `15` | 370 ms -| | | | | | | `16` | 290 ms -| | | | | | | `17` | 220 ms -| | | | | | | `18` | 180 ms -| | | | | | | `19` | 150 ms -| | | | | | | `1A` | 110 ms -| | | | | | | `1B` | 92 ms -| | | | | | | `1C` | 74 ms -| | | | | | | `1D` | 55 ms -| | | | | | | `1E` | 37 ms -| | | | | | | `1F` | 18 ms +| `00` | 4.1s | `00` | 1.2s | `00` | 1/8 | `00` | ∞ +| `01` | 2.5s | `01` | 740ms | `01` | 2/8 | `01` | 38s +| `02` | 1.5s | `02` | 440ms | `02` | 3/8 | `02` | 28s +| `03` | 1.0s | `03` | 290ms | `03` | 4/8 | `03` | 24s +| `04` | 640ms | `04` | 180ms | `04` | 5/8 | `04` | 19s +| `05` | 380ms | `05` | 110ms | `05` | 6/8 | `05` | 14s +| `06` | 260ms | `06` | 74ms | `06` | 7/8 | `06` | 12s +| `07` | 160ms | `07` | 37ms | `07` | 1 | `07` | 9.4s +| `08` | 96ms | | | | | `08` | 7.1s +| `09` | 64ms | | | | | `09` | 5.9s +| `0A` | 40ms | | | | | `0A` | 4.7s +| `0B` | 24ms | | | | | `0B` | 3.5s +| `0C` | 16ms | | | | | `0C` | 2.9s +| `0D` | 10ms | | | | | `0D` | 2.4s +| `0E` | 6ms | | | | | `0E` | 1.8s +| `0F` | 0ms | | | | | `0F` | 1.5s +| | | | | | | `10` | 1.2s +| | | | | | | `11` | 880ms +| | | | | | | `12` | 740ms +| | | | | | | `13` | 590ms +| | | | | | | `14` | 440ms +| | | | | | | `15` | 370ms +| | | | | | | `16` | 290ms +| | | | | | | `17` | 220ms +| | | | | | | `18` | 180ms +| | | | | | | `19` | 150ms +| | | | | | | `1A` | 110ms +| | | | | | | `1B` | 92ms +| | | | | | | `1C` | 74ms +| | | | | | | `1D` | 55ms +| | | | | | | `1E` | 37ms +| | | | | | | `1F` | 18ms reference: [Super Famicom Development Wiki](https://wiki.superfamicom.org/spc700-reference#dsp-voice-register:-adsr-1097) @@ -113,37 +113,37 @@ reference: [Super Famicom Development Wiki](https://wiki.superfamicom.org/spc700 value | linear inc. | bent line inc. | linear dec. | exponent dec. ----: | ----------: | -------------: | ----------: | ------------: `00` | ∞ | ∞ | ∞ | ∞ - `01` | 4.1 s | 7.2 s | 4.1 s | 38 s - `02` | 3.1 s | 5.4 s | 3.1 s | 28 s - `03` | 2.6 s | 4.6 s | 2.6 s | 24 s - `04` | 2.0 s | 3.5 s | 2.0 s | 19 s - `05` | 1.5 s | 2.6 s | 1.5 s | 14 s - `06` | 1.3 s | 2.3 s | 1.3 s | 12 s - `07` | 1.0 s | 1.8 s | 1.0 s | 9.4 s - `08` | 770 ms | 1.3 s | 770 ms | 7.1 s - `09` | 640 ms | 1.1 s | 640 ms | 5.9 s - `0A` | 510 ms | 900 ms | 510 ms | 4.7 s - `0B` | 380 ms | 670 ms | 380 ms | 3.5 s - `0C` | 320 ms | 560 ms | 320 ms | 2.9 s - `0D` | 260 ms | 450 ms | 260 ms | 2.4 s - `0E` | 190 ms | 340 ms | 190 ms | 1.8 s - `0F` | 160 ms | 280 ms | 160 ms | 1.5 s - `10` | 130 ms | 220 ms | 130 ms | 1.2 s - `11` | 96 ms | 170 ms | 96 ms | 880 ms - `12` | 80 ms | 140 ms | 80 ms | 740 ms - `13` | 64 ms | 110 ms | 64 ms | 590 ms - `14` | 48 ms | 84 ms | 48 ms | 440 ms - `15` | 40 ms | 70 ms | 40 ms | 370 ms - `16` | 32 ms | 56 ms | 32 ms | 290 ms - `17` | 24 ms | 42 ms | 24 ms | 220 ms - `18` | 20 ms | 35 ms | 20 ms | 180 ms - `19` | 16 ms | 28 ms | 16 ms | 150 ms - `1A` | 12 ms | 21 ms | 12 ms | 110 ms - `1B` | 10 ms | 18 ms | 10 ms | 92 ms - `1C` | 8 ms | 14 ms | 8 ms | 74 ms - `1D` | 6 ms | 11 ms | 6 ms | 55 ms - `1E` | 4 ms | 7 ms | 4 ms | 37 ms - `1F` | 2 ms | 3.5 ms | 2 ms | 18 ms + `01` | 4.1s | 7.2s | 4.1s | 38s + `02` | 3.1s | 5.4s | 3.1s | 28s + `03` | 2.6s | 4.6s | 2.6s | 24s + `04` | 2.0s | 3.5s | 2.0s | 19s + `05` | 1.5s | 2.6s | 1.5s | 14s + `06` | 1.3s | 2.3s | 1.3s | 12s + `07` | 1.0s | 1.8s | 1.0s | 9.4s + `08` | 770ms | 1.3s | 770ms | 7.1s + `09` | 640ms | 1.1s | 640ms | 5.9s + `0A` | 510ms | 900ms | 510ms | 4.7s + `0B` | 380ms | 670ms | 380ms | 3.5s + `0C` | 320ms | 560ms | 320ms | 2.9s + `0D` | 260ms | 450ms | 260ms | 2.4s + `0E` | 190ms | 340ms | 190ms | 1.8s + `0F` | 160ms | 280ms | 160ms | 1.5s + `10` | 130ms | 220ms | 130ms | 1.2s + `11` | 96ms | 170ms | 96ms | 880ms + `12` | 80ms | 140ms | 80ms | 740ms + `13` | 64ms | 110ms | 64ms | 590ms + `14` | 48ms | 84ms | 48ms | 440ms + `15` | 40ms | 70ms | 40ms | 370ms + `16` | 32ms | 56ms | 32ms | 290ms + `17` | 24ms | 42ms | 24ms | 220ms + `18` | 20ms | 35ms | 20ms | 180ms + `19` | 16ms | 28ms | 16ms | 150ms + `1A` | 12ms | 21ms | 12ms | 110ms + `1B` | 10ms | 18ms | 10ms | 92ms + `1C` | 8ms | 14ms | 8ms | 74ms + `1D` | 6ms | 11ms | 6ms | 55ms + `1E` | 4ms | 7ms | 4ms | 37ms + `1F` | 2ms | 3.5ms | 2ms | 18ms reference: [Super Famicom Development Wiki](https://wiki.superfamicom.org/spc700-reference#dsp-voice-register:-gain-1156)