[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [sc-dev] Some 3.3 work



Hmm... except, this doesn't really solve the problem (at least in my mind). What I thought of in relation to this when we talked about it sometime ago was that something like this would work:

SynthDef(\test, {arg out = 0, freq, mul = 0.1;
	Out.ar(out, SinOsc.ar(freq, 0, mul))
	}).send(s);
	
a = Synth.new(\test, [\freq, 440]);

b = Synth.new(\test, [\freq, 200, \mul, 440 * 4, \out, 10]);

// set the freq input to the audio bus 10
// this is a made up syntax, just to illustrate what I though the idea was
a.mapToAudio(\freq, 10);

Is this what you meant Andrea? I started thinking about how to do this some time ago, and came up with a few ideas...

1) make all Busses part of the same structure (no audio or control per se). 2) Make the first portion (let's say, busses 0 -127) audio, therefore arrays (pointers) of s.options.blockSize 3) make the rest (let's say 128 - 4096) single values (just like the current control busses)
... here is where I don't know how to solve the problem ...
4) Make Control a UGen that outputs its rate (based on bus number) and either the audio signal OR a scaler. 5) 4 (above) causes problems - another possible idea is to make Control always output blockSize samples, either as its audio output, or as linearly interpolated control data (doing the work that the input UGen would be doing otherwise - other UGens then see all Control UGens as audio data - which is a problem as well). Control.names gets iffy. 6) Maybe make all args to a SynthDef a special kind of Control (.ar?) that behaves as above, but you can still create Control.names.kr UGens in the SynthDef by hand? 7) OR - make the default control be as it is now, but the user can specify a rate in the rates part of the SynthDef, making the above:

SynthDef(\test, {arg out = 0, freq, mul = 0.1;
	Out.ar(out, SinOsc.ar(freq, 0, mul))
	}, [nil, \ar, nil]).send(s);

Now - freq is a Control that takes care of things as described in option 5 above, while the others are just the normal Controls that a SynthDef wraps all args in.

I believe changes in Bus would prevent code breakage with the renumbered bus approach. The only code I can really see breaking is hard coded control and audio bus ids (since there would no longer be things like control bus '0')... or maybe that step isn't necessary? Though I don't see any other way for the Control.ar method to know whether a bus is audio or control (other then doing a < check on the id).

Ideas?

Josh

On Dec 17, 2008, at 10:03 AM, Julian Rohrhuber wrote:

Just to know and to bring some ideas from a user pov:

- What about mapping audio buses as synth controls for 3.3?
<http://sourceforge.net/tracker/index.php?func=detail&aid=1991641&group_id=54622&atid=474251 >http://sourceforge.net/tracker/index.php?func=detail&aid=1991641&group_id=54622&atid=474251




here is a solution, a bit of a hack, but works as long as there is no change in the synthDef format.

(
q = ();
q.audioBusses = Bus.control(s, s.options.numAudioBusChannels);
q.audioBusses.setn((0..s.options.numAudioBusChannels-1));
q.mapAudio = { |q, node, key, bus|
	node.set(key, bus);
};
q.audioControl = { |q, key, numChannels|
	In.ar(Control.names(key).kr(0), numChannels)
};
)

(
a = {
	SinOsc.ar(q.audioControl(\freq, 2)) * 0.1

}.play;

b = { Out.ar(62, LFNoise2.ar(1.dup).exprange(800, 1700)) }.play;
);


q.mapAudio(a, \freq, 62);


I'll see if I can implement it in JITLib, so that it can be used easily.
--





.

_______________________________________________
sc-dev mailing list

info (subscription, etc.): http://www.beast.bham.ac.uk/research/sc_mailing_lists.shtml
archive: https://listarc.bham.ac.uk/marchives/sc-dev/
search: https://listarc.bham.ac.uk/lists/sc-dev/search/

******************************************
/* 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
*/


_______________________________________________
sc-dev mailing list

info (subscription, etc.): http://www.beast.bham.ac.uk/research/sc_mailing_lists.shtml
archive: https://listarc.bham.ac.uk/marchives/sc-dev/
search: https://listarc.bham.ac.uk/lists/sc-dev/search/