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

Re: [Sc-devel] adding UGens / classes



Also... like I said, I think it should only be a few of these. InGrain is my idiosyncratic way of granulating live input, and I don't think it would have general use. I think SinGrain, FMGrain and BufGrain (along with the options to pass in windows) are the ones to do. They can even be only 3 UGens - add a parameter for panning and Envs (with a default one already there). These are now changing enough from the ones I have that I wouldn't mind just building 3 new ones and leaving all mine out.

Other then that, it sounds like there was some consensus for Warp1, MoogFF and the reverbs? Is that right?

Josh

On Nov 27, 2007, at 6:41 AM, Josh Parmenter wrote:


I agree that a subset seems appropriate, as granulation can be very idiosyncratic and vary quite a lot in small ways between implementations, so very basic tools are probably what we want.

Just to play devil's advocate:

What does BufGrain give you that TGrains doesn't?

BufGrain doesn't require output to be stereo or more, and BufGraiB give you the envelope on the grain by grain basis.


Is MonoGrain different from InGrain in any way other than an alternate interface?

Yes... makes it work like the other grain ugens (trigger based). BufGrain, like the others, also all have a similar interface, making them a little more interchangeable.

Do SinGrain and FMGrain give you any real advantages over just doing it with a few UGens? (i.e. besides convenience; only a couple of lines of code after all)

Well... I'm not sure what you mean. How would you do the functionality of SinGrain or FMGrain in only a couple UGens?


SynthDef(\fm_grain_test, {arg gate = 1, amp = 1;
	Out.ar(0,
		FMGrain.ar(Impulse.ar(100), LFNoise1.kr.range(0.1, 0.2),
			Line.kr(660, 220, 10), Line.kr(100, 200, 10),
			Line.kr(1, 10),
			EnvGen.kr(
				Env([0, 1, 0], [1, 1], \sin, 1),
				gate,
				levelScale: amp,
				doneAction: 2)
			) * EnvGen.kr(Env([0, 1, 0], [1, 1], \sin, 1), doneAction: 2)
		)
	}).load(s);
	
s.sendMsg(\s_new, \fm_grain_test, a=s.nextNodeID, 0, 1, \amp, 0.2);
s.sendMsg(\n_set, a, \gate, 0);

I can't think of how else to do this without having the language create the grains. This gives you one synthdef, and a global env.

Flexible envelopes is the thing I miss most from TGrains, and one of the reasons I do have my own granular stuff. (It after all can make a rather large difference in the result.) So that would be something that I'd like to see in the distro. Personally I think I'd prefer being able to pass Envs as args rather than the buffer approach though. I assume it's done that way for efficiency, but in most cases IME (I'm often producing reasonably large numbers of simultaneous grains) I don't think the overall load is that significant. That might be an argument to go for the convenience, and leave it to a custom solution or Quark for those who really need to squeeze out every drop of CPU.

Making versions that take Envs would be fine for me also. Like I said, I would also like to add a numChannels option that lets the user output the grains as mono, stereo, etc with grain by grain panning.

Josh


S.

______________________________________________

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


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