[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