Pattern Effects

These are the new (0.70 and later) effects. Songs made with earlier versions of DreamTracker will be converted during loading.

Work is still being done to implement the listed effects which can be tracked by looking at the “Implemented” column of the effect lists.

To see proposed effects, take a look at this Google Doc

Pattern effects are used to modulate sounds in various ways and can be used in both patterns as well as (if/once supported) tables.

Effects have a byte parameter and a byte value. For instance 1234 would be effect 12 with a value of 34.

Effects are currently divided into 3 groups:

Shared Effects

Hex Effect Supported Persistent Implemented
00xx Pitch Slide Down PSG/FM/PCM No PSG/FM
01xx Pitch Slide Up PSG/FM/PCM No PSG/FM
02xx Pitch Sweep Down PSG/FM/PCM Yes PSG/FM
03xx Pitch Sweep Up PSG/FM/PCM Yes PSG/FM
04xx Volume Slide Down/Up PSG/FM/PCM No PSG
05xx Volume Sweep Down/Up PSG/FM Yes PSG
06xx Glissando (Glide) PSG/FM Yes PSG/FM
07-x Legato PSG/FM Yes PSG/FM
08xy Vibrato PSG/FM/PCM Yes PSG
09xy Tremolo PSG/FM/PCM Yes PSG
0Axy Arpeggio PSG/FM Yes PSG
0Bxy Arp Direction / Speed PSG/FM Yes PSG
0Cxx Panolo PSG/FM Yes No
0Dxx Volume PSG/FM/PCM Yes No
0E-x Pan PSG/FM Yes PSG
0Fxx Note Cut PSG/FM/PCM No No
10xx Note Delay PSG/FM/PCM No PSG/FM
11xx Channel Attenuation PSG/FM/PCM Yes PSG/FM
12– Reset Channel PSG/FM/PCM No PSG/FM
3Cxx Set Table Loop Mode PSG/FM Yes No
3Dxx Set Table Speed PSG/FM Yes No
3Exx Set Table PSG/FM Yes No
3Fxx Run Macro PSG/FM No No

Vibrato/Tremolo/Pulsolo (LFOs)

Vibrato, Tremolo, and Pulsolo all work slightly differently than in other trackers. You can think of it as a triangle ramp with x as length and y as depth. Unlike most other trackers, the lower the value of x, the faster the speed. The depth is actually how much to add or subtract from the root value.

Under the covers, x is the length of the ramp in one direction. When the effect is first enabled, the length counter is divided by 2 to make the effect more centered on the root. One each synth tick, the value of y is either added or subjected to the root depending on the ramp direction. The direction flips every-time the loop completes.

y
|      /\        /\
|     /  \      /  \
|    /    \    /    \
|   /      \  /      \
|  /        \/        \
+----------------------- x

This means x and y are somewhat coupled together.

The reason for this approach is it results in small and efficient code and allows the potential for other modifications to the LFOs in the future.

Vibrato and Pitch Shift Multiplier (PSG)

The PSG vibrato responds to the instrument/channel pitch speed multiplier. This can be used to great vibratos of a higher range than normal and even create some wild arcade style sound effects.

Legato

Continue automation while playing additional notes. For PSG, this means LFOs, envelopes, etc. all continue to run. For FM it skips the note-off before note-on.

Arp Direction / Speed

First value controls direction. If 0, arp goes up; if 1, arp goes down. Second value controls speed, higher values mean slower arp, behaving much like the song speed.

Pan

Set panning of the channel.

Channel Attenuation

Channel attenuation works a bit different when used as an effect vs in the volume column. The value specifies the amount of attenuation.

$00 is no attenuation and $3F would be max for PSG and $7F for FM

Unique Effects

VERA PSG

Note this list is not yet complete.

Hex Effect Persistent Implemented
40xx Frequency Word Low No Yes (1)
41xx Frequency Word High No Yes (1)
42xx Pan and Volume No Yes (1)
43xx Wave and Pulse No Yes (1)
44xx Wave Width Yes Yes
45xx Wave Slide No Yes
46xx Wave Sweep Down/Up Yes Yes
47xx Pulsolo/Wavolo Yes Yes
48x- Finetune Yes Yes
49xx Linear Finetune Yes Yes
4Axx Pitch Speed Multiplier Yes Yes
.... ......................
51xx Vol Env Speed Yes Yes
.... ......................
57xx Wave Env Speed Yes Yes
.... ......................
5Dxx Pitch Env Speed Yes Yes
  1. Effects $40-$43 are directly mapped to the VERA’s channel registers. At present due to how the synth engine works, they may not work as expected and it’s recommended to use other effects.

Finetune

Finetune is signed so 10-70 is finetune up, F0-80 is finetune down. At present, the second digit does not have an affect. Finetune triggers on the current note, if a note is provided with the effect; or the next note played.

Finetune is log, or rather is applied to the MIDI note/semitone prior to being converted to VERA pitch. This means the tuning will be (close to) the same across the note range.

Linear Finetune

