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

Re: [sc-users] buffers and 'spawns' : SC3



ok . . . ! Thanks, guess I was getting a little over sentimental about all
those poor little dead synths. You have answered my question, though
probably spawned a few more. I'll re write with this new found knowledge.

Jem


on 18/12/02 1:12, crucial felix at felix@xxxxxxxxxxxxxxxxxxx wrote:

> 
> On Tuesday, December 17, 2002, at 07:48 PM, Jem Finer wrote:
> 
>> - I've been using a routine to do a basic form of Granular Synthesis .
>> . .
>> in the same way as I used to use a Spawn (except the Playbuf stuff is
>> in a
>> Synthdef) . . . but what I was wondering is whether this is the way to
>> do
>> such a thing as it seems to use a hell of a lot of CPU . . . well
>> according
>> to the OS X CPU Monitor anyway.
>> 
>> Like, maybe there's some other thing I haven't discovered yet.
>> 
>> 
>> Re the buffer . . . is there then an optimum size to make it ?
> 
> wait up.. my previous email was telling you about streaming sound files
> from disk.
> you are loading whole (small) files in.
> 
> when using \buffer_readAlloc it will allocate the buffer for the size
> of the soundfile.
> you don't even need to know.
>> 
>> One other thing . . . once you've read a soundfile to a buffer is
>> there a
>> call to get it's size a la blahblah.size in SC2 . . . maybe the same
>> but not
>> sure how to write it.
> 
> on the synth side you can use some of the sample info ugens.
> on the language side you can open it with SoundFile and read the
> headers.
> 
>> 
>> 
>> oh yeah, while I'm here : everytime I call the SynthDef from the
>> routine I'm
>> giving it a new node. This seems a bit crazy in that after a while
>> I've got
>> through 1000's.
> 
> they're just numbers. the synth's themselves are dead.
> you should use the Server's synth node allocator.
> do not roll your own.
> 
>> Thought that the envelope DoneAction in the SynthDef might
>> sort it out set at 3 but it messes with the iteration. Surely there
>> must be
>> a way to kill a node and reallocate it.
> 
> think of all the little synths you've created in sc2 over your life.
> all of them....
> dead.  and nameless.  if we had given them all names, maybe you would
> care about
> all of them more ?
> a granulation in sc2 creates oodles of them, and has to compile the
> ugen graph each time.
> 
> 
>> Maybe I should send the simple code :
>> 
>> s.boot;
>> 
>> (
>> SynthDef("samplePlayerEnv",{
>> arg bus = 0, buffer = 0, pitch = 1,out = 0, start = 0, loop = 1,length
>> =
>> 1,trigger = 1;
>> var e,eg,soundout;
>> e = Env.new([0,1,1,0],[0.05,0.9,0.05],'sin');
>> soundout = PlayBuf.ar(2, buffer, pitch, trigger, start, loop);
>> eg = EnvGen.ar(e, timeScale: length,doneAction: 2);
>> Out.ar(out,soundout * eg)
>> }).writeDefFile;
>> s.sendMsg("/d_load", "synthdefs/samplePlayerEnv.scsyndef");
>> )
>> 
>> s.sendMsg("/b_alloc",0,100,2);
>> 
>> s.sendMsg("/b_allocRead",0,"Sounds/ca loop 4.aiff");
> 
> you should use the Buffer object
> 
> also you are allocating the buffer twice.
> 
> b = Buffer.read(s,"Sounds/ca loop 4.aiff");
> 
> much easier.
> then b.bufnum gives the bufnum
> 
> 
>> 
>> (
>> 
>> var r;
>> 
>> 
>> r = Routine({
>> inf.do({ arg i;
>> 
>> {
>> //basic iteration, length controls "grain duration"
>> s.sendMsg("/s_new", "samplePlayerEnv", 1001 + i  ,1,
>> 0,'length',1,'start', 10000 * i,'trigger', Impulse.ar(1));
> 
> you should use the Synth object (check the swiki, its not in the CVS
> yet).
> 
> Synth.new("samplePlayerEnv",[ 'length',1.0,'start',10000 *
> i,'trigger',   .ummm.. ])
> 
> you can't send an Impulse.ar like that !
> 
> Synth does not yet use the Server's synthID allocators, but it will.
> 
>> 
>> }.defer;
>> //wait controls "grain rate"
>> 0.5.wait;
>> });
>> 
>> });
>> SystemClock.play(r);
>> )
>> 
>> SystemClock.clear;
>> 
>> s.quit
> 
> 
> you should try to do this all in the same Synth.
> 
> use the PlayBuf trigger, and see if you can set up a sample and hold on
> the pitch.
> so at each trigger from the Impulse.ar
> (which is either inside of the SynthDef or patched into the synth from
> another synth
> using the busses).
> the pitch gets locked, the Playbuf gets trigged.
> 
> then you are doing it all inside of one synth, and no routine at all.
> 
> 
> -felix
> 
> _______________________________________________
> sc-users mailing list
> sc-users@xxxxxxxxxxxxxxx
> http://www.create.ucsb.edu/mailman/listinfo/sc-users