Dear all,

I just noticed that I accidentally send this to the DEV list instead of the users one. That was of course a mistake. I hope this didn't bother anyone, I'll try to pay more attention on the future.

Sorry,
Kas.

---------- Forwarded message ----------
From: Kassen <signal.automatique@gmail.com>
Date: 2009/1/21
Subject: hotswapping UGens
To: ChucK Developer Mailing List <chuck-dev@lists.cs.princeton.edu>


Fellow ChucKists,

Inspired by Scott's explanation of casting I thought I'd try a new trick that may be quite interesting for livecoding.

first run this file;
-----------------------------
new UGen @=> Foo.instrument;
public class Foo
    {
    static UGen @instrument;
    spork ~attach();
   
    fun void attach()
        {
        while(1)
            {
            if(!instrument.isConnectedTo( dac )) instrument => dac;
            second => now;
            }
        }
    }

Foo foo;
new Sitar @=> foo.instrument;

//your melody goes here
while(second => now) 1 => (foo.instrument $ Sitar).noteOn;
--------------------------------------------

Then run this to hot-swap the UGen while the original code runs;

--------------
new Shakers @=> Foo.instrument;
-----------------------

Sadly this does need that "attach" function as assignment breaks the link to the dac. I'm not sure I feel that's desirable behaviour but at least we can now hotswap UGens without crashing. I don't think I succeeded in that before.

Yours,
Kas.