## XM Effects Comprehensive Help

Abbreviations: ST means SoundTracker, FT2 — Fasttracker V.2.

FT2 (and hence ST) has a separate track column for effects. Some widely-used effects can also be implemented using volume column.

### Effects placed in the effects column

The effects in FT2 (and also ST) are being written in three fields: first (number or letter) means effect type, second and third — effect parameter(s). Effects may have one parameter with the byte lenght or two with nibble lengths. In this table the first case is denoted as "xx" after the effect type, the second — as "xy". For instance, 1xx is the one-parameter effect, and 0xy — two-parameters one.

Mnemonic | Name | Parameter(s) | Description | Comments
Standard FT2 effects
0xy | Arpegio | 1st halftone, 2nd halftone | First tick the note is played, the next tick — note + x halftones, the next tick — note + y halftones, then repeat from the beguinning. For instance: C-1 037: first is played C1, then C1 + 3 ht = Eb1, then — C1 + 7 ht = G1 and then again C1 and so on... |
1xx/2xx* | Portamento up/down | Speed | This command is used to slide the sample pitch up or down. This is done using the speed value. If Amiga frequence table is used, the sliding will be non-linear (the speed depends on the frequency). | Actually sliding (really tone stepping) is being performed at every tick since command is active. So the final tone depends on the "Speed" parameter. This is true for all slide/portamento commands.
3xx* | Tone portanemto | Speed | This command is used together with a note, and will slide to its frequency. If glissando mode is set (by E3x command), the frequency will be rounded to the nearest halftone | ST has some quirk here: the tone stepping is performed at every tick except first. So if we use two successive 3xx command, during the first tick of the second line we'll obtain the same tone as at the last tick of the previous line (no stepping when line is changing). So there will be no time-linear portamento, alas :( But this isn't notable at normal BPM.
4xy* | Vibrato | Rate, depth | Adds (frequency) vibrato to the channel with a specified rate and speed. Set vibrato mode command (E4x) can be used to change the vibrato waveform (see below). |
5xy* | Tone portamento + volume slide | Up speed, down speed (see volume slide (Axy)) | This command execute both tone portamento and volume slide. The speed is used for the volume slide. | The tone portamento speed is being taken from the previous appearance of the tone portamento (3xx) effect.
6xy* | Vibrato + volume slide | Up speed, down speed (see volume slide (Axy)) | This command execute both tone portamento and volume slide. The speed is used for the volume slide. | See comment for 5xy.
7xy* | Tremolo | Rate, depth | The same like vibrato (4xy) but affects the sound amplitude rather then the frequency. |
8xy | Set panning position | Position | 0x00 — leftmost, 0xff — rightmost. |
9xx | Sample offset | Offset | This command should be used together with a note. The sample will be played from (offset * 0x100) instead of zero. |
Axy* | Volume slide | Up speed, down speed | Slides the current volume up or down. Either up speed or down speed should be zero |
Bxx | Position jump | Position | This command will cause jump to the selected song postion and play pattern from the beginning |
Cxx | Set volume | Volume | Sets the current volume of the track where the command is, just like volume column. The volume should not be greater than 0x40 |
Dxx | Pattern break | Pattern position | This command will cause jump to the next pattern and play from the selected position |
E0x | Set filter mode (Amiga only) | Mode | I don't have Amiga so I can say nothing about how this command works. |
E1x/E2x* | Fine portamento up/down | Speed | This command works as portamento up/down, but the sliding occurs only one time per line. |
E3x | Set glissando mode | Mode | If mode = 1, the resulting frequency after implementing this command will be rounded to the nearest halftone. |
E4x | Set vibrato mode | Mode | Mode: 0 — sine, 1 — ramp down, 2 — square. If you add 4 to the mode, the waveform will not be retrigged when a new instrument is played |
E5x | Set fine-tune | Tune | This command should be used together with a note. It will cause another fine-tune value to be used. |
E6x | Pattern loop | Count | If count is zero, the beginning of the loop will be specified. When a non-zero value is used, the pattern will be looped from a loop start by a given number of times. |
E7x | Set tremolo mode | Mode | See E4x (set vibrato control), but for the tremolo waveform. |
E9x | Retrig note | Interval | Retrigs note with the specified interval. | Realization of this command in ST (v. <= 0.6.8) has a bug: effect is not working when BPM / 53 < Interval, the effect is not working.
EAx/EBx* | Fine volume slide up/down | Speed | This command works as usual volume slide up/down, but the sliding occurs only one time per line. |
ECx | Note cut | Tick | Cut the note at the specified tick. Note that it will only set the volume to zero, and the sample will still be played. | EC0 combination doesn't work in ST. But hopefully its rather useless, 'cause it can be replaced by simply setting volume to zero.
EDx | Note delay | Ticks | This command will delay the note by the selected number of ticks. |
EEx | Pattern delay | Lines | This command will delay pattern by the selected number of tracker lines | Realization of this command in ST is extremly buggy. The delay produced by it is right, but: 1) just before the pause, in the place where this command is met, the note in the track where the command is, is played nevertheless; 2) other notes placed in the same line as EEx command will not be played after the pause left.
Fxx | Set speed | Speed or BPM | This command will set the speed or BPM value of the song. If value is less than 0x20, the speed will be changed. Othervise, the BPM value will be changed. |
Gxx | Set glibal volume | Volume | Sets the global volume. The value should not exceed 0x40. | In ST valuse greater than 0x40 work as they would be equal to 0x40.
Hxy* | Global volume slide | Up speed, down speed | Works exactly as volume slide, but it slides the global volume instead. |
Lxx | Set envelope position | Position | Changes the envelope position (measured in ticks, as in the instrument editor). |
Pxy | Panning slide | Right speed, left speed | Slides the panning position. Works like the volume slide. |
Rxy* | Extended retrig | Volume change, interval | This is an extended version of the retrig command. Volume is changed according to the following table:
0 | None |  | 8 | Unused
1 | -1 |  | 9 | +1
2 | -2 |  | A | +2
3 | -4 |  | B | +4
4 | -8 |  | C | +8
5 | -16 |  | D | +16
6 | *2/3 |  | E | *3/2
7 | *1/2 |  | F | *2
| Realization of this effect in FT2 has the bug: the first repeat is appeared not after at the tick set by interval, but at the interval - 1 tick (and then the note is played at 2 * interval - 1, 3 * interval - 1 tick and so on. ST realization of this effect has the same bug as E9x effect, so it's hardly to trace, whether its behavior copies that of FT2 or not.
Txy | Tremor | On time, off time | This effect will set the volume to zero during off time number of ticks, and then restore the volume back during ofn time number of ticks. |
X1x/X2x* | Extra fine portamento up/down | Speed | Works like fine portamento up/down, but the speed will be divided by four. |
Extended effects (ST only)
Zxx | LP filter cutoff | Frequency | This will set the cutoff frequency of the lowpass filter. | To switch off the filter, you must use Zff and Q00.
Qxx | LP filter quality | Quality | This will set the quality (resonance) of the lowpass filter.

Notes:
* If the data byte is zero, the last nonzero byte for the command will be used.

### Effects in the volume column

"x" in the name column means parameter.

Volume | Name | Analogic effect in the effect column
0x | Nothing | —
10 - 50 | Set volume Value - 0x10 | —
6x | Volume slide down | A0x
7x | Volume slide up | Ax0
8x | Fine volume slide down | EBx
9x | Fine volume slide up | EAx
ax | Set vibrato speed | One half of 4xy
bx | Vibrato, the parameter is the depth. | Second half of 4xy
cx | Set panning | 8x0
dx | Panning slide left | P0x
ex | Panning slide right | Px0
fx | Tone porta | 3x0

### Some more XM features

XM format also contains some features which are actually not effects, but often cause misunderstanding. First, one should remember that each pattern line is divided into some ticks. The number of ticks per line is set by "Speed" parameter. The number of processed ticks per second is determined by "BPM" parameter according to the formula: ticks per second = BPM * 2 / 5.

In the instrument editor: One time unit in the volume envelope is equal to one tick. The "Fadeout" parameter determines the time of the sound decay after the key will be released. ST has the following strangeness here: in the editing mode the fadeout is implemented independently on the volume envelope. But while the module playing the fadeout acts only if the volume envelope is turned on.

Frequency table: if the linear table is selected, the frequency shift will be performed at the constant speed independently on the current frequency.

This document is composed using xm.txt file, FT2 embedded help, ST cheat sheet and my own experience.

(C) Yury Aliaev 2006. Distributed under the terms of GNU FDL.