a theatrical open-source story, part one.
In what I laughingly refer to as "my spare time" I do lighting and sound for an amateur theatre company. The current play (plug: come see it - it's really, really good) has some fairly major tech behind it - particularly for a small amateur theatre (i.e. a miniscule budget).
The requirements include:
- dual projectors behind stage, showing around 150 slides during the course of the show
- a camera on stage at various points, going to the projectors. These then get news overlays on screen to make it look like a live news conference. The projectors are behind the screens, so the video needs to be flipped left-to-right.
- a couple of dozen pieces of music to be played at various points - this needs to fade in and out cleanly.
I'm also operating the lighting desk while I do this, so whatever I do has to be incredibly easy to operate. Requiring me to use the mouse is just right out.
Oh, and of course I shouldn't forget that I really only had one or two evenings to put something together. The choice of hardware was pretty easy - clearly I'm going to need a couple of PCs - one backstage with the camera and the projectors, connected by wireless to a laptop in the lighting box running the whole show (and outputting audio to the sound system when needed). I grabbed a cheapo wireless card and a Radeon 9550 (with a DVI-to-VGA convertor, I get the two VGA outs that I need) for a spare desktop I had lying around and dropped a fresh install of Ubuntu Edgy on it.
Software - well, clearly this calls for some one-off custom software. Again, my choices were pretty easy. Python (duh), pygtk for the UI, gstreamer for the audio and video, and twisted to tie things together. Things like callLater and deferreds just make stuff too damn easy.
So how did I do? Well, here's a quick sampler (click the image for a larger version). I'll talk about it in more detail in a subsequent post. This was the result of a single Sunday evening's intense hacking, followed by a few hours over a couple of nights tweaking things after using it. All up, it's under 600 lines of code, plus a few tiny shell scripts.
