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

Re: [sc-users] How to loop with crossfade ?



maybe this helps. it uses some kind of equal power x-fade. changing rate and numFrames at runtime is a bit tricky because in some cases a trigger might be lost ...

	(
		var numChannels = 2;   // or whatever
		var defName = "loopUnit" ++ numChannels;

SynthDef.new( defName, { arg out, aInBuf, rate = 1.0, startFrame = 0, numFrames; var lOffset, gate1, gate2, lLength, play1, play2, trig1, trig2, duration,
				dlyDur, env, amp1, amp2, output, gateTrig1, gateTrig2;
			
trig1 = LocalIn.kr( 1 ); // LFPulse.kr( freq: LocalIn.kr( 1 ).max ( 0.1 ));
			gateTrig1	= PulseDivider.kr( trig: trig1, div: 2, start: 1 );
			gateTrig2	= PulseDivider.kr( trig: trig1, div: 2, start: 0 );
			lOffset	= Latch.kr( in: startFrame, trig: trig1 );
			lLength	= Latch.kr( in: numFrames, trig: trig1 );
			duration	= lLength / (rate * SampleRate.ir) - 2;
			gate1	= Trig1.kr( in: gateTrig1, dur: duration );
			env		= Env.asr( 2, 1, 2, \lin );	// \sin
			
play1 = PlayBuf.ar( numChannels: numChannels, bufnum: aInBuf, rate: rate, loop: 0,
								trigger: gateTrig1, startPos: lOffset );
play2 = PlayBuf.ar( numChannels: numChannels, bufnum: aInBuf, rate: rate, loop: 0,
								trigger: gateTrig2, startPos: lOffset );
			amp1		= EnvGen.kr( env, gate1, 0.999 );  // 0.999 = bug fix !!!
			amp2		= 1.0 - amp1.squared;
			amp1		= 1.0 - amp1;
			amp1		= 1.0 - amp1.squared;
			output	= (play1 * amp1) + (play2 * amp2);

			Out.ar( out, output );
		
			LocalOut.kr( Impulse.kr( 1.0 / duration.max( 0.1 )));
		}).send( s );
	)


Am 31.10.2007 um 08:39 schrieb Alessandro Fogar:

Hi,

I'm looking for a way to loop a buffer with crossfades.

The actual ways to do it (LoopBuffer, RedPhasor) doesn't take into account this.

If somebody did already implement this please let me know.

All the best

--
Alessandro Fogar

http://www.fogar.it
_______________________________________________
sc-users mailing list
sc-users@xxxxxxxxxxxxxxx
http://www.create.ucsb.edu/mailman/listinfo/sc-users