On Tue, 2005-11-01 at 00:51 +0100, David Olofson wrote:
  On Monday 10 January 2005 21.31, Dave Robillard wrote:
 [...]
  I was considering using ChucK, given that
it's specifically
 designed for RT performance use and can insert/remove/replace
 pieces of code into the vm while running, but it looks like it
 would be a significant amount of work to adapt the ChucK engine to
 be controlled by another app. 
 Looks like ChucK is basically designed around the idea of describing
 networks of unit generators, though there does seem to be procedural
 style flow control constructs. Maybe those can be use to construct an
 event loop for receiving external real time events? It would seem to
 fit well with the "time loop" idea, but I don't know how dynamic the
 control flow can be without causing all optimization to break down.
 Anyway, I'll have a closer look at ChucK. It has some concepts in
 common with what I had in mind for future versions of Audiality.
 (Running those AGW scripts in real time, all unit generators in
 parallel, rather than over whole waveform as it is done now. Time
 oriented flow control constructs.) 
Yes, the basic sound production in ChucK is based on ugen networks, but
the cool thing about the language is it's handling of time.  Time is
essentially a variable, so you can do a bunch of operations, then
increment time (ie "now += 1 second") and do some more operations.  It's
really great for algorithmic composition and things like that.
It's main attraction to me however is the ability to
insert/delete/modify chunks of code on the fly, while everything runs.
That would be ideal in a modular synth - those "chunks of code" are just
modules.  The only problem is a chunk of ChucK code doesn't really have
a way to specify inputs and outputs that I know of, so the language
and/or vm would have to be modified a bit to allow coding of modules
with arbitrary inputs and outputs.
   I need the
guarantee that the audio thread of the language/VM is
 100% realtime safe (ala the jack guidelines). 
 That's a primary design goal for EEL (which is the main difference
 from scripting languages in general) - but raw speed is another
 matter. Of course, I'll try to make EEL as fast as realistically
 possible, but as long as it isn't compiling into native code,
 instructions will be expensive, and doing DSP by actually operating
 on a single value per instruction (as opposed to SIMD) is going to be
 very slow, compared to native code. 
 
Fast as realistically possible is fast enough for me. :)  If performance
of a patch with code in it needs improving, one can always go write the
LADSPA plugin.  At least having a scripting language available means you
don't /have/ to write a LADSPA plugin to get something done.
The fact that a primary design goal is RT safeness is very appealing,
I'll take a good look at EEL as it stands..
  Another problem (for me at least) is that the few
alternatives that
 looked interesting are either non-Free, or licensed in a way that
 prevents using them in proprietary projects - which is exactly what I
 need to do. (All my personal projects are Free/Open Source, though.) 
I prefer the GPL myself, but as long as EEL is free software (I assume
BSD?) it's okay with me.
-DR-