> If the phase is <0.5, then we're receiving pulses at more than double > the current freq. In that case, don't update phase, update frequency. > If the phase is >0.5 and <2.0, then we're within one octave. > The maximum phase update amount is (1-phase) > The maximum frequency update amount is ((1-phase)/phase)*freq > Then, if the phase is >2.0, then the input freq is more than 1 octave > lower. In this case, don't update phase, update frequency.
The cool part is this can all be implemented at a basic level in just a few lines of code with fexpr~! (I started in on it just to write this part, figuring it takes me 20 min) fexpr~ modf($y1+$f5*$y2+$f3*$x1*$y3); if($y6!=$y6[-2], $y6, $y2+$f4*$x1*$y4); if($y5<0.5, 0, if($y5<2, 1-$y5, 0)); if($y5<0.5, $y2, if($y5<2, (1-$y5)/$y5*$y2, -1.414*$y2/sqrt($y5))); if($x1[-1]==1, $y1+$f5*$y2, $y5+$f5*$y2); if($y6!=$f2, $f2, $y6) But just so difficult to explain, I created a mathcha document for it, if you expected to be able to start modifying it and tuning it up for use. https://www.mathcha.io/editor/OBgdJIo6UzgsgZHp8K1VSjK188YTN4eVJyHrz1q8G work in progress _______________________________________________ Pd-list@lists.iem.at mailing list UNSUBSCRIBE and account-management -> https://lists.puredata.info/listinfo/pd-list