Hello PD Virtuosi:
Imagine my delight when I first enrolled in the PD list a few days ago
to find that you've all resolved to give up grumpiness so as not to put
off newbies like me! It gave me courage to put forward my first effort
for criticism and feedback.
The patch implements a tone generator for Pythagorean tuning with
syntonic comma offsets. I hope it will help my renaissance flute
consort to learn to play in just intonation in the style of Zarlino.
So, it has to be usable by non-electronic music people. It does what
I want. I would appreciate if anyone could review it for style and
understanding. I suspect that I have done some unnecessary things do to
my imperfect understanding
One thing in particular that it does in a way I don't like is setting
the note name. I would prefer to pass the note name as an argument to
the noteSelector abstraction instead of having that bit of [set( and
[send] circuitry off to the side of the noteSelector, but I couldn't
figure out how.
Thanks in advance for your attention.
Cheers, David
#N canvas 33 25 349 877 12;
#X floatatom -20 76 5 0 0 2 frequency - -;
#X obj -19 36 r \$0-freq;
#X obj -20 255 s \$0-note;
#X msg -20 231 set D-natural;
#X obj -18 308 s \$0-note;
#X obj -21 363 s \$0-note;
#X obj -23 419 s \$0-note;
#X obj -21 473 s \$0-note;
#X obj -21 526 s \$0-note;
#X obj -21 582 s \$0-note;
#X obj -21 637 s \$0-note;
#X obj -22 687 s \$0-note;
#X obj -23 741 s \$0-note;
#X obj -24 796 s \$0-note;
#X obj -23 851 s \$0-note;
#X msg -21 340 set E-natural;
#X msg -23 396 set F-natural;
#X msg -21 450 set F-sharp;
#X msg -21 502 set G-natural;
#X msg -21 556 set G-sharp;
#X msg -21 611 set A-natural;
#X msg -22 662 set B-flat;
#X msg -23 717 set B-natural;
#X msg -24 772 set C-natural;
#X msg -23 826 set C-sharp;
#X msg -18 285 set E-flat;
#X text -20 10 Pythagorean Tone Generator;
#X obj -20 118 *;
#X floatatom 51 94 5 0.25 2 0 - - -;
#X obj 69 33 octaveSelector;
#X obj 104 231 noteSelector 1 1 \$0;
#X obj 104 285 noteSelector 256 243 \$0;
#X obj 104 340 noteSelector 9 8 \$0;
#X obj 104 397 noteSelector 32 27 \$0;
#X obj 104 450 noteSelector 81 64 \$0;
#X obj 104 503 noteSelector 4 3 \$0;
#X obj 104 557 noteSelector 729 512 \$0;
#X obj 105 610 noteSelector 3 2 \$0;
#X obj 106 663 noteSelector 128 81 \$0;
#X obj 105 717 noteSelector 27 16 \$0;
#X obj 106 771 noteSelector 16 9 \$0;
#X obj 106 824 noteSelector 243 128 \$0;
#X obj 202 33 pitchSelector;
#X obj -20 141 toneGenerator;
#X obj 202 92 noteDisplay \$0;
#X connect 0 0 27 0;
#X connect 1 0 0 0;
#X connect 3 0 2 0;
#X connect 15 0 5 0;
#X connect 16 0 6 0;
#X connect 17 0 7 0;
#X connect 18 0 8 0;
#X connect 19 0 9 0;
#X connect 20 0 10 0;
#X connect 21 0 11 0;
#X connect 22 0 12 0;
#X connect 23 0 13 0;
#X connect 24 0 14 0;
#X connect 25 0 4 0;
#X connect 27 0 43 0;
#X connect 28 0 27 1;
#X connect 29 0 27 0;
#X connect 29 1 28 0;
#X connect 30 0 3 0;
#X connect 31 0 25 0;
#X connect 32 0 15 0;
#X connect 33 0 16 0;
#X connect 34 0 17 0;
#X connect 35 0 18 0;
#X connect 36 0 19 0;
#X connect 37 0 20 0;
#X connect 38 0 21 0;
#X connect 39 0 22 0;
#X connect 40 0 23 0;
#X connect 41 0 24 0;
#N canvas 204 45 837 771 12;
#X floatatom 178 353 5 0 0 0 - - -;
#X obj 143 33 bng 15 250 50 0 empty empty +0 0 -6 0 8 -90133 -1 -1
;
#X obj 267 338 * 81;
#X obj 267 361 / 80;
#X floatatom 434 445 5 0 0 0 - - -;
#X obj 161 33 bng 15 250 50 0 empty empty +1 0 -6 0 8 -250685 -1 -1
;
#X floatatom 9 448 5 0 0 0 - - -;
#X obj 125 33 bng 15 250 50 0 empty empty -1 0 -6 0 8 -250685 -1 -1
;
#X obj 96 338 * 80;
#X obj 96 361 / 81;
#X obj 178 281 * \$1;
#X obj 178 304 / \$2;
#X msg 9 493 set sc-1;
#X msg 178 396 set sc-0;
#X msg 434 492 set sc+1;
#X obj 178 373 s \$3-freq;
#X obj 9 469 s \$3-freq;
#X obj 434 467 s \$3-freq;
#X obj 178 419 s \$3-comma;
#X obj 9 517 s \$3-comma;
#X obj 434 517 s \$3-comma;
#X obj 103 289 outlet;
#X obj 107 33 bng 15 250 50 0 empty empty -2 0 -6 0 8 -257472 -1 -1
;
#X obj 179 33 bng 15 250 50 0 empty empty +2 0 -6 0 8 -257472 -1 -1
;
#X floatatom -80 617 5 0 0 0 - - -;
#X obj -29 550 * 80;
#X obj -29 573 / 81;
#X obj -80 638 s \$3-freq;
#X obj -80 686 s \$3-comma;
#X obj 457 549 * 81;
#X obj 457 572 / 80;
#X floatatom 537 614 5 0 0 0 - - -;
#X obj 537 636 s \$3-freq;
#X obj 537 686 s \$3-comma;
#X msg 537 661 set sc+2;
#X msg -80 662 set sc-2;
#X floatatom 434 420 5 0 0 0 - - -;
#X floatatom 9 419 5 0 0 0 - - -;
#X obj 178 256 r pitch;
#X connect 0 0 15 0;
#X connect 1 0 0 0;
#X connect 1 0 13 0;
#X connect 1 0 21 0;
#X connect 2 0 3 0;
#X connect 3 0 36 0;
#X connect 4 0 17 0;
#X connect 5 0 4 0;
#X connect 5 0 14 0;
#X connect 5 0 21 0;
#X connect 6 0 16 0;
#X connect 7 0 6 0;
#X connect 7 0 12 0;
#X connect 7 0 21 0;
#X connect 8 0 9 0;
#X connect 9 0 37 0;
#X connect 10 0 11 0;
#X connect 11 0 0 0;
#X connect 11 0 2 0;
#X connect 11 0 8 0;
#X connect 12 0 19 0;
#X connect 13 0 18 0;
#X connect 14 0 20 0;
#X connect 22 0 24 0;
#X connect 22 0 21 0;
#X connect 22 0 35 0;
#X connect 23 0 31 0;
#X connect 23 0 21 0;
#X connect 23 0 34 0;
#X connect 24 0 27 0;
#X connect 25 0 26 0;
#X connect 26 0 24 0;
#X connect 29 0 30 0;
#X connect 30 0 31 0;
#X connect 31 0 32 0;
#X connect 34 0 33 0;
#X connect 35 0 28 0;
#X connect 36 0 4 0;
#X connect 36 0 29 0;
#X connect 37 0 6 0;
#X connect 37 0 25 0;
#X connect 38 0 10 0;
#X coords 0 -1 1 1 100 50 1 100 0;
#N canvas 0 0 450 300 10;
#X symbolatom 103 160 0 0 0 2 syntonic_comma - -;
#X symbolatom 104 128 0 0 0 2 note - -;
#X obj 51 42 r \$1-note;
#X obj 123 42 r \$1-comma;
#X connect 2 0 1 0;
#X connect 3 0 0 0;
#X coords 0 -1 1 1 110 80 1 100 100;
#N canvas 416 394 589 407 10;
#X obj 172 141 f 1;
#X msg 205 87 2;
#X msg 240 86 4;
#X floatatom 172 184 5 0 0 0 - - -;
#X obj 6 30 bng 15 250 50 0 empty empty -2 0 -6 0 8 -99865 -1 -1;
#X msg 172 87 1;
#X msg 135 88 0.5;
#X msg 99 88 0.25;
#X obj 27 30 bng 15 250 50 0 empty empty -1 0 -6 0 8 -128992 -1 -1
;
#X obj 50 30 bng 15 250 50 0 empty empty 0 0 -6 0 8 -166441 -1 -1;
#X obj 71 30 bng 15 250 50 0 empty empty +1 0 -6 0 8 -195568 -1 -1
;
#X obj 94 30 bng 15 250 50 0 empty empty +2 0 -6 0 8 -233017 -1 -1
;
#X obj 172 210 outlet;
#X obj 172 23 loadbang;
#X obj 40 211 outlet;
#X connect 0 0 3 0;
#X connect 1 0 0 0;
#X connect 2 0 0 0;
#X connect 3 0 12 0;
#X connect 4 0 7 0;
#X connect 4 0 14 0;
#X connect 5 0 0 0;
#X connect 6 0 0 0;
#X connect 7 0 0 0;
#X connect 8 0 6 0;
#X connect 8 0 14 0;
#X connect 9 0 5 0;
#X connect 9 0 14 0;
#X connect 10 0 1 0;
#X connect 10 0 14 0;
#X connect 11 0 2 0;
#X connect 11 0 14 0;
#X connect 13 0 5 0;
#X coords 0 -1 1 1 120 50 1 0 0;
#N canvas 514 147 452 535 10;
#X floatatom 53 193 5 0 0 0 - - -;
#X floatatom 53 118 5 0 0 0 - - -;
#X obj 53 139 * 2;
#X obj 53 163 / 3;
#X msg 8 73 408;
#X msg 52 73 415;
#X msg 93 72 440;
#X obj 8 32 bng 15 250 50 0 empty empty 408 0 -6 0 8 -262144 -1 -1
;
#X obj 53 220 s pitch;
#X obj 135 39 loadbang;
#X obj 34 32 bng 15 250 50 0 empty empty 415 0 -6 0 8 -262144 -1 -1
;
#X obj 62 33 bng 15 250 50 0 empty empty 440 0 -6 0 8 -262144 -1 -1
;
#X connect 0 0 8 0;
#X connect 1 0 2 0;
#X connect 2 0 3 0;
#X connect 3 0 0 0;
#X connect 4 0 1 0;
#X connect 5 0 1 0;
#X connect 6 0 1 0;
#X connect 7 0 4 0;
#X connect 9 0 6 0;
#X connect 10 0 5 0;
#X connect 11 0 6 0;
#X coords 0 -1 1 1 85 50 1 0 0;
#N canvas 261 25 840 825 12;
#X obj 456 295 line~;
#X obj 456 271 pack 0 50;
#X floatatom 458 160 0 0 0 0 - - -;
#X obj 306 232 *~;
#X obj 456 196 / 10;
#X obj 456 220 moses 0;
#X msg 456 244 0;
#X obj 326 265 *~;
#X obj 265 265 sig~ 1;
#X obj 275 318 /~;
#X obj 290 292 +~;
#X obj 275 370 hip~;
#X obj 305 205 osc~;
#X obj 304 179 / 2;
#X obj 304 147 inlet;
#X obj 344 880 t b;
#X obj 344 827 f;
#X obj 344 905 f;
#X msg 458 904 0;
#X obj 344 857 moses 1;
#X obj 458 876 t b f;
#X obj 424 837 moses 1;
#X obj 20 487 dbtorms;
#X msg 290 700 \; pd dsp 1;
#X obj 20 560 line~;
#X obj 55 632 *~;
#X obj 55 662 dac~;
#X obj 20 517 pack 0 50;
#X text 129 854 test if less than 1 -->;
#X text 95 881 if true convert to bang -->;
#X text 91 486 <-- convert from dB to linear units;
#X floatatom 314 609 3 0 100 0 dB - -;
#X obj 141 15 bng 30 250 50 0 empty empty mute -38 7 0 12 -44926 -1
-1;
#X text 109 516 <-- make a ramp to avoid clicks or zipper noise;
#X obj 145 631 *~;
#X text 364 768 MUTE logic:;
#X obj 344 931 s \$0-master-lvl;
#X obj 314 669 s \$0-master-out;
#X obj 424 808 r \$0-master-out;
#X text 51 400 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 57 907 previous nonzero master-lvl -->;
#X text 129 811 recall previous;
#X text 129 829 value of master-lvl -->;
#X text 30 709 automatically start DSP -->;
#X obj 76 582 hip~ 3;
#X obj 138 582 hip~ 3;
#X obj 21 454 r \$0-master-out;
#X obj 313 564 r \$0-master-lvl;
#X obj 7 61 hsl 128 15 15 35 0 1 empty empty Richness -2 -6 0 8 -241291
-1 -1 7300 0;
#X obj 7 30 hsl 128 15 70 90 0 1 empty empty Volume -2 -6 0 8 -250685
-1 -1 10900 0;
#X text 213 30 Cobbled together output~ and waveshape example in the
documentation.;
#X connect 0 0 3 1;
#X connect 1 0 0 0;
#X connect 2 0 4 0;
#X connect 3 0 7 0;
#X connect 3 0 7 1;
#X connect 4 0 5 0;
#X connect 5 0 6 0;
#X connect 5 1 1 0;
#X connect 6 0 1 0;
#X connect 7 0 10 1;
#X connect 8 0 9 0;
#X connect 8 0 10 0;
#X connect 9 0 11 0;
#X connect 10 0 9 1;
#X connect 11 0 44 0;
#X connect 11 0 45 0;
#X connect 12 0 3 0;
#X connect 13 0 12 0;
#X connect 14 0 13 0;
#X connect 15 0 17 0;
#X connect 16 0 19 0;
#X connect 17 0 36 0;
#X connect 18 0 36 0;
#X connect 19 0 15 0;
#X connect 19 1 20 0;
#X connect 20 0 18 0;
#X connect 21 1 17 1;
#X connect 22 0 27 0;
#X connect 24 0 34 0;
#X connect 24 0 25 0;
#X connect 25 0 26 0;
#X connect 27 0 24 0;
#X connect 31 0 23 0;
#X connect 31 0 37 0;
#X connect 32 0 16 0;
#X connect 34 0 26 1;
#X connect 38 0 16 1;
#X connect 38 0 21 0;
#X connect 44 0 25 1;
#X connect 45 0 34 1;
#X connect 46 0 22 0;
#X connect 47 0 31 0;
#X connect 48 0 2 0;
#X connect 49 0 37 0;
#X connect 49 0 23 0;
#X coords 0 -1 1 1 175 80 1 0 0;