annotate examples/puredata/xtract/f0.pd @ 38:0ea4d6430cfc

Implemented xtract_harmonics
author Jamie Bullock <jamie@postlude.co.uk>
date Sat, 09 Dec 2006 15:21:35 +0000
parents 82c7b834a055
children 1222cd753029
rev   line source
jamie@25 1 #N canvas 814 127 584 590 10;
jamie@25 2 #N canvas 162 173 901 522 guts 0;
jamie@25 3 #X obj 205 48 osc~;
jamie@25 4 #X obj 338 70 a_spigot~;
jamie@25 5 #X obj 205 70 a_spigot~;
jamie@25 6 #X obj 331 -26 line;
jamie@25 7 #X msg 331 -50 \$1 50;
jamie@25 8 #X obj 357 282 ftom;
jamie@25 9 #X obj 3 48 ftom;
jamie@25 10 #N canvas 0 0 450 300 fm 0;
jamie@25 11 #X obj 181 114 osc~;
jamie@25 12 #X obj 138 175 osc~;
jamie@25 13 #X obj 137 154 +~;
jamie@25 14 #X obj 144 209 outlet~;
jamie@25 15 #X obj 182 82 *;
jamie@25 16 #X obj 137 26 inlet;
jamie@25 17 #X obj 204 6 inlet;
jamie@25 18 #X obj 179 54 f;
jamie@25 19 #X obj 204 30 t b f;
jamie@25 20 #X obj 182 143 *~;
jamie@25 21 #X obj 238 81 - 2;
jamie@25 22 #X obj 225 113 * 100000;
jamie@25 23 #X connect 0 0 9 0;
jamie@25 24 #X connect 1 0 3 0;
jamie@25 25 #X connect 2 0 1 0;
jamie@25 26 #X connect 4 0 0 0;
jamie@25 27 #X connect 5 0 2 0;
jamie@25 28 #X connect 5 0 4 0;
jamie@25 29 #X connect 5 0 7 1;
jamie@25 30 #X connect 6 0 8 0;
jamie@25 31 #X connect 7 0 4 0;
jamie@25 32 #X connect 7 0 2 0;
jamie@25 33 #X connect 8 0 7 0;
jamie@25 34 #X connect 8 1 4 1;
jamie@25 35 #X connect 8 1 10 0;
jamie@25 36 #X connect 9 0 2 1;
jamie@25 37 #X connect 10 0 11 0;
jamie@25 38 #X connect 11 0 9 1;
jamie@25 39 #X restore 339 47 pd fm;
jamie@25 40 #X obj 459 69 a_spigot~;
jamie@25 41 #X obj 253 168 +~;
jamie@25 42 #N canvas 0 0 450 300 noise 0;
jamie@25 43 #X obj 260 126 noise~;
jamie@25 44 #X obj 269 161 *~;
jamie@25 45 #X obj 270 194 lop~;
jamie@25 46 #X obj 305 161 * 10000;
jamie@25 47 #X obj 320 124 inlet;
jamie@25 48 #X obj 268 236 outlet~;
jamie@25 49 #X connect 0 0 1 0;
jamie@25 50 #X connect 1 0 2 0;
jamie@25 51 #X connect 2 0 5 0;
jamie@25 52 #X connect 3 0 2 1;
jamie@25 53 #X connect 4 0 3 0;
jamie@25 54 #X connect 4 0 1 1;
jamie@25 55 #X restore 587 66 pd noise;
jamie@25 56 #N canvas 604 77 496 580 pda 0;
jamie@25 57 #X obj 99 100 xtract~ f0;
jamie@25 58 #X obj 197 6 inlet~;
jamie@25 59 #X obj 147 195 xtract~ magnitude_spectrum;
jamie@25 60 #X obj 149 299 xtract~ lowest_match;
jamie@25 61 #X msg 361 203 list \$1;
jamie@25 62 #X obj 244 115 *~;
jamie@25 63 #X obj 59 25 r sr;
jamie@25 64 #X obj 148 222 xtract~ peaks;
jamie@25 65 #X obj 148 245 tabsend~ freqs;
jamie@25 66 #X obj 401 30 table freqs;
jamie@25 67 #X obj 148 276 tabreceive~ freqs;
jamie@25 68 #X obj 6 220 != 0;
jamie@25 69 #X obj 4 331 spigot;
jamie@25 70 #X obj 57 331 spigot;
jamie@25 71 #X obj 67 217 == 0;
jamie@25 72 #X obj 27 369 f;
jamie@25 73 #X obj 28 415 lop~ 20;
jamie@25 74 #X obj 27 393 sig~;
jamie@25 75 #X obj 29 469 snapshot~;
jamie@25 76 #X obj 95 434 bang~;
jamie@25 77 #X obj 26 529 outlet;
jamie@25 78 #X obj 29 499 a_bavg 4;
jamie@25 79 #X obj 197 29 lop~ 5000;
jamie@25 80 #X obj 402 8 block~ 2048;
jamie@25 81 #X obj 200 51 hip~ 20;
jamie@25 82 #X msg 60 48 list \$1;
jamie@25 83 #X obj 274 80 a_hann 2048;
jamie@25 84 #X obj 274 59 r \$0-window-gen;
jamie@25 85 #X connect 0 0 4 0;
jamie@25 86 #X connect 0 0 11 0;
jamie@25 87 #X connect 0 0 12 0;
jamie@25 88 #X connect 0 0 14 0;
jamie@25 89 #X connect 1 0 22 0;
jamie@25 90 #X connect 2 0 7 0;
jamie@25 91 #X connect 3 0 13 0;
jamie@25 92 #X connect 4 0 3 1;
jamie@25 93 #X connect 5 0 2 0;
jamie@25 94 #X connect 6 0 25 0;
jamie@25 95 #X connect 7 0 8 0;
jamie@25 96 #X connect 10 0 3 0;
jamie@25 97 #X connect 11 0 12 1;
jamie@25 98 #X connect 12 0 15 0;
jamie@25 99 #X connect 13 0 15 0;
jamie@25 100 #X connect 14 0 13 1;
jamie@25 101 #X connect 15 0 17 0;
jamie@25 102 #X connect 16 0 18 0;
jamie@25 103 #X connect 17 0 16 0;
jamie@25 104 #X connect 18 0 21 0;
jamie@25 105 #X connect 19 0 18 0;
jamie@25 106 #X connect 21 0 20 0;
jamie@25 107 #X connect 22 0 24 0;
jamie@25 108 #X connect 24 0 0 0;
jamie@25 109 #X connect 24 0 5 0;
jamie@25 110 #X connect 25 0 0 1;
jamie@25 111 #X connect 26 0 5 1;
jamie@25 112 #X connect 27 0 26 0;
jamie@25 113 #X restore 357 262 pd pda;
jamie@25 114 #N canvas 0 0 596 417 d_saw 0;
jamie@25 115 #X obj 382 176 phasor~;
jamie@25 116 #X obj 397 96 noise~;
jamie@25 117 #X obj 346 116 sig~;
jamie@25 118 #X obj 381 149 +~;
jamie@25 119 #X obj 397 117 *~;
jamie@25 120 #X obj 242 198 phasor~;
jamie@25 121 #X obj 319 283 outlet~;
jamie@25 122 #X obj 385 215 *~ 0.5;
jamie@25 123 #X obj 240 227 *~ 0.3;
jamie@25 124 #X obj 270 173 * 0.01;
jamie@25 125 #X obj 241 174 +;
jamie@25 126 #X obj 460 97 * 0.1;
jamie@25 127 #X obj 312 249 lop~ 10000;
jamie@25 128 #X obj 369 51 inlet;
jamie@25 129 #X obj 261 55 inlet fund;
jamie@25 130 #X obj 258 138 f;
jamie@25 131 #X obj 286 105 t b f;
jamie@25 132 #X connect 0 0 7 0;
jamie@25 133 #X connect 1 0 4 0;
jamie@25 134 #X connect 2 0 3 0;
jamie@25 135 #X connect 3 0 0 0;
jamie@25 136 #X connect 4 0 3 1;
jamie@25 137 #X connect 5 0 8 0;
jamie@25 138 #X connect 7 0 12 0;
jamie@25 139 #X connect 8 0 12 0;
jamie@25 140 #X connect 9 0 10 1;
jamie@25 141 #X connect 10 0 5 0;
jamie@25 142 #X connect 11 0 4 1;
jamie@25 143 #X connect 12 0 6 0;
jamie@25 144 #X connect 13 0 16 0;
jamie@25 145 #X connect 14 0 2 0;
jamie@25 146 #X connect 14 0 11 0;
jamie@25 147 #X connect 14 0 15 1;
jamie@25 148 #X connect 14 0 10 0;
jamie@25 149 #X connect 15 0 10 0;
jamie@25 150 #X connect 15 0 9 0;
jamie@25 151 #X connect 16 0 15 0;
jamie@25 152 #X connect 16 1 9 1;
jamie@25 153 #X restore 457 45 pd d_saw;
jamie@25 154 #X obj 160 262 fiddle~ 2048;
jamie@25 155 #X obj 75 47 adc~;
jamie@25 156 #X obj 76 71 a_spigot~;
jamie@25 157 #X obj 2 69 a_mton;
jamie@25 158 #X obj 160 283 a_mton;
jamie@25 159 #X obj 357 301 a_mton;
jamie@25 160 #X obj 733 -70 loadbang;
jamie@25 161 #X obj 68 241 loadbang;
jamie@25 162 #X msg 67 263 symbol;
jamie@25 163 #X text 411 283 <-The magic happens in here;
jamie@25 164 #X obj 660 323 a_output~;
jamie@25 165 #X msg 747 271 0;
jamie@25 166 #X obj 263 46 r \$0-sine;
jamie@25 167 #X obj 134 48 r \$0-adc;
jamie@25 168 #X obj 396 48 r \$0-fm;
jamie@25 169 #X obj 521 43 r \$0-saw;
jamie@25 170 #X obj 586 41 r \$0-noisiness;
jamie@25 171 #X obj 473 -1 r \$0-inharmonicity;
jamie@25 172 #X obj 161 409 s \$0-fidd_f0_note;
jamie@25 173 #X obj 178 386 s \$0-fidd_f0_8ve;
jamie@25 174 #X obj 197 361 s \$0-fidd_f0_cent;
jamie@25 175 #X obj 356 367 s \$0-pda_f0_note;
jamie@25 176 #X obj 333 -73 r \$0-fund;
jamie@25 177 #X obj 375 345 s \$0-pda_f0_8ve;
jamie@25 178 #X obj 395 326 s \$0-pda_f0_cent;
jamie@25 179 #X obj 745 230 r \$0-master-lvl-stereo;
jamie@25 180 #X obj 747 252 r \$0-master-lvl-mute;
jamie@25 181 #X obj 747 291 s \$0-master-lvl-stereo;
jamie@25 182 #X msg 733 -20 \; pd dsp 1 \; \; \$1-window-gen bang \; sr 44100 \;
jamie@25 183 \; \$1-master-lvl-stereo 50;
jamie@25 184 #X obj 733 -45 f \$0;
jamie@25 185 #X obj 38 357 s \$0-f0_cent;
jamie@25 186 #X obj 19 378 s \$0-f0_8ve;
jamie@25 187 #X obj 0 406 s \$0-f0_note;
jamie@25 188 #X obj 254 261 s~ \$0-dacs;
jamie@25 189 #X obj 670 281 r~ \$0-dacs;
jamie@25 190 #X connect 0 0 2 0;
jamie@25 191 #X connect 1 0 9 0;
jamie@25 192 #X connect 2 0 9 0;
jamie@25 193 #X connect 3 0 0 0;
jamie@25 194 #X connect 3 0 12 0;
jamie@25 195 #X connect 3 0 7 0;
jamie@25 196 #X connect 3 0 6 0;
jamie@25 197 #X connect 4 0 3 0;
jamie@25 198 #X connect 5 0 18 0;
jamie@25 199 #X connect 6 0 16 0;
jamie@25 200 #X connect 7 0 1 0;
jamie@25 201 #X connect 8 0 9 0;
jamie@25 202 #X connect 9 0 11 0;
jamie@25 203 #X connect 9 0 13 0;
jamie@25 204 #X connect 9 0 46 0;
jamie@25 205 #X connect 10 0 9 1;
jamie@25 206 #X connect 11 0 5 0;
jamie@25 207 #X connect 12 0 8 0;
jamie@25 208 #X connect 13 0 17 0;
jamie@25 209 #X connect 14 0 15 0;
jamie@25 210 #X connect 15 0 9 0;
jamie@25 211 #X connect 16 0 45 0;
jamie@25 212 #X connect 16 1 44 0;
jamie@25 213 #X connect 16 2 43 0;
jamie@25 214 #X connect 17 0 31 0;
jamie@25 215 #X connect 17 1 32 0;
jamie@25 216 #X connect 17 2 33 0;
jamie@25 217 #X connect 18 0 34 0;
jamie@25 218 #X connect 18 1 36 0;
jamie@25 219 #X connect 18 2 37 0;
jamie@25 220 #X connect 19 0 42 0;
jamie@25 221 #X connect 20 0 21 0;
jamie@25 222 #X connect 21 0 31 0;
jamie@25 223 #X connect 21 0 34 0;
jamie@25 224 #X connect 21 0 45 0;
jamie@25 225 #X connect 24 0 23 2;
jamie@25 226 #X connect 24 0 40 0;
jamie@25 227 #X connect 25 0 2 1;
jamie@25 228 #X connect 26 0 15 1;
jamie@25 229 #X connect 27 0 1 1;
jamie@25 230 #X connect 28 0 8 1;
jamie@25 231 #X connect 29 0 10 0;
jamie@25 232 #X connect 30 0 7 1;
jamie@25 233 #X connect 35 0 4 0;
jamie@25 234 #X connect 38 0 23 2;
jamie@25 235 #X connect 39 0 24 0;
jamie@25 236 #X connect 42 0 41 0;
jamie@25 237 #X connect 47 0 23 0;
jamie@25 238 #X connect 47 0 23 1;
jamie@25 239 #X restore 519 -226 pd guts;
jamie@25 240 #X obj 11 -226 cnv 15 500 200 empty empty PDA_comparison 20 12 0 14
jamie@25 241 -261681 -66577 0;
jamie@25 242 #X obj 34 -94 hsl 128 15 2 2.05 0 0 \$0-inharmonicity empty fm-inharmonicity
jamie@25 243 -2 -6 0 8 -225271 -1 -1 0 1;
jamie@25 244 #X obj 34 -50 hsl 128 15 0 0.5 0 0 \$0-noisiness empty noisiness -2
jamie@25 245 -6 0 8 -225271 -1 -1 0 1;
jamie@25 246 #X obj 33 -135 hsl 128 15 30 3000 0 0 \$0-fund empty f0 -2 -6 0 8 -225271
jamie@25 247 -1 -1 0 1;
jamie@25 248 #X obj 32 -172 tgl 15 0 \$0-sine empty sine 0 -6 0 8 -225280 -1 -1
jamie@25 249 0 1;
jamie@25 250 #X obj 73 -172 tgl 15 0 \$0-fm empty fm 0 -6 0 8 -225280 -1 -1 0 1
jamie@25 251 ;
jamie@25 252 #X obj 110 -172 tgl 15 0 \$0-saw empty saw 0 -6 0 8 -225280 -1 -1 0
jamie@25 253 1;
jamie@25 254 #X obj 227 -133 cnv 15 200 100 empty empty empty 20 12 0 14 -262131
jamie@25 255 -66577 0;
jamie@25 256 #X obj 226 -199 cnv 15 200 60 empty empty empty 20 12 0 14 -225280
jamie@25 257 -66577 0;
jamie@25 258 #X symbolatom 242 -170 5 0 0 0 f0 #0-f0_note -;
jamie@25 259 #X floatatom 312 -170 5 0 0 0 8ve #0-f0_8ve -;
jamie@25 260 #X symbolatom 245 -112 5 0 0 0 f0 #0-fidd_f0_note -;
jamie@25 261 #X floatatom 313 -112 5 0 0 0 8ve #0-fidd_f0_8ve -;
jamie@25 262 #X text 304 -200 Input;
jamie@25 263 #X text 308 -93 xtract~;
jamie@25 264 #X text 305 -134 fiddle~;
jamie@25 265 #X floatatom 315 -62 5 0 0 0 8ve #0-pda_f0_8ve -;
jamie@25 266 #X symbolatom 247 -62 5 0 0 0 f0 #0-pda_f0_note -;
jamie@25 267 #X text 20 8 Notes:;
jamie@25 268 #X text 20 36 In this patch xtract~ is used to provide a combination
jamie@25 269 of time domain and frequency domain fundamental frequency estimation.
jamie@25 270 ;
jamie@25 271 #X text 27 233 A block size of 2048 has been used in this example.
jamie@25 272 Which allows for a theoretical limit of 21Hz. In reality xtract~ can
jamie@25 273 be used to detect frequencies down to 30Hz with this block size \,
jamie@25 274 but with a larger block size it could go lower!;
jamie@25 275 #X text 23 88 [xtract~ f0] uses a method based on the AMDF function
jamie@25 276 \, with centre and peak clipping used to provide noise robustness.
jamie@25 277 This could be further improved \, as could the efficiency of the algorithm.
jamie@25 278 ;
jamie@25 279 #X text 26 154 If [xtract~ f0] is unable to find a fundamental (i.e.
jamie@25 280 its output is 0 \, the lowest frequency in the peak spectrum is used.
jamie@25 281 In general this happens for very low frequencies. [xtract~ magnitude_spectrum]
jamie@25 282 \, [xtract~ peaks] \, and [xtract~ lowest_match] are used to achieve
jamie@25 283 this.;
jamie@25 284 #X obj 147 -172 tgl 15 0 \$0-adc empty adc~ 0 -6 0 8 -257472 -1 -1
jamie@25 285 0 1;
jamie@25 286 #X floatatom 386 -171 5 0 0 0 cent #0-f0_cent -;
jamie@25 287 #X floatatom 386 -63 5 0 0 0 cent #0-pda_f0_cent -;
jamie@25 288 #X floatatom 386 -113 5 0 0 0 cent #0-fidd_f0_cent -;
jamie@25 289 #X obj 465 -187 vsl 10 100 0 127 0 0 \$0-master-lvl-stereo \$0-master-lvl-stereo
jamie@25 290 out -4 -8 0 8 -262131 -1 -1 3898 1;
jamie@25 291 #X obj 465 -77 bng 10 250 50 0 \$0-master-lvl-mute empty mute -6 16
jamie@25 292 0 8 -262131 -1 -1;