Blog

Learning GoatTracker, 2: Patterns and instruments

Goattracker’s orders and patterns vs ‘normal’ trackers like Impulse Tracker

The patterns

The format is totally familiar: C-1 00 0 00 = Note name, Octave, Instrument number, Command and Databyte, which I assume is the command value.

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

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:

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 :)

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

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

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.

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

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

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.

sole

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

digger

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

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...

Got anything to say?

Your name
e-mail (optional)
Website (optional)