[sc-users] impulse pops

Josh Parmenter josh at realizedsound.net
Fri Feb 1 18:16:12 PST 2008


have you tried using the BBandPass filters in the BEQSuite from sc3- 
plugins?

These are all SOS based... perhaps they won't have the problem though  
(I use them quite a bit and haven't noticed any pops).

http://sourceforge.net/projects/sc3-plugins/

Best,

Josh

On Feb 1, 2008, at 6:05 PM, stillmovement wrote:

>
> Sorry for the delayed response.
>
> I wound up rewriting my waveguides to use BPF in lieu of SOS and  
> solved my
> popping issues.  However, SOS sounds better to my ears and I would  
> love to
> figure this out for the future.
>
> Try the code below.  If I execute this enough times I'll eventually  
> get a
> pop as described in my previous post.  Again, it's very  
> unpredictable and
> intermittent but it happens enough to be an issue.
>
> Thanks.
>
>
> // A server with some options
>
> (
>
> ~serverOptions = ServerOptions.new;
> ~serverOptions.memSize_( 65536 );
> // maker sure outputStreams set to "01000" for 828 use
> ~serverOptions.outputStreamsEnabled_( "10000" );
>
> s = Server.new( 'primary', NetAddr( "127.0.0.1", 57130),  
> ~serverOptions );
> s.makeWindow;
> s.boot;
>
> )
>
>
>
> // a window and some Routines
>
> (
>
> var testWindow, beatOneLabel, beatOneButton, beatThreeLabel,
> beatThreeButton;
> var lowChord, highChord;
>
> testWindow = SCWindow.new( "Will my BiQuads Work?", Rect( 400, 300,  
> 300, 150
> ), false );
>
>
> beatOneLabel = SCStaticText(
> 		testWindow,
> 		Rect( 20, 20, 100, 20)
> 	)
> 	.string_( "Play First:" );
>
> beatOneButton = SCButton(
> 		testWindow,
> 		Rect( 20, 40, 60, 30 )
> 	)
> 	.states_( [ [ "Play!", Color.black, Color.clear ] ] )
> 	.action_( { lowChord.reset.play; } )
> 	.canFocus_( false );
>
> beatThreeLabel = SCStaticText(
> 		testWindow,
> 		Rect( 100, 20, 100, 20)
> 	)
> 	.string_( "Play Second:" );
>
> beatThreeButton = SCButton(
> 		testWindow,
> 		Rect( 100, 40, 60, 30 )
> 	)
> 	.states_( [ [ "Play!", Color.black, Color.clear ] ] )
> 	.action_( { highChord.reset.play; } )
> 	.canFocus_( false );
>
>
> testWindow.front;
>
>
> lowChord = Routine({
>
> 	[ 54, 65, 74, 76, 83, 87 ].do({ arg tone;
>
> 		var tempY, tempX;
> 			
> 		tempY = 1.0; //rrand( 0.0, 1.0 );
> 		
> 		tempX = 0.25**tempY * [ 1, -1 ].choose;
> 		
> 		s.sendMsg( "/s_new", "GongChord", -1, 0, 0, "pch",
> 			tone.midicps * rrand( 0.997, 1.002 ),
> 			"amp", 0.35, "dur", 5.5, "panX", tempX,
> 			"panY", tempY, "outBus", 0
> 		);
> 		
> 		rrand( 0.0005, 0.001).wait;
> 		
> 	});
>
> });
>
>
> highChord = Routine({
>
> 	[ 80, 86, 93, 96 ].do({ arg tone;
> 		
> 		2.do({
> 		
> 			var tempY, tempX;
> 			
> 			tempY = 1.0; //rrand( 0.0, 1.0 );
> 			
> 			tempX = 0.25**tempY * [ 1, -1 ].choose;
> 			
> 			s.sendMsg( "/s_new", "GongChord", -1, 0, 0, "pch",
> 				tone.midicps * rrand( 0.997, 1.002 ),
> 				"amp", 0.35, "dur", 5.5, "panX", tempX,
> 				"panY", tempY, "outBus", 0
> 			);
> 			
> 			rrand( 0.0005, 0.001).wait;
> 			
> 		});
> 		
> 		rrand( 0.0005, 0.001).wait;
> 		
> 	});
> 	
> });
>
>
> )
>
>
>
> // SynthDef
> (
>
> SynthDef("GongChord", { arg amp = 1, pch = 440, fbAmp = 0.9, dur =  
> 6, q =
> 3000,
> 						panX = 0, panY = 0, outBus = 0;
> 		
> 	var env, sus, feedback, exciter, fSig = 0, dSig = 0;
> 	var fHarm, mSig = 0;
> 	var signal, crDur;
> 	
> 	// adjust dTime with
> 	crDur = ControlRate.ir.reciprocal;
> 	
> 	feedback = Median.ar( 10, LocalIn.ar( 1 ) * fbAmp );
> 	
> 	// controls overall sustain and deallocation of synth
> 	// synth will sustain for twice the specified dur argument
> 	sus = EnvGen.kr( Env.new( [ 1, 1, 0 ], [ dur * 1.5, dur * 0.5 ],  
> -2 ),
> doneAction:2 );
> 	
> 	// envelope applied to exciter
> 	env = EnvGen.kr( Env.new( [ 10, 10, 0.00001, 0.75, 0.75, 0.0001 ],
> 			[  0.0004, 0.0004, 0.4,  dur * 0.1, dur * 0.8 ],
> 			[ 'step', 'step', 'step', 'step', 'exponential' ], 0, 0
> 		)
> 	);
> 	
> 	exciter = (
> 		(
> 			Median.ar(
> 				3, BrownNoise.ar( 1 ) + WhiteNoise.ar( 0.5 ) +
> 				LPF.ar( LFClipNoise.ar( 500, 0.83 ), 200 )
> 			) * env )
> 		+ feedback
> 	);
> 	
> 	// some overtones.... yes 1 is reinforced, and a subharmonic is  
> added later
> 	fHarm = Control.names( [ \modalFreqs ] ).kr( [
> 		1, 1, 2.4044943820225, 3.9831460674157, 6.5168539325843,  
> 9.3876404494382,
> 		12.511235955056, 15.915730337079, 23.702247191011, 27.786516853933,
> 32.994382022472,
> 		37.792134831461, 0.5 ]
> 	);
> 	
> 	// basic harmonic structure
> 	fHarm.do({ arg harm, i;
> 	
> 		var theta, kpole1, a0, a1, a2, b0, b1, b2, alpha;
> 		var bCF, dTime;
> 		
> 		bCF = pch * harm;
> 		
> 		theta = bCF/22050 * pi;
> 		alpha = max( sin( theta ) / ( 2 * q ), 0.0 );
> 		b0 = alpha;
> 		a0 = alpha + 1;
> 		b1 = 0;
> 		b2 = alpha.neg;
> 		a1 = -2 * cos( theta );
> 		a2 = 1 - alpha;
> 		
> 		dTime = ( 1 / bCF ) - crDur;
> 		
> 		fSig = SOS.ar( exciter, b0 / a0, b1 / a0, b2 / a0, ( a1 /  
> a0 ).neg, ( a2 /
> a0 ).neg, 1 );
> 		
> 		dSig = DelayL.ar( fSig, 0.05, dTime, 0.45 ) * ( ( 1 / ( i +  
> 1 ) )**0.5 );
> 		
> 		mSig = mSig + dSig;
>
> 	});
> 	
> 	// excite some formants
> 	[ 184.99721135582, 220, 311.12698372208, 349.4 ].do({ arg form, i;
> 		
> 		var theta, kpole1, a0, a1, a2, b0, b1, b2, alpha;
> 		var bCF, dTime;
> 		
> 		bCF = form;
> 		
> 		theta = bCF/22050 * pi;
>
> 		alpha = max( sin( theta ) / ( 2 * q ), 0.0 );
> 		b0 = alpha;
> 		a0 = alpha + 1;
> 		b1 = 0;
> 		b2 = alpha.neg;
> 		a1 = -2 * cos( theta );
> 		a2 = 1 - alpha;
> 		
> 		dTime = ( 1 / bCF ) - crDur;
> 		
> 		fSig = SOS.ar( exciter, b0 / a0, b1 / a0, b2 / a0, ( a1 /  
> a0 ).neg, ( a2 /
> a0 ).neg, 1 );
> 		
> 		dSig = DelayL.ar( fSig, 0.05, dTime, 0.75 );
> 		
> 		mSig = mSig + ( dSig * 0.05 );
>
> 	});
> 	
> 	
> 	LocalOut.ar( mSig );
> 	
> 	// bring level up the adjust with amp arg
> 	signal = ( mSig * 90 ) * amp;
> 	
> 	OffsetOut.ar( outBus, Pan4.ar( signal * sus, panX, panY ) );
> 	
> }).load( s );
>
>
> )
>
>
>
>
>
> Josh Parmenter wrote:
>>
>>
>> On Jan 21, 2008, at 4:19 PM, stillmovement wrote:
>>
>>> Does anybody have any ideas?  My thoughts have run the gamut:
>>> architecture
>>> differences between PPC and Intel (the BiQuads/Delays may have a
>>> heavy cost
>>> at instantiation which memory latencies or processor slewing could
>>> effect?);
>>> threading issues internal to SC (the GUI/midi similarity with /s_new
>>> calls
>>> encapsulated within functions related to those classes); an Intel-
>>> dependent
>>> bug with SOS; something else?
>>
>>
>> can you show me an example of the heavy instantiation? Or code that
>> pops every now and then? Hard to tell what it is without an example.
>>
>> -Josh
>>
>>
>> ******************************************
>> /* 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-users mailing list
>> sc-users at create.ucsb.edu
>> http://lists.create.ucsb.edu/mailman/listinfo/sc-users
>>
>>
>
> -- 
> View this message in context: http://www.nabble.com/impulse-pops-tp9717021p15238792.html
> Sent from the Supercollider - User mailing list archive at Nabble.com.
>
> _______________________________________________
> sc-users mailing list
> sc-users at create.ucsb.edu
> http://lists.create.ucsb.edu/mailman/listinfo/sc-users

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



More information about the sc-users mailing list