Hello, I'm working on a bpm counter for soundfiles only, and get an high percentage of good results with little drums loops. This patch detects only binary rythms, maybe it will be possible to make this realtime...
----- "L.J." <[email protected]> a écrit : > before building something that's already there, has anyone done a > working bpm counter in pd? > > _______________________________________________ > [email protected] mailing list > UNSUBSCRIBE and account-management -> > http://lists.puredata.info/listinfo/pd-list -- Patrice Colet
#N canvas 6 4 491 519 10; #X obj 82 187 timer; #X obj 111 166 b; #X obj 99 232 samplerate~; #X obj 82 275 *; #X obj 99 255 / 1000; #N canvas 445 109 496 465 filter 0; #X obj 28 274 outlet; #X obj 63 201 spigot; #X obj 96 180 > 2767; #X obj 316 54 samplerate~; #X obj 252 12 inlet minmaxbpm; #X obj 252 57 unpack; #X floatatom 362 77 5 0 0 0 - - -; #X obj 252 122 / 4; #X obj 252 144 * 44100; #X floatatom 278 182 5 0 0 0 - - -; #X msg 252 78 60 \$1; #X obj 252 100 /; #X obj 252 37 t a a b; #X obj 340 145 * 44100; #X msg 340 97 60 \$1; #X obj 340 119 /; #X obj 168 145 t a a; #X obj 168 122 inlet lenght; #X obj 63 139 inlet offset; #X obj 168 346 outlet; #X obj 168 250 spigot; #X obj 201 223 > 2767; #X obj 171 288 spigot; #X obj 301 225 < 11025; #X text -31 78 removes shorter sizes than 1/16 highest tempo; #X text 156 409 removes longer sizes than 1/4 lowest tempo; #X connect 1 0 0 0; #X connect 2 0 1 1; #X connect 3 0 6 0; #X connect 3 0 8 1; #X connect 4 0 12 0; #X connect 5 0 10 0; #X connect 5 1 14 0; #X connect 7 0 8 0; #X connect 8 0 9 0; #X connect 8 0 2 1; #X connect 10 0 11 0; #X connect 11 0 7 0; #X connect 12 0 5 0; #X connect 12 2 3 0; #X connect 13 0 23 1; #X connect 14 0 15 0; #X connect 15 0 13 0; #X connect 16 0 2 0; #X connect 16 0 20 0; #X connect 16 1 21 0; #X connect 16 1 23 0; #X connect 17 0 16 0; #X connect 18 0 1 0; #X connect 20 0 22 0; #X connect 21 0 20 1; #X connect 22 0 19 0; #X connect 23 0 22 1; #X restore 127 427 pd filter; #N canvas 509 339 450 301 bonk 0; #X obj 32 17 inlet; #X obj 140 140 outlet; #X obj 291 194 outlet; #X obj 233 230 spigot; #X obj 151 230 spigot; #X obj 200 231 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0 1; #X obj 233 260 print cooked; #X obj 151 260 print raw; #X obj 271 210 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0 1; #X obj 192 187 bonk~; #X obj 33 39 trigger bang bang; #X obj 36 116 tabplay~ slicer-array; #X msg 192 83 thresh 10 30 \, mask 4 0.7 \, minvel 3; #X connect 0 0 10 0; #X connect 3 0 6 0; #X connect 4 0 7 0; #X connect 5 0 4 1; #X connect 8 0 3 1; #X connect 9 0 4 0; #X connect 9 1 2 0; #X connect 9 1 3 0; #X connect 10 0 11 0; #X connect 10 1 12 0; #X connect 11 0 9 0; #X connect 11 1 1 0; #X connect 12 0 9 0; #X restore 23 144 pd bonk; #X obj 50 233 f; #X obj 127 378 list-group 2; #X obj 127 332 list prepend; #X obj 127 397 list split 1; #X obj 127 352 t a a; #X obj 219 375 -; #X obj 219 396 abs; #X obj 267 68 table slicer-array; #X obj 267 134 soundfiler; #X msg 267 112 read -resize \$1 slicer-array; #X obj 267 90 symbol; #X obj 126 95 t b b b a; #X obj 82 297 moses 85; #X msg 213 336 2; #X obj 23 171 t b b; #X obj 288 391 pack 239 60; #X obj 165 132 s \$0slicerbng; #X obj 288 312 r \$0slicerbng; #X obj 82 207 t a b a b; #N canvas 108 6 576 686 test 0; #X obj 66 85 list; #X obj 87 64 list prepend; #X obj 169 63 t l; #X obj 232 110 r \$0slicerbng; #X obj 66 19 inlet bang; #X obj 217 156 <; #X obj 173 132 t a a; #X obj 173 156 spigot; #X obj 232 134 samplerate~; #X obj 158 177 f; #X obj 66 105 list-drip; #X obj 105 148 t a b; #X obj 66 126 t a a a; #X obj 41 253 spigot; #X obj 85 253 spigot; #X obj 105 227 == 0; #X obj 156 41 r \$0slicerbng; #N canvas 507 123 450 544 testloop 0; #X obj 199 63 inlet; #X obj 71 118 list; #X obj 92 97 list prepend; #X obj 173 97 t l; #X obj 258 164 r \$0slicerbng; #X obj 71 29 inlet bang; #X obj 243 210 <; #X obj 199 186 t a a; #X obj 199 210 spigot; #X obj 258 188 samplerate~; #X obj 184 231 f; #X obj 71 150 list-drip; #X obj 157 191 t a b; #X obj 91 193 t a a a; #X obj 59 340 spigot; #X obj 160 339 spigot; #X obj 192 313 == 0; #X obj 152 37 r \$0slicerbng; #X obj 161 362 outlet; #X obj 122 172 outlet; #X obj 100 384 r \$0slicerbng; #X msg 100 406 0; #X obj 87 427 f; #X obj 87 454 + 1; #X obj 59 399 t a b; #X obj 59 474 /; #X floatatom 122 457 5 0 0 0 - - -; #X obj 56 520 outlet; #X obj 58 498 pack; #X obj 59 427 +; #X obj 59 449 t a; #X obj 156 261 expr if ($f1<$f2+($f2/4) \, 1 \, 0); #X connect 0 0 2 0; #X connect 0 0 7 0; #X connect 1 0 11 0; #X connect 2 0 3 0; #X connect 2 0 1 1; #X connect 3 0 2 1; #X connect 4 0 9 0; #X connect 5 0 1 0; #X connect 6 0 8 1; #X connect 7 0 8 0; #X connect 7 1 6 0; #X connect 8 0 6 1; #X connect 8 0 10 1; #X connect 9 0 6 1; #X connect 10 0 31 1; #X connect 11 0 13 0; #X connect 11 1 19 0; #X connect 12 0 31 0; #X connect 12 1 10 0; #X connect 13 1 14 0; #X connect 13 1 15 0; #X connect 13 2 12 0; #X connect 14 0 24 0; #X connect 15 0 18 0; #X connect 16 0 15 1; #X connect 17 0 2 1; #X connect 20 0 21 0; #X connect 21 0 22 1; #X connect 21 0 29 1; #X connect 22 0 23 0; #X connect 23 0 25 1; #X connect 23 0 26 0; #X connect 23 0 22 1; #X connect 23 0 28 1; #X connect 24 0 29 0; #X connect 24 1 22 0; #X connect 25 0 28 0; #X connect 28 0 27 0; #X connect 29 0 30 0; #X connect 30 0 25 0; #X connect 30 0 29 1; #X connect 31 0 16 0; #X connect 31 0 14 1; #X restore 185 283 pd testloop; #X obj 81 273 r \$0slicerbng; #X msg 81 295 0; #X obj 41 335 +; #X obj 68 316 f; #X obj 96 316 + 1; #X obj 41 273 t a b; #X obj 41 406 /; #N canvas 507 123 450 544 testloop 0; #X obj 199 63 inlet; #X obj 71 118 list; #X obj 92 97 list prepend; #X obj 173 97 t l; #X obj 258 164 r \$0slicerbng; #X obj 71 29 inlet bang; #X obj 243 210 <; #X obj 199 186 t a a; #X obj 199 210 spigot; #X obj 258 188 samplerate~; #X obj 184 231 f; #X obj 71 150 list-drip; #X obj 157 191 t a b; #X obj 91 193 t a a a; #X obj 59 340 spigot; #X obj 160 339 spigot; #X obj 192 313 == 0; #X obj 152 37 r \$0slicerbng; #X obj 161 362 outlet; #X obj 122 172 outlet; #X obj 100 384 r \$0slicerbng; #X msg 100 406 0; #X obj 87 427 f; #X obj 87 454 + 1; #X obj 59 399 t a b; #X obj 59 474 /; #X floatatom 122 457 5 0 0 0 - - -; #X obj 56 520 outlet; #X obj 58 498 pack; #X obj 59 427 +; #X obj 59 449 t a; #X obj 156 261 expr if ($f1<$f2+($f2/5) \, 1 \, 0); #X connect 0 0 2 0; #X connect 0 0 7 0; #X connect 1 0 11 0; #X connect 2 0 3 0; #X connect 2 0 1 1; #X connect 3 0 2 1; #X connect 4 0 9 0; #X connect 5 0 1 0; #X connect 6 0 8 1; #X connect 7 0 8 0; #X connect 7 1 6 0; #X connect 8 0 6 1; #X connect 8 0 10 1; #X connect 9 0 6 1; #X connect 10 0 31 1; #X connect 11 0 13 0; #X connect 11 1 19 0; #X connect 12 0 31 0; #X connect 12 1 10 0; #X connect 13 1 14 0; #X connect 13 1 15 0; #X connect 13 2 12 0; #X connect 14 0 24 0; #X connect 15 0 18 0; #X connect 16 0 15 1; #X connect 17 0 2 1; #X connect 20 0 21 0; #X connect 21 0 22 1; #X connect 21 0 29 1; #X connect 22 0 23 0; #X connect 23 0 25 1; #X connect 23 0 26 0; #X connect 23 0 22 1; #X connect 23 0 28 1; #X connect 24 0 29 0; #X connect 24 1 22 0; #X connect 25 0 28 0; #X connect 28 0 27 0; #X connect 29 0 30 0; #X connect 30 0 25 0; #X connect 30 0 29 1; #X connect 31 0 16 0; #X connect 31 0 14 1; #X restore 241 319 pd testloop; #N canvas 507 123 450 544 testloop 0; #X obj 199 63 inlet; #X obj 71 118 list; #X obj 92 97 list prepend; #X obj 173 97 t l; #X obj 258 164 r \$0slicerbng; #X obj 71 29 inlet bang; #X obj 243 210 <; #X obj 199 186 t a a; #X obj 199 210 spigot; #X obj 258 188 samplerate~; #X obj 184 231 f; #X obj 71 150 list-drip; #X obj 157 191 t a b; #X obj 91 193 t a a a; #X obj 59 340 spigot; #X obj 160 339 spigot; #X obj 192 313 == 0; #X obj 152 37 r \$0slicerbng; #X obj 161 362 outlet; #X obj 122 172 outlet; #X obj 100 384 r \$0slicerbng; #X msg 100 406 0; #X obj 87 427 f; #X obj 87 454 + 1; #X obj 59 399 t a b; #X obj 59 474 /; #X floatatom 122 457 5 0 0 0 - - -; #X obj 56 520 outlet; #X obj 58 498 pack; #X obj 59 427 +; #X obj 59 449 t a; #X obj 156 261 expr if ($f1<$f2+($f2/4) \, 1 \, 0); #X connect 0 0 2 0; #X connect 0 0 7 0; #X connect 1 0 11 0; #X connect 2 0 3 0; #X connect 2 0 1 1; #X connect 3 0 2 1; #X connect 4 0 9 0; #X connect 5 0 1 0; #X connect 6 0 8 1; #X connect 7 0 8 0; #X connect 7 1 6 0; #X connect 8 0 6 1; #X connect 8 0 10 1; #X connect 9 0 6 1; #X connect 10 0 31 1; #X connect 11 0 13 0; #X connect 11 1 19 0; #X connect 12 0 31 0; #X connect 12 1 10 0; #X connect 13 1 14 0; #X connect 13 1 15 0; #X connect 13 2 12 0; #X connect 14 0 24 0; #X connect 15 0 18 0; #X connect 16 0 15 1; #X connect 17 0 2 1; #X connect 20 0 21 0; #X connect 21 0 22 1; #X connect 21 0 29 1; #X connect 22 0 23 0; #X connect 23 0 25 1; #X connect 23 0 26 0; #X connect 23 0 22 1; #X connect 23 0 28 1; #X connect 24 0 29 0; #X connect 24 1 22 0; #X connect 25 0 28 0; #X connect 28 0 27 0; #X connect 29 0 30 0; #X connect 30 0 25 0; #X connect 30 0 29 1; #X connect 31 0 16 0; #X connect 31 0 14 1; #X restore 289 349 pd testloop; #X obj 241 352 unpack; #X obj 185 348 unpack; #X obj 289 387 unpack; #X obj 354 507 >; #X obj 369 463 r \$0slicerbng; #X msg 369 485 0; #X obj 322 448 t a a; #X obj 321 531 spigot; #X obj 41 461 spigot; #X obj 26 484 f; #X obj 52 357 t a; #X obj 53 718 t a b; #X obj 78 738 samplerate~; #X obj 78 760 * 60; #X obj 53 781 swap; #X obj 52 802 /; #X obj 111 620 ==; #X obj 111 642 sel 1; #X obj 170 620 ==; #X obj 168 640 sel 1; #X obj 218 619 ==; #X obj 218 641 sel 1; #X obj 272 621 ==; #X obj 272 643 sel 1; #X obj 26 507 t a a; #X obj 105 204 expr if ($f1<$f2+($f2/4) \, 1 \, 0); #X obj 53 695 *; #X obj 125 580 t a; #X obj 51 823 outlet; #X msg 111 664 4; #X msg 170 664 4; #X text 273 282 same test for longer slices; #X text 318 312 again; #X text 368 348 and again; #X msg 218 663 4; #X msg 272 665 2; #X text 166 565 this part is experimental \, and should determine which group has the highest number of slices; #X text 302 662 maybe we could determine the tempo range; #X obj 173 87 inlet list; #X text 303 206 count the slices following this rule; #X text 155 738 convert to bpm; #X connect 0 0 10 0; #X connect 1 0 2 0; #X connect 1 0 0 1; #X connect 2 0 1 1; #X connect 3 0 8 0; #X connect 4 0 0 0; #X connect 5 0 7 1; #X connect 6 0 7 0; #X connect 6 1 5 0; #X connect 7 0 5 1; #X connect 7 0 9 1; #X connect 8 0 5 1; #X connect 9 0 52 1; #X connect 10 0 12 0; #X connect 10 1 17 0; #X connect 11 0 52 0; #X connect 11 1 9 0; #X connect 12 1 13 0; #X connect 12 1 14 0; #X connect 12 2 11 0; #X connect 13 0 23 0; #X connect 14 0 17 1; #X connect 15 0 14 1; #X connect 16 0 1 1; #X connect 17 0 28 0; #X connect 17 1 25 0; #X connect 17 2 25 1; #X connect 18 0 19 0; #X connect 19 0 21 1; #X connect 19 0 20 1; #X connect 20 0 37 0; #X connect 20 0 24 0; #X connect 21 0 22 0; #X connect 22 0 24 1; #X connect 22 0 21 1; #X connect 22 0 33 0; #X connect 23 0 20 0; #X connect 23 1 21 0; #X connect 24 0 35 0; #X connect 24 0 43 1; #X connect 25 0 27 0; #X connect 25 1 26 0; #X connect 25 2 26 1; #X connect 26 0 29 0; #X connect 26 1 36 0; #X connect 27 0 35 0; #X connect 27 0 47 1; #X connect 27 1 33 0; #X connect 28 0 35 0; #X connect 28 0 45 1; #X connect 28 1 33 0; #X connect 29 0 35 0; #X connect 29 0 49 1; #X connect 29 1 33 0; #X connect 30 0 34 1; #X connect 30 0 35 1; #X connect 31 0 32 0; #X connect 32 0 30 1; #X connect 33 0 34 0; #X connect 33 1 30 0; #X connect 34 0 30 1; #X connect 35 0 36 1; #X connect 36 0 51 0; #X connect 37 0 20 1; #X connect 38 0 41 0; #X connect 38 1 39 0; #X connect 39 0 40 0; #X connect 40 0 41 1; #X connect 41 0 42 0; #X connect 41 1 42 1; #X connect 42 0 55 0; #X connect 43 0 44 0; #X connect 44 0 56 0; #X connect 45 0 46 0; #X connect 46 0 57 0; #X connect 47 0 48 0; #X connect 48 0 61 0; #X connect 49 0 50 0; #X connect 50 0 62 0; #X connect 51 0 53 0; #X connect 51 1 54 0; #X connect 52 0 15 0; #X connect 52 0 13 1; #X connect 53 0 38 0; #X connect 54 0 49 0; #X connect 54 0 43 0; #X connect 54 0 45 0; #X connect 54 0 47 0; #X connect 56 0 53 1; #X connect 57 0 53 1; #X connect 61 0 53 1; #X connect 62 0 53 1; #X connect 65 0 1 0; #X connect 65 0 6 0; #X restore 23 460 pd test; #X text 363 391 highest lowest tempo; #X obj 126 61 openpanel; #X obj 126 33 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1 -1; #X floatatom 23 491 5 0 0 0 - - -; #X text 66 490 <--tempo; #X text 152 29 open soundfile; #X text 134 295 suppress slices shorter than 85 samples; #X msg 267 35 \; pd dsp 1; #X obj 267 11 loadbang; #N canvas 554 85 389 514 normalize 0; #X obj 73 188 f; #X obj 101 188 + 1; #X obj 73 142 until; #X msg 107 163 0; #X obj 73 211 t f f; #X obj 100 278 clip -1 1; #X obj 241 342 expr 1/$f1; #X obj 241 209 f; #X obj 269 209 + 1; #X obj 241 184 until; #X msg 279 185 0; #X obj 73 100 t f f b f; #X obj 274 276 >; #X obj 241 297 spigot; #X obj 241 253 t f f; #X obj 241 320 t f f; #X msg 345 229 0; #X obj 241 143 t f f b b; #X obj 100 234 tabread \$0sample; #X obj 100 451 tabwrite \$0sample; #X obj 241 230 tabread \$0sample; #X obj 100 257 * 1; #X obj 73 35 list split 1; #X obj 73 78 f; #X obj 73 56 t b a; #X msg 197 113 set \$1; #X obj 197 92 symbol; #X obj 73 15 inlet; #X obj 73 121 max 1; #X obj 241 163 max 1; #X connect 0 0 1 0; #X connect 0 0 4 0; #X connect 1 0 0 1; #X connect 2 0 0 0; #X connect 3 0 0 1; #X connect 4 0 19 1; #X connect 4 1 18 0; #X connect 5 0 19 0; #X connect 6 0 21 1; #X connect 7 0 8 0; #X connect 7 0 20 0; #X connect 8 0 7 1; #X connect 9 0 7 0; #X connect 10 0 7 1; #X connect 11 0 28 0; #X connect 11 2 3 0; #X connect 11 3 17 0; #X connect 12 0 13 1; #X connect 13 0 15 0; #X connect 14 0 13 0; #X connect 14 1 12 0; #X connect 15 0 6 0; #X connect 15 1 12 1; #X connect 16 0 12 1; #X connect 17 0 29 0; #X connect 17 2 10 0; #X connect 17 3 16 0; #X connect 18 0 21 0; #X connect 20 0 14 0; #X connect 21 0 5 0; #X connect 22 0 24 0; #X connect 22 1 23 1; #X connect 23 0 11 0; #X connect 24 0 23 0; #X connect 24 1 26 0; #X connect 25 0 18 0; #X connect 25 0 19 0; #X connect 25 0 20 0; #X connect 26 0 25 0; #X connect 27 0 22 0; #X connect 28 0 2 0; #X connect 29 0 9 0; #X restore 267 208 pd normalize; #X msg 267 156 slicer-array \$1; #X text 274 192 normalize for better detection; #X text 241 372 length; #X connect 0 0 25 0; #X connect 1 0 0 1; #X connect 2 0 4 0; #X connect 3 0 19 0; #X connect 4 0 3 1; #X connect 5 1 26 1; #X connect 6 0 21 0; #X connect 6 1 1 0; #X connect 7 0 3 0; #X connect 8 0 10 0; #X connect 9 0 11 0; #X connect 10 0 5 0; #X connect 10 1 9 1; #X connect 11 0 8 0; #X connect 11 1 12 0; #X connect 12 0 13 0; #X connect 13 0 5 1; #X connect 15 0 37 0; #X connect 16 0 15 0; #X connect 17 0 16 0; #X connect 18 0 6 0; #X connect 18 1 0 0; #X connect 18 2 23 0; #X connect 18 3 17 0; #X connect 19 1 9 0; #X connect 20 0 8 1; #X connect 21 0 26 0; #X connect 21 1 7 0; #X connect 22 0 5 2; #X connect 24 0 20 0; #X connect 24 0 9 1; #X connect 24 0 22 0; #X connect 25 0 3 0; #X connect 25 1 2 0; #X connect 26 0 30 0; #X connect 28 0 18 0; #X connect 29 0 28 0; #X connect 35 0 34 0; #X connect 37 0 36 0;
_______________________________________________ [email protected] mailing list UNSUBSCRIBE and account-management -> http://lists.puredata.info/listinfo/pd-list
