furnace/doc/7-systems/soundunit.md

57 lines
1.7 KiB
Markdown
Raw Normal View History

2022-06-30 10:31:10 +00:00
# tildearrow Sound Unit
2022-10-16 05:53:05 +00:00
a fantasy sound chip, used in the specs2 fantasy computer designed by tildearrow.
it has the following capabilities:
- 8 channels of either waveform or sample
- stereo sound
- 8 waveforms (pulse, saw, sine, triangle, noise, periodic noise, XOR sine and XOR triangle)
- 128 widths for the pulse wave
- per-channel resonant filter
- ring modulation
- volume, frequency and cutoff sweep units (per-channel)
- phase reset timer (per-channel)
2022-07-01 06:11:51 +00:00
# effects
- **`10xx`**: set waveform
2022-06-29 11:44:36 +00:00
- 0: pulse wave
- 1: sawtooth
- 2: sine wave
- 3: triangle wave
- 4: noise
- 5: periodic noise
2022-06-30 10:31:10 +00:00
- 6: XOR sine
- 7: XOR triangle
- **`12xx`**: set pulse width (0 to 7F)
- **`13xx`**: set resonance of filter (0 to FF)
2022-06-29 11:44:36 +00:00
- despite what the internal effects list says (0 to F), you can use a resonance value from 0 to FF (255)
- **`14xx`**: set filter mode and ringmod
2022-06-29 11:44:36 +00:00
- bit 0: ring mod
- bit 1: low pass
- bit 2: high pass
- bit 3: band pass
- **`15xx`**: set frequency sweep period low byte
- **`16xx`**: set frequency sweep period high byte
- **`17xx`**: set volume sweep period low byte
- **`18xx`**: set volume sweep period high byte
- **`19xx`**: set cutoff sweep period low byte
- **`1Axx`**: set cutoff sweep period high byte
- **`1Bxx`**: set frequency sweep boundary
- **`1Cxx`**: set volume sweep boundary
- **`1Dxx`**: set cutoff sweep boundary
- **`1Exx`**: set phase reset period low byte
- **`1Fxx`**: set phase reset period high byte
- **`20xx`**: toggle frequency sweep
2022-06-29 11:44:36 +00:00
- bit 0-6: speed
- bit 7: up direction
- **`21xx`**: toggle volume sweep
2022-06-29 11:44:36 +00:00
- bit 0-4: speed
- bit 5: up direction
- bit 6: loop
- bit 7: alternate
- **`22xx`**: toggle cutoff sweep
2022-06-29 11:44:36 +00:00
- bit 0-6: speed
- bit 7: up direction
- **`4xxx`**: set cutoff (0 to FFF)