7 hours ago, JimmyDansbo said:
Looks great, please keep us posted on your updates. I am hoping that following along here will help me actually learn to use a tracker ?
You can use Deflemask today if you want to write music for the FM2151 chip. It's a "FastTracker" style tracker of which many modern trackers seem to be though mine is shaping up to be a bit more like ScreamTracker/ImpusleTracker. The difference are mostly in how you manage the UI. I will probably have several configuration screens access from the F-keys whereas the FastTracker derived trackers tend to try and cram everything into fewer screens with more mouse and keyboard shortcuts. They are probably more efficient but I found ImpulseTracker a bit more intuitive.
The other major difference is I will be using a single pattern for all channels. Deflemask, FamiTracker (for makin NES musics), and Renoise (a modern fully featured tracker) all have patterns split out by channels.
That probably doesn't make much sense if you've never used a tracker
? At it's core, a tracker is sort of light a piano roll in a player piano. A pattern is comprised of notes, volume, and effects for each channels. Channels go across, notes go downward. So an example:
00 C-4 01 3F 0A37
01 ... .. .. ....
02 C-4 02 3F 0A47
03 ... .. .. ....
04 D#4 01 3F 0D05
...
Not a very musical example but good enough for explanation. The far left column is the row number. Next column is the note, then the instrument, volume, and effects. So here I'm playing note C, octave 4 with instrument 01 at full volume (3F) and using an arpeggio (0A) which results in a C-minor chord (3 and 7 are semitones). Row 01 is a rest. 02 I'm now playing a major chord but this time with instrument 2. 03 is again a rest and 04 is playing a D# back to instrument 1 at full volume but using a volume slide down as the effect. The effect numbers are arbitrary here - on CommandTracker '00' might be the arp effect or what have you and I may map these to letters rather than hex values - I'm not sure about that yet as I plan on having macros as part of the effects (that is how I plan on solving the ability to potentially have more than one effect).
Effects modify but channel and global things. You can use an effect to change the song speed, end the pattern (for if you are doing a fill for instance and only need 2 bars instead of 4), add a note slide, use portamento, arpeggio (as noted above), change instrument parameters (in the case of the PSG, pulse-width for example) and, as teased up above, macros (something I think AdlibTracker uses) for being able to define multiple effects (maybe
? - I don't quite know how I'll handle macros yet).
Instruments are where you define default parameters and optionally further automation. In the case of the x16, PSG instruments would define the waveform, PWM, default panning and volume, and very likely various automation envelopes. See Concerto for a great example of how ADSR envelopes work. For FM, the instruments would configure the operators and set their defaults. Many of these parameters can then be modified in the patterns by way of effects.
A typical pattern length is 64 rows which I tend to think of as 4 bars worth of music (or one line across sheet music there-abouts). This sets up a sort of 4/4 time where the shortest note is a 16th note. However, patterns do not have to be 64 rows so you can use other time signatures (6/8 time for instance, which usually involves 48 or 96 row patterns). Likewise, you can run the song much faster to get effectively higher precision if you want, say, 32nd or 64th notes. You can also use a note-delay effect to do things like trills or compose a very fluid sort of melody.
64 rows doesn't make much of a song so the next concept is the order list. The order list is just a list of patterns to comprise the song. Patterns can repeat in the order list. An example of an order list might be something like:
00: 00
01: 02
02: 0F
03: 02
...
Some of the FastTracker derived trackers (such as Deflemask) have a per-channel order list as well where each channel has its own set of patterns. So if you want to repeat something on channel 1, but do something new on channel 2, you can do that with the orderlist. I find this concept efficient, in theory, but it can be super confusing and I find I can mess things up. For Command Tracker, I will be using a simple order list (like the above example) at least initially.
At it's core, that's all there is to a tracker. They are mostly a UI and storage construct at the core. Granted, I didn't go too far into effects or some higher level concepts, but that's basically the gist. I say "basically" but I guess I ended up writing a lot haha. Anyways hopefully it was helpful!