aAVis
Processing Based Visualsation Tool
Navigate/Search

Archive for the 'processing' Category

Prototype Release

Friday, January 4th, 2008

I thought I should actually send aAVis out into the public! How silly of me to forget to do this properly.

Windows Version ( 1.7mb )

Mac Version ( 1.9mb ) - UNTESTED

Remember to read the manual that is provided within the .zip file, and remember it was only a prototype. It is *very* fiddly, and can take a while to get used to. It also has a habit of crashing if you don’t play nice. The Mac version is untested ( as I use a PC ), so if it works, yay!

Exhibition Photos

Friday, November 2nd, 2007

My good friend Ben Bradford [ http://www.benjbradford.com ] just sent me some photos he took at our expo. So here you are, aAVis in the flesh.

expo_setup.jpg expo_editing.jpg expo_editing2.jpg

Post Expo

Thursday, November 1st, 2007

So the expo was last night. Lonnng night and I’m incredibly tired now ( Got a 2500 word essay to write that I’ve been putting off, and putting off - ugh ). However I thought I should do a quick wrap up.

The presentation went relatively well - though there wern’t nearly as many industry people there as I would have thought. I got approached by two or so industry people who seemed interested in what I was doing, got given one card, and the other guy I’ll get in touch with later ( I know him, so it wont be hard ). It seemed like most of the people there were parents, and most people seemed to think that aAVis was merely a visualisation - not a tool for *creating* visualisations. So I had to sit by the exhibit all night to ensure people knew what it was, and how it worked. Ended up creating a few presets on the night. A few merely to show what it could do - and one towards the end which I was actually quite pleased with!

Here’s a few screenshots :

And the one I’m most pleased with :

The Pictures don’t really do them justice, I’ll try to get a video up sometime tomorrow - though the new motion blur I’ve added has issues with the video capturing method I’m using - so I might turn it off for them. Furthermore, my friend ben took some Photos, so hopefully I should get some of those in the days to come.

All in all, I think the night went well, and it was nice to see aAVis playing on a projector screen for the whole night. Didn’t crash once! Beautiful!

What’s next on the plate ? Well I’ve got that essay, an exam, two more essays, and then I graduate ( hopefully, fingers crossed! ). I’ll attempt to package aAVis up into a format that most people can enjoy and use. After that , I’m going to whip up a website portfolio at www.tenfiftyfour.com so I can show off some of the work I did throughout university. And from there, it’s on to find a job! I’ve got one interview type thing lined up already ( have to finalise dates and the likes ), but yes, It’s interesting times. I’ll also be possibly shutting down my personal ‘moads‘ blog as I’m not really a design *student* anymore! But we’ll see. The other thing I’d like to keep up is my “Not so Impressive Entertainers”, which I hope to make into a book. In any event, right now - I’ve got an essay to write…

- Anthony.

Motion Blur and Accumulation Buffer.

Monday, October 29th, 2007

I spent the day today doing two things :
1) I spent the morning trying to get motionblur working.  Trying to use multiple textures to simulate a blurring effect ( Basically using lots of drawtotextures ).
2) Went to uni to check the room in which aAVis will be presented.

After heading into uni and spending 3 hours there trying to get it to work on the uni computers, I found that the machines there just don’t work well with the way I’ve got it set up ( As it’s been designed on my machine, it tends to freak out on others - plus I hadn’t tested it on modern radeon video cards yet, which seem to be what the macs at uni are running ).

So I’ve decided to just go with the best possible option I *know* will work, and that’s me bringing in my home computer.  It’s heavy, but it will work!

While relaxing and playing some TF2 tonight ( and admiring their amazing motionblur they’ve added to that game ), I realised … “Well, if I’m bringing my home machine, I know *exactly* the kind of system I’ll be running it on”.  And then it hit me, I can use the Accumulation Buffer!
I ditched the idea in the early stages, because my laptop does not support it, and originally - that was my presentation machine.  However, it works perfecly on my desktop computer and provides brilliant motionblur!

