// set target value void filter_ramp_in(filter_ramp* f, fract32 val) { f->x = val; f->sync = (val == f->y); if(BIT_SIGN_32(sub_fr1x32(f->y, f->x))) { f->sinc = negate_fr1x32(f->inc); f->dec = 1; } else { f->sinc = f->inc; f->dec = 0; } }
// calculate phase static inline void osc_calc_pm(osc* osc) { osc->idxMod = fix16_add( osc->idx, fix16_mul( FRACT_FIX16( mult_fr1x32x32( osc->pmIn, osc->pmAmt ) ), WAVE_TAB_MAX16 ) ); // wrap negative while (BIT_SIGN_32(osc->idxMod)) { osc->idxMod = fix16_add(osc->idxMod, WAVE_TAB_MAX16); } // wrap positive while(osc->idxMod > WAVE_TAB_MAX16) { osc->idxMod = fix16_sub(osc->idxMod, WAVE_TAB_MAX16); } }