The engine needs to have the following capabilities: Play a buffer "soundfile.wav" out of a single channel n with gain g Play a buffer "soundfile.wav" out of channels [n1,n2,n3, ...] with gains [g1,g2,g3, ...] Play a buffer "soundfile.wav" out of ALL channels with gain g Provide a reference to playback instances so they can be killed, have gains updated, etc.
This above is all easily done, and I am guessing you have an idea about how to do it. Development Plan: Develop synthDefs for the capabilities above that can be called with args above. The synthDef should "die" once playback is done.
Why should the SynthDef 'die'? Just curious... If you use arguments correctly, and build fairly modular SynthDefs, you can use them over and over again... Or - do you mean that once the playback is done that the Synth you created (a Synth is the playing of a SynthDef) frees itself? If it is this, then either create an envelope that is the duration of the sample with a doneAction of 2, or wrap the PlayBuf output into a FreeSelfWhenDone UGen. "Install" those synthDefs (not sure of terminology here) permanently on scserver so they will be available at server startup. Not sure how to do this.
.load the SynthDef. This writes out a binary representation of the SynthDef that is stored on disk. Then, the SynthDef is loaded when the Server boots Create new synthDef instances on the server by sending OSC messages from our Java app. I hope to do this with JavaOSC or JCollider.
'Instances' of the SynthDef are called Synths, or are created with the '/s_new' OSC tag. Any OSC capable app can do this. Is there any reason not to use the SuperCollider language app? If there is, the next step is easy... Send back a reference to each new synthDef for remote Java control of that instance. Not sure how to do this.
a = Synth(\synthDefName, [\arg1, arg, \arg2, arg ... \argN, arg]);
'a' is the reference. Configure scserver to run at Mac OS startup. Not sure how to do this.
If you use the SuperCollider app, then place it in your startup items. OR - make a standalone app and make that a startup item. Then, once ti boots, you can have it execute code by altering Main.sc (and since you are altering Main.sc, I suggest making a stand-alone). Tell it to boot the server, and once the server boots, execute your code.
If you don't use SuperCollider.app, then you need to figure out a similar way to do this.
****************************************** /* Joshua D. Parmenter http://www.realizedsound.net/josh/
“Every composer – at all times and in all cases – gives his own interpretation of how modern society is structured: whether actively or passively, consciously or unconsciously, he makes choices in this regard. He may be conservative or he may subject himself to continual renewal; or he may strive for a revolutionary, historical or social palingenesis." - Luigi Nono */
|