My first puredata patch: Canoner! A cross between a delay and a looper, this patch allows you to play canons solo.

Hit Start/Round as you start playing, then again at a round point, and the patch will continue to play what you played with that delay until you hit Stop.

Extending the canoner to support n>2 part canons is left as an exercise for the reader.

Patch code:

#N canvas 405 217 363 240 10;
#X obj 26 34 tgl 40 0 empty empty empty 17 7 0 10 -204786 -1 -1 0 1
;
#X obj 26 84 route 1 0;
#X obj 214 201 delwrite~ round 10000;
#X obj 214 176 adc~;
#X obj 26 117 timer;
#X obj 26 148 delread~ round;
#X obj 26 198 dac~;
#X floatatom 165 149 5 0 0 0 - - -;
#X floatatom 129 149 5 0 0 0 - - -;
#X obj 26 174 *~ 0;
#X obj 101 34 bng 40 250 50 0 empty empty empty 17 7 0 10 -260097 -1
-1;
#X text 13 15 Start/Round;
#X text 106 14 Stop;
#X text 249 176 Input Stage;
#X connect 0 0 1 0;
#X connect 1 0 4 0;
#X connect 1 1 4 1;
#X connect 1 1 8 0;
#X connect 3 0 2 0;
#X connect 4 0 5 0;
#X connect 5 0 9 0;
#X connect 7 0 9 1;
#X connect 8 0 9 1;
#X connect 9 0 6 0;
#X connect 9 0 6 1;
#X connect 10 0 7 0;

updated: