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

[sc-dev] UGen creation q



So would this work for the audiorate one (havent done
the kr one)?

struct LFPulseLock : public Unit
{
        float mPhase, mFreqMul, mDuty, m_prevtrig;
};

void LFPulseLock_next_a(LFPulseLock *unit, int
inNumSamples);
void LFPulseLock_next_k(LFPulseLock *unit, int
inNumSamples);
void LFPulseLock_Ctor(LFPulseLock* unit);

void LFPulseLock_Ctor(LFPulseLock* unit)
{
        if (INRATE(0) == calc_FullRate) {
                SETCALC(LFPulse_next_a);
        } else {
                SETCALC(LFPulse_next_k);
        }

        unit->mFreqMul = unit->mRate->mSampleDur;
        unit->mPhase = ZIN0(1);
        unit->mDuty = ZIN0(2);
        unit->m_prevtrig = 0.f;
        
        LFPulse_next_k(unit, 1);

}

void LFPulseLock_next_a(LFPulseLock *unit, int
inNumSamples)
{
        float *out = ZOUT(0);
        float *freq = ZIN(0);
        float nextDuty = ZIN0(2);
        float duty = unit->mDuty;
        float prevtrig = unit->m_prevtrig;
        
        float freqmul = unit->mFreqMul;
        float phase = unit->mPhase;
        float frequency = ZIN0(0);              

        LOOP(inNumSamples, 
                float z;
                if (phase >= 1.f) {
                        phase -= 1.f;
                        duty = unit->mDuty = nextDuty;
                        // output at least one sample
from the opposite
polarity
                        z = duty < 0.5 ? 1.f : 0.f;
                } else {
                        z = phase < duty ? 1.f : 0.f;
                }
                if (prevtrig == 0.f && z == 1.f)
                        frequency = ZXP(freq);
                else { ZXP(freq); }
                prevtrig = z;
                phase += frequency * freqmul;
                ZXP(out) = z;
        );

        unit->m_prevtrig = prevtrig;
        unit->mPhase = phase;
}

void load(InterfaceTable *inTable)
{
        ft = inTable;

        DefineSimpleUnit(LFPulseLock);
}

__________________________________________________
Do you Yahoo!?
Yahoo! Mail Plus - Powerful. Affordable. Sign up now.
http://mailplus.yahoo.com