

- #GOATTRACKER INSTRUMENT TABLES UPDATE#
- #GOATTRACKER INSTRUMENT TABLES DRIVER#
- #GOATTRACKER INSTRUMENT TABLES PATCH#
- #GOATTRACKER INSTRUMENT TABLES FULL#
That way only the sound design of the 4th channel needs to be done in code, that seems a good enough trade-off. But we'll be able to write the music and use dummy instruments for the 4th channel to create the structure. Without rewriting a bunch of the editor we won't be able to hear our music in exactly the same way it sounds on the machine. Working this way there are going to be some compromises on the composing side though. (though in my song this is only used in the fast bass sections) I also do a check to see if the note is a 'rest' command, and disable the 4th channel in that case. I could get 4 octaves of useful pitch directly, and then this could be doubled by stepping through the $d417 changes at double the speed. I have a table of timer speeds matched to the frequencies that would be sent to the SID pitches and set our timer to the relevant one. The first three channels write the SID data directly, but the 4th one reads the currently played note number from inside Goat Tracker's driver.
#GOATTRACKER INSTRUMENT TABLES DRIVER#
Any filter writes in GoatTracker's driver are ignored too as we're controlling the filter directly from our code. From there I can write back the first 3 channels to the SID and use the information being sent to the 4th channel to control our generated channel instead.
#GOATTRACKER INSTRUMENT TABLES PATCH#
I wrote some code to take the exported song and patch it at runtime, so all writes to the sidchips are sent to a different part of memory instead. Well most music editors only use 3 channels so that's not good, but what about the ones that can use multiple SIDs? I opted to use GoatTracker Stereo as the editor, with the '4th' channel in there being used to control our generated sound. I opted to use an existing music editor (because there's no point re-inventing the wheel on the SID channel side) and look for a way to put some control data in that I could read from my code. So now we have the timer system in place, we need a friendly way to control it while writing our music. The border colours show which bits in $d417 are being set. You're also able to run the loop alongside a normal frame-based music engine so it can be controlled from a constant beat source, like any other music channel.
#GOATTRACKER INSTRUMENT TABLES UPDATE#
This is nearly the same as running it in the infinite loop but the update speed of the loop can be controlled from a timer, and hence it's pitch can be controlled. My next task was to get the sound under control by setting up a timer system. So it was kind of like generating a square wave sample but playing it through the filter. By adding some delay into the loop the pitch lowered, as the toggle is being updated at a slower rate. (so it's running as fast as the CPU can manage) This produced a high-pitched whirr, which showed there was maybe something useful.
#GOATTRACKER INSTRUMENT TABLES FULL#
To test out the extra channel I first made an infinite loop that would rapidly toggle the channel allocation between full and zero without waiting for a frame to pass. The question then becomes, does allocating a channel to the filter create enough of an audible change that it's useful?Īs with playing samples, sound generation is a cpu-intensive process because you have to send rapid updates to a sound buffer. On/Off states are good in sound because they can be used as a basic oscillator for audio. While writing up Patchwork's fx list I was thinking that the filter allocation ($d417) is an on/off state on each channel. The 4th channel idea actually came out of writing the previous article on here. I need some tech idea within the limits of the competition, but without having to suddenly learn a great deal of sid craft in a couple of weeks. Plus as it's on CSDB you know the standard is going to be super high and my instrument design skills aren't on any kind of parity with those other guys.

So I thought it'd be nice to contribute something, but if I just load up GoatTracker and start making a track I know I won't come up with anything.
