Reverse Engineering VLM-1 Triggers
Scott Lawrence
December 2009
0. Table Of Contents
enable javascript to see the table of contents
1. History

In 1993, Atari released the Jaguar home console system. In 1995, they released a CD-ROM add-on for it, with a built-in visualizer called the Virtual Light Machine, or VLM-1 created by Llamasoft's Jeff Minter. You drop your music CDs into the toilet-bowl shaped top-loading CD-ROM drive, and let it add trippy visuals to your music. [1]

Within the VLM-1, was an easter egg that let you get in to see the triggering, then from there, it was a quick hop, skip and a jump into the "real menu" which let you edit the effects stacks.

Around this time, I had gotten into doing graphics visualizations and the like. Rob and I decided to make a "demo" in the style of many demos before it. It ended up that we never actually followed through, but we did have a nice little platform, onto which we could try various graphics hacks and ideas we wanted to try out. We were playing Tempest 2000 and the VLM-1 a lot at this time, and were highly influenced and encouraged by it. It made us think, "this looks great... how does Jeff do it?" [2]

Soon, I had a video feedback system added in to "The Demo", which consisted of: "take the previous frame, do something with it", "draw out the next frame over that". It was really simple, but it worked great. The "do something" bit is where it got interesting. We could slide it up a bit, darken it, blur it, and so on. If I had added scaling and rotations, it would have been a complete analog to the VLM-1 video feedback. I called ours "DVF", "Digital Video Feedback".

The VLM also has a few waveform functions (sine, square, etc) which could be fed into various effects input parameters. The user input buttons (joystick, fire button) could also be added in as input parameters or modifiers to exisitng waveform functions. A similar version of this can now be accomplished easily on the Mac in "Quartz Composer", but using a drag-and-drop interface, rather than nested text menus.

Triggers were another input which could be fed in to the visualizier effects. These triggers are generated by the audio analysis routines, and is the reason why you're still reading this article.

2. VLM-1 Triggers

The one portion I had never accomplished in the time we were working on it was audio control. I had an idea back then on how Jeff did this in VLM-1, and with further refinement of my ideas, I think I have it entirely worked out.

Jeff often hangs out in channel #llamasoft on the IRC network, and when asked recently about how he did it, his response was what you'd expect for something he worked on 15 years ago: I am "BleuLlama", Jeff is "}stinky_ox{"

BleuLlama:	}stinky_ox{: is there a doc online somewhere that explains
		how you did the beat detection/recognition in VLM-1 (or any 
		VLM, really)
}stinky_ox{:	heh, that's a fun problem
BleuLlama:	I thought i remembered reading one once, written by you, but i 
		can't remember for certain
}stinky_ox{:	IIRC in VLM1 we had an FFT split up the frequencies and I then 
		looked at the behaviour of the amplitudes in various bits of 
		frequency to work out what to do
BleuLlama:	aye.
}stinky_ox{:	mate of mine from Inmos did the FFT code
BleuLlama:	"to work out what to do" is the part i'm curious about
BleuLlama:	i have my audio as FFT
BleuLlama:	er. in frequency-land
}stinky_ox{:	how you extract information from that and what to do with it 
		is up to you and what you're trying to do really
BleuLlama:	i remember seeing the graphs/display of the FFT when "almost" 
		in the VLM-1 editor egg
BleuLlama:	i guess i'll fire up the jag tonight and RE it. :)
}stinky_ox{:	there are no absolute rules for it that I've seen, and I've 
		found using different bits of spectrum for different effects 
		which then work differently for various kinds of music is 
		what happens
BleuLlama:	understood
BleuLlama:	"spectrum and triggers"  :)
BleuLlama:	YaK's Quick Intro to VLM Hacking  :D 
BleuLlama:	yeah. that page is right from 1994
Figure 1: Chat with Jeff Minter

But that's okay, since I've worked it out for myself anyway...

Figure 2: VLM Triggers Menu (video)

Seen in Figure 2 above, is a video capture of the VLM-1 running on my Jaguar CD. I sneak it into the "Spectrum and Triggers" menu, (pressing 1+3+#+0 at a blank screen) and this appears. From here, pressing Up-Down eight times brings you in to the full effects editor, but we'll stop here for now. [3]

Along the bottom, you can see a frequency-domain analysis of the currently playing music (in this example, it's the Sega Bomberman soundtrack, because that's the closest CD when I made this video.) This is the row of bouncing red and green vertical bars.

For each of the 5 triggers, two parameters can be adjusted:

The range for the trigger determines where the red segment is in the frequency graph, as well as the width of that segment. Both of these parameters can be modified for the currently active visualizer.

The trigger minimum I will group in with the other two indicators you can see in the video:

For each range, only the peak (top-most) frequency band in the range is used to determine the value for that range. From here, we define a few behaviors.

This all results in a situation where loud sudden things will cause a trigger, however cosntant noises will probably not cause triggers. Also, quiet noises will never cause triggers.

3. Extended

From here, a time-based heuristic/hysteresis can be applied to the trigger to debounce it, and generate a single trigger for each bass kick, or high hit. In some cases, where you just want "bass detection" for example, this should not be employed.

4. References
  1. Llamasoft VLM History
  2. The Demo
  3. Yak's Quick Intro to VLM Hacking