voice painting...

chutney's icon

hi,

was wondering if anyone would be interested in helping out with a patch i'm doing for a final college project..

the idea is of a 'voice painting' installation, to translate a live audio input to a constantly evolving projected 'painting' using Jitter.. i have a patch set up at present where at a certain level of audio, a bang sends a 'point' message to the jit.gj.sketch object, and i'm hoping to use the frequency of the source signal to determine Y value of that point. I'm also deciding between the cross corrreltion of two microphones, or subsampling a live video stream to get a 'position sensing' X value..
the idea is then that the user or users can create their own painting that is constantly evolving (did i mention that i'd like each mark made on the screen to have a set lifespan, so everything is constantly fading as new marks are being made..)

can anyone suggest a way to get a frequency output in numbers from an incoming signal, to be used as my 'Y value'? am also hoping to use the frequency to somehow determine colour, if anyone has any ideas..?
also, after grayscaling & sub-sampling a live video stream to say 64x1 pixels, &then applying a threshold, how could i actually output, again in numbers, the X value position of the 'movement'..? &then there's the whole fading thing...

any and all help would be really appreciated,
thanking you,

ian

vade's icon

snapshot~ can grab control rate data from audio rate data, that could
be for your 'y' axis

however, you might want to check out

jit.catch~

jit.gl.graph ? or jit.graph

or use jit.poke~ and handle drawing yourself.

theres a whole subset of audio -> matrix objects made to do this sort
of stuff.

good luck!

v a d e //

www.vade.info
abstrakt.vade.info

chutney's icon

thanks a million for the reply Vade, am looking into those now..

i just went and saw that superDraw applet through your blog too, it's a very similar aesthetic to what i envision for my project, just that the different parameters as mentioned above would be the controlling aspect..
was your patch based on this (the Blackspiral Dance) a tough one to create with Jitter?

again, thanks for the help,

ian

vade's icon

the trick is getting the draw order correct, and the fact that
screen2world and world2screen routines for jit.gl.render are only
exposed through javascript.

I use the below javascript in the patch instead of a patcher
jit.gl.render, and a jit.window with mouseidle 1 (which enables the
mouse coordinates in the window to be dumped out of the dumpout
outlet, and then i pass the x/y to the screen2world function, and the
output of the javascripts gives me the appropriate openGL
coordinates, which then get passed to jit.gl.sketch.

adding in a handle rotation in the mix, and handling things with
automatic 0 gets you the patch.

ill leave that to you. heres the JS, which is a simple modification
posted by JKC in the archives;

-------------
outlets = 2;

var myRender = new JitterObject("jit.gl.render", "drawing"); //
drawing is my render context/window name

function anything()
{
// JKC's code
    //pass off all other messages to the wrapped Jitter Object
    var a = arrayfromargs(arguments);

    // detect if method or attribute and call method or set property
accordingly
    // methods are instances of the function class, detected with the
isPrototypeOf method
    if (Function.prototype.isPrototypeOf(myRender[messagename])) {
        myRender[messagename](a);    
    } else {
        myRender[messagename] = a;    
    }
}

function erase()
{
    myRender.erase();
}

function bang()
{
    myRender.drawclients();
    myRender.swap();
    outlet(0, "bang");
}

function screen2world(x,y)
{
    outlet(1, myRender.screentoworld(x,y, 0.7));
}

v a d e //

www.vade.info
abstrakt.vade.info

chutney's icon

thanks again Vade,

have been trying to implement that JS that you put up, but having never tried that before i can't seem to get it to take. Should i insert the code into an empty object box, or straight onto the screen? or am i doing it completely wrong..? apologies for my ignorance...

also, i've been reading up on an object called Fiddle~ for interpreting an incoming signal, that could help find my Y value, but the object as written above isn't recognized by Jitter. have you heard of this object before, or know how to implement it?

many thanks,

ian

vade's icon

you need to save the file as some_name.js , put it in max's search
path, and then make an object called some_name.js , which should load
up the code in the file. Check out the tutorials on javascript in the
docs.

fiddle~ - yes. its an external. its fun, play with it and check out
the help file, and check the archives.

v a d e //

www.vade.info
abstrakt.vade.info