And the best thing is ?
It’s only about 6 lines of code.
How about that eh ?

Changes before the Expo

Monday, October 29th, 2007

The end of year exhibition is coming up, and even though I’m not being marked on aAVis at it ( I’ve already been assessed, marks yet to be delivered ), I’ve got a few things I’d like to change so it’s more impressive for the people moving through.

I sat down today and re-wrote the ‘frame saving’ code for the “party mode” I’ve introduced. I was using processings in-built ’saveFrame()’ function to save a .jpg of the current scene, then using this - it loads that frame as a texture onto a 800×600 ( stage size ) QUAD, and fades that quad out. Quite simple really - but very effective. The only problem is, that processing takes a bit to process ( haha ) this ’save frame’. So I’ve re-coded it in opengl. The save frame takes absolutely no time whatsoever anymore, the only pause is the loading of the new preset, which at the moment is unavoidable.

I also sat down and attempted to build a really nice motionblur out of a similar technique, but I’m having problems with it, and there’s a big storm outside so I need to turn the desktop off. So no more of that tonight.

EDIT - On another note, I’m glad wordpress saves posts as drafts while you work through them! As I was typing, that “big storm” blew the power in my house.  Fortunately nothing was damaged and my computers are still functioning perfectly! ( yay ! ).

Presets, and Array Questions

Tuesday, October 2nd, 2007

A quick status update for all of you listening out there.

I’ve now created a simple load/save preset system. It’s not pretty, but it works perfectly! ( wish I could say the same for that bloody remove option…More on that later )

I’m using simple .txt file exporting and importing to do the preset saving/loading. When the ’save’ button is pressed, all the current elements are saved into a ‘.aav’ file, Which is simply a sneaky .txt file in disguise. for example :

0*default sphere*72.0*300.0*0.0*100.0
1*default cube*400.0*300.0*0.0*100.0
0*default sphere*720.0*300.0*0.0*100.0

This preset file will created 3 objects. Two Spheres, and a Cube ( oh yeah, I added cubes ). It’s fairly simple, each value is separated by a *, and each new line is a new element. The object “type” is dictated by the number at the front of the line. 0 for sphere, 1 for cube, etc. This text file is imported back into the program, the current element list is cleared ( though, in the final version I hope for a fadeout, but for now, it just vanishes like my social life while completing this assignment ), and is replaced by our new friends there.

So that’s rad.
Now I need some help.

I’ve been puzzling over this stupid remove function all day, and just when I think I’ve got it working again, I manage to break it. It wouldn’t be so complicated, however the GUI library I’m using is still in the early stages of development ( especially with the MultiList system I’m using ) and so it’s still missing some things ( such as items that remove properly … ). This is how my remove system works :

REMOVE BUTTON IS SELECTED.
REMOVE BUTTON TEXT IS CHANGED TO -REMOVED-
ELEMENT CORRESPONDING TO REMOVE BUTTON IS REMOVED

Seems simple enough. And it is for the *first* item. However I’m storing the elements in an ArrayList, which means if I remove one, the rest cascade through the list and fill in the spots, which means I have to keep an array which holds the relative button positions for the elements place in the elements ArrayList.

Confused yet ? So Am I.
SO

ArrayList elements = new ArrayList();
int[] currentElementPos;

and the remove code :

// set "edit" label to "-removed-"
gui.controller(Integer.toString(theEvent.controller().id()+1000)).setLabel("-removed-");


// set "removed" label to "-removed-"
gui.controller(Integer.toString(theEvent.controller().id())).setLabel("-removed-");


// remove item
elements.remove(currentElementPos[theEvent.controller().id()-1000]);


for (int i=theEvent.controller().id()-1000;i<=elements.size();i++){
currentElementPos[i]=currentElementPos[i]-1;
}

