Here's another little tap-tempo abstraction that's not quite as heavy as Frank's but works pretty well.
Ingo
#N canvas 1513 211 341 567 12;
#X obj 87 57 sel 32;
#X obj 37 118 timer;
#X floatatom 47 503 5 0 0 1 - - -;
#X obj 37 177 expr 60000/$f1;
#X text 88 502 bpm;
#X obj 87 35 key;
#X obj 37 35 inlet;
#X obj 37 522 outlet;
#X obj 37 96 t b b;
#X obj 160 403 + 1;
#X obj 37 374 t f b;
#X obj 37 454 spigot;
#X obj 120 309 del 2000;
#X msg 120 287 stop;
#X obj 120 425 >= 5;
#X obj 37 258 t f b b;
#X msg 120 331 0;
#X obj 37 219 maxlib/average 3;
#X msg 190 180 reset , weight;
#X obj 190 151 loadbang;
#X obj 120 403 f 1;
#X obj 146 13 cnv 15 180 120 empty empty empty 20 12 0 14 -233017 -66577
0;
#X text 152 100 ...or just keep tapping!;
#X text 152 75 change the tempo;
#X text 152 60 tap another 5 times to;
#X text 152 20 tap 5 times to get the;
#X text 152 35 tempo;
#X text 32 10 ds-tap_tempo;
#X connect 0 0 8 0;
#X connect 1 0 3 0;
#X connect 3 0 17 0;
#X connect 5 0 0 0;
#X connect 6 0 8 0;
#X connect 8 0 1 0;
#X connect 8 1 1 1;
#X connect 9 0 20 1;
#X connect 10 0 11 0;
#X connect 10 1 20 0;
#X connect 11 0 2 0;
#X connect 11 0 7 0;
#X connect 12 0 16 0;
#X connect 12 0 18 0;
#X connect 13 0 12 0;
#X connect 14 0 11 1;
#X connect 15 0 10 0;
#X connect 15 1 12 0;
#X connect 15 2 13 0;
#X connect 16 0 11 1;
#X connect 16 0 20 0;
#X connect 17 0 15 0;
#X connect 18 0 17 0;
#X connect 19 0 18 0;
#X connect 20 0 9 0;
#X connect 20 0 14 0;