diff options
author | Jamie Bullock <jamie@postlude.co.uk> | 2006-10-18 17:49:19 +0000 |
---|---|---|
committer | Jamie Bullock <jamie@postlude.co.uk> | 2006-10-18 17:49:19 +0000 |
commit | 6b59f4325d1b6c81e11cbae6f438cdfb514a89d1 (patch) | |
tree | 67a8be5a0745d04ced201313fa5c1b46f6e863e0 /examples | |
parent | 19c8ed32b6d646d2aa1fe8785ea0e108884ceaec (diff) | |
download | LibXtract-6b59f4325d1b6c81e11cbae6f438cdfb514a89d1.tar.gz LibXtract-6b59f4325d1b6c81e11cbae6f438cdfb514a89d1.tar.bz2 LibXtract-6b59f4325d1b6c81e11cbae6f438cdfb514a89d1.zip |
Added PD help files
Diffstat (limited to 'examples')
-rw-r--r-- | examples/puredata/Makefile.am | 4 | ||||
-rw-r--r-- | examples/puredata/xtract/a_bavg.pd | 36 | ||||
-rw-r--r-- | examples/puredata/xtract/a_hann.pd | 30 | ||||
-rw-r--r-- | examples/puredata/xtract/a_mton.pd | 66 | ||||
-rw-r--r-- | examples/puredata/xtract/a_output~.pd | 71 | ||||
-rw-r--r-- | examples/puredata/xtract/a_spigot~.pd | 21 | ||||
-rw-r--r-- | examples/puredata/xtract/f0.pd | 292 | ||||
-rw-r--r-- | examples/puredata/xtract/mfcc.pd | 154 | ||||
-rw-r--r-- | examples/puredata/xtract/sonogram.pd | 1 | ||||
-rw-r--r-- | examples/puredata/xtract/xtract-help.pd | 69 |
10 files changed, 743 insertions, 1 deletions
diff --git a/examples/puredata/Makefile.am b/examples/puredata/Makefile.am index 97bad90..dda94f4 100644 --- a/examples/puredata/Makefile.am +++ b/examples/puredata/Makefile.am @@ -27,7 +27,9 @@ AM_LDFLAGS = @PD_LDFLAGS@ -lxtract -L$(top_builddir)/src/ ## Install the documentation. install: - -mv $(top_builddir)/examples/puredata/.libs/xtract.@PD_SUFFIX@ $(pdinstalldir)/xtract~.@PD_SUFFIX@ + install -m 644 $(top_builddir)/examples/puredata/.libs/xtract.@PD_SUFFIX@ $(pdinstalldir)/xtract~.@PD_SUFFIX@ + install -d $(pddir)/doc/5.reference/xtract + cp xtract/* $(PDDIR)/doc/5.reference/xtract #pdinstallref_DATA = \ # help/aubioonset-help.pd \ diff --git a/examples/puredata/xtract/a_bavg.pd b/examples/puredata/xtract/a_bavg.pd new file mode 100644 index 0000000..38c8c71 --- /dev/null +++ b/examples/puredata/xtract/a_bavg.pd @@ -0,0 +1,36 @@ +#N canvas 0 0 450 300 10; +#X obj 140 183 +; +#X obj 243 216 f; +#X obj 242 124 f; +#X obj 275 124 + 1; +#X msg 244 193 0; +#X obj 175 223 f; +#X obj 175 245 / \$1; +#X obj 242 147 % \$1; +#X obj 319 172 f \$1; +#X obj 319 192 - 1; +#X obj 243 170 sel; +#X obj 319 146 loadbang; +#X obj 161 60 inlet; +#X obj 165 84 t b f; +#X obj 175 271 outlet; +#X text 28 12 Averages a series of N numbers where N is given by the +first arument (works in blocks); +#X connect 0 0 1 0; +#X connect 0 0 5 1; +#X connect 1 0 0 1; +#X connect 2 0 3 0; +#X connect 2 0 7 0; +#X connect 3 0 2 1; +#X connect 4 0 1 0; +#X connect 5 0 6 0; +#X connect 6 0 14 0; +#X connect 7 0 10 0; +#X connect 8 0 9 0; +#X connect 9 0 10 1; +#X connect 10 0 4 0; +#X connect 10 0 5 0; +#X connect 11 0 8 0; +#X connect 12 0 13 0; +#X connect 13 0 2 0; +#X connect 13 1 0 0; diff --git a/examples/puredata/xtract/a_hann.pd b/examples/puredata/xtract/a_hann.pd new file mode 100644 index 0000000..bc150b0 --- /dev/null +++ b/examples/puredata/xtract/a_hann.pd @@ -0,0 +1,30 @@ +#N canvas 379 192 709 463 10; +#X obj 368 85 samplerate~; +#X obj 371 153 phasor~; +#X msg 457 83 0; +#X obj 371 182 expr~ 0.5 - cos($v1 * 6.28) * 0.5; +#X obj 618 10 block~ \$1; +#X obj 368 107 /~ \$1; +#X text 43 20 Creation arg gives window size; +#X obj 346 38 t b b b b; +#X obj 490 58 float \$1; +#X obj 346 10 inlet; +#X obj 40 268 tabreceive~ \$0-hann; +#X obj 40 307 outlet~; +#X msg 491 80 resize \$1; +#X obj 493 104 s \$0-hann; +#X obj 373 308 table \$0-hann; +#X obj 371 207 tabwrite~ \$0-hann; +#X connect 0 0 5 0; +#X connect 1 0 3 0; +#X connect 2 0 1 1; +#X connect 3 0 15 0; +#X connect 5 0 1 0; +#X connect 7 0 15 0; +#X connect 7 1 2 0; +#X connect 7 2 0 0; +#X connect 7 3 8 0; +#X connect 8 0 12 0; +#X connect 9 0 7 0; +#X connect 10 0 11 0; +#X connect 12 0 13 0; diff --git a/examples/puredata/xtract/a_mton.pd b/examples/puredata/xtract/a_mton.pd new file mode 100644 index 0000000..7829dbe --- /dev/null +++ b/examples/puredata/xtract/a_mton.pd @@ -0,0 +1,66 @@ +#N canvas 165 175 599 406 10; +#X obj 151 123 inlet; +#X obj 151 179 % 12; +#X obj 151 232 sel 0 1 2 3 4 5 6 7 8 9 10 11; +#X obj 483 268 / 12; +#X obj 483 291 int; +#X obj 483 313 outlet; +#X msg 80 272 C; +#X msg 110 272 C#; +#X msg 142 273 D; +#X msg 174 273 D#; +#X msg 203 273 E; +#X msg 236 274 F; +#X msg 269 274 F#; +#X msg 299 274 G; +#X msg 329 274 G#; +#X msg 359 275 A; +#X msg 393 275 A#; +#X msg 425 275 B; +#X obj 235 342 symbol; +#X obj 235 368 outlet; +#X obj 569 206 int; +#X obj 537 184 t f f; +#X obj 537 207 -; +#X obj 538 313 outlet; +#X text 51 30 a_mton takes midi note number as a float and outputs +note name \, octave and deviation in cents.; +#X obj 537 231 * 100; +#X obj 537 250 - 50; +#X connect 0 0 1 0; +#X connect 0 0 3 0; +#X connect 0 0 21 0; +#X connect 1 0 2 0; +#X connect 2 0 6 0; +#X connect 2 1 7 0; +#X connect 2 2 8 0; +#X connect 2 3 9 0; +#X connect 2 4 10 0; +#X connect 2 5 11 0; +#X connect 2 6 12 0; +#X connect 2 7 13 0; +#X connect 2 8 14 0; +#X connect 2 9 15 0; +#X connect 2 10 16 0; +#X connect 2 11 17 0; +#X connect 3 0 4 0; +#X connect 4 0 5 0; +#X connect 6 0 18 0; +#X connect 7 0 18 0; +#X connect 8 0 18 0; +#X connect 9 0 18 0; +#X connect 10 0 18 0; +#X connect 11 0 18 0; +#X connect 12 0 18 0; +#X connect 13 0 18 0; +#X connect 14 0 18 0; +#X connect 15 0 18 0; +#X connect 16 0 18 0; +#X connect 17 0 18 0; +#X connect 18 0 19 0; +#X connect 20 0 22 1; +#X connect 21 0 22 0; +#X connect 21 1 20 0; +#X connect 22 0 25 0; +#X connect 25 0 26 0; +#X connect 26 0 23 0; diff --git a/examples/puredata/xtract/a_output~.pd b/examples/puredata/xtract/a_output~.pd new file mode 100644 index 0000000..8cbf956 --- /dev/null +++ b/examples/puredata/xtract/a_output~.pd @@ -0,0 +1,71 @@ +#N canvas 0 0 757 675 12; +#X obj 516 522 t b; +#X obj 516 469 f; +#X obj 516 547 f; +#X msg 630 546 0; +#X obj 516 499 moses 1; +#X obj 630 518 t b f; +#X obj 596 479 moses 1; +#X obj 29 97 dbtorms; +#X obj 85 170 inlet~; +#X msg 278 300 \; pd dsp 1; +#X obj 29 170 line~; +#X obj 64 242 *~; +#X obj 64 272 dac~; +#X obj 29 127 pack 0 50; +#X text 121 146 audio in; +#X text 301 496 test if less than 1 -->; +#X text 267 523 if true convert to bang -->; +#X text 100 96 <-- convert from dB to linear units; +#X floatatom 31 13 3 0 100 0 dB - -; +#X obj 44 37 bng 15 250 50 0 empty empty mute -38 7 0 10 -262144 -1 +-1; +#X text 118 126 <-- make a ramp to avoid clicks or zipper noise; +#X obj 148 170 inlet~; +#X obj 154 241 *~; +#X text 502 399 MUTE logic:; +#X obj 293 247 s \$0-master-out; +#X obj 29 71 r \$0-master-out; +#X obj 596 450 r \$0-master-out; +#X text 182 8 Level control abstraction \, used in many of the Pd example +patches. The level and mute controls show up on the parent \, calling +patch.; +#X text 229 549 previous nonzero master-lvl -->; +#X text 301 453 recall previous; +#X text 301 471 value of master-lvl -->; +#X text 16 310 automatically start DSP -->; +#X obj 85 192 hip~ 3; +#X obj 147 192 hip~ 3; +#X text 26 608 NOTE: This abstraction was written by Miller Puckette +\, and is include with the PD examples as part of the 'standard' PD +documentation. JB 23/05/05; +#X obj 278 193 r \$0-master-lvl-stereo; +#X obj 516 573 s \$0-master-lvl-stereo; +#X obj 623 215 inlet; +#X connect 0 0 2 0; +#X connect 1 0 4 0; +#X connect 2 0 36 0; +#X connect 3 0 36 0; +#X connect 4 0 0 0; +#X connect 4 1 5 0; +#X connect 5 0 3 0; +#X connect 6 1 2 1; +#X connect 7 0 13 0; +#X connect 8 0 32 0; +#X connect 10 0 22 0; +#X connect 10 0 11 0; +#X connect 11 0 12 0; +#X connect 13 0 10 0; +#X connect 18 0 9 0; +#X connect 18 0 24 0; +#X connect 19 0 1 0; +#X connect 21 0 33 0; +#X connect 22 0 12 1; +#X connect 25 0 7 0; +#X connect 26 0 1 1; +#X connect 26 0 6 0; +#X connect 32 0 11 1; +#X connect 33 0 22 1; +#X connect 35 0 18 0; +#X connect 37 0 18 0; +#X coords 0 0 1 1 65 55 1 0 0; diff --git a/examples/puredata/xtract/a_spigot~.pd b/examples/puredata/xtract/a_spigot~.pd new file mode 100644 index 0000000..86ebd54 --- /dev/null +++ b/examples/puredata/xtract/a_spigot~.pd @@ -0,0 +1,21 @@ +#N canvas 0 0 450 300 10; +#X obj 153 112 inlet~; +#X obj 152 229 outlet~; +#X obj 153 186 expr~ $v1 * $v2; +#X obj 252 162 line~; +#X msg 258 121 1 20; +#X msg 299 121 0 20; +#X obj 255 14 inlet; +#X obj 255 36 > 0; +#X obj 255 63 select 1 0; +#X text 49 261 Audio spigot. Same behaviour as spigot but for audio +; +#X connect 0 0 2 0; +#X connect 2 0 1 0; +#X connect 3 0 2 1; +#X connect 4 0 3 0; +#X connect 5 0 3 0; +#X connect 6 0 7 0; +#X connect 7 0 8 0; +#X connect 8 0 4 0; +#X connect 8 1 5 0; diff --git a/examples/puredata/xtract/f0.pd b/examples/puredata/xtract/f0.pd new file mode 100644 index 0000000..d178c82 --- /dev/null +++ b/examples/puredata/xtract/f0.pd @@ -0,0 +1,292 @@ +#N canvas 814 127 584 590 10; +#N canvas 162 173 901 522 guts 0; +#X obj 205 48 osc~; +#X obj 338 70 a_spigot~; +#X obj 205 70 a_spigot~; +#X obj 331 -26 line; +#X msg 331 -50 \$1 50; +#X obj 357 282 ftom; +#X obj 3 48 ftom; +#N canvas 0 0 450 300 fm 0; +#X obj 181 114 osc~; +#X obj 138 175 osc~; +#X obj 137 154 +~; +#X obj 144 209 outlet~; +#X obj 182 82 *; +#X obj 137 26 inlet; +#X obj 204 6 inlet; +#X obj 179 54 f; +#X obj 204 30 t b f; +#X obj 182 143 *~; +#X obj 238 81 - 2; +#X obj 225 113 * 100000; +#X connect 0 0 9 0; +#X connect 1 0 3 0; +#X connect 2 0 1 0; +#X connect 4 0 0 0; +#X connect 5 0 2 0; +#X connect 5 0 4 0; +#X connect 5 0 7 1; +#X connect 6 0 8 0; +#X connect 7 0 4 0; +#X connect 7 0 2 0; +#X connect 8 0 7 0; +#X connect 8 1 4 1; +#X connect 8 1 10 0; +#X connect 9 0 2 1; +#X connect 10 0 11 0; +#X connect 11 0 9 1; +#X restore 339 47 pd fm; +#X obj 459 69 a_spigot~; +#X obj 253 168 +~; +#N canvas 0 0 450 300 noise 0; +#X obj 260 126 noise~; +#X obj 269 161 *~; +#X obj 270 194 lop~; +#X obj 305 161 * 10000; +#X obj 320 124 inlet; +#X obj 268 236 outlet~; +#X connect 0 0 1 0; +#X connect 1 0 2 0; +#X connect 2 0 5 0; +#X connect 3 0 2 1; +#X connect 4 0 3 0; +#X connect 4 0 1 1; +#X restore 587 66 pd noise; +#N canvas 604 77 496 580 pda 0; +#X obj 99 100 xtract~ f0; +#X obj 197 6 inlet~; +#X obj 147 195 xtract~ magnitude_spectrum; +#X obj 149 299 xtract~ lowest_match; +#X msg 361 203 list \$1; +#X obj 244 115 *~; +#X obj 59 25 r sr; +#X obj 148 222 xtract~ peaks; +#X obj 148 245 tabsend~ freqs; +#X obj 401 30 table freqs; +#X obj 148 276 tabreceive~ freqs; +#X obj 6 220 != 0; +#X obj 4 331 spigot; +#X obj 57 331 spigot; +#X obj 67 217 == 0; +#X obj 27 369 f; +#X obj 28 415 lop~ 20; +#X obj 27 393 sig~; +#X obj 29 469 snapshot~; +#X obj 95 434 bang~; +#X obj 26 529 outlet; +#X obj 29 499 a_bavg 4; +#X obj 197 29 lop~ 5000; +#X obj 402 8 block~ 2048; +#X obj 200 51 hip~ 20; +#X msg 60 48 list \$1; +#X obj 274 80 a_hann 2048; +#X obj 274 59 r \$0-window-gen; +#X connect 0 0 4 0; +#X connect 0 0 11 0; +#X connect 0 0 12 0; +#X connect 0 0 14 0; +#X connect 1 0 22 0; +#X connect 2 0 7 0; +#X connect 3 0 13 0; +#X connect 4 0 3 1; +#X connect 5 0 2 0; +#X connect 6 0 25 0; +#X connect 7 0 8 0; +#X connect 10 0 3 0; +#X connect 11 0 12 1; +#X connect 12 0 15 0; +#X connect 13 0 15 0; +#X connect 14 0 13 1; +#X connect 15 0 17 0; +#X connect 16 0 18 0; +#X connect 17 0 16 0; +#X connect 18 0 21 0; +#X connect 19 0 18 0; +#X connect 21 0 20 0; +#X connect 22 0 24 0; +#X connect 24 0 0 0; +#X connect 24 0 5 0; +#X connect 25 0 0 1; +#X connect 26 0 5 1; +#X connect 27 0 26 0; +#X restore 357 262 pd pda; +#N canvas 0 0 596 417 d_saw 0; +#X obj 382 176 phasor~; +#X obj 397 96 noise~; +#X obj 346 116 sig~; +#X obj 381 149 +~; +#X obj 397 117 *~; +#X obj 242 198 phasor~; +#X obj 319 283 outlet~; +#X obj 385 215 *~ 0.5; +#X obj 240 227 *~ 0.3; +#X obj 270 173 * 0.01; +#X obj 241 174 +; +#X obj 460 97 * 0.1; +#X obj 312 249 lop~ 10000; +#X obj 369 51 inlet; +#X obj 261 55 inlet fund; +#X obj 258 138 f; +#X obj 286 105 t b f; +#X connect 0 0 7 0; +#X connect 1 0 4 0; +#X connect 2 0 3 0; +#X connect 3 0 0 0; +#X connect 4 0 3 1; +#X connect 5 0 8 0; +#X connect 7 0 12 0; +#X connect 8 0 12 0; +#X connect 9 0 10 1; +#X connect 10 0 5 0; +#X connect 11 0 4 1; +#X connect 12 0 6 0; +#X connect 13 0 16 0; +#X connect 14 0 2 0; +#X connect 14 0 11 0; +#X connect 14 0 15 1; +#X connect 14 0 10 0; +#X connect 15 0 10 0; +#X connect 15 0 9 0; +#X connect 16 0 15 0; +#X connect 16 1 9 1; +#X restore 457 45 pd d_saw; +#X obj 160 262 fiddle~ 2048; +#X obj 75 47 adc~; +#X obj 76 71 a_spigot~; +#X obj 2 69 a_mton; +#X obj 160 283 a_mton; +#X obj 357 301 a_mton; +#X obj 733 -70 loadbang; +#X obj 68 241 loadbang; +#X msg 67 263 symbol; +#X text 411 283 <-The magic happens in here; +#X obj 660 323 a_output~; +#X msg 747 271 0; +#X obj 263 46 r \$0-sine; +#X obj 134 48 r \$0-adc; +#X obj 396 48 r \$0-fm; +#X obj 521 43 r \$0-saw; +#X obj 586 41 r \$0-noisiness; +#X obj 473 -1 r \$0-inharmonicity; +#X obj 161 409 s \$0-fidd_f0_note; +#X obj 178 386 s \$0-fidd_f0_8ve; +#X obj 197 361 s \$0-fidd_f0_cent; +#X obj 356 367 s \$0-pda_f0_note; +#X obj 333 -73 r \$0-fund; +#X obj 375 345 s \$0-pda_f0_8ve; +#X obj 395 326 s \$0-pda_f0_cent; +#X obj 745 230 r \$0-master-lvl-stereo; +#X obj 747 252 r \$0-master-lvl-mute; +#X obj 747 291 s \$0-master-lvl-stereo; +#X msg 733 -20 \; pd dsp 1 \; \; \$1-window-gen bang \; sr 44100 \; +\; \$1-master-lvl-stereo 50; +#X obj 733 -45 f \$0; +#X obj 38 357 s \$0-f0_cent; +#X obj 19 378 s \$0-f0_8ve; +#X obj 0 406 s \$0-f0_note; +#X obj 254 261 s~ \$0-dacs; +#X obj 670 281 r~ \$0-dacs; +#X connect 0 0 2 0; +#X connect 1 0 9 0; +#X connect 2 0 9 0; +#X connect 3 0 0 0; +#X connect 3 0 12 0; +#X connect 3 0 7 0; +#X connect 3 0 6 0; +#X connect 4 0 3 0; +#X connect 5 0 18 0; +#X connect 6 0 16 0; +#X connect 7 0 1 0; +#X connect 8 0 9 0; +#X connect 9 0 11 0; +#X connect 9 0 13 0; +#X connect 9 0 46 0; +#X connect 10 0 9 1; +#X connect 11 0 5 0; +#X connect 12 0 8 0; +#X connect 13 0 17 0; +#X connect 14 0 15 0; +#X connect 15 0 9 0; +#X connect 16 0 45 0; +#X connect 16 1 44 0; +#X connect 16 2 43 0; +#X connect 17 0 31 0; +#X connect 17 1 32 0; +#X connect 17 2 33 0; +#X connect 18 0 34 0; +#X connect 18 1 36 0; +#X connect 18 2 37 0; +#X connect 19 0 42 0; +#X connect 20 0 21 0; +#X connect 21 0 31 0; +#X connect 21 0 34 0; +#X connect 21 0 45 0; +#X connect 24 0 23 2; +#X connect 24 0 40 0; +#X connect 25 0 2 1; +#X connect 26 0 15 1; +#X connect 27 0 1 1; +#X connect 28 0 8 1; +#X connect 29 0 10 0; +#X connect 30 0 7 1; +#X connect 35 0 4 0; +#X connect 38 0 23 2; +#X connect 39 0 24 0; +#X connect 42 0 41 0; +#X connect 47 0 23 0; +#X connect 47 0 23 1; +#X restore 519 -226 pd guts; +#X obj 11 -226 cnv 15 500 200 empty empty PDA_comparison 20 12 0 14 +-261681 -66577 0; +#X obj 34 -94 hsl 128 15 2 2.05 0 0 \$0-inharmonicity empty fm-inharmonicity +-2 -6 0 8 -225271 -1 -1 0 1; +#X obj 34 -50 hsl 128 15 0 0.5 0 0 \$0-noisiness empty noisiness -2 +-6 0 8 -225271 -1 -1 0 1; +#X obj 33 -135 hsl 128 15 30 3000 0 0 \$0-fund empty f0 -2 -6 0 8 -225271 +-1 -1 0 1; +#X obj 32 -172 tgl 15 0 \$0-sine empty sine 0 -6 0 8 -225280 -1 -1 +0 1; +#X obj 73 -172 tgl 15 0 \$0-fm empty fm 0 -6 0 8 -225280 -1 -1 0 1 +; +#X obj 110 -172 tgl 15 0 \$0-saw empty saw 0 -6 0 8 -225280 -1 -1 0 +1; +#X obj 227 -133 cnv 15 200 100 empty empty empty 20 12 0 14 -262131 +-66577 0; +#X obj 226 -199 cnv 15 200 60 empty empty empty 20 12 0 14 -225280 +-66577 0; +#X symbolatom 242 -170 5 0 0 0 f0 #0-f0_note -; +#X floatatom 312 -170 5 0 0 0 8ve #0-f0_8ve -; +#X symbolatom 245 -112 5 0 0 0 f0 #0-fidd_f0_note -; +#X floatatom 313 -112 5 0 0 0 8ve #0-fidd_f0_8ve -; +#X text 304 -200 Input; +#X text 308 -93 xtract~; +#X text 305 -134 fiddle~; +#X floatatom 315 -62 5 0 0 0 8ve #0-pda_f0_8ve -; +#X symbolatom 247 -62 5 0 0 0 f0 #0-pda_f0_note -; +#X text 20 8 Notes:; +#X text 20 36 In this patch xtract~ is used to provide a combination +of time domain and frequency domain fundamental frequency estimation. +; +#X text 27 233 A block size of 2048 has been used in this example. +Which allows for a theoretical limit of 21Hz. In reality xtract~ can +be used to detect frequencies down to 30Hz with this block size \, +but with a larger block size it could go lower!; +#X text 23 88 [xtract~ f0] uses a method based on the AMDF function +\, with centre and peak clipping used to provide noise robustness. +This could be further improved \, as could the efficiency of the algorithm. +; +#X text 26 154 If [xtract~ f0] is unable to find a fundamental (i.e. +its output is 0 \, the lowest frequency in the peak spectrum is used. +In general this happens for very low frequencies. [xtract~ magnitude_spectrum] +\, [xtract~ peaks] \, and [xtract~ lowest_match] are used to achieve +this.; +#X obj 147 -172 tgl 15 0 \$0-adc empty adc~ 0 -6 0 8 -257472 -1 -1 +0 1; +#X floatatom 386 -171 5 0 0 0 cent #0-f0_cent -; +#X floatatom 386 -63 5 0 0 0 cent #0-pda_f0_cent -; +#X floatatom 386 -113 5 0 0 0 cent #0-fidd_f0_cent -; +#X obj 465 -187 vsl 10 100 0 127 0 0 \$0-master-lvl-stereo \$0-master-lvl-stereo +out -4 -8 0 8 -262131 -1 -1 3898 1; +#X obj 465 -77 bng 10 250 50 0 \$0-master-lvl-mute empty mute -6 16 +0 8 -262131 -1 -1; diff --git a/examples/puredata/xtract/mfcc.pd b/examples/puredata/xtract/mfcc.pd new file mode 100644 index 0000000..7e12479 --- /dev/null +++ b/examples/puredata/xtract/mfcc.pd @@ -0,0 +1,154 @@ +#N canvas 667 28 576 568 10; +#N canvas 397 309 590 228 guts 0; +#X obj 318 37 loadbang; +#X obj 318 64 f \$0; +#N canvas 0 0 450 300 dacs 0; +#X obj 164 152 a_output~; +#X msg 251 100 0; +#X obj 249 59 r \$0-master-lvl-stereo; +#X obj 251 81 r \$0-master-lvl-mute; +#X obj 251 120 s \$0-master-lvl-stereo; +#X obj 174 110 inlet~; +#X connect 1 0 0 2; +#X connect 1 0 4 0; +#X connect 2 0 0 2; +#X connect 3 0 1 0; +#X connect 5 0 0 0; +#X connect 5 0 0 1; +#X restore 85 126 pd dacs; +#N canvas 0 0 450 300 analysis 0; +#X obj 191 201 xtract~ mfcc; +#X obj 195 176 xtract~ magnitude_spectrum; +#X obj 194 153 *~; +#X obj 219 104 r \$0-window-gen; +#X obj 190 225 tabsend~ \$0-mfcc; +#X obj 181 69 inlet~; +#X obj 299 45 block~ 1024 2 1; +#X obj 219 125 a_hann 1024; +#X connect 0 0 4 0; +#X connect 1 0 0 0; +#X connect 2 0 1 0; +#X connect 3 0 7 0; +#X connect 5 0 2 0; +#X connect 7 0 2 1; +#X restore 32 167 pd analysis; +#X obj 16 24 r \$0-fund; +#X msg 318 88 \; pd dsp 1 \; \$1-master-lvl-stereo 60 \; \$1-window-gen +bang \; \$1-mfcc xticks 0 5 5 \; \$1-mfcc yticks 0 50 1 \; \$1-mfcc +xlabel -120 0 5 10 15 20; +#N canvas 308 141 679 510 paf 0; +#X obj 331 95 / 10; +#X obj 331 120 pack 0 50; +#X obj 139 412 fexpr~ $x1 * $x2; +#X obj 241 188 cos~; +#X obj 241 166 expr~ ($v1 * 0.5) - 0.25; +#X obj 380 197 *~ 256; +#X obj 462 209 line~; +#X obj 462 189 pack 0 50; +#X obj 289 194 *~; +#X obj 282 216 +~ 256; +#X obj 118 328 cos~; +#X obj 118 305 *~; +#X obj 161 328 cos~; +#X obj 161 305 +~; +#X obj 154 358 -~; +#X obj 174 390 *~; +#X obj 136 390 +~; +#X obj 230 291 wrap~; +#X obj 199 291 -~; +#X obj 199 259 samphold~; +#X obj 331 142 line~; +#X obj 138 438 outlet~; +#X obj 462 167 inlet bandwidth; +#X obj 47 121 phasor~; +#X obj 48 100 line~; +#X msg 47 78 \$1 20; +#X obj 48 57 inlet fund; +#X obj 331 73 inlet cf; +#X obj 282 316 tabread4~ \$0-hann; +#X obj 466 426 table \$0-hann; +#X connect 0 0 1 0; +#X connect 1 0 20 0; +#X connect 2 0 21 0; +#X connect 3 0 8 0; +#X connect 4 0 3 0; +#X connect 5 0 8 1; +#X connect 6 0 5 0; +#X connect 7 0 6 0; +#X connect 8 0 9 0; +#X connect 9 0 28 0; +#X connect 10 0 14 1; +#X connect 10 0 16 0; +#X connect 11 0 13 0; +#X connect 11 0 10 0; +#X connect 12 0 14 0; +#X connect 13 0 12 0; +#X connect 14 0 15 0; +#X connect 15 0 16 1; +#X connect 16 0 2 0; +#X connect 17 0 18 1; +#X connect 17 0 15 1; +#X connect 18 0 11 1; +#X connect 19 0 18 0; +#X connect 19 0 17 0; +#X connect 20 0 19 0; +#X connect 22 0 7 0; +#X connect 23 0 19 1; +#X connect 23 0 13 1; +#X connect 23 0 11 0; +#X connect 23 0 4 0; +#X connect 24 0 23 0; +#X connect 25 0 24 0; +#X connect 26 0 25 0; +#X connect 27 0 0 0; +#X connect 28 0 2 1; +#X restore 35 80 pd paf; +#X obj 85 25 r \$0-cf; +#X obj 140 23 r \$0-bw; +#X connect 0 0 1 0; +#X connect 1 0 5 0; +#X connect 4 0 6 0; +#X connect 6 0 2 0; +#X connect 6 0 3 0; +#X connect 7 0 6 1; +#X connect 8 0 6 2; +#X restore 516 -222 pd guts; +#X obj 6 -225 cnv 15 500 200 empty empty MFCC 20 12 0 14 -261681 -66577 +0; +#X obj 184 -202 cnv 15 250 150 empty empty empty 20 12 0 14 -262131 +-66577 0; +#X obj 465 -187 vsl 10 100 0 127 0 0 \$0-master-lvl-stereo \$0-master-lvl-stereo +out -4 -8 0 8 -262131 -1 -1 4677 1; +#X obj 465 -77 bng 10 250 50 0 \$0-master-lvl-mute empty mute -6 16 +0 8 -262131 -1 -1; +#X obj 32 -114 hsl 128 15 20 2000 0 0 \$0-cf empty centre_frequency +-2 -6 0 8 -225271 -1 -1 4000 1; +#X obj 33 -153 hsl 128 15 80 2000 0 0 \$0-fund empty fundamental -2 +-6 0 8 -225271 -1 -1 3100 1; +#X text 19 7 Notes:; +#X text 20 36 In this patch [xtract~ magnitude_spectrum] is first used +to extract the magnitude spectrum from an audio signal in overlapping +blocks of 1024 samples.; +#X text 20 87 [xtract~ mfcc] outputs a series 20 Mel-Frequency Cepstral +Coefficients. When it is instantiated \, an initialisation function +creates a bank of 20 mel-spaced filters \, between 80Hz and 1800Hz +on a linear scale. All filters have the same gain; +#X text 23 165 Whilst DSP is running the input vector (magnitude spectrum) +is filtered by this filterbank \, and the total energy output from +each filter is appended to a new vector. This new vector (mel-filtered +spectrum) is then subjected to a fast cosine transfor. The output can +be visualised in the graph labelled \$0-mfcc.; +#X text 23 255 With LibXtract it is possible to change the number of +Mel filters as well as the range of frequencies over which they operate +\, and the filter scaling (equal area/equal gain). With this PD example +\, sensible defaults have been chosen to improve usability; +#N canvas 0 0 450 300 graph2 0; +#X array \$0-mfcc 20 float 5; +#A 0 -173.776 -23.5876 -0.366171 -3.06397 -0.349543 -1.22577 -0.205707 +-0.846186 -0.420453 -0.62197 -0.362943 -0.731029 -0.492134 -0.787504 +-0.453503 -0.578885 -0.402549 -0.51454 -0.395146 -0.515564; +#X coords 0 50 19 -100 200 100 1; +#X restore 212 -178 graph; +#X text 28 -188 PAF synthesiser; +#X obj 34 -71 hsl 128 15 1 500 0 0 \$0-bw empty formant_bandwidth -2 +-6 0 8 -225271 -1 -1 5300 1; diff --git a/examples/puredata/xtract/sonogram.pd b/examples/puredata/xtract/sonogram.pd new file mode 100644 index 0000000..78a7b42 --- /dev/null +++ b/examples/puredata/xtract/sonogram.pd @@ -0,0 +1 @@ +#N canvas 0 0 450 300 10; diff --git a/examples/puredata/xtract/xtract-help.pd b/examples/puredata/xtract/xtract-help.pd new file mode 100644 index 0000000..eff8381 --- /dev/null +++ b/examples/puredata/xtract/xtract-help.pd @@ -0,0 +1,69 @@ +#N canvas 685 60 450 725 10; +#X text 21 12 [xtract~]; +#X text 24 19 ________; +#X text 22 52 [xtract~] provides a wrapper for the feature extraction +library: LibXtract. Please refer to the documentation at libxtract.sourceforge.net +\, for a full explanation of the library and the functions it provides. +Only the operation of the PD external will be explained here along +with a few use case scenarios.; +#X text 20 148 [xtract~] must always be called with one argument \, +in the following form: [xtract~ <feature>] \, where <feature> is a +feature supported by the LibXtract library. A complete list of features +may be obtained by sending the external a |help( message:; +#X obj 27 262 xtract~; +#X msg 27 233 help; +#X text 26 298 Other than this help message \, the data sent to the +left inlet should always be a 'signal' (i.e. audio rate). This is the +data from a which a given feature will be extracted.; +#X text 27 405 Any additional arguments that need to be passed to the +feature extraction funtion must be provided as a list to the right +inlet \, e.g.; +#X obj 182 490 xtract~ mean; +#X floatatom 132 586 10 0 0 0 - - -; +#X floatatom 253 523 5 0 0 0 - - -; +#X msg 182 522 list \$1; +#X obj 132 556 xtract~ variance; +#X obj 181 466 phasor~ 0.1; +#X text 39 641 Below are some possible use cases (click to open):; +#X text 26 352 The outlet may be a scalar (control rate) \, or a vector +(audio rate) \, depending on the nature of the feature that is being +extracted.; +#X obj 44 674 cnv 15 82 22 empty empty empty 20 12 0 14 -99865 -66577 +0; +#X obj 47 675 bng 15 250 50 0 f0-open empty empty 0 -6 0 8 -262144 +-1 -1; +#X obj 64 675 bng 15 250 50 0 f0-open empty empty 0 -6 0 8 -262144 +-1 -1; +#X obj 79 675 bng 15 250 50 0 f0-open empty empty 0 -6 0 8 -262144 +-1 -1; +#X obj 96 675 bng 15 250 50 0 f0-open empty empty 0 -6 0 8 -262144 +-1 -1; +#X obj 42 672 cnv 15 80 20 f0-open empty f0 20 12 0 14 -195568 -66577 +0; +#N canvas 0 0 450 300 hidden 0; +#X msg 27 133 \; pd open f0.pd ./ \;; +#X obj 27 110 r f0-open; +#X obj 26 42 r mfcc-open; +#X msg 26 65 \; pd open mfcc.pd ./ \;; +#X connect 1 0 0 0; +#X connect 2 0 3 0; +#X restore 379 736 pd hidden; +#X obj 136 675 cnv 15 82 22 empty empty empty 20 12 0 14 -99865 -66577 +0; +#X obj 140 678 bng 15 250 50 0 mfcc-open empty empty 0 -6 0 8 -262144 +-1 -1; +#X obj 155 678 bng 15 250 50 0 mfcc-open empty empty 0 -6 0 8 -262144 +-1 -1; +#X obj 170 678 bng 15 250 50 0 mfcc-open empty empty 0 -6 0 8 -262144 +-1 -1; +#X obj 185 678 bng 15 250 50 0 mfcc-open empty empty 0 -6 0 8 -262144 +-1 -1; +#X obj 134 673 cnv 15 80 20 f0-open empty MFCC 20 12 0 14 -195568 -66577 +0; +#X connect 5 0 4 0; +#X connect 8 0 10 0; +#X connect 8 0 11 0; +#X connect 11 0 12 1; +#X connect 12 0 9 0; +#X connect 13 0 8 0; +#X connect 13 0 12 0; |