Ah, it was sporking that I should have been doing. That really cleans things up a lot. Thanks a ton for the advice and other pointers.

I also added a static instance() method that takes care of the member variable assignment as well. Code here, for anyone's reference.

Thanks!

Curtis


On Sun, Jan 20, 2013 at 1:12 PM, Stefan Blixt <stefan.blixt@gmail.com> wrote:
Hi!

It looks like you are using the two signal paths in a similar way, so the first thing you can is to organise the samey stuff in a class. Basically whereever you have copied something and added "2" at the end.


Here's a rearranged version of your code (finally got around to testing github :) ):


https://github.com/Antimon262/curtisullerich_test/blob/master/tmp1.ck


The bottom code that generates stuff is pretty much as you wrote it. The top stuff is a class with some common stuff, the play method (it's like yours except it uses data stored in the object (defined by the class) instead of taking arguments), and a method that mimics what you did in your endless loop.


Below that is some initalization of the two objects, followed by this:


spork ~ mySynths[0].startPlaying();

spork ~ mySynths[1].startPlaying();


... which starts up two endless loops in parallell as defined by startPlaying() in the MySynth class. These loops will run simultaneously and stay in sync forever.

After that is the endless loop that you need to have in a ChucK program like this, since it isn't enough to have endless loops running in shreds (started by spork), you need to have something going on in the main program as well.

The benefit here is that you don't have to type everything twice, or fix bugs in two places etc. If you need more stuff to differ between the classes, just add variables in side them and and code to initialize them.

I haven't looked that closely yet at the rest of the code, but my basic approach to coding ChucK is: if you can read it and see that it works, it's all right. If it's difficult to manage, try to bundle stuff like I described here. If it's difficult to read, try to change it around, experiment.

/Stefan



On Sun, Jan 20, 2013 at 6:05 PM, Curtis Ullerich <curtullerich@gmail.com> wrote:
Hello,

In my experiments with ChucK I've reached the point of wanting to use multiple instruments in polyphony (two Moogs in this case). 

My example is on GitHub here.

My usage pattern feels awkward and not very clean, and I'm hoping someone else has encountered the same situation. My question: What is a good way to manage and use multiple instruments in ChucK?

It seems like a simple thing to want to do, but I haven't found any examples in the doc that work this way. Am I completely backwards about how I want to accomplish polyphony?

My particular use case is made most awkward because I'm using an ADSR envelope. I think it's mostly ChucK's style of time tracking/advancement that's derailing me. If I'm not describing this well enough, please let me know. Any advice is appreciated. 

Thanks!

Curtis


_______________________________________________
chuck-users mailing list
chuck-users@lists.cs.princeton.edu
https://lists.cs.princeton.edu/mailman/listinfo/chuck-users




--
Release me, insect, or I will destroy the Cosmos!

_______________________________________________
chuck-users mailing list
chuck-users@lists.cs.princeton.edu
https://lists.cs.princeton.edu/mailman/listinfo/chuck-users