Unlike the above, linear finetune is more precise as it operates directly on the VERA pitch registers. Unlike regular finetune, however, the tuning will change with pitch though it supports a wider range than finetune.

Linear finetune is applied after normal finetune so it’s possible to use both finetunes at the same time if desired.

Pitch Speed Multiplier

This sets the pitch speed multiplier for the channel and works the same way as the pitch speed multiplier of a PSG instrument. It changes the speed of sweeps, glide and vibrato are evaluated it.

The value is how many left-shifts to move the given values.

Envelope Speeds

The envelope speed settings work much like the song speed (in vsync mode). Higher speed values mean a long delay before evaluating the next envelope value.

VERA Volume Column Effects

Since the volume range of the VERA is 00-3F, the upper values can be used for other things, such as panning, changing the wave or setting the PWM.

Range Function
00-3F Volume
40-7F Channel Attenuation
80-BF Set PWM
C0 Pan Center
C1 Pan Left
C2 Pan Right
C3 Set Wave to Pulse
C4 Set Wave to Saw
C5 Set Wave to Tri
C6 Set Wave to Noise

The range 40-7F is used to set attenuation. This value is subtracted from the channel volume before it is written out to the VERA. This can be extremely useful if wanting to, for example, use multiple channels to simulate delay. The attenuation is always applied to the volume and is global to the channel.

FM (YM2151)

Effects $40-57 are directly mapped to the YM2151’s channel registers. Some effects may change multiple things. Consult Chapter 11 of the X16 Reference Docs for how these are organized. The DreamTracker website keeps a mirror of the reference docs in mkdocs format here.

Hex Effect Persistent Implemented
40xx M1 Fine Detune and Frequency Mult Yes Yes
41xx M2 Fine Detune and Frequency Mult Yes Yes
42xx C1 Fine Detune and Frequency Mult Yes Yes
43xx C2 Fine Detune and Frequency Mult Yes Yes
44xx M1 Volume Yes Yes
45xx M2 Volume Yes Yes
46xx C1 Volume Yes Yes
47xx C2 Volume Yes Yes
48xx M1 Key Scale and Attack Yes Yes
49xx M2 Key Scale and Attack Yes Yes
4Axx C1 Key Scale and Attack Yes Yes
4Bxx C2 Key Scale and Attack Yes Yes
4Cxx M1 AM Enable and Decay 1 Rate Yes Yes
4Dxx M2 AM Enable and Decay 1 Rate Yes Yes
4Exx C1 AM Enable and Decay 1 Rate Yes Yes
4Fxx C2 AM Enable and Decay 1 Rate Yes Yes
50xx M1 Coarse Detune and Decay 2 Rate Yes Yes
51xx M2 Coarse Detune and Decay 2 Rate Yes Yes
52xx C1 Coarse Detune and Decay 2 Rate Yes Yes
53xx C2 Coarse Detune and Decay 2 Rate Yes Yes
54xx M1 Sustain and Release Yes Yes
55xx M2 Sustain and Release Yes Yes
56xx C1 Sustain and Release Yes Yes
57xx C2 Sustain and Release Yes Yes
58xx Pan, Feedback and Algorithm Yes No
59xx Mod Sense (Vibrato/Tremolo) Yes No
5Axx LFO Waveform Yes Yes
5Bxx LFO Frequency Yes Yes
5Cxx LFO AM/PM Depth Yes Yes
5Dxx Ch. 7 Noise Control Yes Yes
5Exx Global To Operator Volume Yes No

FM Volume Column Effects

Since the volume range of the YM2151 is 00-7F, the remaining range will likely end up being used for channel attenuation. For now values above 80 don’t do anything (though it’s recommended not to use them as they will be allocated to something in the future).

Range Function
00-7F Volume

PCM

TBD

Global Effects

Hex Effect Persistent Implemented
C0– Stop Song No Yes
C1xx Song Speed No Yes
C2xx Pattern Break No Yes
C3xx Jump to Order No Yes
C4xx Jump to Row No No
C5xx Global Transpose No Yes
C6xx Set BPM (VIA Only) No No
C7xx Set Engine Speed (VIA/MIDI) No No
C8-r Change Background Red Value Yes No
C9gb Change Background G/B Value Yes No

Slides and Sweeps

Slides are single shot. That is to say, they run once when you put specify the effect for a channel. If you want the effect to fire multiple times, you have to specify it. This is by design because it allows for intentional coarse stair-step style sounds as well as slicer/stacatto, among other things.

Sweeps, however, are continual and run until they are turned off by specifying 00 (for example 0500). They also run at the same speed as the sound engine which means they are much smoother and faster. They can be thought of like a simple linear envelope in this way. If you want to make a kick-drum from a square-wave, you’ll want to use a sweep.

Some effects combine slide/sweet and direction in one command. This is because the VERA only supports volume and PWM from 00-3F. We can use the top bits to add more function. If that sounds complicated, don’t worry, just use the table below:

Range Function
00-3F Slide/Sweep Down
40-7F Slide/Sweep Up