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
|
#N canvas 496 61 656 859 10;
#X declare -lib Gem;
#X obj 7 360 pix_drum;
#X obj 7 424 pix_texture;
#N canvas 593 327 562 332 inlet1 0;
#X floatatom 83 178 5 0 0 0 - - -;
#X obj 37 20 loadbang;
#X floatatom 39 178 5 0 0 0 - - -;
#X obj 83 219 t b f;
#X floatatom 138 178 5 0 0 0 - - -;
#X msg 35 133 0;
#X msg 20 111 1;
#X msg 1 92 2;
#X text 79 190 thresh;
#X floatatom 191 178 5 0 0 0 - - -;
#X obj 185 222 t b f;
#X floatatom 247 178 5 0 0 0 - - -;
#X obj 232 223 t b f;
#X obj 138 219 t b f;
#X text 127 190 pix_dist;
#X text 187 190 minpeak;
#X floatatom 300 178 5 0 0 0 - - -;
#X obj 280 221 t b f;
#X obj 160 278 pack f f f f f f;
#X obj 160 298 outlet;
#X text 41 190 mode;
#X text 169 14 first inlet takes the threshold value (0-1);
#X text 233 190 min_width;
#X text 290 190 dist_ctr;
#X msg 144 106 12;
#X msg 222 108 0.12;
#X msg 307 108 10;
#X msg 390 109 12;
#X msg 83 105 0.4;
#X connect 0 0 3 0;
#X connect 1 0 28 0;
#X connect 1 0 24 0;
#X connect 1 0 7 0;
#X connect 1 0 25 0;
#X connect 1 0 26 0;
#X connect 1 0 27 0;
#X connect 2 0 18 0;
#X connect 3 0 18 0;
#X connect 3 1 18 1;
#X connect 4 0 13 0;
#X connect 5 0 2 0;
#X connect 6 0 2 0;
#X connect 7 0 2 0;
#X connect 9 0 10 0;
#X connect 10 0 18 0;
#X connect 10 1 18 3;
#X connect 11 0 12 0;
#X connect 12 0 18 0;
#X connect 12 1 18 4;
#X connect 13 0 18 0;
#X connect 13 1 18 2;
#X connect 16 0 17 0;
#X connect 17 0 18 0;
#X connect 17 1 18 5;
#X connect 18 0 19 0;
#X connect 24 0 4 0;
#X connect 25 0 9 0;
#X connect 26 0 11 0;
#X connect 27 0 16 0;
#X connect 28 0 0 0;
#X coords 0 -1 1 1 310 40 1 35 165;
#X restore 29 23 pd inlet1;
#N canvas 125 312 331 303 inlet2 0;
#X floatatom 19 147 5 0 0 0 - - -;
#X floatatom 63 147 5 0 0 0 - - -;
#X obj 61 208 t b f;
#X floatatom 109 147 5 0 0 0 - - -;
#X obj 107 208 t b f;
#X floatatom 155 147 5 0 0 0 - - -;
#X obj 153 208 t b f;
#X obj 18 237 pack f f f f;
#X obj 18 265 outlet;
#X obj 96 96 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1
-1;
#X obj 124 94 r refresh;
#X text 18 160 bottom;
#X text 66 160 head;
#X text 112 160 left;
#X text 156 160 right;
#X obj 18 54 r i-bottom;
#X obj 96 55 r i-head;
#X obj 157 53 r i-left;
#X obj 222 54 r i-right;
#X connect 0 0 7 0;
#X connect 1 0 2 0;
#X connect 2 0 7 0;
#X connect 2 1 7 1;
#X connect 3 0 4 0;
#X connect 4 0 7 0;
#X connect 4 1 7 2;
#X connect 5 0 6 0;
#X connect 6 0 7 0;
#X connect 6 1 7 3;
#X connect 7 0 8 0;
#X connect 9 0 0 0;
#X connect 9 0 1 0;
#X connect 9 0 3 0;
#X connect 9 0 5 0;
#X connect 10 0 9 0;
#X connect 15 0 0 0;
#X connect 16 0 1 0;
#X connect 17 0 3 0;
#X connect 18 0 5 0;
#X coords 0 -1 1 1 195 40 1 10 135;
#X restore 52 246 pd inlet2;
#X obj 7 297 gemhead 1;
#X obj 7 318 pix_video;
#X obj 7 339 pix_grey;
#N canvas 730 619 294 136 presets 0;
#X obj 21 54 r refresh;
#X msg 21 73 \; ver-dim 240 \; hor-dim 320 \; dimen 320 240 \;;
#X obj 39 14 loadbang;
#X obj 21 15 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1
-1;
#X obj 21 34 s refresh;
#X obj 153 13 loadbang;
#X obj 21 -5 inlet;
#X msg 186 39 \; i-bottom 200 \; i-head 116 \; i-left 19 \; i-right
302 \;;
#X connect 0 0 1 0;
#X connect 2 0 3 0;
#X connect 3 0 4 0;
#X connect 5 0 7 0;
#X connect 6 0 3 0;
#X restore 409 52 pd presets;
#X text 292 269 bottom \, top \, right \, left;
#X text 57 83 mode: selects mode of operation (0 \, 1 or 2);
#X text 56 121 thresh: threshold for contrast (0-1);
#X text 6 494 pix_drum looks for black pixels incoming from the top
a video frame.;
#X text 6 522 The algorithm makes a histogram of how many black pixels
there are per column.;
#X text 7 631 the convexity test takes the form of:;
#X text 62 645 y = hist[i] - (hist[i-x]*.05 + hist[i+x]);
#X text 6 551 It then finds the highet point in the histogram \, that
is \, the highest peak \, called the primary peak.;
#X text 56 131 pix_dist: number of pixels around a center \, x in function
below;
#X text 98 97 mode 2 is the current regular function (others used for
debugging);
#X text 56 155 tip scalar: scalar of maximum height in concavity test
graph \, values higher than this scaled height are part of a peak;
#X text 57 189 min_width: minimum number of contiguous values higher
than scaled height to report a peak;
#X text 57 213 dist_ctr: minimum distance from primary peak to report
a secondary peak.;
#X text 265 257 INLET 2: defines the bounds of the area of analysis
;
#X text 56 68 INLET 1: Analysis Parameters;
#X text 6 471 INFORMATION;
#X text 6 579 It then finds the area of black pixels on either side
of the primary peak. (Left Area and Right Area);
#X text 7 605 It then performs a convexity test \, on both sides of
the primary peak.;
#X text 9 660 where (x) is a deviation from the center (i). If the
line is straight y=0 \, if it is concave or convex \, hey are negative
or positive.;
#X text 11 699 The results of this test are recoded in a graph. secondary
peaks are the point where two concave curves meet \, which therefore
has a higher value for y in the concavity text.;
#N canvas 0 0 450 300 print 0;
#X obj 131 36 inlet;
#X obj 131 57 spigot;
#X obj 131 78 print;
#X obj 228 27 loadbang;
#X msg 228 48 0;
#X obj 142 104 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0
1;
#X text 103 105 print?;
#X connect 0 0 1 0;
#X connect 1 0 2 0;
#X connect 3 0 4 0;
#X connect 4 0 5 0;
#X connect 5 0 1 1;
#X coords 0 -1 1 1 60 23 2 100 100;
#X restore 31 395 pd print;
#N canvas 0 0 450 300 print 0;
#X obj 131 36 inlet;
#X obj 131 57 spigot;
#X obj 131 78 print;
#X obj 228 27 loadbang;
#X msg 228 48 0;
#X obj 142 104 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0
1;
#X text 103 105 print?;
#X connect 0 0 1 0;
#X connect 1 0 2 0;
#X connect 3 0 4 0;
#X connect 4 0 5 0;
#X connect 5 0 1 1;
#X coords 0 -1 1 1 60 23 2 100 100;
#X restore 99 386 pd print;
#X text 189 302 OUTLETS;
#X text 188 323 outlet 0: the analyzed video image;
#X text 188 337 outlet 1: primary peak information;
#X text 211 368 Areas are normalized;
#X text 189 383 outlet 2: secondary peak information;
#X text 212 415 side: At which side of the primary peak is the secondary
peak.;
#X text 246 427 Left = 0 \, Right = 1;
#X text 220 353 [x coord. \, y coord. \, Left Area \, Right Area];
#X text 222 399 [side \, index \, x coord. \, y coord.];
#X text 213 440 index: index 0 - n of each secondary peak.;
#X obj 7 448 rectangle 5.33 4;
#X text 115 808 support information in www.jaimeoliver.pe;
#X text 229 822 jaime.oliver@gmail.com;
#X text 249 837 joliverl-2010 v0.01;
#X text 193 454 outlets 3 and 4 are currently not supported;
#X text 12 756 This object was programmed as part of the Silent Percussion
Project \, for use in the Silent Drum Controller. For more information:
http://www.jaimeoliver.pe/drum;
#X obj 538 828 declare -lib Gem;
#N canvas 716 528 356 251 gemwin 0;
#X obj 181 178 gemwin;
#X msg 166 123 create \, 1;
#X msg 262 139 0 \, destroy;
#X obj 234 22 loadbang;
#X msg 246 105 dimen 320 240;
#X obj 100 101 tgl 18 0 \$0-win \$0-win empty 17 7 0 10 -262144 -1
-1 0 1;
#X obj 11 23 inlet;
#X obj 11 46 t a a;
#X obj 11 69 route create destroy;
#X obj 11 92 t b;
#X obj 11 115 f 1;
#X obj 11 138 t f;
#X msg 11 161 set \$1;
#X obj 41 92 t b;
#X obj 41 115 f 0;
#X obj 156 23 r \$0-win;
#X obj 156 46 route float;
#X obj 156 69 select 1 0;
#X connect 1 0 0 0;
#X connect 2 0 0 0;
#X connect 3 0 4 0;
#X connect 4 0 0 0;
#X connect 6 0 7 0;
#X connect 7 0 8 0;
#X connect 7 1 0 0;
#X connect 8 0 9 0;
#X connect 8 1 13 0;
#X connect 9 0 10 0;
#X connect 10 0 11 0;
#X connect 11 0 12 0;
#X connect 12 0 5 0;
#X connect 13 0 14 0;
#X connect 14 0 11 0;
#X connect 15 0 16 0;
#X connect 16 0 17 0;
#X connect 17 0 1 0;
#X connect 17 1 2 0;
#X coords 0 -1 1 1 85 20 1 100 100;
#X restore 406 21 pd gemwin;
#X connect 0 0 1 0;
#X connect 0 1 28 0;
#X connect 0 2 29 0;
#X connect 1 0 40 0;
#X connect 2 0 0 1;
#X connect 3 0 0 2;
#X connect 4 0 5 0;
#X connect 5 0 6 0;
#X connect 6 0 0 0;
|