One of the most well-known composers for games on the Commodore 64 and Amiga, Chris Hűlsbeck, wrote his own music software for the Commodore 64. It was named 'Soundmonitor' and was released in October 1986. It had a programmer-style interface where you could edit a list of commands to create music.
This type of music software would be known as a 'tracker' and Soundmonitor would enable hundreds of implementations of the same core idea, particularly on the Commodore Amiga and the PC.
Chris Hűlsbeck was born in 1968 into a musical family, and he developed an interest in composing music. Using money he saved from his paper route, he bought one of the most exciting home computers of the early 1980s: the Commodore 64. A few years later, he was writing his own music software for his new machine. In 1986, the young Chris won first prize in a music contest in the German Commodore 64 magazine "64'er" with his composition 'Shades'.
'Shades' is a demonstration of power over the Commodore 64 sound hardware, as well as an effective piece of synth pop. The instruments of 'Shades' almost sound impossible to make on the limited hardware, including great use of the arpeggio effect, an effect that would become emblematic of European tracker music. 'Shades' was made using his own music software, Soundmonitor.
The same year he got his first job in the computer games industry with German developer Rainbow Arts. In 1986, Rainbow Arts released 'Madness', a single-screen platformer with a giant Pac-Man as an enemy sprite, and a soundtrack by the young Hűlsbeck. He would go on to create iconic soundtracks for games such as The Great Giana Sisters, Turrican, Battle Isle, X-Out, and Z-Out. He also composed soundtracks for the two first "Star Wars: Rogue Squadron" games for Nintendo 64 and GameCube, respectively.
After Soundmonitor, Hűlsbeck would continue to make his own music software. He started writing a new Commodore 64 music system which would be even more powerful than Soundmonitor, 'TFMX'. He would abstract the arpeggio concept into 'sound macros', a system for manipulating sound properties such as pitch, waveform, and amplitude each frame, conceptually similar to the concept of 'automation curves', known from modern software such as Ableton Live. He eventually reimplemented TFMX for the Amiga in 1989, famously used in Turrican II.
Later on, he would develop music systems for the Playstation, Nintendo 64, and Game Boy. However, this article is about Soundmonitor.
Soundmonitor was distributed to the German public in a printed hobby magazine. The magazine did not come with a floppy disk or a cassette tape, and the World Wide Web hadn't been invented yet. Despite this, the German Computer 64 enthusiasts still managed to get their hands on Soundmonitor. How was that possible?
Now, I want to ensure that all readers grasp how insane it is to distribute software in the medium of print magazines.
Imagine that you are a German Commodore 64 user, its October 1986, and you bought a copy of Markt & Technik's "64'er" supposedly containing new music software that promises: 'Musik wie noch nie'.
It's the 'Listing des Monats', which means that it's listed in the magazine. Mind you, it's not the source code for the software that's listed, but rather, a 5 page dump of 11 KB of machine code as hexadecimal numbers.
The magazine calls it a 'Mammut-Programmbeschreibung'.
So, looking forward to your new music software, you take your magazine home and enter these 11 KB of numbers manually into the memory of your Commodore 64.
That's 11591 two-digit hexadecimal numbers. Here is the first line:
0f 08 0a 00 9e 20 32 30
There are 1448 lines in total.
If you somehow manage to enter 1448 lines of machine code without any errors, you're in luck, you can save it to a diskette or cassette tape, and you have a new piece of software. If there's an error, you'll have to look through the listing and find it manually yourself.
People were more patient in the 1980s.
So, what was contained in these 11 KB? A new style of music software that was focused on power rather than usability, the first music tracker. Trackers would dominate game music production and the demoscene for over a decade. Also, since most tracker software would be freely distributed, trackers would be very popular among hobbyist composers.
Trackers are music sequencers designed as a thin layer on top of the audio hardware. They were created by hobbyist composer/programmers like Hűlsbeck or Karsten Obarski ('Ultimate Soundtracker'), or by demoscene coders. Many of them were distributed for free, and those that weren't, got pirated and distributed anyway. Such was the state of the European computer community of the 1980s and 1990s.
The demo group 'The Dutch USA-Team' would modify Soundmonitor to support samples and distribute it as their own 'Rock Monitor', even though it was clearly still Soundmonitor with a few added features. This trend would continue for all tracker software, especially Obarski's Ultimate Soundtracker for the Amiga, which would spawn a myriad of clones.
In a tracker, the composer works by editing lists of numbers, corresponding to notes and effects. Each list defines what is played on a track, often corresponding to a physical sound channel in the computer hardware.
Trackers were not designed for the mainstream user, in fact, the interfaces of most of them were downright hostile to all but the most dedicated users. The most glaring example is the use of hexadecimal (hex) numbers in all of the most well-known trackers.
For reference, here's the first 20:
Normal numbers 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 ... Hex numbers 0 1 2 3 4 5 6 7 8 9 A B C D E F 10 11 12 13 14 ...
Having to learn a new number system to be able to make music is a big ask. In effect, the primary user interface of a tracker is essentially a glorified hex editor. In many trackers, the hexadecimal number lists correspond to an area of memory, and when the composer is editing them, they are directly editing memory.
Soundmonitor is a prime example of this, you work directly in memory, and sound and effect parameters, arpeggios, and even transposition are displayed using hexadecimal numbers. To add insult to injury, negative numbers are written in two's complement representation.
For example, transposing two semitones down in Soundmonitor is accomplished by entering
FE in the transpose field. If you're not a programmer, this doesn't make a lot of sense, and I would dare to say that even a significant portion of present day programmers wouldn't know why this would be so.
For reference, here are some of the hexadecimal numbers with two's complement representation of negative numbers:
Normal numbers ... -8 -7 -6 -5 -4 -3 -2 -1 0 1 2 ... 8-bit hex numbers ... F8 F9 FA FB FC FD FE FF 0 1 2 ...
If you somehow manage to climb he steep learning curve and make some music, you can now listen to it in Soundmonitor, save it to disk or tape, or export it as a 'module', which contain all the track note lists, sound parameters, and all other data needed to play back your music. Most trackers supported playing sampled sounds as well, and modules from those trackers would contain all sample data as well.
To play back a module, you need a replayer routine, which basically is the tracker software without the graphical user interface. The replayer is usually a quite small piece of code that can easily be embedded into a game or a demo.
Trackers were usually designed for specific sound hardware, and Soundmonitor was designed for the Commodore 64, a home computer with a limmited, yet very capable sound chip.
The audio capabilities of the Commodore 64 were pretty advanced for a 1982 home computer, and quite a different beast than both its peers and what would come after. Similar to other computers from its time, the sound was generated by a synthesizer. In the late 1980s and forward, sounds were most often digitally prerecorded ('sampled') and played back with variations in pitch and amplitude, and some degree of post-processing, but sample-based hardware was exceedingly rare in the early 1980s, possibly due to memory being too limited to contain any useful amount of sampled sound.
The Commodore 64 had a synthesizer that could play 3 different sounds at once, referred to as 3 'sound channels', the MOS Technology 6581 SID (Sound Interface Device). It had 3 oscillators, and for each oscillator you could freely select a waveform: saw, triangle, pulse, or noise. Some of its contemporaries had more oscillators, but with fixed waveforms. An example of this is the Nintendo Entertainment System, which has 5 sound channels with fixed waveforms, 2 pulse waves, one triangle wave, one noise channel, and one for playing samples.
On the Commodore 64, each oscillator has an ADSR envelope. The SID also had a single resonant filter, selectable between low-pass, high-pass, or band-pass filtering. Interestingly, you could combine two channels to do ring modulation or synchronizing two oscillators. The SID was a very flexible sound architecture indeed.
The SID was designed by Robert Yannes in 1981. Yannes co-founded Ensoniq in 1982, the company known for samplers such as the ASR-10.
Early music software existed for the Commodore 64, such as the widely ported 'Will Harvey's Music Construction Set'. However, although this was a quite impressive piece of music software, it doesn't allow the user to fully access the audio hardware capabilities of the Commodore 64.
Pioneers of Commodore 64 music such as Rob Hubbard were forced to write their own music software to make full use of the hardware. Soundmonitor was one of the first of these tools that were distributed to the general public, specifically readers of the German "64'er" magazine.
As you will see, the audio hardware of the Commodore 64 is directly reflected in Soundmonitor.
Soundmonitor has 3 tracks, one per sound channel. At any given time, each of the 3 tracks are playing a 'bar'. Bars consist of a block of note data, each note having a pitch and an associated sound.
You can switch between different screens to modify each of these elements.
A sound is a patch for a single oscillator on the SID chip, and defines waveform, envelope, vibrato, portamento, as well as filter cutoff, resonance, and envelope. 24 parameters in total.
The sequence of bars is defined in the TRACK/STEP TABLE. It shows the 3 tracks side by side, each corresponding to a discrete oscillator in the SID chip.
Here is the format of a single track in the TRACK/STEP TABLE:
SP TRKx TR ST 00 0000 00 00 -- sound transpose | | | step | transpose | bar address
TRKx is a direct 16-bit memory address to the bar data, normally from
BE00 and up.
The TR field allows transposing the bar using two's complement notation as mention earlier. This allows reusing the same bar in different harmonic contexts, a useful feature on a computer with only 32 KB memory. Similarly, ST allows reusing bars where the sounds used in the bar are modified by offsetting the index of the instrument.
Bars are edited in the NOTE EDIT view. Here, notes or pauses are listed left-to-right, top-to-bottom.
be00 C-2 61 --- 00 C-3 02 --- 00 be08 --- 00 --- 00 --- 00 --- 00 be10 C-2 61 --- 00 --- 00 --- 00 be18 --- 00 --- 00 --- 00 --- 00 be20 C-2 61 --- 00 --- 00 --- 00 be28 --- 00 --- 00 --- 00 --- 00 be30 C-2 61 --- 00 --- 00 --- 00 be38 --- 00 --- 00 --- 00 --- 00
The hexadecimal numbers of the left are direct addresses of the note data in RAM (verifiable using a memory dump in an emulator). The bar is divided into what could be considered 32th notes listed from left-to-right, and then top-to-bottom. The leftmost column will then be the even eighths, each followed by 3 successive 32th notes.
This way of presenting notes is unique to Soundmonitor. It is interesting that it allows the composer to easily determine if a note is on beat or off beat depending on which column it appears in.
Each note has an associated instrument index and a single hexadecimal digit determining 4 sound options:
addr note be00 C-2 00 / \ / instrument / sound options: bit option 1 portamento 2 transpose disable 3 arpeggio 4 soundtranspose
Example note with sound options and instrument index:
C-2 61 | || +------- note: C2 || +|-- sound options: transpose disable | arpeggio (explained below) +-- instrument: 1
In the preceding example, we used sound options
transpose disable | arpeggio. This ends up as the value
bit option selected 1 portamento no 2 transpose disable yes 3 arpeggio yes 4 soundtranspose no bit : 4 3 2 1 sound options : 0 1 1 0 We specify options as a binary number 0110 which is = 6 (decimal)
AR/S (ARP / speed table)
The final view is AR/S DATA where you define tempo and arpeggios. It can change for each bar, allowing for tempo and harmonic changes
Arpeggios are rapid pitch changes emulating a chord using a single sound channel. They are arguably the defining sound element of Commodore 64 music.
An early example of arpeggios can be heard in Rob Hubbard's music for 'Monty on the Run' from 1985.
The contents of all these tables are stored together in a SONG.
I mentioned earlier that trackers are glorified hex editors. This couldn't be more true for Soundmonitor. In fact, the note editor is just showing whatever data is in the memory location entered in the track/step table, interpreted as notes. Soundmonitor uses the following memory layout:
We can see that addresses $3000 - $9FFF can be used for note data, as well as $B000 - $BDFF, and if my german serves me right, $BE00 is an empty bar.
What we can also see is that the Soundmonitor editor itself is located at $1000. So, I tried entering address
$1000 into the track/step table:
Then, we open the note data at
$1000, which looks like this:
Here, we are looking at Soundmonitor itself, represented as note data. I guess you could call this a form of introspection. Looking inside yourself is one thing, but editing the note data at
$1000 is editing Soundmonitor from within itself.
Perhaps the equivalent for a human composer would be to write notes into their own brain with a scalpel - most likely with fatal results. The computer brain of the Commodore 64 is no different in this aspect, and indeed, after editing the note data at
$1000, the program immediately crashes.
You can run Soundmonitor yourself on a modern PC using a Commodore 64 emulator such as VICE.
I run it using a BAT-file:
When Soundmonitor starts, I press
Shift+I and then
Y to initialize to a new song.
Some of the most important hotkeys are listed on the screen:
Play/stop : p Play from start : n Edit sound : z Edit notes : Enter (ret)
Here's a few more important hotkeys:
Load song : L$ <enter name> <CR> Init song : Shift+I Note delete : -