Yes, there are some magic numbers there, and that’s where the GUI Issues come in to play. Each button is assigned an ID number. the ‘remove’ buttons I’ve assigned incremental ID’s from 1000 upwards. ( to 2000, so don’t add more than 1000 elements :P ). so “theEvent.controller().id()” is the ID of the button that was pressed. so, 1000 would be the first element created, hence 1000-1000 = 0. Which means it is element 0. However, once I delete element 0, element 1 should now be element 0, element 2 should be element 1 etc. That’s what the for loop *should* do. But it’s … not. Maybe with a fresh mind in the morning I can work this out, but right now - I’ve tried 4 different solutions, each one works for a bit, then falls apart.

Any Ideas ? Even if it’s not in java, psuedocode is fine.

Thanks
- Anthony

GUI version 8

Friday, September 28th, 2007

You can tell you’ve been working on something for a while when you *finally* figure it out, it’s like the world is a happier and more amazing place with furry little animals singing songs to eachother about mountain streams and … pez.

I *finally* figured out the annoying parts of my GUI today ( woo yeah! go me ! ). No, it’s not perfect, but it’s definitely the best it’s ever been, so I thought I’d show it off. Now, it is very simple at the moment, and it still has quite a few bugs in it. But I’ve had to sacrifice ease of use, just so I can get it finished. I’ll fix the problems later. So this is it :

addsphere.JPG

Currently you can only add spheres, so you’ll have to be content with that. It also takes quite a while to load, but just be patient. Now there are certain “rules” you’ve got to follow, or you’re going to break it. So this is what you can and can’t do.

1) Hover over Add -> Click Sphere

2) You’ll see a tab appear at the top of the screen saying “sphere”. Click that tab. DO NOT add another shape, you will break it. You can add more LATER

addsphere02.JPG

 

3) You’ll now see the “create/edit sphere” menu. Change what values you want, give the sphere a name, change the x,y,z and diameter, and when you’re done, press “save_sphere”. HOWEVER, remember the position of the ‘default’ tab at the top of the screen. As when you select ’sphere’, they will both vanish. Click in the area where the “default” tab was before, and the original menu will display itself once more. No, I don’t know why this happens - it’s something I’m still yet to figure out.

addsphere03.JPG

And that’s my GUI so far. From there you can Edit or Remove spheres. Remember, only one Sphere tab at a time. I will eventually change this, so that it makes a new tab for each sphere, but for now, this is how it will be! So enjoy.  Here is the link to the applet :

aAVis GUIPrototypev8 Applet

Thanks to Andrew Dekker, the Processing Forums, Wonko and Sojamo ( Creator of the GUI Library I’m using ) for their patience.  Thanks!

Latest News, Additive Blending, and Motion Blur

Thursday, September 20th, 2007

So now that I’m all nicely moved, I thought it was about time I told you all what I’ve been up to.

I’ve been working on the GUI, come up against some problems, but I think I’ve solved most of them now - I’m working on that tonight and tomorrow and should have something semi-decent ready for the weekend to test loading/saving. Currently I’ve got a version that lets the user create spheres after specifying dimensions. Nothing amazing, but it works, so I’m happy.

As well as working on that, I’ve been doing a series of OpenGL experiments.

Example 1 Was a test of my new particle system. It creates a stream of 3d rotating cubes at the location of the mouse. It also features OpenGL Additive blending.

Example 2 was a happy accident. Once again it’s a stream of particles moving away from the mouse, this time into the Z axis as they rotate. And they are 2D objects. It gives a cool ‘wavy’ feel. I quite like it really!

Besides these three, I’ve also now created something I am incredibly happy with. I call it my motion blur example. I realised that I could use my particle generator to make 3 copies of the same object, each with a slightly lower alpha value and simulate a “motion blur” effect. I also realised that if I made the “particles” move off into the distance, I can get some rather interesting results. So I coded up a simple oscilloscope(esque thing) and added my motion blur class to it. The results were great :

oscilloscopeandmotionblur

The Osc. Motion Blur example reacts to audio input, and looks quite interesting ( it too, has additive blending ). Unfortunately I have trouble exporting these as applets. However here are the files for those of you wanting to have a play :

Mac Users (1.4mb)
PC Users (1.3mb)

