Learning GoatTracker, 2: Patterns and instruments 20090710

In Impulse Tracker you only have a tune which is split in several patterns. These patterns are arranged in a sequence in the order list and that’s it. On the other hand, Goat Tracker allows you to split your tune in several subtunes. Each one has its own order list.

Moreover, each element of the order list in GT specifies which pattern is going to be used in each channel. This is done for saving space, and for flexibility.

There are special commands which can be entered in the order list and allow us to transpose or repeat the following patterns. But I think this is kind of too advanced for now :)

The patterns

And there’s also the usual cut-off/fade style commands which can be entered in place of notes:

… Rest

—- Key off (clear gatebit mask)

+++ Key on (set gatebit mask)

although I still don’t know what is the gatebit mask, but I’ll find it eventually.

The available commands are familiar too: portamento up/down, toneportamento (the usual glide or portamento to note), vibrato, and then some new ones for modifying several parameters of the active instrument. Some are intuitive at this point (changing filter cutoff, resonance…) whereas others (set wavetable pointer, for example) are not.

Master volume and tempo can also be changed using commands, so we are able to fade out songs and make swingy music with groove if needed ;-)

Instruments

To understand how they work I guess it’s best to think of an instrument as if it was a synthetiser. GoatTracker does not use samples, instead it gives you a number of parameters that you can configure in order to get some sound from the instruments. So you get familiar parameters such as Attack, decay, sustain and release and then more references to those strange tables (wave, pulse and filter tables). Minigotcha here: since the Attack/Decay and Sustain/Release parameters are somehow linked, their values are specified at the same time, one char for each. For example in the Attack/Decay column, a value of 34 means 3 for Attack and 4 for Delay. Same for SR.

You might know it already but I think it’s important to stress this, and the readme.txt agrees with me on that: ADSR settings are crucial to getting any sound at all. So let’s set some values which might produce sound!

In the pattern, enter some random notes. Then move to the instrument editor (press TAB repeatedly until you get there, or click over the Attack/Decay value column to place the focus there). And set A/D to be 22 and S/R to be FF. If you press F1 now (to play the song) you’ll heard absolutely nothing though, because guess what… we haven’t edited the (in)famous tables yet!

The tables

Readme.txt says it better than me:

Tables control the execution of instruments’ waveform/arpeggio changes, pulse modulation, and filter modulation. All the tables are controlled by the left side bytes, while the right side byte specifies additional parameters

After having a quick glance at the wave table reference, let’s do a little trick to see if we understood how things work:

In Wavetable Pos, enter ‘01’ (because if using ‘00’ the wave table is not used, and that’s bad, because we don’t get any sound).

Now in the first row (‘step 1’ in their words) of the wave table, enter ‘10’ in the left column. According to the reference, values from 10 to DF specify waveform values in this column. If you press F1 now (or if you hadn’t stopped the song with F4 before) you’ll finally hear something!YEAH!!

You can enter more values in that first row and hear the different waves that are output. There’s a list in the readme. But basically 10 = Triangle, 20 = Sawtooth, 40 = Pulse, 80 = Noise.

There’s also some reference to ring modulation using another channel and etc. Ignored by now.

These sounds are very basic and nothing more than a pure wave being played. For building richer sounds we need to get serious with the wave table. It will even allow us to create chippy arpeggios! There are some examples in the reference, such as:

Sawtooth waveform on note’s original pitch

01: 21 00

02: FF 00

This one is very similar to the one we had until now, with the difference that it has the FF in step 2 which I didn’t add before. Its purpose is to tell the player to stop iterating through the wavetable.

A snaredrum sound, using all absolute notes so that it does not depend on which note it’s played

I’ll add some explanation for each row to make sure I understand how this works :)

02: 41 AA: 41 = use a pulse waveform, AA = some note in a lower pitch (AA is in the 81-DF range)

03: 41 A4: 41 = use pulse waveform, in an even lower pitch note

04: 80 D4: 80 = noise waveform, D4 = C-7

05: 80 D1: 80 = noise waveform, D1 = A-6

06: FF 00: stop playing the wavetable

So why should we use the FF command on the left column? It’s very simple: because the wavetable is shared by all the instruments. That’s why each instrument has a Wavetable Pos parameter so we can select at which point in the table do we want them to start playing, and also why we need to specify when do they need to stop too, or they will just traverse the full table.

I still haven’t investigated how the other tables work, but I’m 99.99% sure they work exactly the same way.

Comments

20090829 jy

First thanks for the tutorial. Not so easy to understand but thanks to you, at least i got sound now. :-)
There's one thing i don't get. I'm try to set a "key off" command, but each time i press the "-" key on my keybord, it's just display the previous instrument parameters. How can i actually write this caracter in the pattern table ?
thanks a lot again
jy

20090829 sole

hi!
you're welcome :-)
Regarding your question, I don't know why does it happen. I have been trying to enter those commands myself but I couldn't get any results. By the way, the --- and +++ are meant to be entered in the pattern themselves, not in the tables. But yeah, it just cycles between the instruments.
I'm not sure, will have to check that other day because I'm not using GoatTracker too much now.

20090930 eric

Thank you for this tutorial. It was really useful because I didn't understand well the concept of wavetable.
About the question, for key off you musn't use - but the return key:
RETURN (also CAPSLOCK) Insert keyoff
SHIFT+RET. Insert keyon
BACKSPACE Insert rest

20090930 sole

jeez the comments here are sortered in a very strange order... anyway! Eric, thanks for the comments! You are right, keyoff is inserted with return. I tried with caps lock but it didn't work on my computer. Not sure if it's something with me using an Alu keyboard, and Linux not liking it or who knows... BIG THANKS :D

20091207 sdka

Thx for this tutorial. I started working with the original goattracker manuel and a tutorial released in this year. But I don t get it. I really don t understand it.

20091210 sole

You're welcome!
Hopefully I'll get back to this and keep adding more parts to the "tutorial".

20110103 digger

Getting back to compose for C64 is my new 20II resolution. Just found your post – great stuff, thanks for sharing Sole!

20120405 tito

Ok. Now you could do a tutorial for dummies like me XD I spent many time to edit an instrument... but can't edit anything... then I figure out that you can't edit instrument 00 LOL...