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

[sc-dev] Impulse_next_aa




 Im trying to write a Impulse calcfunc when both the
freq and phase inputs are audio rates

 First an observation that may apply to different rate
versions of this; most of these Impulse only check
when the phase >=1.f, but doesnt check when phase
<0.f. That should also produce a spike and increase
phase by one.

Anyhow, this still is far from sounding as i expect,
but i dont see the flaw in this code:

void Impulse_next_aa(Impulse *unit, int inNumSamples)
{
	float *out = ZOUT(0);
	float *freq = ZIN(0);
	float *phaseOffset =  ZIN(1);
	
	float freqmul = unit->mFreqMul;
	double phase = unit->mPhase;
	double rate_acum = 0.f;	
	
	LOOP(inNumSamples, 
		float z;
	     
		if (phase >= 1.f) {
			rate_acum -= 1.f;
			z = 1.f;
		} else if (phase < 0.f) {
		  rate_acum += 1.f;
		  z = 1.f;
                }                  
                else {
			z = 0.f;
		}
		rate_acum += (ZXP(freq) * freqmul);
                phase = rate_acum + ZXP(phaseOffset);
		ZXP(out) = z;
	);

	unit->mPhase = phase;
}


 This sounds like a lot more of spikes than it should

{Impulse.ar(SinOsc.ar(0.0,add:0.0,mul:0.01),
SinOsc.ar(1,mul:10))}.play

 Note that im adding up the rate_acumulator in a
separate variable, and phase is always that number
plust the phase offset input. this phase is checked,
but the value is adjusted on rate_acum only.



 Any suggestions? im missing something obvious?


 Cheers


=====
Running on:
1.5 Ghz P4
256Mb 
asus v800x chipset
RH9 CCRMA-patched linux


	

	
		
___________________________________ 
¡Llevate a Yahoo! en tu Unifón! 
Ahora podés usar Yahoo! Messenger en tu Unifón, en cualquier momento y lugar. 
Encontrá más información en: http://ar.mobile.yahoo.com/sms.html