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