(Temporarily abandoning my plan to blog about all of my projects in chronological order, seeing as I’m now two years behind.)
Exogenesis is my new demo for Raspberry Pi and Novation Launchpad MIDI controller, written as an exercise in creating a coherent visual narrative on an oh-so-limited display. Music is by songster and zinc-vending supremo Hoopshank, and the demo was presented at this weekend’s Sundown demoparty, where it won first place in the Wild demo competition.
Visuals were programmed in Python (synchronised with the music by hand – there’s no spectrum analysis of the audio or anything like that going on) and sent to the Launchpad as a stream of MIDI ‘note-on’ events. There’s no particular reason for running it from a Raspberry Pi, other than ‘because I can’ – the code ought to be portable to more or less anything that can run Python and has a USB port.
This also happens to be my first production under the Wavesitter label. I figured that since I’ve done quite a few productions with guest musicians, and hope to do a lot more of that in the future, I should make that an official thing with its own name, rather than being “Gasman and X” all the time. In other words, Wavesitter is to Matt Westcott what Nine Inch Nails is to Trent Reznor. Or, indeed, what Simply Red is to Mick Hucknall. Insert your own comparisons here. (Also, if I’m not mistaken, it’s a literal translation of the German word for budgerigar, Wellensittich. Which I think is kind of neat.)
My woefully late roundup of stuff I’ve made continues with this project from August 2011. As long-term followers of this blog may recall, since mid 2008 I’ve been undergoing a long-term exercise of trying to keep up a jet-setting demoscene lifestyle without flying – and that can lead to some pretty creative journey planning. One such occasion was my Week Of Geek in 2011, a round trip taking in the Assembly demoparty in Helsinki, then down to Berlin (via the sleeper train from Malmö, which unexpectedly involved the train being loaded onto a ferry. A train on a boat! A train! On a boat! But that’s another story) for the first two days of Chaos Communication Camp before whizzing off by ICE to Cologne for the Evoke demo party.
All visitors to CCC received a r0ket badge – a USB-powered gadget equipped with a 70MHz ARM processor, a whopping 32Kb of flash, a joystick switch, and a Nokia-3310-stylee mono 96×68 LCD. Ostensibly, this way a way of providing people with name tags that were suitably illuminated for the night-time activities at the camp; in reality, of course, it was a geek toy to hack around with, and for me it was a perfect opportunity to earn some major geek points by being the first person to show one off to a demoscene crowd on the other side of Germany, while the camp was still going on. So, what sort of eyecandy can you do in two days with a low-res display, a joystick, and a comparatively-beefy-but-floating-point-lacking CPU? Wolfenstein 3D, that’s what.
The principle is the same as it was in the 286 days: set up your viewpoint as position somewhere on a 2D map; send rays fanning out from that point, one for each pixel column of the screen, until it hits a wall; and draw a vertical slice of texture corresponding to the part of the wall it touches, scaled according to how far away that is. I first learned of this back in my Uni days from Tristam Fenton-May, who designed a hardware implementation of the Wolfenstein engine for his final year project, and came up with a brilliantly oddball way to avoid having to allocate memory for a full display buffer: the whole thing would be rendered column-by-column on a CRT display placed on its side. Lovely.
My initial experiments with the r0ket board showed that the screen was laid out in a peculiar vertical arrangement of bytes, which was reason enough to steal Tristam’s idea and do my column-by-column rendering straight to the screen in one swoop. In hindsight, this was probably a bit silly – mingling the display routines with the 3D calculations resulted in some horribly spaghetti-ish code – but then again, I think we’re allowed a bit of spaghetti code in fun projects like this. And, in fact, the overheads of the r0ket system software meant that we only had around 2.5K to play with, so being frugal with memory was probably no bad thing.
I’m determined to get this blog back up to date, even if it means catching up on things from over a year ago. So cast your mind back to the summer of 2011, when Nyan Cat took the internet by storm.
My Spectrum demo Nyantro (Download | pouet.net) was Nyan Cat’s first appearance on an actual retro platform, and it left a rainbow-coloured trail of imitators in its wake, starting with the Commodore Plus/4, Atari 2600 and BBC Micro, and ultimately becoming a necessary rite of passage for any self-respecting demo platform, a sort of 8-bit Hello World.
It was created during the first few days of Shucon 2011, a week-long Speccy retreat in the Czech Republic, and stands out as one of those rare demos that wasn’t stymied by a tight deadline for once. I went to the extra trouble of using fiendish multicolour tricks to achieve more than the standard two colours per character cell, and the whole thing was pretty much wrapped up when I had a brainwave. “You know what this really needs? The rainbow stripes should extend into the border.” Cue another day and a half of pulling apart and rewriting the code…
Well worth the effort, though, especially to see it getting this reception from 4000 geeks at Euskal Encounter this summer:
After the triumphant AY Riders gig at the Forever demoparty back in March, I had a hankering for some more Speccy-and-keytar-and-vocoder live performance action, so I jumped at the chance to play my first EVVAR solo set at last weekend’s Outline party in the Netherlands. Outline is by no means one of the largest parties, but there’s something magic about the atmosphere there which has made it one of the most eagerly awaited events in my calendar over the last couple of years. Most demo parties will give you the opportunity to chill outside in the sun with a beer or slave away at a hot CPU to finish off your creations, but it’s rare that the two activities flow together so smoothly as they do at Outline.
And with everyone’s spirits kept high, it means that when the evening activity kicks off, you have the most awesome audience you could possibly hope for. Big ups to TMC for the video, m0d for the other video which should be surfacing soon, Ziphoid for streaming the gig on SceneSat Radio, and of course Havoc, D-Force and the rest of the Outline team for making it all happen…
1:51 Gasman – Out Of Neverland
6:18 Gasman – Torch Dragon
8:41 Celine Dion – My Heart Will Go On
10:23 Gasman – Cybernoid’s Revenge
14:23 Madonna (arr. TDM + Factor6) – Hung Up
20:17 Gasman – Oldskool Crusader
23:47 Michael Jackson – Thriller (featuring Okkie)
30:30 Purple Motion (arr. TDM + Factor6) – Satellite One
And after all that, I still had some spare energy to do some casual hacking around with sine waves and come up with an entry for the 128 byte intro compo. As you’ll see from the video, 128 byte intros are one of those peculiarly demoscene-ish things that demand a certain frame of mind to be enjoyed properly, to the point where it gets a tad surreal for outsiders. If nothing else, you can certainly count on the Outline audience to provide a soundtrack to a silent production.
(…and before you ask, the title does indeed come from an infantile demoscene in-joke about genitalia. I’d actually only planned for there to be one ball, but then one of those fortuitous coding accidents from adding or removing an odd instruction happened, and I knew I had to run with it.)
Read on for the complete notes/transcript of the talk (in hopefully more coherent form than the talk itself – next time I promise to spend less time on the flashy demo and more time figuring out exactly what I’m going to say…) (more…)
Still, even if the execution this time didn’t work out, I think it’s been a worthwhile exercise in bringing pieces together. Jacob Seidelin’s PNG compression hack (where JS code is stored in a PNG image to take advantage of the compression, then unpacked on a canvas using getImageData) has created a bit of a buzz in the JS development world, but this is the first time it’s been used in an actual demoscene production (which is surprising, given how the demoscene is the spiritual home of size-coding hacks). Ben Firshman’s JSNES has been dynamically generating audio for some time now, ardently chasing the moving target that is Mozilla’s Audio Data API (with a trusty Flash snippet as a fallback), and Mathieu ‘p01′ Henri was experimenting with softsynths long before then. Not even my own code is safe from this cherry-picking exercise of doom – the 3D routines are a mishmash of Gallions Reach / Canvastastic (for the lighting model) and Antisocial (for the full scene / movable camera handling). Finally, node.js makes a cameo appearance, because having an actual web server on hand makes development go a lot smoother.
Put them all together and you have the ingredients for a delicious 64K Intro cake. This time it came out a bit half-baked, but I’m passing on the recipe in the hope that someone else can make it work:
Update 2010-06-08: Oops. In the process of testing how Safari 5 shapes up, I discovered a rather silly oversight: the audio buffering routine was set up to never use more than 10% of CPU. Now that I’ve fixed it, it turns out that Chrome and Safari (at least) have no trouble at all playing Jugi’s Dope theme in its 28-channel glory. (However, taking the brakes off the buffering does mean that we can’t reliably pause the audio any more. A small price to pay, I think you’ll agree.)
I’ve rewritten the DivIDEo converter app in pure C, and as a result it’s now available in friendly standalone Windows and Mac OS X command line executables (and slightly less crazy and Ruby-ish to compile for other platforms). All the necessary libraries (including a major chunk of ffmpeg) are compiled in, so now there’s nothing standing between you and full-on ZX Spectrum video converting action. Head over to the DivIDEo website for the downloads.
Incidentally, a couple of people have asked about the identity of the singer in the Outline presentation. Apparently, while that clip is what we sneeringly refer to as an “internet phenomenon”, it’s not quite reached 100% saturation, so: it is Edward Anatolevich Hill, with a Russian TV performance of the song “I am very glad, because I’m finally back home”, or as it’s becoming increasingly better known, Trololololo.
Six years after my first tentative attempts at streaming video from the DivIDE interface were presented at Notcon 2004, I’ve finally come up with a system that I’m happy with. It boasts 25fps playback with audio somewhere above the ‘nails in a vacuum cleaner’ quality of previous attempts (through the use of delta compression on the video data and variable bitrate audio to use up whatever processor time is left), a one-shot conversion utility that handles all the video decoding, rendering and re-packing, and a player routine that more or less respects the ATA spec (so won’t fall apart as soon as someone else tries it on a different CompactFlash card. Hopefully). Here’s how I presented it at the Outline demo party:
This 1K intro for the Spectrum (which received 3rd place in the oldskool demo competition at Sundown 2009) was inspired by Bill Bailey. No, really. His current live show features a spot on the Yamaha Tenori-on, which through the medium of “getting someone in the audience to splurge their hand on it”, he demonstrates that it can’t fail to play something nice.
This makes it a good excuse for some experimentation with generative music. The secret is in the scale – it’s equivalent to playing only the black notes on a piano, and presumably has roots in oriental music (I previously rediscovered it while working on Haiku). To make it into something like a proper demo, rather than just a throwaway routine, I added a bit of subtle progression Cyberpunks Unity style, so it drifts in and out of randomness as the graphical effects change. It even has a proper ending…
In recent months Yerzmyey has been pushing for the revival of the 16K Speccy as a platform, so I’m pleased to announce that this demo is – so we believe – the third ever demo to run on it.