C700 vs. SNESMOD: Which option should I choose?

After extensive use of both and seeing others use both, my verdict is that C700 should be your go-to method unless you are a die-hard .it tracker person or creating music for use in an actual SNES game.

C700 can be used with any music-making software that supports VSTs and MIDI, produces higher quality sound, and has fewer audio glitches to deal with. Its ability to export to ROM (.smc) allows for more sample and song space than would be possible for .spc.

However, if you're determined to work with the .it format, SNESMOD can get the job done, and a more recent fork of the tool adds an array of fine controls over SPC700 chip features which are comparable to C700's.

What do you mean C700 produces higher quality sound?

.spc (SNES chiptune) files contain three things:

  1. Song data (all the notes, their velocities, panning, volume, etc.)
  2. Samples used in the song
  3. Sound driver code

That third thing is very relevant to how your song will sound, as the sound driver determines how all that song data interfaces with the SPC700 soundchip. In this respect, not all tools are created equal. Despite improvements to SNESMOD, its sound is slightly less crisp, and it is very frequently plagued by unwanted "pop" or "click" sounds between notes. More on that in the SNESMOD section SNESMOD Tracking Tips.

C700 also "dynamically allocates" every note to one the 8 channels of the soundchip, meaning it tries its best to avoid the SNES's polyphony restrictions (8 sounds at once) by separating the notes out across different channels to let them ring. Depending on the arrangement of your song, this may naturally result in a fuller sound as well.

Additionally, C700 comes with an option to "preemphasize" samples (enabled by default) to counteract the global Gaussian filter applied to the SNES's audio (which dulls the sound slightly). This, too, allows for crisper sound in C700 by comparison, though you yourself could perform preemphasis on your samples – a tool for this is even included with the modern SNESMOD fork.

Examples

Here are four versions of the same* song produced by these tools, two from each. (*To be fair, these are two different project files with slightly different settings and setup; the SNESMOD example is tracked in OpenMPT whereas the C700 example is sequenced in FL Studio. The samples and notes are the same, though.)

EXAMPLE 1: SNESMOD (properly tracked):

This one is about as good as you can get SNESMOD to sound (although the samples were not preemphasized). Though it's a little dry, it's mostly free from unwanted pops and crackles. You can hear a bit of that between 0:12 and 0:19, though, as well as at 0:26.

EXAMPLE 2: SNESMOD (improperly tracked):

This example showcases SNESMOD's glaring "pop noise" issue, which most frequently occurs when new notes trigger in a channel where a previous note was playing. We'll cover in detail how to manage this issue in the SNESMOD section using the SCx .it command (Note Cut after x Ticks). In this example, I removed all the SCx commands in my song.

EXAMPLE 3: C700 (no echo or sample preemphasis):

In this example, echo delay was disabled and preemphasis was turned off, to showcase the raw sound for comparison. Even without preemphasis the sound is substantially cleaner and brighter.

EXAMPLE 4: C700 (full):

The final version of the song, with preemphasis enabled and echo delay back on (notably a higher echo setting than the SNESMOD examples used, meaning it sounds more reverberous).

So wait, you said C700 has disadvantages too.

Yep. Data efficiency. Let's talk about data, storage, and filesize for a second! The SNES's soundchip has 64KB of RAM for audio purposes, which in practice refers to the aforementioned song data, the samples used in the song, and a variable amount of space used for the SNES's built-in echo delay system (the amount depends on how long of a delay value you choose). All of that has to add up to 64KB or less, else you will meet an overflow error.

This is a crucial point in which C700 and SNESMOD differ: C700 is a recorder, while SNESMOD is a converter. C700 simply records MIDI data played through it, and MIDI data adds up fast. Every step of every pitch bend, every vibrato and portamento, every panning and volume change – all of that is data that C700 will be recording, and in practice this means you have to be very careful with automation and MIDI event data. C700 is an order of magnitude less efficient than SNESMOD, whose simple tracker data will instead just say "I want a vibrato of speed X and depth Y, please."

However, C700 has one more ace up its sleeve: SNES ROM (.smc) output! If you're okay with exporting to a filetype other than .spc, the need to be careful with MIDI event data is heavily diminished. With .smc output, the song data is offloaded to the ROM, leaving you with the ability to nearly fill your allotted 64KB of RAM with just samples + the variable amount required for using the echo delay feature. I highly recommend this method for that reason alone. Not only does C700 make up for its inefficiency this way, but you have way more room for samples than you would using any other method. And who doesn't want to push boundaries?

One thing to note: Due to C700's inefficiency with data, it is not a recommended choice if you intend to create music for use in an actual SNES game.