I've been quite busy lately directing and producing the visuals for the upcoming street dance show Blaze directed by Anthony Van Laast (Mamma Mia!, Joseph And The Amazing Technicolor Dreamcoat, Jesus Christ Superstar). Working with Robin McNicholas and Jane Laurie we designed and created all the visuals, and the system to play and map them onto the set (more on this below). It previews tonight at the Peacock / Sadlers Wells in Holborn, London UK, plays for 2 weeks, then off on a tour of Holland and UK.
More information about the visuals coming soon - but to quickly summarize, it involves camera-tracking breakers, projection mapping onto an extremely intricate set designed by Es Devlin (Kanye West, Pet Shop Boys, Lady Gaga) - and it's a touring show - and I'm not touring with it - and some shows are one night stands - and the set is projected on by two projectors with very very short throws and huge amounts of lens distortion! So you can imagine the complexity in devising a setup which is tourable and easy quick to setup and calibrate, and still provides us the power to map the fine detail. All powered by custom software of course.
Huge thanks to the amazing production crew, super talented breakers, all the other creatives and dancers, and special thanks to Theo Watson and François Wunschel.
A while ago I'd posted an example and source code for using Vertex Arrays, Vertex Buffer Objects and Point Sprites in openFrameworks. This was for openFrameworks 005 and needed some mods to the core and other hacks to get it to do what we needed. In the current version of openframeworks (006+) a lot of the required functionality has been moved to the core and so we don't need the extra classes MSAImage and MSATexture, or to hack the core. The updated example is attached and can be downloaded from below.
P.S. An example on particle system with OpenCL for even more performance (updating the particles on the GPU) can be found here.
I've recently needed to work with Midi Time Code (MTC) and could not find any code to parse the midi messages and construct an SMPTE timecode. Closest I got was finding this documentation (which is pretty good) on how the data is encoded in the bits of 8 bytes sent over 2 SMPTE frames, each byte sent at quarter frame intervals. From that I wrote the code below (I've only really tested the 25 fps). The code is from an openframeworks application but should work with any C/C++ code.
class ofxMidiEventArgs: public ofEventArgs{public:
int port;
int channel;
int status;
int byteOne;
int byteTwo;
double timestamp;
};
#define kMTCFrames 0#define kMTCSeconds 1#define kMTCMinutes 2#define kMTCHours 3// callback for when a midi message is receivedvoid newMidiMessage(ofxMidiEventArgs& eventArgs){if(eventArgs.status == 240){// if this is a MTC message...// these static variables could be globals, or class properties etc.staticint times[4] = {0, 0, 0, 0}; // this static buffer will hold our 4 time componens (frames, seconds, minutes, hours)staticchar *szType = ""; // SMPTE type as string (24fps, 25fps, 30fps drop-frame, 30fps)staticint numFrames = 100; // number of frames per second (start off with arbitrary high number until we receive it)int messageIndex = eventArgs.byteOne >> 4; // the high nibble: which quarter message is this (0...7).int value = eventArgs.byteOne & 0x0F; // the low nibble: valueint timeIndex = messageIndex>>1; // which time component (frames, seconds, minutes or hours) is thisbool bNewFrame = messageIndex % 4 == 0;
// the time encoded in the MTC is 1 frame behind by the time we have received a new frame, so adjust accordinglyif(bNewFrame){
times[kMTCFrames]++;
if(times[kMTCFrames] >= numFrames){
times[kMTCFrames] %= numFrames;
times[kMTCSeconds]++;
if(times[kMTCSeconds] >= 60){
times[kMTCSeconds] %= 60;
times[kMTCMinutes]++;
if(times[kMTCMinutes] >= 60){
times[kMTCMinutes] %= 60;
times[kMTCHours]++;
}}}printf("%i:%i:%i:%i | %s\n", times[3], times[2], times[1], times[0], szType);
}if(messageIndex % 2 == 0){// if this is lower nibble of time component
times[timeIndex] = value;
}else{// ... or higher nibble
times[timeIndex] |= value<<4;
}if(messageIndex == 7){
times[kMTCHours] &= 0x1F; // only use lower 5 bits for hours (higher bits indicate SMPTE type)int smpteType = value >> 1;
switch(smpteType){case0: numFrames = 24; szType = "24 fps"; break;
case1: numFrames = 25; szType = "25 fps"; break;
case2: numFrames = 30; szType = "30 fps (drop-frame)"; break;
case3: numFrames = 30; szType = "30 fps"; break;
default: numFrames = 100; szType = " **** unknown SMPTE type ****";
}}}}
For the Grammy awards 2010, musician & artist Imogen Heap wanted a dress that would display the tweets and photos coming from her fans in realtime, so she could take her fans with her onto the red carpet. Moritz Waldemeyer designed a flexible LED ribbon which she could wear, and I developed the controlling software, an iPod Touch application that she could carry in her bag that would collect all the tweets and photos from the net, and send the information to the custom LED ribbon.
I designed and programmed visuals (projections) for the OKGo performance and Fendi installation at Design Miami 2009. OKGo were playing modified Les Paul guitars mounted with laser beams in the headstock, designed by Fendi in collaboration with Moritz Waldemeyer. Using a PC equipped with a high-speed firewire camera, I developed custom software to track the laser beams and generate visuals around the spots they hit the wall. These visuals were also audio-reactive, responding to the live audio feed coming from the sounddesk.
More images & video coverage coming soon.
P.S. For additional laser tracking goodness, checkout the Graffiti Research Lab's Laser Tag.
Inspired by the brilliant use of an age old concept in the recent OKGo 'WTF' video, I created this little open-source demo in processing. It works in real-time with a webcam and you can download the app and source from http://www.msavisuals.com/xmas2009
I am happy to announce that my Body Paint installation will be exhibited at the Victoria & Albert Musuem from 8th December 2009, to 11 April 2010 along with many other great works, for the Decode: Digital Design Sensations exhibition, co-curated by onedotzero.
I generally try to avoid personal posts on this blog, but this one was too amazing an experience to leave out. In September I went on holiday to the Galapagos Islands (inspired by Darwin's Bicentenary). I have absolutely hours and hours and hours of footage, and obviously not enough time to go through it all - but the highlight of the trip, was probably an extremely serene afternoon chilling in a mangrove forest, and on the way back to our big boat, a surprise encounter with a pod of orcas - two or three times the size of our little dingy - oh and some sharks too!
The video below is not an edit of the whole trip, it is just what we saw on the afternoon of 9th September 2009.
Recently I've been playing a lot with OpenCL, the new API / framework designed to handle cross-platform parallel computing (i.e. a simple way of running code simultaneously on all cores of your CPU, GPU or other processors). Implementations have been cropping up this year in NVidia drivers or ATI drivers, but most famously it's included with Mac OSX 10.6 Snow Leopard.
To cut a long story short I've been working on a simple-to-use C++ wrapper for some of the most common functions, imaginatively called ofxOpenCL and here is a little demo of 1 million particles running at 100-200fps.
NOTE: The Vimeo compression destroys most of the particles, so I suggest downloading the quicktime directly from the vimeo page at http://www.vimeo.com/7332496
This is 1,000,000 particles being interacted on by mouse, updated on GPU (with springy behaviours ) via an OpenCL kernel, data written straight to a VBO and rendered - without ever coming back to host (i.e. main memory + cpu etc.)
Frame-rate is around 100-200fps running on a macbook pro with GF 9600GT. That's 100-200fps on a laptop! (albeit a pretty decent one), but I'm dying to try this on a GF 285 GTX - which has 7.5x the number of cores, 2.5x the fillrate and 3.5x the memory bandwidth - for only £250!!
Recently "Gold" was selected to be shown at the Tent London exhibition as part of the London Design Festival. Below are a few photos from this exhibit, video from the same exhibit coming soon.
This site has been pretty quiet for a while, mainly because I've been quite occupied with a large project (details on that coming soon), and recently on a much needed vacation (details on that coming soon too (^_^ ) ).
In the meantime I'm delighted to announce that my "Gold" installation has been selected to be shown at the Tent London exhibition as part of the London Design Festival.
An early demo of the installation can be seen here, though the final installation is quite different... best to come experience it for yourselves ;)
There are many posts out there on the internet discussing the pros and cons of running an update loop on iPhone (or on desktop for that matter) via an NSTimer vs NSThread, and many suggest they can squeeze an extra 3-5fps out of using an NSThread. So after this discussion on the openFrameworks forum, and with help from Robert Carlsen, I added this feature as an option to ofxiPhone. By default the update loop is still triggered from an NSTimer for backwards compatibility (and safety), but if in your testApp::setup() you call iPhoneEnableLoopInThread(), then the loop will be initialized to run in a separate NSThread and throttled by mach_absolute_time(). It is very much in its infancy (uploading to SVN as I type) but seems to do the job (obviously you'll need to write threadsafe code if you use it).
Originally created to forward UDP TUIO (OSC) messages straight to TCP to be read from within Flash.
This application forwards all incoming UDP messages straight to TCP without touching the data, just a straight forward.(Since version 0.2.1 there is the option to prefix the size of the packet before sending the data to comply with OSC / TCP specifications). This enables applications that don't support UDP (e.g. Flash) to receive the data. Since OSC / TUIO are generally sent via UDP, this enables Flash to recieve those messages in their raw binary form.
After an adventurous 4 months of waiting and rejections and more rejections, I'm delighted to announce that MSA Remote for iPhone has finally been approved! Many thanks to all those that tested, left feedback, and generally gave support!
Inspired by Roxlu's brilliant openFrameworks wizard for code::blocks I thought I'd have a go at creating similar XCode templates - turned out it's super easy and you can download them below (templates for both desktop applications and iphone applications). Instructions are included in the zip but I'm attaching it below too.
Note: the iPhone template is for the latest version of ofxiPhone from the svn because there are additional files in the current version. (Thanks to everybody for pointing this out).
So my MSA Remote app has been rejected AGAIN, for the second time! This time because my startup image "infringes an Apple Trademark Image". Aaargh!
I had paid special attention to not include the sliver outline and home button in case it would be an issue, but it wasn't good enough. Apparently Apple own rectangles with rounded corners at a specific radius.
But like they say, Never give up, never surrender. I've resubmitted with a much tighter crop (I know, a lot uglier :S but it'll have to do for now), if this doesn't get approved, I think I'll just give it all up and retire to a little fishing village (maybe I should do that anyway).
P.S. You can see the previous post about the first rejection here.
Demo, Velocity Sensitive Keys and Patents
In the meantime I've uploaded a new video, this time demoing controlling Ableton Live (for audio) and VDMX (for visuals) and using faders, triggers, and velocity sensitive keys - yes velocity sensitive. The harder you hit the keys, the louder the sound (or whatever you want to map it to).
Coincidentally, in a tweet from cdmblogs I saw these guys have developed a very similar "patent pending" technique. They're very young, all in their early twenty's. So respect guys for all you've developed and the whole business venture etc. but a tip, please don't try and patent things like this. It's bad for mankind.
And for those wondering how it works, it's not rocket science, it's accelerometer. The harder you hit the screen, the bigger jolt on the accelerometer. And yes it does work on hard surfaces because you still get an internal jolt. You just need to do some filtering and check change of acceleration on finger touchDown. Neat I know ;) patent worthy? I think not.
In this video, OSCulator is routing the OSC (& TUIO) messages coming from MSA Remote to midi and forwarding to Ableton Live and VDMX simultaneously. Nothing is done in post, the same signal is controlling both audio and video.
So I just entered the world of google analytics (been registered for about a year, but never really looked at the data), and it's amazing. I was browsing the keywords people have used to find my site and there are some real gems in there. Most are what you'd expect (openframeworks, processing, quartz composer, physics, fluids, motion tracking, audio reactive and other interactive stuff). Some are so interesting and/or funny that I thought I'd share them.
For those that don't know what google analytics is or does, the below are some of the keywords that people have put in google, yahoo etc. and been led to memo.tv via the search results.
There are over 16,500 search phrases people have used and I didn't look at them all. Just a real quick browse through.
First, one of my favorite search queries I saw leading to memo.tv:
cool abstract shit (probably because I have the domain abstractshit.com, but i just love the fact that someone typed 'cool abstract shit' into google)
'girl' related queries that led to memo.tv (they must have been so dissapointed):
mad girls
madgirls
memo girl
amoeba girl (I hope you were looking for this, otherwise I dread to think what you were looking for)
cover girls memo 2008
glsl girl shader (yea, wouldn't that be nice!)
lab dance girls (unfortunately you don't get many dancing girls in labs. maybe you meant 'lap' ?)
mad girl secret (this guy spent 11 minutes browsing the site!)
mad girls graphics
memo girls
quartz composer my girlfriend (this one is slightly worrying)
visual 3d dancing girl
Some other interesting ones that caught my eye as I quickly scrolled through 16,500 searches:
algorithmic video i like to touch (8 people searched for this!)
you are not owner
does techfit really work?
why cant you see magnetic force (yes, it would be nice if we could see them)
why do we need hexadecimal number system when we have binary ?
why management by objective and not management by wondering?
why should i get high bbc ? (maybe because there's no other way of sitting through eastenders?)
psychadelic piercing
awesome mega flash game
islamic elements in motion graphics
cool acid visuals
what physical force makes up quartz (wow google, i can see why you thought memo.tv might be relevant, but you were way off!)
art interactif tutorial
how do i take a slit scan photo on my iphone
import radiohead house of cards into 3d
whereever you go,whatever you do notes for the piano (how on earth did that direct to my site!?)
how can i make the dust as gold?
interactive video art tutorial
physics falling balls 3d source code opengl
interactive installation free code
very nice dance
how to do visual distortion effects glsl
how to use msashape3d library in opengls + iphon + code example
open source quartz composer interactive projects
the good and bad paints of audio and visual movement
papervision high performance billboard for particle systems
quartz composer motion tracking
how to get a documentary on bbc television
msa 2009 interactive yearbook cd
using flash + quartz for tv production
generative video dance software for mac
the difference between real time processing and interacting processing
how to create volleyball game in flash as3
how to end a company's performance memo?
how to fake multitouch in actionscript
how to make sound reactive visuals
how to make psychedelic videos in flash
Actually just browsing the "how to ...." section was really interesting. Like looking through a window and seeing loads of people scattered around the globe, trying to find a solution to their problems - and in so many cases very similar problems. E.g. hundreds of queries about "when to release objects in objective c", or "how to do motion tracking in quartz composer" etc. Definitely a great source for data visualization. someday...
I wanted to actually publish them all, but google only allows me to download csv's in batches of 500. And there's 34 pages :S so I couldn't be bothered.
This is a set of C++ classes for solving and displaying real-time fluid dynamics simulations based on Navier-Stokes equations and Jos Stam's paper on Real-Time Fluid Dynamics for Games. The solver class has no dependencies on openFrameworks and can be used in any C++ project. The drawer class extends ofBaseDraws and contains an ofTexture for seamless integration with openFrameworks drawing routines. Also included in the addon is a ofxMSAParticleUpdater class which allows the fluid solver to be easily plugged into ofxMSAPhysics as a force field.