-
Notifications
You must be signed in to change notification settings - Fork 0
/
GUIDE-TDH.LIB.pd
304 lines (304 loc) · 18.9 KB
/
GUIDE-TDH.LIB.pd
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
#N canvas 345 143 715 631 12;
#N canvas 102 101 450 300 box 1;
#X coords 0 0 1 1 621 251 2 0 0;
#X restore 9 59 pd box;
#N canvas 131 130 450 300 box 1;
#X coords 0 0 1 1 621 241 2 0 0;
#X restore 9 464 pd box;
#N canvas 160 159 450 300 box 1;
#X coords 0 0 1 1 621 41 2 0 0;
#X restore 9 319 pd box;
#X obj 9 9 cnv 15 631 41 empty empty TDH.LIB\ GUIDE 2 20 0 32 #cecece #373737 0;
#N canvas 0 22 450 300 tdh.ac 0;
#X obj 9 9 cnv 15 500 40 empty empty TDH.LIB\ -\ ALGORITHMIC\ COMPOSITION 2 20 0 32 #b7b7b7 #373737 0;
#X obj 34 429 tdh.lib/tdh.ac.eventCreation;
#X text 49 398 tdh.ac.eventCreation.ui;
#X obj 19 99 tdh.ac.eventCreation.ui;
#A saved 0 0 0 0 0;
#X obj 309 99 tdh.lib/tdh.ac.euclidianRhythm.ui;
#A saved 0 0 0 0;
#X text 269 258 tdh.lib/tdh.ac.euclidianRhythm.ui;
#X obj 279 289 tdh.lib/tdh.ac.euclidianRhythm;
#A saved 0 0 0 0;
#X restore 19 494 pd tdh.ac;
#N canvas 0 22 450 300 tdh.ctrl 0;
#X obj 9 9 cnv 15 500 40 empty empty TDH.LIB\ -\ CONTROLLER\ MODULES 2 20 0 32 #b7b7b7 #373737 0;
#X obj 29 89 tdh.lib/tdh.ctrl.button.ui;
#A saved 0 0;
#X text 29 238 tdh.ctrl.button.ui;
#X obj 209 89 tdh.lib/tdh.ctrl.slider.ui;
#A saved 0 0 100 0 0;
#X text 189 238 tdh.ctrl.slider.ui;
#X restore 19 554 pd tdh.ctrl;
#N canvas 0 22 450 300 tdh.math 0;
#X obj 9 9 cnv 15 500 40 empty empty TDH.LIB\ -\ MATHEMATICS 2 20 0 32 #b7b7b7 #373737 0;
#N canvas 0 22 450 300 tdh.math-all 0;
#N canvas 0 22 450 300 box1 0;
#X coords 0 0 1 1 491 941 2 0 0;
#X restore 9 59 pd box1;
#N canvas 0 22 450 300 box1 0;
#X coords 0 0 1 1 491 941 2 0 0;
#X restore 509 59 pd box1;
#X obj 19 69 tdh.lib/tdh.math.bpm2ms;
#X obj 19 129 tdh.lib/tdh.math.cartopol~;
#X obj 19 189 tdh.lib/tdh.math.dbfs2lin;
#X obj 19 249 tdh.lib/tdh.math.divide.ui;
#A saved 0 1;
#X obj 21 337 tdh.lib/tdh.math.fftNorm~;
#X obj 19 369 tdh.lib/tdh.math.float.ui;
#A saved 0 0;
#X obj 19 449 tdh.lib/tdh.math.freq2midi.ui;
#X obj 19 529 tdh.lib/tdh.math.lin2dbfs;
#X obj 19 159 tdh.lib/tdh.math.db2dbfs;
#X obj 9 9 cnv 15 991 41 empty empty TDH.LIB\ -\ MATHEMATICS\ -\ ALL 2 20 0 32 #b7b7b7 #373737 0;
#X obj 19 559 tdh.lib/tdh.math.midi2freq.ui;
#X obj 20 648 tdh.lib/tdh.math.minus.ui;
#A saved 0 1;
#X text 86 667 tdh.lib/tdh.math.minus.ui;
#X obj 19 739 tdh.lib/tdh.math.ms2bpm;
#X obj 19 799 tdh.lib/tdh.math.ms2samp~;
#X obj 19 829 tdh.lib/tdh.math.msbpm2notedur;
#X obj 19 859 tdh.lib/tdh.math.multiply.ui;
#A saved 0 1;
#X text 71 876 tdh.lib/tdh.math.multiply.ui;
#X obj 19 949 tdh.lib/tdh.math.pitchFreqConversions;
#X obj 529 69 tdh.lib/tdh.math.plus.ui;
#A saved 0 1;
#X text 599 88 tdh.lib/tdh.math.plus.ui;
#X obj 525 152 tdh.lib/tdh.math.probabilityTable.ui;
#A saved 50 30 20 10 5 0 0 0 5 0;
#X text 745 271 tdh.lib/tdh.math.probabilityTable.ui;
#X obj 525 472 tdh.lib/tdh.math.randomDistributions.ui;
#A saved 0 0 0 0 0 0;
#X text 745 531 tdh.lib/tdh.math.randomDistributions.ui;
#X obj 529 629 tdh.lib/tdh.math.samp2ms~;
#X obj 529 659 tdh.lib/tdh.math.scale;
#A saved 0 0 0 0 0;
#X obj 529 689 tdh.lib/tdh.math.scale.ui;
#A saved 0 0 0 0 0;
#X text 649 718 tdh.lib/tdh.math.scale.ui;
#X obj 529 849 tdh.lib/tdh.math.timeConversions;
#X obj 529 879 tdh.lib/tdh.math.valueClamp;
#X obj 529 909 tdh.lib/tdh.math.valueClamp.ui;
#A saved 0 0 0;
#X text 130 388 tdh.lib/tdh.math.float.ui;
#X text 136 467 tdh.lib/tdh.math.freq2midi.ui;
#X text 126 587 tdh.lib/tdh.math.midi2freq.ui;
#X text 94 269 tdh.lib/tdh.math.divide.ui;
#X obj 19 99 tdh.lib/tdh.math.bpm2bps;
#X obj 19 769 tdh.lib/tdh.math.ms2bps;
#X obj 19 219 tdh.lib/tdh.math.dbfs2db;
#X text 739 928 tdh.lib/tdh.math.valueClamp.ui;
#X restore 19 89 pd tdh.math-all;
#N canvas 0 22 450 300 tdh.math-timeConversions 0;
#X obj 19 69 tdh.lib/tdh.math.bpm2ms;
#X obj 9 9 cnv 15 991 41 empty empty TDH.LIB\ -\ MATHEMATICS\ -\ TIME\ CONVERSIONS 2 20 0 32 #b7b7b7 #373737 0;
#X obj 19 129 tdh.lib/tdh.math.ms2bpm;
#X obj 19 189 tdh.lib/tdh.math.ms2samp~;
#X obj 19 279 tdh.lib/tdh.math.msbpm2notedur;
#X obj 19 219 tdh.lib/tdh.math.samp2ms~;
#X obj 19 249 tdh.lib/tdh.math.timeConversions;
#X obj 19 99 tdh.lib/tdh.math.bpm2bps;
#X obj 19 159 tdh.lib/tdh.math.ms2bps;
#X restore 19 169 pd tdh.math-timeConversions;
#N canvas 0 22 450 300 tdh.math-pitchConversions 0;
#X obj 9 9 cnv 15 991 41 empty empty TDH.LIB\ -\ MATHEMATICS\ -\ ALL 2 20 0 32 #b7b7b7 #373737 0;
#X obj 19 239 tdh.lib/tdh.math.pitchFreqConversions;
#X obj 19 59 tdh.lib/tdh.math.freq2midi.ui;
#X obj 19 149 tdh.lib/tdh.math.midi2freq.ui;
#X text 139 78 tdh.lib/tdh.math.freq2midi.ui;
#X text 129 178 tdh.lib/tdh.math.midi2freq.ui;
#X restore 19 199 pd tdh.math-pitchConversions;
#N canvas 0 22 450 300 tdh.math-fftTools 0;
#X obj 9 69 tdh.lib/tdh.math.cartopol~;
#X obj 9 99 tdh.lib/tdh.math.fftNorm~;
#X obj 9 9 cnv 15 991 41 empty empty TDH.LIB\ -\ MATHEMATICS\ -\ FFT\ TOOLS 2 20 0 32 #b7b7b7 #373737 0;
#X restore 19 319 pd tdh.math-fftTools;
#N canvas 0 22 450 300 tdh.math-mathOperators 0;
#X obj 29 339 tdh.lib/tdh.math.divide.ui;
#A saved 0 1;
#X obj 29 429 tdh.lib/tdh.math.float.ui;
#A saved 0 0;
#X obj 9 9 cnv 15 991 41 empty empty TDH.LIB\ -\ MATHEMATICS\ -\ OPERATORS 2 20 0 32 #b7b7b7 #373737 0;
#X obj 29 159 tdh.lib/tdh.math.minus.ui;
#A saved 0 1;
#X text 95 178 tdh.lib/tdh.math.minus.ui;
#X obj 29 249 tdh.lib/tdh.math.multiply.ui;
#A saved 0 1;
#X text 86 267 tdh.lib/tdh.math.multiply.ui;
#X obj 29 69 tdh.lib/tdh.math.plus.ui;
#A saved 0 1;
#X text 99 88 tdh.lib/tdh.math.plus.ui;
#X text 143 449 tdh.lib/tdh.math.float.ui;
#X text 99 358 tdh.lib/tdh.math.divide.ui;
#X restore 19 139 pd tdh.math-mathOperators;
#N canvas 0 22 450 300 tdh.math-probabilityAndRandom 0;
#X obj 9 9 cnv 15 991 41 empty empty TDH.LIB\ -\ MATHEMATICS\ -\ PROBABILITY\ AND\ RANDOM 2 20 0 32 #b7b7b7 #373737 0;
#X obj 19 59 tdh.lib/tdh.math.probabilityTable.ui;
#A saved 50 30 20 10 5 0 0 0 5 0;
#X text 239 178 tdh.lib/tdh.math.probabilityTable.ui;
#X obj 19 369 tdh.lib/tdh.math.randomDistributions.ui;
#A saved 0 0 0 0 0 0;
#X text 239 428 tdh.lib/tdh.math.randomDistributions.ui;
#X restore 19 289 pd tdh.math-probabilityAndRandom;
#N canvas 0 22 450 300 tdh.math-gainAndVolumeConversions 0;
#X obj 19 69 tdh.lib/tdh.math.dbfs2lin;
#X obj 19 129 tdh.lib/tdh.math.lin2dbfs;
#X obj 9 9 cnv 15 991 41 empty empty TDH.LIB\ -\ MATHEMATICS\ -\ GAIN\ AND\ VOLUME\ UNIT\ CONVERSIONS 2 20 0 32 #b7b7b7 #373737 0;
#X obj 19 99 tdh.lib/tdh.math.dbfs2db;
#X restore 19 229 pd tdh.math-gainAndVolumeConversions;
#N canvas 0 22 450 300 tdh.math-scalingAndRange 0;
#X obj 9 9 cnv 15 991 41 empty empty TDH.LIB\ -\ MATHEMATICS\ -\ SCALING\ AND\ RANGE 2 20 0 32 #b7b7b7 #373737 0;
#X obj 9 69 tdh.lib/tdh.math.scale;
#A saved 0 0 0 0 0;
#X obj 9 99 tdh.lib/tdh.math.scale.ui;
#A saved 0 0 0 0 0;
#X text 129 128 tdh.lib/tdh.math.scale.ui;
#X obj 9 269 tdh.lib/tdh.math.valueClamp;
#X obj 9 299 tdh.lib/tdh.math.valueClamp.ui;
#A saved 0 0 0;
#X text 229 314 tdh.lib/tdh.math.valueClamp.ui;
#X restore 19 259 pd tdh.math-scalingAndRange;
#X obj 19 69 cnv 10 10 10 empty empty All\ Objects\ Alphabetic 0 6 0 16 #ffffff #373737 0;
#X obj 19 119 cnv 10 10 10 empty empty Categories 0 6 0 16 #ffffff #373737 0;
#X restore 19 614 pd tdh.math;
#N canvas 0 22 450 300 tdh.midi 0;
#X obj 9 9 cnv 15 500 40 empty empty TDH.LIB\ -\ MIDI 2 20 0 32 #b7b7b7 #373737 0;
#X obj 19 59 tdh.lib/tdh.midi.makeNote.ui;
#A saved 0 0 0 0;
#X text 139 100 tdh.lib/tdh.midi.makeNote;
#X restore 19 674 pd tdh.midi;
#N canvas 0 22 450 300 tdh.seq 0;
#X obj 9 9 cnv 15 500 40 empty empty TDH.LIB\ -\ EVENT\ SEQUENCING 2 20 0 32 #b7b7b7 #373737 0;
#X obj 9 59 tdh.lib/tdh.seq.gesture.ui;
#A saved 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0;
#X obj 9 369 tdh.lib/tdh.seq.row.ui;
#A saved 0 0 0 0 0 0 0 0;
#X text 219 418 tdh.lib/tdh.seq.row.ui;
#X text 319 158 tdh.lib/tdh.seq.gesture.ui;
#X obj 9 529 tdh.lib/tdh.seq.stepSequencer.ui;
#A saved 0 120 0 16 0 0 100 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0;
#X text 719 648 tdh.lib/tdh.seq.stepSequencer.ui;
#X restore 369 494 pd tdh.seq;
#N canvas 0 22 450 300 tdh.sigproc 0;
#X obj 9 9 cnv 15 500 40 empty empty TDH.LIB\ -\ SIGNAL\ PROCESSORS 2 20 0 32 #b7b7b7 #373737 0;
#X obj 9 59 tdh.lib/tdh.sigproc.delay.ui~;
#A saved 0 0 0 0 0 0 0;
#X text 219 118 tdh.lib/tdh.sigproc.delay.ui~;
#X obj 9 379 tdh.lib/tdh.sigproc.freeze.ui~;
#A saved 0 0 0;
#X text 119 418 tdh.lib/tdh.sigproc.freeze.ui~;
#X obj 9 539 tdh.lib/tdh.sigproc.granulate.ui~;
#A saved 0 0 0 0 0 0 0 0 0 0 0 -1 1 0 0;
#X text 319 608 tdh.lib/tdh.sigproc.granulate.ui~;
#X obj 599 59 tdh.lib/tdh.sigproc.mmfilt.ui~;
#A saved 0 0 0 0 0;
#X text 850 119 tdh.lib/tdh.sigproc.mmfilt.ui~;
#X obj 599 219 tdh.lib/tdh.sigproc.waveRectifier.ui~;
#A saved -1 0 0 1;
#X text 819 328 tdh.lib/tdh.sigproc.waveRectifier.ui~;
#X obj 9 219 tdh.lib/tdh.sigproc.multiTapDelay.ui~;
#A saved 0 0 0 0 0 0 0 0 0 0;
#X text 324 271 tdh.lib/tdh.sigproc.multiTapDelay.ui~;
#X obj 599 529 tdh.lib/tdh.sigproc.softClipDistortion.ui~;
#A saved 0 0 0;
#X text 709 578 tdh.lib/tdh.sigproc.softClipDistortion.ui~;
#X restore 369 554 pd tdh.sigproc;
#N canvas 0 22 450 300 tdh.synth 0;
#X obj 9 9 cnv 15 500 40 empty empty TDH.LIB\ -\ SYNTHESIS 2 20 0 32 #b7b7b7 #373737 0;
#X obj 19 79 tdh.lib/tdh.synth.1oscil~;
#A saved 0 4 261.626 0 0 0 0 0;
#X obj 19 109 tdh.lib/tdh.synth.1oscil.ui~;
#A saved 0 4 261.626 0 0 0 0 0;
#X text 229 178 tdh.lib/tdh.synth.1oscil.ui~;
#X obj 19 419 tdh.lib/tdh.synth.beep~;
#X obj 19 449 tdh.lib/tdh.synth.beep.ui~;
#A saved 440 0 500 0 25 0;
#X text 179 498 tdh.lib/tdh.synth.beep.ui~;
#X obj 409 79 tdh.lib/tdh.synth.LFOscil.ui~;
#A saved 0 0 1 0 0 0 0 0 0;
#X text 619 128 tdh.lib/tdh.synth.LFOscil.ui~;
#X obj 409 399 tdh.lib/tdh.synth.oscilaPulse~;
#X obj 409 427 tdh.lib/tdh.synth.oscilaSaw~;
#X obj 409 457 tdh.lib/tdh.synth.oscilaTri~;
#X obj 409 487 tdh.lib/tdh.synth.oscilaVarTri~;
#X obj 629 399 tdh.lib/tdh.synth.oscilPulse~;
#X obj 629 427 tdh.lib/tdh.synth.oscilSaw~;
#X obj 629 457 tdh.lib/tdh.synth.oscilTri~;
#X obj 406 528 tdh.lib/tdh.synth.simpleSynth.ui~;
#X text 535 583 tdh.lib/tdh.synth.simpleSynth.ui~;
#X restore 369 614 pd tdh.synth;
#N canvas 0 22 450 300 tdh.util 0;
#X obj 9 9 cnv 15 500 40 empty empty TDH.LIB\ -\ UTILITIES 2 20 0 32 #b7b7b7 #373737 0;
#X restore 369 674 pd tdh.util;
#X text 19 68 TDH.LIB is a library of Pure Data (Pd) abstractions developed by Travis Houldcroft. These abstractions include tools \, snippets and algorithms I use on a regular basis that I pre-built to be more efficient (or so I wouldn't forget how to make them!) \, and modules with full GUIs and parameter saving that I use for performance/composition and also port over to my library for beginning sound experiments \, the SOUND ART TOOLKIT., f 84;
#X text 19 158 This library doesn't break any new ground or revolutionize Pd \, but someone may find it useful \, and I find it helpful when I teach Pd. I have tried to make the programming clean and have put a push on commenting the code \, so that beginners can use the code to learn or can hack together new algorithms from it., f 84;
#X text 19 238 While I originally strived to make this code as Vanilla as possible \, I eventually needed to rely on ELSE and CYCLONE \, therfore to use these objects \, you need to install them via Dekken (Help > Find Externals) on Vanilla \, while in Plug Data they should already be installed. All of these abstractions should work equally well in Vanilla and in PlugData., f 84;
#X obj 19 534 cnv 10 10 10 empty empty Controller\ Modules 0 6 0 14 #ffffff #373737 0;
#X obj 19 474 cnv 10 10 10 empty empty Algorithmic\ Composition\ Modules 0 6 0 14 #ffffff #373737 0;
#X obj 19 594 cnv 10 10 10 empty empty Mathematics\ and\ Number\ Handling\ Modules 0 6 0 14 #ffffff #373737 0;
#X obj 19 654 cnv 10 10 10 empty empty MIDI\ Generation\ and\ Processing\ Modules 0 6 0 14 #ffffff #373737 0;
#X obj 369 474 cnv 10 10 10 empty empty Event\ Sequencing\ Modules 0 6 0 14 #ffffff #373737 0;
#X obj 369 534 cnv 10 10 10 empty empty Signal\ Processing\ Modules 0 6 0 14 #ffffff #373737 0;
#X obj 369 594 cnv 10 10 10 empty empty Synthesizer\ and\ Synthesis\ Modules 0 6 0 14 #ffffff #373737 0;
#X obj 369 654 cnv 10 10 10 empty empty Utility\ and\ Tool\ Modules 0 6 0 14 #ffffff #373737 0;
#N canvas 0 22 450 300 links 0;
#X msg 339 99 browse https://github.com/thouldcroft/tdh.lib;
#X msg 629 99 browse https://github.com/thouldcroft/tdh.satk;
#X obj 185 186 pdcontrol;
#X obj 78 74 r \$0-tdhWeb;
#X obj 339 69 r \$0-tdhlibGit;
#X obj 629 69 r \$0-satkGit;
#X msg 79 109 browse https://travishouldcroft.com/;
#X connect 0 0 2 0;
#X connect 1 0 2 0;
#X connect 3 0 6 0;
#X connect 4 0 0 0;
#X connect 5 0 1 0;
#X connect 6 0 2 0;
#X restore 559 329 pd links;
#X obj 19 329 bng 16 250 50 0 \$0-tdhWeb \$0-tdhWeb-r travishouldcroft.com 24 8 0 12 #c6feff #000000 #000000;
#X obj 189 329 bng 16 250 50 0 \$0-tdhlibGit \$0-tdhlibGit-r TDH.LIB\ on\ Github 24 8 0 12 #c6feff #000000 #000000;
#X obj 339 329 bng 16 250 50 0 \$0-satkGit \$0-satkGit-r SOUND\ ART\ TOOLKIT\ on\ Github 24 8 0 12 #c6feff #000000 #000000;
#N canvas 160 159 450 300 box 1;
#X coords 0 0 1 1 621 61 2 0 0;
#X restore 9 369 pd box;
#N canvas 0 22 450 300 codingConventions 1;
#X text 19 48 The convention in TDH.LIB is that when text needs to be supplied to an object or module \, I don't want to require the "symbol" slector to be applied to the text before it is sent to the object. If you're not familar with selectors \, basically every message sent in Pd has a selector that defines its data type: float \, symbol \, list \, bang \, pointer. For numbers the selector is assumed \, but for symbols it has to be explicitly stated. I ALWAYS forget this \, and it usually gets me in trouble. Since I want my modules to be beginner-friendly \, I do not require the "symbol" selector. Instead \, the object applies it for them. Because I can't know if a user MIGHT supply the "symbol" selector \, I strip it away if they do \, so that the supplied message can then be handled as if they didn't supply the "symbol" selector - so it gets reapplied! (There might be a way to code this more succinctly \, not sure!);
#X obj 19 19 cnv 10 10 10 empty empty Symbol\ Inputs\ at\ Inlets 0 6 0 16 #ffffff #373737 0;
#X text 457 45 [ inlet ];
#X text 459 63 |;
#X obj 459 83 route symbol;
#X msg 459 114 symbol \$1;
#X text 459 133 |;
#X text 459 148 [ to rest of code ];
#X obj 19 269 cnv 10 10 10 empty empty Setting\ Values\ for\ Multi-Choice/Radio\ Button\ Parameters 0 6 0 16 #ffffff #373737 0;
#X text 19 298 Some programming languages number things starting with "0" \, others with "1". The convention in all TDH.LIB objects and modules is that any choice that can be made externally via inlet or argument starts counting at "1". So the first choice is always "1" \, second choice is "2". This is contrary to how the [hradio] and [vradio] radio button GUIs in Pd work \, where the first option outputs "0". So often you will see [ - 1 ] before values are sent to the radio button \, to account for this. THE ONLY EXCEPTION TO THIS is when an array of choices is numbered starting with "0" as a standard. An example is of this is musical note pitch class \, which assigns the PC "0" to C \, "1" to C# \, "2" to D \, and so on. In this case \, if a radio button selection GUI is used with these notes \, 0 will likely indicate the first option \, C.;
#X obj 19 509 cnv 10 10 10 empty empty Data\ Flow\ for\ GUI\ Parameters 0 6 0 16 #ffffff #373737 0;
#X text 19 538 Many objects are modules with GUI controls to set parameters (objects with the "ui" designation at the end of their names). Many of these modules can also have their parameters set via inlets or arguments. In the coding \, the data flow always goes from inlet/argument to GUI \, and then from GUI to code. Some modules have GUI and non-GUI versions. In these instances \, even the non-GUI objects still pass messages set via inlet or argument to GUI controls \, and then the GUI controls send to the code. This is to speed up development - I just disable the visual module representation (known as "Graph-on-parent" for those new to Pd) \, so that the object is instantiated as just a regular Pd object box \, and not a visual module. Then I don't need to recode the object. This has the additional benefit that if you double click on the object \, it will open up the code and you can see the parameter settings via the GUI controls that are still inside! I actually find this quite useful at times.;
#X obj 19 789 cnv 10 10 10 empty empty GUI\ Controls\ with\ Sliders\ and\ Number\ Boxes 0 6 0 16 #ffffff #373737 0;
#X text 19 818 Whenever a module has GUI control and that control takes the form of a slider AND a number box \, so the user can set the parameter with the slider or by typing in a number \, the number box is always the object that feeds the actual code \, so any parameter that is set via slider passes its value on to the number box (this value may need to be converted before it is sent to the number box) \, and then the number box passes the value on to the code. When a parameter is set via the number box \, it passes this value on to the code \, and then updates the slider's position without the slider actually outputting any value (this would cause an error if it did).;
#X obj 469 831 vsl 17 128 0 1 0 0 empty empty empty 0 -9 0 10 #e4e4e4 #4d4d4d #373737 0 1;
#X obj 509 899 * 100;
#X floatatom 509 929 5 0 0 0 - - - 12;
#X text 509 948 |;
#X text 509 968 to code;
#X obj 569 899 / 100;
#X msg 569 929 set \$1;
#X obj 649 29 cnv 10 10 10 empty empty Embedding\ Parameters\ and\ Arguments 0 6 0 16 #ffffff #373737 0;
#X text 649 48 Whenever a module can have its settings embedded in the module to be recalled when loaded again \, there isn't a conflict between arguments and these saved parameters. The call to load parameters happens after arguments are loaded \, so if arguments are loaded \, they get overwritten. If you want to change the typed in parameters \, you need to re-create the object - there is \, to my knowledge \, no way to type in new arguments to a graph (visual module) object like you can with a standard object box \, and even in the scenario where you retype arguments in an object box \, the object gets re-created \, just without you having to retype the entire object name.;
#X connect 4 0 5 0;
#X connect 4 1 5 0;
#X connect 14 0 15 0;
#X connect 15 0 16 0;
#X connect 16 0 19 0;
#X connect 19 0 20 0;
#X connect 20 0 14 0;
#X restore 19 399 pd codingConventions;
#X obj 19 379 cnv 10 10 10 empty empty Coding\ Conventions\,\ Operating\ Conventions\,\ \ and\ Other\ Information 0 6 0 14 #ffffff #373737 0;
#N canvas 0 22 450 300 operatingConventions 0;
#X obj 19 19 cnv 10 10 10 empty empty Symbol\ Inputs\ at\ Inlets\ or\ as\ Arguments 0 6 0 16 #ffffff #373737 0;
#X text 19 48 All symbol inputs at inlets or as arguments do NOT need the "symbol" selector.;
#X obj 19 109 cnv 10 10 10 empty empty Parameters\ with\ Multiple\ Choices 0 6 0 16 #ffffff #373737 0;
#X text 19 138 Any parameter that has multiple choices is set with the counting integers 1 to n. The only exception is when a parameter uses "0" as its first choice by standard (example: pitch class \, where by standard "0" represents "C" \, "1" represents "C#" \, and so forth).;
#X restore 179 399 pd operatingConventions;