Hello List,

i was using chuck very much in the last few month.. and - as you all know - you always want to have some extra features (that are sometimes very special), some stuff that fits exactly to your needs..

So i decided to start an own Project, an alternative chuck environment.. mainly to have the features of my dreams. anyway, as some other people might be interested, i would like to introduce and describe this project here, and would love to hear what others think about those ideas/plans. actually they are more than plans by now, as maybe 50-60% is already finished for a first basic usable version...

the main components are of course basic stuff like a source editor with add/replace/remove shred functions or a lists of the sporked shreads. (Nothing you cant do with mini audicle so far..)  There will be no direct connection between the programm and chuck. once chuck is started, all interaction will be done using osc messages - start/stop shreds, keeping the list of running shreds etc..

then there are these special features - very often I do pattern-oriented / loop based stuff when i use chuck. my intention is to create some helping features for that.
for example i want to have something like code plugins - a feature that writes some code for you.. mainly they should assist you in tasks that are very basic and can be used in many situations, but need a lot of code writing or are bad to handle..

Its hard to explain in general, so look one example:

I often create patterns or sequences using array data. so some typical chuck code looks like this:

BlitSaw osc => LPF filt => dac;

[ 44, 54, 44, 54, 54]  @=> int note;
[ 0.5, 0.5, 0,5, 0.25, 0.25]  @=> float length;
[8000, 12000, 8000, 12000, 12000] @=> float freq;

int actual = 0;
while(1)
{
   playnote (note[actual], length[actual], freq[actual]);
   actuall ++; 
   // if (actual > 5) 0 => actual; .. and so on...
}

this plays a simple little sequence..

Now what i like to do is create a 'Table' or 'Array' Plugin. It will have a user interface that provides a table (like for example in excel) where you can enter your data. The table (columns etc) can be defined by the user - in this case i would create a table with 3 columns, like this:

-----------------------------------------
|   note   |   length   |   freq   |
-----------------------------------------
|  44       |   0.5       |  8000  |
-----------------------------------------
|  54       |   0.5       | 12000 |
-----------------------------------------
|  44       |   0.5       |  8000  |
-----------------------------------------
|  54       |   0.25     | 12000 |
-----------------------------------------
|  54       |   0.25     | 12000 |
-----------------------------------------

so you can enter your values in a more easy and comfortable way.. extra features like select multiple cells / copy and paste etc. would make life much easier.. when sporking that file, the plugin will write code that creates the arrays to your file..
the plugin could also write some additional code that creates for example an osc receiver with an array updating function.. so while the shred is running, and you change the value of a cell, the plugin sends an update osc message to the shred, which updates the changed array element immediately.. so you change sequences (or anything that uses data stored in arrays) without stopping or replacing the shred.. (all that done by the pugin, you just have to create a table, enter data, and user that data in your code).
Also, you can do it the other direction: if you update array elements using a function that sends a osc message back to the program (provided the plugin ) the table will be updated.. One way to keep / store data generated from within chuck.. i know some people asked about sth like that..

Just one of many ideas..  besides those plugins there will be some other basic components like a file browser, with sample preview function (as i also often use samples)
the preview function would do nothing more than create some code like:

sndbuf buf => dac;
"mysample.wav" => buf.read;
buf.length => now;

then the plugin would write that code to a temporary file and sporks it.. So many stuff could be done which are very easy to implement, by just generating some code and let chuck do the work :-)

As the Program mainly consists of UI stuff and no realtime / time critical stuff is needed,  it is written in .Net, i know some people will not like that but it is perfect for those tasks.. And if some other people using linux or osx are interested, let me know, then i would keep in mind to only use parts of the framework that are impelementes in mono too, which i didn't look after so far..

I really would love to hear some opinions about the ideas.. and i hope i can come up with a first version soon..

--
tazumi