Sunday, March 30, 2008

Unexpected surprise in my Fruity Loops

As I mentioned previously here, I am starting to get into making my own electronic music. I've played guitar for many years as a hobby (and I'm nowhere near as good as Steve Northover) but wanted something that I could play with on the road (yes, I was creating music on my flight down and back to EclipseCon). That and it gave me a way to mix hobby and work since I could build software synthesizers using the CDT and Wascana.

I purchased a copy of FL Studio, which has been previously known as Fruity Loops when I first heard about it a few years ago. It's a goofy name you'd associate with a kids product, but it's now a full fledged digital audio workstation and deserves a grown up name. They just came out with a new version and one of the hidden gems is the inclusion of a product called SynthMaker that lets you build your own software synths using a visual programming environment.

O.K. creating your own synths without having to write C++ code. I guess not all musicians know C++ so I get it. And creating them visually is an interesting approach that newbies should be able to figure out.

But what struck me as I started digging into the sample synths it ships with (which sound awesome BTW) was exactly how powerful a programming environment this is. You create modules which have built in algorithms for everything from audio processing to IO handling to the rendering of the graphics for the synth UI. And then you hook them all up using interface ports and data flow lines.

OMG (the pun is unintended but now that I look at it, it's pretty funny), this is UML Action Semantics in action! Ever since I was involved in the review process for action semantics (including a very awkward call with Jim Rumbaugh - man, was I intimidated by the legend!), I had a vision of a visual programming language based on the concepts. You essentially declare objects and actions that you perform on those objects and link the actions together with data flows and control flows. And now that multi-core computing is becoming all the rage, I figure it's even more important. I think it's the only way programmers will be able to grasp multi-threaded programming, by forcing the code to flow in multiple dimensions instead of the single dimension text streams we have today.

So while I'm taken aback that I found this vision manifested in such a niche product, it helps me realize that this vision could be practical. I can't wait to start diving into it further and getting real experience at programming this way. If it works well, then I can really see the need to manifest this as a general language. And wouldn't this look great written using the Eclipse Modeling projects.

6 comments:

  1. Doug, I'm looking forward to your project proposal! :-P

    ReplyDelete
  2. i was hanging out with al pacino, and he told me i should never drop names.

    ReplyDelete
  3. This reminds me of Apple's so-called Quartz Composer which does the same for graphics and animations. It even includes some components for sound, IIRC. I agree that the concept behind Synthmaker is great and promising, but it is definitely not new. Take a look at
    http://developer.apple.com/graphicsimaging/quartz/quartzcomposer.html to see what I am talking about. I am even sure having seen stuff like this years ago, but Apple's application is the first prominent example that came to my mind. Opening applications up to enable users without "direct" programming skills to use programming techniques by raising them to an abstraction level that high is a great and challenging step forward, but I suspect this is far from being trivial in most cases. And I am sure there is a lot of work involved with this, in the GUI area as well as "behind the scenes" !

    ReplyDelete
  4. Wow, I remember playing around with Fruity Loops years ago just for fun. Its easy to turn up the tempo really high and create your own death-metal blast beats. You should try it!

    ReplyDelete
  5. For the record, I hate UML. It has bad state machines, an imprecise object model, and on it's own isn't executable. I do like Rumbaugh's stuff before he joined the three amigos. That's why it was surreal talking to him. I'm not even sure if anyone knows who he is any more to consider it name dropping ;) Sorry Jim...

    ReplyDelete
  6. Doug, interesting post. I'm familiar with that genre of visual synth building but hadn't made the (correct) connection to UML action semantics.

    I agree 100% that visual programming is a huge boon to multi-threaded programming. Every time I must attempt it in code it always hurts my head. But when programming against natural models, such as visual flow control, its decidedly easy but more so, quite natural. As the number of processors increase we're going to need better tools for multi-threaded programming to take advantage of it. Visual programming still has yet to live up to its potential IMHO but maybe it now will find its purpose.

    ReplyDelete