aboutsummaryrefslogtreecommitdiff
path: root/pd/doc/3.audio.examples/K05.bandlimited.pd
blob: f49bcb685113f14726a929f7881e756eb78899a1 (plain)
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
#N canvas 21 90 540 752 12;
#X floatatom 183 91;
#X obj 183 115 mtof;
#X floatatom 340 183;
#X obj 164 431 -~;
#N canvas 391 51 561 806 tables 1;
#X graph graph1 0 -1 1002 1 99 322 499 22;
#X array array1 1002 float;
#X pop;
#X graph graph1 0 -1 882 1 96 684 496 384;
#X array array2 882 float;
#X pop;
#X text 138 326 ---------------- 1002 samples ---------------;
#X text 150 693 ---------------- 0.02 sec ---------------;
#X restore 33 201 pd tables;
#N canvas 104 390 728 408 make-table 0;
#X obj 469 146 cos~;
#X obj 303 146 cos~;
#X obj 255 141 cos~;
#X msg 199 210 bang;
#X obj 255 229 tabwrite~ array1;
#X text 366 79 period is 2000 samples \, twice the table length;
#X msg 94 94 \; pd dsp 1;
#X text 118 286 this network puts a half cycle of a band-limited square wave into the table "array1.";
#X text 114 335 logically the half-cycle is in samples 1 through 1000 \; samples 0 and 1001 are provided so that the 4-point interpolation will work everywhere.;
#X text 401 57 back the phase up one sample;
#X msg 336 56 -0.0005;
#X obj 171 16 loadbang;
#X obj 303 120 *~ 3;
#X obj 468 122 *~ 5;
#X obj 303 171 *~ 0.33333;
#X obj 468 172 *~ -0.2;
#X obj 255 169 *~ -1;
#X msg 171 38 bang;
#X obj 254 80 phasor~ 22.05;
#X obj 255 202 *~ 0.57692;
#X connect 0 0 15 0;
#X connect 1 0 14 0;
#X connect 2 0 16 0;
#X connect 3 0 4 0;
#X connect 10 0 18 1;
#X connect 11 0 17 0;
#X connect 12 0 1 0;
#X connect 13 0 0 0;
#X connect 14 0 19 0;
#X connect 15 0 19 0;
#X connect 16 0 19 0;
#X connect 17 0 10 0;
#X connect 17 0 6 0;
#X connect 17 0 3 0;
#X connect 18 0 2 0;
#X connect 18 0 12 0;
#X connect 18 0 13 0;
#X connect 19 0 4 0;
#X restore 34 224 pd make-table;
#X obj 183 163 sig~;
#X obj 341 283 /~;
#X obj 357 256 clip~ 1 999999;
#X obj 183 218 phasor~;
#X obj 196 301 *~;
#X obj 196 325 clip~ -0.5 0.5;
#X floatatom 183 139;
#X obj 196 397 tabread4~ array1;
#X floatatom 340 135;
#X obj 340 206 * 0.33333;
#X obj 340 159 mtof;
#X text 374 110 band limit (MIDI units);
#X text 220 78 pitch;
#X obj 340 87 loadbang;
#X msg 340 111 130;
#X obj 340 230 sig~;
#X text 246 139 frequency;
#X obj 196 349 *~ 1000;
#X obj 196 373 +~ 501;
#X obj 183 242 -~ 0.5;
#X floatatom 206 441;
#N canvas 159 26 495 266 output 0;
#X obj 338 160 t b;
#X obj 338 110 f;
#X obj 338 60 inlet;
#X text 344 29 mute;
#X obj 338 185 f;
#X msg 425 178 0;
#X msg 338 85 bang;
#X obj 338 135 moses 1;
#X obj 425 153 t b f;
#X obj 397 117 moses 1;
#X obj 83 148 dbtorms;
#X obj 397 92 r master-lvl;
#X obj 83 42 r master-lvl;
#X obj 338 210 s master-lvl;
#X obj 22 181 inlet~;
#X obj 199 41 inlet;
#X text 199 18 level;
#X obj 199 100 s master-lvl;
#X msg 96 65 set \$1;
#X obj 96 89 outlet;
#X msg 214 64 \; pd dsp 1;
#X obj 83 194 line~;
#X obj 22 212 *~;
#X obj 22 241 dac~;
#X obj 83 171 pack 0 50;
#X text 20 158 audio;
#X text 93 110 show level;
#X connect 0 0 4 0;
#X connect 1 0 7 0;
#X connect 2 0 6 0;
#X connect 4 0 13 0;
#X connect 5 0 13 0;
#X connect 6 0 1 0;
#X connect 7 0 0 0;
#X connect 7 1 8 0;
#X connect 8 0 5 0;
#X connect 9 1 4 1;
#X connect 10 0 24 0;
#X connect 11 0 1 1;
#X connect 11 0 9 0;
#X connect 12 0 10 0;
#X connect 12 0 18 0;
#X connect 14 0 22 0;
#X connect 15 0 17 0;
#X connect 15 0 20 0;
#X connect 18 0 19 0;
#X connect 21 0 22 1;
#X connect 22 0 23 0;
#X connect 22 0 23 1;
#X connect 24 0 21 0;
#X restore 177 469 pd output;
#X msg 235 441 MUTE;
#X text 276 440 <-- output amplitude;
#X text 27 503 Patch to make an approximately band-limited sawtooth. This is useful if you intend to use sawtooth generators above about 200 Hz. \, perhaps to use any of the techniques shown in the previous four patches.;
#X text 28 562 We generate a perfect square wave at Nyquist/6 \; this will have partials 1 \, 3 \, and 5 \, but the Nyquist frequency at partial 6 will cut off the rest of the partials. This is stored in array1 using the "make-table" subpatch.;
#X text 64 34 BAND-LIMITED SAWTOOTH GENERATOR;
#X obj 43 459 tabwrite~ array2;
#X msg 44 435 bang;
#X text 28 632 Now any time we wish to make a discontinuity in the output signal \, we make it look exactly like the bandlimited square wave looks. We do this by reading through the table we recorded \, carefully adding a "digital" \, non-band-limited \, sawtooth to "array1" so that the discontinuities in the two cancel out and what you have left is the transition in the table.;
#X text 338 737 updated for Pd version 0.26;
#X text 41 409 graph output;
#X connect 0 0 1 0;
#X connect 1 0 12 0;
#X connect 2 0 15 0;
#X connect 3 0 27 0;
#X connect 3 0 33 0;
#X connect 6 0 8 0;
#X connect 6 0 9 0;
#X connect 7 0 10 1;
#X connect 8 0 7 1;
#X connect 9 0 25 0;
#X connect 10 0 11 0;
#X connect 11 0 23 0;
#X connect 12 0 6 0;
#X connect 13 0 3 0;
#X connect 14 0 16 0;
#X connect 15 0 21 0;
#X connect 16 0 2 0;
#X connect 19 0 20 0;
#X connect 20 0 14 0;
#X connect 21 0 7 0;
#X connect 23 0 24 0;
#X connect 24 0 13 0;
#X connect 25 0 10 0;
#X connect 25 0 3 1;
#X connect 26 0 27 1;
#X connect 27 0 26 0;
#X connect 28 0 27 2;
#X connect 34 0 33 0;