Archive for the ‘interfaces’ Category...

Hello Quartz Composer!

Monday, June 15th, 2009

I’ve always been kind of a control freak, especially when it comes to motion graphics. I went into OpenGL with C++ because I felt that it gave me more more control than other ways of making music animations.

Control can come at a price - and right now its at the expense of output. Before I can make something, I feel like I have to restructure the code. But I know that would be getting too involved in the details of refactoring rather than creating something new. It would be a long process and I’m sure my creative drive would dampen along the way.

Enter Quartz Composer.

I have recently come across QC while watching some WWDC videos at work, and I can’t believe I haven’t given it much attention before. Its a visual/programming environment, similar to Max/Jitter and Isadora in its patch-and-cable interface. “Patches” are basically units of inputs and/or outputs that can be hooked together to eventually render something to screen. There are three classes of patches: Providers (of data of some sort), Processors (of that data), and Consumers (renders the result).

What is most appealing to me about QC is that, besides the default patches, it is also extensible with Objective-C. Lucky for me I have been working with Cocoa for the past year!

Even though I would still be coding custom patches, I can see the GUI  saving me a time and energy. I can experiment with different configurations and orders of data, processing, and rendering by rearranging patches, not by messing with function calls. I had often thought of the different objects in my own programs as units that hook up to each other, and I wanted to make this more obvious by defining protocols (interfaces) that the different types of objects (sound provider, animation classes) would have to follow. This all seems to be thought of in QC.

So I can’t wait to really get into it. I’ve been watching some tutorials to see how to get it working with sound. Theres a music visualizer template that actually provides audio spectrum data, which was a big challenge for me when creating my own program. One of the videos showed the Audio Spectrum patch output.  I was instantly reminded of my debug logs when developing Noesys.

Which makes me wonder if in porting my animations to QC, I would just throw out most of the FFT code. I don’t want my previous work to seem like a waste of time. A comforting thought is that at least I can write better processors to go with the Audio Spectrum patch now that I have gone through understanding and implementing my own.

I must admit this discovery is bitter sweet. I’m a little shocked that my investigation into competitors and frameworks at the time of my thesis didn’t lead me to QC sooner - or that none of my knowledgeable professors or peers knew about it to point it out. But then again these videos on QC I am watching are from 2007 and on, and I finished Noesys in Spring 2006.

My next steps are to look at the tutorials on the web and the posts on Create Digital Motion to catch up on what people have been doing with QC. The WWDC video also briefly describes how to use QC for interactive prototyping, so I think the first project might be somewhat work related, using mouse events. More to come…