How to Use SNESMOD: Setting Up Your Module
In order to convert properly, several restrictions must be adhered to with your .it module.
General Requirements
- No more than 8 channels
- Instrument mode must be used. Important!
- No blank instruments (i.e. instruments with no samples assigned to them)
- Mono samples only, no stereo – if you have stereo samples you can mix them down to mono in OpenMPT via the right-click menu or default shortcut Shift+M
- Song Properties: "Old Effects" set to off, "Linear Frequency Slides" set to on
- If using OpenMPT 1.31 or newer: In Setup -> Advanced tab,
ITCompressionMono
set to 0 (this is because v1.31 changed the default value to 7, adding compression when saving modules that breaks SNESMOD)
Instrument Restrictions
Despite the requirement to use Instrument mode, many features of .it Instruments are not supported. With SNESMOD, the primary function of Instruments is just to set the ADSR volume envelope. Here are the restrictions:
- No filter or filter envelopes
- No panning envelopes or pitch envelopes
- Envelope sustain is possible, but must be confined to one node only (that is, the sustain can only be one static point)
- No envelope carry
- Envelope nodes (i.e. points) must be no more than 256 ticks apart (this is quite a lot though)
- No New Note Actions
- No sample maps with multiple samples
- No random pitch/panning variation, auto-vibrato (found in the Sample tab), or pitch/pan separation
Echo Delay
Echo Delay settings are set via Song Comments.
One of the quirkier parts of SNESMOD is that you place a bunch of values into the comments section of the .it module ("Song Message") in order to set up the echo delay. In OpenMPT, this is located in the rightmost tab "Comments", after Samples and Instruments. Since you will have to run the converter to hear how your delay sounds in the .spc song, setting this up may take some trial and error.
⚠️ Warning! ⚠️ Modifying the echo delay settings, particularly the feedback (EFB) and filter (EFIR), may create a feedback loop which can cause hearing damage. Be extremely careful with the volume, and be prepared to mute or stop the sound in the event you hear a feedback loop starting (identifiable by the echo getting louder over time).
The following is an example of a SNESMOD delay setup comment, which you may copy and paste into your own module's Song Message section:
[[SNESMOD]]
edl 6
efb 50
evol 31 -31
efir 127 0 0 0 0 0 0 0
eon 1 2 3
So what do those five commands mean? Let's dig in – if you already read about echo delay in C700, you will be familiar with these concepts.
EDL: Delay Time, 0 through 15. This number multiplied by 16 will tell you the number of milliseconds until the delay is heard. In our example, Delay Time is 96ms because we set edl 6
; the maximum value of 15 will produce a Delay Time of 240ms. Note, however, that additional memory is consumed at a rate of 2KB per +1 increase, meaning that the maximum value takes up 30KB of the available 64KB for your .spc.
EFB: Delay Feedback, -128 through 127. Be very careful with large values here, as you do not want to cause a feedback loop. This value determines the volume of sound to "feed back" into the delay to keep it going. In practice, the higher the value, the longer the delay will keep occurring. Negative values invert the phase of the waveform, slightly altering the sound.
EVOL: Echo Volume, -128 through 127 (up to 2 values). The left and right stereo may be controlled individually here. If only one value is given, it is applied to both left and right stereo equally. You could also set one positive and one negative value (as C700 defaults to), which creates a wider, pseudo-surround sound effect in stereo – though if you do this, the echo delay won't be heard at all if played back in mono. Regardless, this is a fairly straightforward effect controlling the overall volume of the echo delay. Higher values increase the echo volume, and negative values invert the phase of the waveform. In our example, the echo volume is set rather low (31 -31
), around 25%.
EFIR: Echo Filter Coefficients, -128 through 127 (up to 8 values). ⚠️ Be careful! It is very easy to create a feedback loop with this setting! Don't damage your hearing! ⚠️ This setting controls the filter applied to the echo delay, and the prominence of various frequencies within the delay. Up to 8 values can be input here (if fewer, the remainder will be assigned a value of 0). The collective functions of the values are rather arcane; the later values will be more likely to blow out the sound because each value is fed subsequently into the next via multiplication math. It is best not to use very many large values to avoid feedback loops. If the sum of all these values is very positive or very negative (above ~150 in either direction) it is more likely to cause a feedback loop. The given example 127 0 0 0 0 0 0 0
is a very open sound without reduced influence of any frequency range – it is the same as the C700 default.
EON: Enable echo for these channels, 1-8 (up to 8 values). The channels you list here will begin the song with echo delay enabled. In our example above, only channels 1-3 start with echo delay enabled. This can be modified within your song using the SNESMOD-specific effect commands S01
(echo on for channel) and S02
(echo off for channel). If you wanted to start your song with echo enabled in every channel, you would put eon 1 2 3 4 5 6 7 8
. Additionally, echo delay can be enabled/disabled globally using S03
/S04
respectively.