Patrice Colet wrote:
IOhannes m zmoelnig a écrit :
(i haen't seen [nnrepeat] on the website, so i
don't know what it does) with [repeat] or with the [s]/[r] idiom claude has proposed.
Apparently it does something like the attached patch, and the functionning is explained into the tutorial patch 06_break_symmetry.pd, I just need now to go on linux and compile to see how significantly faster is the external compared with the patch.
Again, I tried to create something similar in Pd, but ran into re-entrancy bugs whenever I tried to use recursion. I do not write externals lightly, but in this case I think it was necessary. If someone knows how to solve this in pure Pd, I'd be delighted.
Your abstraction doesn't do what you think it does in the presence of re-entrancy. See attached test patch.
With max-depth = 2 and repetitions = 2.
My [nnrepeat] external: ->: 2 0 ->: 1 0 <-: 1 0 ->: 1 1 <-: 1 1 <-: 2 0 ->: 2 1 ->: 1 0 <-: 1 0 ->: 1 1 <-: 1 1 <-: 2 1
Your [nnrepeat] abstraction: <-: 2 0 <-: 1 1 ->: 1 1 <-: 1 2 ->: 1 2 ->: 2 2 <-: 2 0 <-: 1 1 ->: 1 1 <-: 1 2 ->: 1 2 ->: 2 2
#N canvas 0 0 481 517 10; #X obj 71 95 r $0-recurse; #X obj 71 380 s $0-recurse; #X obj 140 270 t b a b; #X obj 224 290 v $0-depth; #X obj 224 310 - 1; #X obj 224 330 max 0; #X obj 162 350 spigot; #X obj 224 350 v $0-depth; #X obj 185 160 t b f; #X obj 185 183 v $0-depth; #X obj 185 208 pack f f; #X obj 140 290 v $0-depth; #X obj 140 330 v $0-depth; #X obj 140 310 + 1; #X obj 108 50 t a b; #X msg 108 21 nrepeat test; #X obj 285 108 v $0-depth; #X floatatom 262 77 5 0 0 2 max-depth - -; #X floatatom 261 38 5 0 0 2 repetitions - -; #X obj 246 108 f 3; #X obj 185 235 print ->; #X obj 98 160 t b f; #X obj 98 183 v $0-depth; #X obj 98 208 pack f f; #X obj 98 235 print <-; #X obj 108 135 nnrepeat 2; #X connect 0 0 25 0; #X connect 2 0 11 0; #X connect 2 1 6 0; #X connect 2 2 3 0; #X connect 3 0 4 0; #X connect 4 0 5 0; #X connect 5 0 6 1; #X connect 5 0 7 0; #X connect 6 0 1 0; #X connect 8 0 9 0; #X connect 8 1 10 1; #X connect 9 0 10 0; #X connect 10 0 20 0; #X connect 11 0 13 0; #X connect 13 0 12 0; #X connect 14 0 25 0; #X connect 14 1 19 0; #X connect 15 0 14 0; #X connect 17 0 19 1; #X connect 18 0 25 1; #X connect 19 0 16 0; #X connect 21 0 22 0; #X connect 21 1 23 1; #X connect 22 0 23 0; #X connect 23 0 24 0; #X connect 25 0 21 0; #X connect 25 1 2 0; #X connect 25 2 8 0;