Hi all, I'm wondering how one might build an example of this technique where one can continuously vary the duty cycle from <100% to >100j%. The example provided with pd, B03.tabread4.pd, only covers 100% and less. It seems to me that when the duty cycle D is 100% < D <= 200% one would need 2 tabread4 objects, and 200% < D < 300% one would need 3, etc, It also seems that there are some subtle issues around the relative phase of each tabread4 object and making them stop when they reach the end of the table. I was thinking of "allocating" an abstraction to play out the table at a given speed, once per cycle, and mixing all the outputs together, but that looks to be computationally too expensive (don't laugh, I'm new to signal processing). Any bright ideas out there?.
-
Timbre stretching, ch 2.4, Theory & Technique of Electronic Music
-
@jameslo Try this. The help file has the dsp meter attached, which will give you an idea of the computational expense. There might well be other ways to do this, and this might not do what you want...... but.....!?..........pd\extra\iem_spec2\spec2_stretch~-help.pd
-
@whale-av I'm not sure that that example is demonstrating the technique in question (assuming I understand the technique) because it only affects the first half of the wave table and doesn't perform the tail mixing that I think is required for stretch factors > 1. It looks like it just clips the output after blocksize/2+1 samples. Plus, I'd rather see a patch/abstraction so I can learn some more PD idioms.
This morning it occurred to me to draw the required phasor~ signals at various duty cycles and I think I can figure out some kind of formula to massage the phasor~ output into the required signals, not unlike B03.tabread4.pd, but I'm pretty sure that means that any patch I build will have to switch from one topology to another as I cross the 100%, 200%, 300%... duty cycle boundaries. Can you or anyone else confirm that? My naive allocation approach above would not change over those boundaries--I'd just need to have enough instances to cover all the overlapping cycles--but again I don't think it's possible to do that on a cycle by cycle basis..
-
OK, so here is how I imagine a PD programmer would solve this for duty cycles between 100% and 200%. Compare with B03.tabread4.pd. See how the structure is different? How would you combine this with B03 to smoothly and accurately cross the 100% boundary? Or would you do it an entirely different way altogether?