[chuck-users] live coding: methods and motivations
Scott Wheeler
wheeler at kde.org
Tue Sep 18 23:29:35 EDT 2007
robin.escalation wrote:
> Scott Wheeler wrote:
>
>
>> The main thing this boils down to from my side is doing controlled
>> randomization, parameter envelopes or event sequences that are too
>> complicated or tedious to do directly in the sequencer.
>>
>
> I can see doing that myself. For the last couple of years I have been
> using Reaktor to build instruments that generate sound through simple
> interaction... no complex sequencing. For example I slow a drum
> machine to 2 BPM and run the hits through a resonant filter and
> delay, with one or two LFOs cycling some parameters. This might
> create odd popping an chirping sounds at randomish intervals.
>
> This is all well and good, but the only algorithmic devices I've used
> have been made by other people, since Reaktor is not the best
> environment for writing equations. That said, I would rarely want to
> simply feed and equation and watch it run.
>
> What is great about Reaktor is that it is easy for me to "play" these
> instruments in real time, since any of their parameters can be
> exposed to controls and mapped with MIDI. So I am able to jam with my
> creations with some sound factors under strict control, others
> wandering, and still others directly played.
Well, you can also map stuff to MIDI in ChucK, you just have to build a
few classes to make the setup easy. I've attached an example built on
my collection of classes. (Most of which are hacked out of a recent set.)
Once the base classes are there (which shouldn't ever need to be
changed, really), this gives you a way to map functionality to a
hardware MIDI control either based on subclassing:
class FooControl extends Control
{
1 => cc;
fun void set(int value)
{
<<< "Foo: ", value >>>;
}
}
FooControl foo;
Or events:
EventControl bar;
2 => bar.cc;
fun void listener()
{
while(true)
{
bar.changed => now;
<<< "Bar: ", bar.changed.value >>>;
}
}
spork ~ listener();
Combined with the dummy code I inserted below that to simulate a knob
and then a button we get:
localhost: /Users/scott/Documents/ChucK> chuck Control.ck
Foo: 0
Bar: 127
Foo: 1
Foo: 2
Foo: 3
Foo: 4
Foo: 5
Foo: 6
Foo: 7
Foo: 8
Foo: 9
-Scott (aka Self Appointed ChucK Algorithms Wonk)
Extra Credit: One thing that I've noticed in a couple of places is that
sometimes sporking doesn't do what I would expect it to. For instance,
if I change line 223 to "spork ~ node.item.set(value);" to make it
non-blocking the program doesn't work. I don't see why.
-------------- next part --------------
An embedded and charset-unspecified text was scrubbed...
Name: Control.ck
Url: http://lists.cs.princeton.edu/pipermail/chuck-users/attachments/20070919/1c1b0be5/attachment.bat
More information about the chuck-users
mailing list