It will react to whatever you have selected as your audio-in. I’ve got a possible solution for mac users which I’ll post in the near by future too, I’d appreciate it if a fellow mac users could test it out for me ? Thankyou.

Overall I’m relatively happy with my progress so far. Next on my list is to work on loading and saving presets, and from there, the completion of the GUI. After that, all that remains is to add the various graphical elements, and various effects. That will be the long and hard - although interesting part.

- Anthony

GUI’s and OpenGL

Monday, September 3rd, 2007

First things first, thought I’d just mention the latest update to my blog, on the right hand side you can now see a list of what needs to be done in order to complete my prototype. Highlighted in green are the elements that are complete, highlighted in orange are the elements I’m currently working on. So you can keep track of my progress. And this leads in to my current problem.

In processing there are two options for GUI’s ( Graphical User Interfaces ).

1) Use a GUI Library
2) Code it all yourself from scratch

Option 2 would take a *long* time, so this leaves option 1. However, even option 1 has problems. Processing has 4 GUI Libraries ( that I am aware of ).
- controlP5
- MyGUI
- Interfascia
- SpringGUI
They all work fine by themselves. However add P3D or OpenGL, and they tend to break. MyGUI and Interfascia seem to die all together. SpringGUI works with P3D but not OpenGL, and controlP5 works with openGL, however the 3D elements always draw on TOP of the GUI. I tried running the GUI elements in a separate window, however that caused issues, and it seems to only work part of the time.

I have heard rumors of a way of re-coding MyGUI to work in conjunction with OpenGL, but I am not 100% sure of its authenticity ( or on the re-compiling process, I’d have to brush up on that ).

So I’ve gone to the processing forums for support, I’m hoping someone there can offer a suitable solution - Until then, I’m sort of forced to put everything on hold - so hopefully I’ll get a solution before then.

Processing Forum Thread

If I can’t get a solution, I will have to work out a possible solution. Even if this means ensuring no 3D elements move closer than 0 on the Z axis, and drawing all the GUI elements on that point. This will mess up perspective, but it may be the only compromise open to me.

- Anthony

Audio Analysis and Beat Detection version 2

Saturday, September 1st, 2007

I was bored yesterday afternoon, so I sat down and re-coded from scratch my beat detector. I received an email from Robert Hodgin ( aka Flight404 ) on some tips to getting beat detection working effectively.

His short answer was it’s very tricky. He’s still trying to figure out the best way to do it himself, and throughout the googleverse it’s about the same story wherever you go. The best way to do it I’ve decided is a version very similar to his own :

Basically you divide the FFT stream up into X number of segments ( I’ve chosen 6 ), the sizes get larger as they move to the right of the stream ( bass to treble ). For each of these segments ( or “Zones” ), you then calculate an average value, and a “threshold” value. If the average moves higher than the threshold, then you have a dramatic increase in that zone, and possibly ( I say possibly ) a beat.

Talking is boring, how about I show you.
Windows Users : Click here ( .rar 1.4mb )
Mac Users : Click here ( .rar 1.3mb )

Unrar the files. The instructions are in the mac .rar file ( there’s a readme.txt ). The program listens to your microphone. Windows users, you can go to your recording preferences and set your recording input to equal your audio output and get direct sound from winamp or wmp or whatever you use. Mac users ? no idea ( if someone figures out how to do it, tell me please !).

Let me explain what you’re seeing :

The Red lines are the zone “averages”. The yellow lines are the “threshold” values. When 2 or more areas trigger at the same time, I’m saying that’s a “beat”, the screen will flash white ( very quickly ). You’ll notice it’s still very jumpy, and requires a LOT of tweaking ,but I think I’m getting there. It’s kinda cool though.

Watching it, I’ve noticed certain trends. In the next version, I’m going to experiement with the timing of the thresholds. How much higher than the current value it has to be to trigger a threshold change, and maybe even “weighting” certain zones to be worth more than others ( as they seem to contain “beat” related frequencies more often than others … ) Suggestions ?

That’s it for now. Enjoy.

- Anthony