views:

72

answers:

4

I'm looking for a language + GUI toolkit for rapidly prototyping utility applications for multimedia installations. I've been working with Max/MSP/Jitter for many years, but I'd like to add a text-based language to my 'arsenal' for tasks apart from 'content production'.

(When it comes to actual media synthesis, my choices are clear [SuperCollider + MSP for audio, Jitter + Quartz + openFrameworks for video]).

I'm looking for something that maintains some of the advantages of Max, but is lower-level, faster, more cross-platfrom (Linux support), and text-based. Integration with powerful sound/video libraries is not a requirement.

Some requirements:

  1. More than anything else, fast development time
  2. Cross-platform (at least OSX and Linux, Windows is a plus)
  3. Fast and easy cross-platform GUIs with no platform-specific modification
  4. GUI code separated from backend code as much as possible
  5. Good for interfacing with external serial devices (micro-controllers)
  6. Good network support (UDP/TCP)
  7. Good libraries for multi-media (video, sound, OSC) are a plus
  8. Asynchronous > synchronous
  9. UNIX integration is a plus

The options that come to mind:

  1. AS3/Flex (not a fan of AS3 or the idea of running in the Flash Player)
  2. openFrameworks (C++ framework, perhaps a bit too low level [looking for fast development time] and biased toward video work)
  3. Java w/ Processing libraries (like openFrameworks, just slower)
  4. Python + Qt (is Qt appropriate for rapid prototyping?)
  5. Python + Another GUI toolkit
  6. SuperCollider + Swing (yucky GUI development)
  7. Java w/ SWT

Any other options? What do you recommend?

+2  A: 

Try Mono:

http://www.mono-project.com/Main_Page

justin.m.chase
+2  A: 

Qt is appropriate for rapid-prototyping (Qt Designer and Qt Quick help with that), but it's still C++ so it's slower. PyQt on the other hand is pretty nifty - you have rapid write-test-modify loop in an interpreted language with all the joys (and pities) of cross-platform Qt support. Worked for me.

Berkus
+1  A: 

What about a JVM-based language (mostly for the portability and VM an interoperability with all the Java libraries out there, including the ones you'll need for media processing), like JRuby or Scala (for the development time. Probably more JRuby if you want to pick up fast), and with either SWT or Swing as you mentioned? Plus you can always plug-in things from other languages, so if you still want some things running in Python, then there's Jython to the rescue.

I wouldn't necessarily say that Swing is "yucky". It does have flaws and an overcomplicated API, but by design I often find it more appealing than SWT, though it also comes with its shares of nice features. It is possible to produce very good interfaces with Swing, and that aren't sluggish as the old fashioned argument goes. That being said, it's not necessarily great for fast-prototyping, but that's only a shortcoming in Java. Groovy has a nice builder to facilitate Swing development, for instance.

There's also a QT binding for Java if you want.


If Java-based things put you off, then I think you should probably go with Python + QT.


Flex seems to be picking up and surely produces nice interfaces, but there are a few things that bug me about it. For one thing, the fact that people always tend to produce non-standard UIs with it. It does look great, but it also is more confusing to users if every app developer tries to invent his or her own usability paradigm. Plus, there's a lot of unknowns in terms of the future of the platform, whereas you won't have this concern with Java/Python.

haylem
A: 

To answer my own question, it's usually more important to use what other people in your field/area/workplace use than to find 'the right tool'. (For instance, in my community, Max/MSP/Jitter & PureData, C, MATLAB, and [due only to its global popularity] Python are the standards.) Deviating from the local lingua franca(s) means that your code lasts only as long as you're around to maintain it (at least if the code is for a particular place or event, as is often the case in media), that you're all alone as a developer, and that you will constantly have to build interfaces to other people's code in order to get things to work.

I decided to stick with the venerable Max, C, Matlab combo for now while I'm learning.

On the side I experiment with Pure, which features strong integration with many libraries and applications thanks to dynamic typing, strong matrix support and early OSC adoption (for instance octave, SuperCollider, PureData, Faust and OpenCV). I'm looking forward to next-generation dataflow languages.

msutherl