July 6th, 2008

Look ma, no bubbles


Now that I’ve taken out the trash…

Flowers

Strangest thing about my old auto-morphing code that I’ve had a couple of demos up for (also on youtube): it’s had an incredibly stupid bug in it all this time, that I would never have noticed if I wasn’t just staring at the code mindlessly. It was transitioning smoothly from picture to picture, but there seemed to be an excessive amount of white or light gray circular areas that would unnecessarily billow up before resolving to the next keyframe. Everything was working correctly except for there was this line of code that I copied and pasted and didn’t finish changing it the way I’d intended to, so instead of getting the data for a, b, c, and d, it was getting “b” twice and leaving “a” at zero.

The reason it didn’t totally cause it to malfunction outright? To interpolate, it takes the data from not two, but four pictures. The keyframe just before the current frame is called “b”, the one just before that is called “a”, the one right after the current frame is called “c”, and the one right after that is called “d”. So you’ve got a, b, c, and d, and the thing you’re filling in is somewhere between b and c.

The reason it uses info going that far back and forward is so that I can make the data curve as it goes along. It’s called a spline curve, when the computer sort of “improvises” a curve to fit an arbitrary set of points, and in order to know how the curve is shaped, you want to know where at least a couple extra points are beyond the ones you’re between. Well, since “a” was treated as though it were all zeros, it would come out of “b” at the right place but at the wrong angle. So the data would always have sort of an “upward lurch” at the beginning of the transitions, thus making all those white and light gray bubbles.

Here is a demo video of a transition sequence that works the way I meant it to.

(Is this the same Keith Handy guy that does the music, or am I at the wrong website?)

Pathetic, that’s what it is

1 comment

Dismal Failure

Well, I’m back from the hospital (pictured above is an abstract representation of my mental anguish over the last week). Sorry I didn’t write a post to tell you I was going to the emergency room! I don’t know where my priorities were.

My right foot — yes, the same one that was broken a few months back — was pwned by a severe staph infection, probably as a joint result of scratching maniacally and soaking in stale/dirty water. My goal now is to not contract anything new for the rest of December, until my health insurance kicks in. (That’s right, boys and girls, I’m still vulnerable!)

Okay, I did lie about the picture. That’s a still from a follow-up experiement with the auto-morphing code. Although you may get a neat looking frame here and there, by and large cross-breeding between two simultaneous video sources is a failure. For one thing, it takes absolutely forever to run for even a short amount of footage, because it has to analyze two images every time it generates one frame (I left it running for several weeks; it was still going the entire time I was hospitalized!). For another thing, because of the way individual frames are interpreted, very small differences in the input can yield very large differences in the output, so the end result is extremely jumpy.

So the final verdict is that it’s really only ideal for filling in missing frames in a single video sequence. Analyze few, generate many.

I think I’ve improved on your methods

3 comments

Still from improved bleed algorithm

Above: a still from an improved version of my auto-morphing picture-bleeding algorithmic video whatchamacallit thingy. At this point, increasing the picture quality is just a matter of increasing the number of “passes”, so I’m going to concentrate more mental energy on making it more useful.

From the user’s standpoint, the way it works now is linear. You start with a single stream (thread, channel, whatever you want to call it) of video, with some frames missing, and it fills them in. You could start with a very small number of key frames (like in my early tests below), so that it generates the majority of images for a morphing effect; or you could have most of the frames already (as in pre-existing video) with only a few missing frames, and use it as more of a transition effect. In either case, though, as it stands now you start with one list of numbered frames, and it fills in the gaps.

What I want to do next is give it the ability/option to cross-mutate between two or more simultaneous video sources, sort of like an A-B roll but with the middle zone being more of a cross-breed than a crossfade

In glorious RGB


By the way …

In case of rapture, glowsticks will be provided… I’ve uploaded some of my code-generated art (or whatever you want to call it) to Flickr. I hit my monthly upload limit pretty quickly, so I may consider getting a paid account. We’ll see.


You’re still the artist


Reposted with permission from the Eu-gene mailing list:

