On Mon, Mar 13, 2023 at 7:41 AM Simon Iten <[email protected]> wrote: > > hi charles, > > thanks for doing this!!
You're welcome. I guess what I really meant to say is: I have a few days off of work and what I wanted to do was play with synchronizing oscillators. I just didn't know why yet. > i copied your first patch (with the changes you suggested) to my bela and > hooked up my hexaphonic bass pickup to it (well one string to start), and it > works pretty well! > > i will play with the threshold settings etc. as it is now, the pitch seems to > go down a half step every time i stop a note on the bass so that the pll osc > is a semitone off. not sure this will be a problem in a “proper” > implementation, since i mostly want the pll to follow my playing (so i will > just mute the osc when i don’t play) The threshold should be adjusted, just above the noise level, so you don't get unrelated triggers. It's not very good at the low frequencies yet, but I suspect it comes from the choice of rising edge detector. Also, the phase updates are abrupt, and they could be smoothed out. > i do not currently grasp the math in the fexpr~ objects, but will try to get > into it… It's a simple kind of dynamical system. It responds based on its inputs but also its internal state when receiving inputs. That's why [fexpr~] works well for this. You can add additional expressions and reference them from each other. There can be internal hidden state variables, etc.... > is it hard to implement a detune factor? so that we could adjust the pll > transposition (octave up/down, fifth etc.) > > thanks so much already!! I know it's pretty buggy right now, but I wanted to get something out for you to try quickly. I was pleased with how strongly synchronizing it is. Drag the initial frequency to 0.3 Hz or up to 20000Hz and it still goes right back to the input frequency. I think there will be a few different versions of this oscillator, with different ranges of frequencies and effects, as I play with it this week. > > On 11 Mar 2023, at 19:49, Charles Z Henry <[email protected]> wrote: > > > >> 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 > _______________________________________________ [email protected] mailing list UNSUBSCRIBE and account-management -> https://lists.puredata.info/listinfo/pd-list
