- Frequency Modulation
- Additional Infos
- See Also
.SPC is the SNES' sound playback format, being that it is a direct dump of the engine in use and the loaded up song data. The name SPC refers to the Sony SPC700, the SNES' sound processing chip. The system is capable of 8 channels of sampled sound, a built-in echo system with up to 224ms of delay, a FIR filter with 8 coefficients, a 32KHz noise clock, Pitch Modulation and ADSR envelopes, with a 32KHz playback rate.
An interesting quirk about the SPC700 is that it has a 64kb Audio RAM (ARAM) limit, which will need to house everything. This includes your engine, sequence data, samples and echo delay. The SNES echo delay increments in jumps of 16ms, with the maximum being at 224ms (0x0F). Every jump subtracts 0x800 bytes (2kb) from the ARAM. This means that 0x0F delay will eat up 30kb, which is almost half of the ARAM.
Samples on the SNES need to have their loop points in multiples of 16, where the loop end is also the end of the sample (so you can't have tails left after your loops). The SNES also has a built-in Gauss filter which can not be turned off. This filter is in place to keep the highs and lows of samples in control, so plan around that.
The noise clock has 32 set values for you to pick from, with the highest speed being 32KHz. Unlike the NES, it has no periodic noise, only white noise. It is also really loud, so keep it in control as best as you can.
Frequency Modulation is an interesting feature on the SNES. It can take whatever is on the first channel and blend it into the next one, and mixes it together based on pitch and ADSR/GAIN envelope. It can only act as a "2-op" modulator, since the effects of the first combination do not carry on to a third channel with it enabled. Virtually anything can be mixed with anything, but often times it produces distortion or awfully detuned combinations.
There's two types of envelopes on the SNES, ADSR and GAIN, where GAIN has 5 different sub-types that allow for manual envelope writing. ADSR has one strange quirk, because the Sustain doesn't actually sustain unless the Release is set to be zero, otherwise it will just go straight into release. the format for ADSR is Attack (0x00-0x0F), Decay (0x00-0x07), Sustain (0x00-0x07) and Release (0x00-0x1F). As for GAIN, you get five different types as mentioned earlier: Direct (0x00-0x7F), Decay (0x80-0x9F), Exponential Decay (0xA0-0xBF), Increase (0xC0-0xDF) and Bent Line Increase (0xE0-0xFF). Direct will immediately set the envelope to the given value and sustains on that. Normal and Exponential Decay need to be triggered in the middle of your note, or else the note will not sound at all. Normal and Bent Line Increase can be used at any point, and it's noteworthy that ADSR and GAIN can work together.
A few final quirks and limits to note about the SNES:
* Pitch stops at 0x3FFF, and then wraps around.
* Samplerates are relative to the maximum pitch rate, so choose the base pitch of your sample wisely.
* Volume ranges are 0x00-0x7F and 0xFF-0x80, the latter is for surround sound on all volume controls.
* Echo and Master volume are relative to eachother. Hard to explain, just mess around with it!
- mukunda's conversion tool which converts 8 channels or less xm modules to spc (with instructions) (click here if the other xmsnes link isn't working, it's a direct download)
- mukunda's conversion tool which converts 8 channels or less .it modules to spc
- MML-based Super Mario World music editor made by Kipernal. Supports BRR, echo, gain and ADSR envelopes.
- an up & coming tracker for SNES.
SNES SPC700 Player
, AKA SPCPlay – considered the best tool for SPC playback.
Want to listen music ripped from the console’s games? check out the ripped chiptune repository!;
- Complete list of ripped chiptunes repositories