I’ve been thinking about this a bit, and if I were to contribute yet another alternate definition of ‘generative art’ (not that I think it needs one) then it would be something like this:

“Generative art is the production of rules to define a fixed conceptual space as art. A rule-follower (such as a computer) then moves through the space in an arbitrary manner, but not beyond it. Furthermore the method for navigating the space does not change with time. What is presented is simply a single, unchanging conceptual space navigated by naive serendipity.”

I put it that way to underline the fact that generative art does not present a limitless, ever-changing stream of creativity. Instead it presents a model with some parameters, and those parameters define a conceptual space. Together those parameters might define a high dimensional space of possibilities, but they are have limits, and beyond a few iterations a naive approach to searching that space is unlikely to turn up anything of interest.

The output from generative systems looks samey after a short while, unless the system is modified. For example AARON would not produce interesting output if Harold Cohen didn’t keep modifying it. So once you divorce a generative system from its programmer it dies.

That’s not to say that something beyond generative art isn’t possible, for example evolutionary art takes a more intelligent approach to searching a conceptual space, and hopefully soon software art will start transforming the conceptual spaces it works upon.

alex

The feedback he received on this was largely along the lines of “why do you have to focus so much on what it can’t be”, which spiraled into debates about free will and determinism — but I like the way he put this, and think it’s a good way of dispelling any fear or fantasy of creativity itself ever becoming a non-human thing. Even if a given work has infinite iterations, it bears pointing out that “infinite” does not mean “everything”. (There is an infinite set of fractional numbers between three and five, but that set does not include seven. In fact, there are a heck of a lot more numbers that aren’t included.) As a process is designed to be more and more complex, it can appear that its own “conceptual space” is shifting, but all this means is that the artist (programmer) has put in the work to build a larger metaspace.

I don’t think any of this, either Alex’s post or my commentary, should be taken as a bitter attempt to deflate anyone’s dreams of making a machine behave more like a human. I just think it’s healthy and practical to know what you can and can’t expect from something.

Help yourself to refreshments


While you’re waiting for new and exciting stuff, you can check out my page at ruccas.org, a wiki entirely devoted to generative artists. Be sure to check out the other pages too, of course — some people are doing some interesting stuff. (And, uh … some people aren’t.)

Before too long I should have Mana up. I was surprised by how many new overdubs it called for, considering that it was supposedly “done” and I was just touching it up. I’d like to do a walk-through piece where I give you a tour of the individual parts.

I’m also coding up some mastering tools; mainly spectral graphs, and modeling the overall sound quality from one recording to another. My first second attempt at getting The Nile Song to sound like Happy With What You Have To Be Happy With was … not *as unsuccessful* as it could have been. The fact is, though, crappy recordings have big gaping holes in their spectra, where you have to actually put something before you can bump it to the right level.

Bleepies!

1 comment

Here are some BLEEPIES (click to listen) for your chin-stroking, “that’s innn-teresting”-type listening pleasure.

And here is a screenshot of the Commodore emulator I generated them on:

The reason it matters is because I actually did these same bleepies on a real C64 twenty years ago, as a way of “modernizing” the rhythm on Mana. I just never recorded it. Or saved my program. But what you see above is pretty much functionally identical, and it gave me great pleasure to resurrect it.

I used that Commodore 64 a lot when I was a kid. I did a couple of other sequenced songs, entirely in BASIC, using DATA statements to list all the pitches it would play, and empty FOR-NEXT loops to create pauses. Anything you wanted to do on the SID chip, be it pitch, volume, filters, envelopes, or waveforms, you had to use POKE statements, which made the code entirely unreadable by the human eye. You could even program it to behave like a real-time synthesizer, playable via the computer keyboard, as long as you were willing to play every note a little early to compensate for the lag. (I once tried bringing it along to band rehearsal, but it wasn’t terribly practical.)

So anyway … I’m not ruling out using this again, or possibly some friendlier software that emulates only the sound chip without forcing me to stare into the above headache-inducer. Stay tuned!

Imhotep theme designed by Chris Lin (and then bastardized by the webmaster). Proudly powered by Wordpress.
XHTML | CSS | RSS | Comments RSS