Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Browse files

v1

  • Loading branch information...
commit 3d375ae7bad8b0baf604b57a4513a628b2e64edf 1 parent 06aef2d
Shawn Greenlee authored
BIN  images/screenshot.png
View
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
BIN  images/tbmidistuff_protodrom.png
View
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
229 protoDrom_tutorial1/data/drom_t1.pd
View
@@ -0,0 +1,229 @@
+#N canvas 130 273 1436 814 10;
+#X obj 433 399 dac~;
+#X obj 433 345 clip~ -1 1;
+#X obj 433 310 hip~ 1;
+#X obj 436 -90 hsl 128 15 0 1 0 0 empty empty empty -2 -8 0 10 -262144
+-1 -1 254 1;
+#X obj 575 -90 hsl 128 15 0 1 0 0 empty empty empty -2 -8 0 10 -262144
+-1 -1 6350 1;
+#X obj 538 345 clip~ -1 1;
+#X obj 538 310 hip~ 1;
+#N canvas 404 50 889 639 OmGen 0;
+#X obj 37 583 outlet~;
+#X obj 101 22 inlet;
+#X obj 101 127 phasor~ 100;
+#X obj 101 149 -~ 0.5;
+#X obj 101 171 cos~;
+#X obj 101 193 +~ 1;
+#X obj 101 215 *~ 0.5;
+#X obj 101 237 *~;
+#X obj 206 137 sig~;
+#X obj 206 159 lop~ 10;
+#X obj 191 190 *~;
+#X obj 191 212 cos~;
+#X floatatom 101 76 5 0 0 1 frequency - -;
+#X floatatom 206 117 5 0 0 1 ripple - -;
+#X obj 101 299 *~;
+#X floatatom 355 155 5 0 0 1 width - -;
+#X obj 101 352 *~;
+#X obj 101 374 +~ 1;
+#X obj 37 447 /~;
+#X obj 37 374 sig~ 1;
+#X obj 37 505 hip~ 1;
+#X obj 205 21 inlet;
+#X obj 355 21 inlet;
+#X text 256 387 based on an example in Andy Farnell's book \, Designing
+Sound \, see section 52 on Mammals;
+#X connect 1 0 12 0;
+#X connect 2 0 3 0;
+#X connect 3 0 4 0;
+#X connect 3 0 10 0;
+#X connect 4 0 5 0;
+#X connect 5 0 6 0;
+#X connect 6 0 7 0;
+#X connect 7 0 14 0;
+#X connect 8 0 9 0;
+#X connect 9 0 10 1;
+#X connect 10 0 11 0;
+#X connect 11 0 7 1;
+#X connect 12 0 2 0;
+#X connect 13 0 8 0;
+#X connect 14 0 16 0;
+#X connect 14 0 16 1;
+#X connect 15 0 14 1;
+#X connect 16 0 17 0;
+#X connect 17 0 18 1;
+#X connect 18 0 20 0;
+#X connect 19 0 18 0;
+#X connect 20 0 0 0;
+#X connect 21 0 13 0;
+#X connect 22 0 15 0;
+#X restore 433 119 pd OmGen;
+#X floatatom 433 83 5 0 0 0 - - -;
+#X obj 433 -48 * 1400;
+#N canvas 394 175 839 516 schroederReverb 0;
+#X obj 82 91 +~;
+#X obj 82 18 inlet~;
+#X obj 142 91 +~;
+#X obj 327 213 +~;
+#X obj 327 254 +~;
+#X obj 327 293 *~ 0.4;
+#X obj 359 213 -~;
+#X obj 376 293 *~ 0.37;
+#X obj 359 254 +~;
+#X obj 82 247 outlet~;
+#X obj 142 247 outlet~;
+#X obj 390 213 +~;
+#X obj 420 213 -~;
+#X obj 390 254 -~;
+#X obj 421 254 -~;
+#X obj 431 294 *~ 0.333;
+#X obj 492 294 *~ 0.3;
+#X text 427 454 Schroeder reverb \, source: Andy Farnell's Designing
+Sound \, page 234 \, Claude Heiland-Allen credited;
+#X obj 127 18 delread~ drom1A 101;
+#X obj 250 18 delread~ drom1B 143;
+#X obj 373 18 delread~ drom1C 165;
+#X obj 496 18 delread~ drom1D 177;
+#X obj 87 341 delwrite~ drom1A 1000;
+#X obj 222 341 delwrite~ drom1B 1000;
+#X obj 357 341 delwrite~ drom1C 1000;
+#X obj 492 341 delwrite~ drom1D 1000;
+#X connect 0 0 3 0;
+#X connect 0 0 9 0;
+#X connect 0 0 6 0;
+#X connect 1 0 0 0;
+#X connect 1 0 2 0;
+#X connect 2 0 10 0;
+#X connect 2 0 6 1;
+#X connect 2 0 3 1;
+#X connect 3 0 4 0;
+#X connect 3 0 13 0;
+#X connect 4 0 5 0;
+#X connect 5 0 22 0;
+#X connect 6 0 8 0;
+#X connect 6 0 14 0;
+#X connect 7 0 23 0;
+#X connect 8 0 7 0;
+#X connect 11 0 13 1;
+#X connect 11 0 4 1;
+#X connect 12 0 14 1;
+#X connect 12 0 8 1;
+#X connect 13 0 15 0;
+#X connect 14 0 16 0;
+#X connect 15 0 24 0;
+#X connect 16 0 25 0;
+#X connect 18 0 0 1;
+#X connect 19 0 2 1;
+#X connect 20 0 11 0;
+#X connect 20 0 12 0;
+#X connect 21 0 11 1;
+#X connect 21 0 12 1;
+#X restore 433 236 pd schroederReverb;
+#X floatatom 572 -5 10 0 0 0 - - -;
+#X obj 857 -91 hsl 128 15 0 1 0 0 empty empty empty -2 -8 0 10 -262144
+-1 -1 1524 1;
+#X floatatom 854 75 5 0 0 0 - - -;
+#X obj 854 47 line;
+#X obj 854 18 pack f 200;
+#X obj 433 9 pack f 200;
+#X obj 433 38 line;
+#X obj 854 -28 + 5;
+#X obj 854 -58 * 95;
+#X obj 718 -90 hsl 128 15 0 1 0 0 empty empty empty -2 -8 0 10 -262144
+-1 -1 5080 1;
+#X floatatom 715 76 5 0 0 0 - - -;
+#X obj 715 48 line;
+#X obj 715 19 pack f 200;
+#X obj 715 -57 * 10;
+#X obj 715 -27 + 2;
+#X obj 55 -58 loadbang;
+#N canvas 0 22 423 363 sinTaperFade 0;
+#X obj 158 33 inlet~;
+#X obj 202 33 inlet;
+#X obj 161 255 *~;
+#X obj 161 301 outlet~;
+#X obj 177 187 sin;
+#X obj 202 58 * 2;
+#X obj 202 80 - 1;
+#X obj 202 102 + 1;
+#X obj 202 124 / 4;
+#X obj 202 146 * 3.14159;
+#X floatatom 202 168 5 0 0 0 - - -;
+#X msg 176 208 \$1 60;
+#X obj 176 230 line~;
+#X connect 0 0 2 0;
+#X connect 1 0 5 0;
+#X connect 2 0 3 0;
+#X connect 4 0 11 0;
+#X connect 5 0 6 0;
+#X connect 6 0 7 0;
+#X connect 7 0 8 0;
+#X connect 8 0 9 0;
+#X connect 9 0 10 0;
+#X connect 10 0 4 0;
+#X connect 11 0 12 0;
+#X connect 12 0 2 1;
+#X restore 433 174 pd sinTaperFade;
+#N canvas 0 22 458 286 sin 0;
+#X obj 202 33 inlet;
+#X obj 202 187 sin;
+#X obj 202 58 * 2;
+#X obj 202 80 - 1;
+#X obj 202 102 + 1;
+#X obj 202 124 / 4;
+#X obj 202 146 * 3.14159;
+#X floatatom 202 168 5 0 0 0 - - -;
+#X obj 202 209 outlet;
+#X connect 0 0 2 0;
+#X connect 1 0 8 0;
+#X connect 2 0 3 0;
+#X connect 3 0 4 0;
+#X connect 4 0 5 0;
+#X connect 5 0 6 0;
+#X connect 6 0 7 0;
+#X connect 7 0 1 0;
+#X restore 433 -71 pd sin;
+#X obj 433 -20 + 20;
+#X obj 572 -118 r pd_vol;
+#X obj 433 -118 r pd_freq;
+#X obj 715 -118 r pd_ripple;
+#X obj 854 -119 r pd_width;
+#X msg 55 -12 \; pd_ripple 0.4 \; pd_width 0.12 \; pd_freq 0.02 \;
+pd_vol 0.5 \;;
+#X text 53 -89 Pd patch for protoDrom tutorial 1 by Shawn Greenlee
+;
+#X connect 1 0 0 0;
+#X connect 2 0 1 0;
+#X connect 3 0 28 0;
+#X connect 4 0 11 0;
+#X connect 5 0 0 1;
+#X connect 6 0 5 0;
+#X connect 7 0 27 0;
+#X connect 8 0 7 0;
+#X connect 9 0 29 0;
+#X connect 10 0 2 0;
+#X connect 10 1 6 0;
+#X connect 11 0 27 1;
+#X connect 12 0 19 0;
+#X connect 13 0 7 2;
+#X connect 14 0 13 0;
+#X connect 15 0 14 0;
+#X connect 16 0 17 0;
+#X connect 17 0 8 0;
+#X connect 18 0 15 0;
+#X connect 19 0 18 0;
+#X connect 20 0 24 0;
+#X connect 21 0 7 1;
+#X connect 22 0 21 0;
+#X connect 23 0 22 0;
+#X connect 24 0 25 0;
+#X connect 25 0 23 0;
+#X connect 26 0 34 0;
+#X connect 27 0 10 0;
+#X connect 28 0 9 0;
+#X connect 29 0 16 0;
+#X connect 30 0 4 0;
+#X connect 31 0 3 0;
+#X connect 32 0 20 0;
+#X connect 33 0 12 0;
65 protoDrom_tutorial1/protoDrom_tutorial1.pde
View
@@ -0,0 +1,65 @@
+/**
+ * protoDrom tutorial 1: quick start for libPd + Processing
+ * by Shawn Greenlee
+ *
+ * for this example, you will need these libraries:
+ * 1) libPd for Processing (puredataP5) - https://github.com/libpd/puredatap5
+ * 2) controlP5 - http://www.sojamo.de/libraries/controlP5/
+ * consult documentation for these libaries for further info.
+ */
+
+// OK, let's get started...
+
+// first, import the libaries (these need to be installed in your libraries folder)
+
+import org.puredata.processing.PureData;
+import controlP5.*;
+
+// then, declare variables for the libraries
+
+PureData pd;
+ControlP5 controlP5;
+
+// and we'll also need to declare two floats: one for frequency, another for volume
+
+float freq = 0.02;
+float vol = 0.5;
+
+// ok, now we are ready for the setup
+
+void setup() {
+ size(680, 400);
+ frameRate(25);
+ pd = new PureData(this, 44100, 0, 2); // set sampling rate, input channels, & output channels
+ pd.openPatch("drom_t1.pd"); // open the Pd patch contained in the data folder
+ pd.start(); // get Pd ready
+ controlP5 = new ControlP5(this); // get controlP5 ready
+
+ // while we are here, let's change our colors for controlP5
+
+ controlP5.setColorForeground(#ffffff);
+ controlP5.setColorBackground(#999999);
+ controlP5.setColorLabel(#ffffff);
+ controlP5.setColorValue(#ffffff);
+ controlP5.setColorActive(#ffffff);
+
+ // and we must setup our sliders, one for the frequency and one for the volume
+
+ Slider freq = controlP5.addSlider("freq", 0, 1, 0.02, 40, 50, 30, 200); // name, range-lo, range-hi, start-val, pos-X, pos-Y, width, height
+ freq.setSliderMode(Slider.FLEXIBLE); // this gives us a fader-like interface
+
+ Slider vol = controlP5.addSlider("vol", 0, 1, 0.5, 100, 50, 30, 200); // name, range-lo, range-hi, start-val, pos-X, pos-Y, width, height
+ vol.setSliderMode(Slider.FLEXIBLE); // this gives us a fader-like interface
+}
+
+// OK, setup is done. Now to draw and send these slider values to the Pd patch
+
+void draw() {
+ background(#77896C); // we need to set background color in the draw function, so that the sliders value draw correctly, comment out to see the difference
+ pd.sendFloat("pd_freq", (float)freq); // send the freq value to a receive in Pd called "pd_freq"
+ pd.sendFloat("pd_vol", (float)vol); // send the vol value to a receive in Pd called "pd_vol"
+}
+
+// that's it!
+// if you've got a handle on this, you are ready for the next example which adds OSC functionality to this sketch
+
229 protoDrom_tutorial2/data/drom_t2.pd
View
@@ -0,0 +1,229 @@
+#N canvas 287 273 1436 814 10;
+#X obj 433 399 dac~;
+#X obj 433 345 clip~ -1 1;
+#X obj 433 310 hip~ 1;
+#X obj 436 -90 hsl 128 15 0 1 0 0 empty empty empty -2 -8 0 10 -262144
+-1 -1 3154 1;
+#X obj 575 -90 hsl 128 15 0 1 0 0 empty empty empty -2 -8 0 10 -262144
+-1 -1 5150 1;
+#X obj 538 345 clip~ -1 1;
+#X obj 538 310 hip~ 1;
+#N canvas 404 50 889 639 OmGen 0;
+#X obj 37 583 outlet~;
+#X obj 101 22 inlet;
+#X obj 101 127 phasor~ 100;
+#X obj 101 149 -~ 0.5;
+#X obj 101 171 cos~;
+#X obj 101 193 +~ 1;
+#X obj 101 215 *~ 0.5;
+#X obj 101 237 *~;
+#X obj 206 137 sig~;
+#X obj 206 159 lop~ 10;
+#X obj 191 190 *~;
+#X obj 191 212 cos~;
+#X floatatom 101 76 5 0 0 1 frequency - -;
+#X floatatom 206 117 5 0 0 1 ripple - -;
+#X obj 101 299 *~;
+#X floatatom 355 155 5 0 0 1 width - -;
+#X obj 101 352 *~;
+#X obj 101 374 +~ 1;
+#X obj 37 447 /~;
+#X obj 37 374 sig~ 1;
+#X obj 37 505 hip~ 1;
+#X obj 205 21 inlet;
+#X obj 355 21 inlet;
+#X text 256 387 based on an example in Andy Farnell's book \, Designing
+Sound \, see section 52 on Mammals;
+#X connect 1 0 12 0;
+#X connect 2 0 3 0;
+#X connect 3 0 4 0;
+#X connect 3 0 10 0;
+#X connect 4 0 5 0;
+#X connect 5 0 6 0;
+#X connect 6 0 7 0;
+#X connect 7 0 14 0;
+#X connect 8 0 9 0;
+#X connect 9 0 10 1;
+#X connect 10 0 11 0;
+#X connect 11 0 7 1;
+#X connect 12 0 2 0;
+#X connect 13 0 8 0;
+#X connect 14 0 16 0;
+#X connect 14 0 16 1;
+#X connect 15 0 14 1;
+#X connect 16 0 17 0;
+#X connect 17 0 18 1;
+#X connect 18 0 20 0;
+#X connect 19 0 18 0;
+#X connect 20 0 0 0;
+#X connect 21 0 13 0;
+#X connect 22 0 15 0;
+#X restore 433 119 pd OmGen;
+#X floatatom 433 83 5 0 0 0 - - -;
+#X obj 433 -48 * 1400;
+#N canvas 394 175 839 516 schroederReverb 0;
+#X obj 82 91 +~;
+#X obj 82 18 inlet~;
+#X obj 142 91 +~;
+#X obj 327 213 +~;
+#X obj 327 254 +~;
+#X obj 327 293 *~ 0.4;
+#X obj 359 213 -~;
+#X obj 376 293 *~ 0.37;
+#X obj 359 254 +~;
+#X obj 82 247 outlet~;
+#X obj 142 247 outlet~;
+#X obj 390 213 +~;
+#X obj 420 213 -~;
+#X obj 390 254 -~;
+#X obj 421 254 -~;
+#X obj 431 294 *~ 0.333;
+#X obj 492 294 *~ 0.3;
+#X text 427 454 Schroeder reverb \, source: Andy Farnell's Designing
+Sound \, page 234 \, Claude Heiland-Allen credited;
+#X obj 87 341 delwrite~ drom2A 1000;
+#X obj 222 341 delwrite~ drom2B 1000;
+#X obj 357 341 delwrite~ drom2C 1000;
+#X obj 492 341 delwrite~ drom2D 1000;
+#X obj 127 18 delread~ drom2A 101;
+#X obj 250 18 delread~ drom2B 143;
+#X obj 373 18 delread~ drom2C 165;
+#X obj 496 18 delread~ drom2D 177;
+#X connect 0 0 3 0;
+#X connect 0 0 9 0;
+#X connect 0 0 6 0;
+#X connect 1 0 0 0;
+#X connect 1 0 2 0;
+#X connect 2 0 10 0;
+#X connect 2 0 6 1;
+#X connect 2 0 3 1;
+#X connect 3 0 4 0;
+#X connect 3 0 13 0;
+#X connect 4 0 5 0;
+#X connect 5 0 18 0;
+#X connect 6 0 8 0;
+#X connect 6 0 14 0;
+#X connect 7 0 19 0;
+#X connect 8 0 7 0;
+#X connect 11 0 13 1;
+#X connect 11 0 4 1;
+#X connect 12 0 14 1;
+#X connect 12 0 8 1;
+#X connect 13 0 15 0;
+#X connect 14 0 16 0;
+#X connect 15 0 20 0;
+#X connect 16 0 21 0;
+#X connect 22 0 0 1;
+#X connect 23 0 2 1;
+#X connect 24 0 11 0;
+#X connect 24 0 12 0;
+#X connect 25 0 11 1;
+#X connect 25 0 12 1;
+#X restore 433 236 pd schroederReverb;
+#X floatatom 572 -5 10 0 0 0 - - -;
+#X obj 857 -91 hsl 128 15 0 1 0 0 empty empty empty -2 -8 0 10 -262144
+-1 -1 1524 1;
+#X floatatom 854 75 5 0 0 0 - - -;
+#X obj 854 47 line;
+#X obj 854 18 pack f 200;
+#X obj 433 9 pack f 200;
+#X obj 433 38 line;
+#X obj 854 -28 + 5;
+#X obj 854 -58 * 95;
+#X obj 718 -90 hsl 128 15 0 1 0 0 empty empty empty -2 -8 0 10 -262144
+-1 -1 5080 1;
+#X floatatom 715 76 5 0 0 0 - - -;
+#X obj 715 48 line;
+#X obj 715 19 pack f 200;
+#X obj 715 -57 * 10;
+#X obj 715 -27 + 2;
+#X obj 55 -58 loadbang;
+#N canvas 0 22 423 363 sinTaperFade 0;
+#X obj 158 33 inlet~;
+#X obj 202 33 inlet;
+#X obj 161 255 *~;
+#X obj 161 301 outlet~;
+#X obj 177 187 sin;
+#X obj 202 58 * 2;
+#X obj 202 80 - 1;
+#X obj 202 102 + 1;
+#X obj 202 124 / 4;
+#X obj 202 146 * 3.14159;
+#X floatatom 202 168 5 0 0 0 - - -;
+#X msg 176 208 \$1 60;
+#X obj 176 230 line~;
+#X connect 0 0 2 0;
+#X connect 1 0 5 0;
+#X connect 2 0 3 0;
+#X connect 4 0 11 0;
+#X connect 5 0 6 0;
+#X connect 6 0 7 0;
+#X connect 7 0 8 0;
+#X connect 8 0 9 0;
+#X connect 9 0 10 0;
+#X connect 10 0 4 0;
+#X connect 11 0 12 0;
+#X connect 12 0 2 1;
+#X restore 433 174 pd sinTaperFade;
+#N canvas 0 22 458 286 sin 0;
+#X obj 202 33 inlet;
+#X obj 202 187 sin;
+#X obj 202 58 * 2;
+#X obj 202 80 - 1;
+#X obj 202 102 + 1;
+#X obj 202 124 / 4;
+#X obj 202 146 * 3.14159;
+#X floatatom 202 168 5 0 0 0 - - -;
+#X obj 202 209 outlet;
+#X connect 0 0 2 0;
+#X connect 1 0 8 0;
+#X connect 2 0 3 0;
+#X connect 3 0 4 0;
+#X connect 4 0 5 0;
+#X connect 5 0 6 0;
+#X connect 6 0 7 0;
+#X connect 7 0 1 0;
+#X restore 433 -71 pd sin;
+#X obj 433 -20 + 20;
+#X obj 572 -118 r pd_vol;
+#X obj 433 -118 r pd_freq;
+#X obj 715 -118 r pd_ripple;
+#X obj 854 -119 r pd_width;
+#X msg 55 -12 \; pd_ripple 0.4 \; pd_width 0.12 \; pd_freq 0.02 \;
+pd_vol 0.5 \;;
+#X text 53 -89 Pd patch for protoDrom tutorial 1 by Shawn Greenlee
+;
+#X connect 1 0 0 0;
+#X connect 2 0 1 0;
+#X connect 3 0 28 0;
+#X connect 4 0 11 0;
+#X connect 5 0 0 1;
+#X connect 6 0 5 0;
+#X connect 7 0 27 0;
+#X connect 8 0 7 0;
+#X connect 9 0 29 0;
+#X connect 10 0 2 0;
+#X connect 10 1 6 0;
+#X connect 11 0 27 1;
+#X connect 12 0 19 0;
+#X connect 13 0 7 2;
+#X connect 14 0 13 0;
+#X connect 15 0 14 0;
+#X connect 16 0 17 0;
+#X connect 17 0 8 0;
+#X connect 18 0 15 0;
+#X connect 19 0 18 0;
+#X connect 20 0 24 0;
+#X connect 21 0 7 1;
+#X connect 22 0 21 0;
+#X connect 23 0 22 0;
+#X connect 24 0 25 0;
+#X connect 25 0 23 0;
+#X connect 26 0 34 0;
+#X connect 27 0 10 0;
+#X connect 28 0 9 0;
+#X connect 29 0 16 0;
+#X connect 30 0 4 0;
+#X connect 31 0 3 0;
+#X connect 32 0 20 0;
+#X connect 33 0 12 0;
96 protoDrom_tutorial2/protoDrom_tutorial2.pde
View
@@ -0,0 +1,96 @@
+/**
+ * protoDrom tutorial 2: adding OSC communication to drom tutoral 1
+ * by Shawn Greenlee
+ *
+ * for this example, you will need these libraries:
+ * 1) libPd for Processing (puredataP5) - https://github.com/libpd/puredatap5
+ * 2) controlP5 - http://www.sojamo.de/libraries/controlP5/
+ * 3) oscP5 - http://www.sojamo.de/libraries/oscP5/
+ * consult documentation for these libaries for further info.
+ */
+
+// OK, let's get started...
+
+// first, import the libaries (these need to be installed in your libraries folder)
+
+import org.puredata.processing.PureData;
+import controlP5.*;
+import oscP5.*;
+import netP5.*; // netP5 is included with the oscP5 library
+
+// then, declare variables for the libraries
+
+PureData pd;
+ControlP5 controlP5;
+OscP5 oscP5;
+
+// and we'll also need to declare two floats: one for frequency, another for volume
+
+float freq = 0.02;
+float vol = 0.5;
+
+// ok, now we are ready for the setup function
+
+void setup() {
+ size(680, 400);
+ frameRate(25);
+ pd = new PureData(this, 44100, 0, 2); // set sampling rate, input channels, & output channels
+ pd.openPatch("drom_t2.pd"); // open the Pd patch contained in the data folder
+ pd.start(); // get Pd ready
+ controlP5 = new ControlP5(this); // get controlP5 ready
+ oscP5 = new OscP5(this, 8000); // get oscP5 ready and set the incoming port for communication (this is the connection point for a mobile app)
+
+ // while we are here, let's change our colors for controlP5
+
+ controlP5.setColorForeground(#ffffff);
+ controlP5.setColorBackground(#999999);
+ controlP5.setColorLabel(#ffffff);
+ controlP5.setColorValue(#ffffff);
+ controlP5.setColorActive(#ffffff);
+
+ // and we must setup our sliders, one for the frequency and one for the volume
+
+ Slider freq = controlP5.addSlider("freq", 0, 1, 0.02, 40, 50, 30, 200); // name, range-lo, range-hi, start-val, pos-X, pos-Y, width, height
+ freq.setSliderMode(Slider.FLEXIBLE); // this gives us a fader-like interface
+
+ Slider vol = controlP5.addSlider("vol", 0, 1, 0.5, 100, 50, 30, 200); // name, range-lo, range-hi, start-val, pos-X, pos-Y, width, height
+ vol.setSliderMode(Slider.FLEXIBLE); // this gives us a fader-like interface
+}
+
+// OK, setup is done
+// now to for the draw function which will send the slider values to the Pd patch
+
+void draw() {
+ background(#77896C); // we need to set background color in the draw function, so that the slider values draw correctly, comment out to see the difference
+ pd.sendFloat("pd_freq", (float)freq); // send the freq value to a receive in Pd called "pd_freq"
+ pd.sendFloat("pd_vol", (float)vol); // send the vol value to a receive in Pd called "pd_vol"
+}
+
+
+/**
+ * now to set up OSC communication so that the sliders can be controlled remotely
+ * you'll need an app capable of sending custom OSC messages, mobile apps like TouchOSC and TB Midi Stuff are good options
+ * send your messages from your mobile app on outgoing port: 8000 (which we determined in the setup function)
+ * be sure also to set the IP address for the host on your mobile app
+ */
+
+
+void oscEvent(OscMessage theOscMessage) {
+
+ String addr = theOscMessage.addrPattern();
+ float val1 = theOscMessage.get(0).floatValue();
+
+ if (addr.equals("/drom/freq")) {
+ freq = val1;
+ } // the Osc message you are sending must be formated as "/drom/vol" and will need to be a float in the range of 0-1
+ controlP5.controller("freq").setValue(freq); // send the freq value to the freq slider
+
+ if (addr.equals("/drom/vol")) {
+ vol = val1;
+ } // the Osc message you are sending must be formated as "/drom/vol" and will need to be a float in the range of 0-1
+ controlP5.controller("vol").setValue(vol); // send the vol value to the vol slider
+}
+
+// now that you have the fundamentals down, try exporting an application
+// and on to tutorial 3 where a DR-OM is born...
+
967 protoDrom_tutorial3/data/drom_t3.pd
View
@@ -0,0 +1,967 @@
+#N canvas 170 164 1436 814 10;
+#X obj 239 680 dac~;
+#X obj 239 626 clip~ -1 1;
+#X obj 239 591 hip~ 1;
+#X obj 629 -48 hsl 128 15 0 1 0 0 empty empty empty -2 -8 0 10 -262144
+-1 -1 2100 1;
+#X obj 629 47 hsl 128 15 0 1 0 0 empty empty empty -2 -8 0 10 -262144
+-1 -1 0 1;
+#X obj 629 0 hsl 128 15 0 1 0 0 empty empty empty -2 -8 0 10 -262144
+-1 -1 4900 1;
+#X obj 629 95 hsl 128 15 0 1 0 0 empty empty empty -2 -8 0 10 -262144
+-1 -1 400 1;
+#X obj 629 142 hsl 128 15 0 1 0 0 empty empty empty -2 -8 0 10 -262144
+-1 -1 1900 1;
+#X obj 630 189 hsl 128 15 0 1 0 0 empty empty empty -2 -8 0 10 -262144
+-1 -1 0 1;
+#X obj 630 283 hsl 128 15 0 1 0 0 empty empty empty -2 -8 0 10 -262144
+-1 -1 4000 1;
+#X obj 630 236 hsl 128 15 0 1 0 0 empty empty empty -2 -8 0 10 -262144
+-1 -1 4800 1;
+#X obj 630 330 hsl 128 15 0 1 0 0 empty empty empty -2 -8 0 10 -262144
+-1 -1 500 1;
+#X obj 630 377 hsl 128 15 0 1 0 0 empty empty empty -2 -8 0 10 -262144
+-1 -1 9700 1;
+#X obj 312 626 clip~ -1 1;
+#X obj 312 591 hip~ 1;
+#X obj 626 -76 r pd_osc1;
+#X obj 626 -28 r pd_lfo1;
+#X obj 626 19 r pd_mix;
+#X obj 626 67 r pd_osc2;
+#X obj 626 114 r pd_lfo2;
+#X obj 627 161 r pd_speed;
+#X obj 627 208 r pd_depth;
+#X obj 627 255 r pd_freq;
+#X obj 627 302 r pd_res;
+#X obj 627 349 r pd_vol;
+#N canvas 148 22 1279 795 proto_drom_________________________________
+0;
+#X floatatom 206 -70 5 0 0 1 mix - -;
+#X obj 206 -119 line;
+#X obj 206 -142 pack f 200;
+#X obj 20 -181 inlet;
+#X obj 122 -181 inlet;
+#X obj 206 -181 inlet;
+#X obj 343 -181 inlet;
+#X obj 445 -181 inlet;
+#X obj 18 575 outlet~;
+#X floatatom 122 -70 5 0 0 1 lfo1 - -;
+#X obj 122 -119 + 0.001;
+#X floatatom 479 -7 5 0 0 1 depth - -;
+#X floatatom 947 -7 5 0 0 1 res - -;
+#X obj 1049 -124 line;
+#X obj 1049 -153 pack f 200;
+#X obj 741 -124 line;
+#X obj 741 -153 pack f 200;
+#X obj 846 -153 pack f 200;
+#X obj 947 -124 line;
+#X obj 947 -153 pack f 200;
+#X floatatom 1050 -7 5 0 0 1 vol - -;
+#X obj 18 460 *~ 0.4;
+#X obj 641 -181 inlet;
+#X obj 741 -181 inlet;
+#X obj 846 -181 inlet;
+#X obj 947 -181 inlet;
+#X obj 1049 -181 inlet;
+#X obj 18 200 *~ 0.7;
+#X obj 101 200 *~ 0.5;
+#N canvas 0 22 687 515 crossfade 0;
+#X obj 158 33 inlet~;
+#X obj 202 33 inlet;
+#X obj 161 255 *~;
+#X text 203 14 crossfade;
+#X obj 70 33 inlet~;
+#X obj 73 255 *~;
+#X obj 146 284 +~;
+#X obj 146 313 outlet~;
+#X obj 177 187 sin;
+#X obj 84 185 cos;
+#X text 68 15 1;
+#X text 159 14 2;
+#X obj 202 58 * 2;
+#X obj 202 80 - 1;
+#X obj 202 102 + 1;
+#X obj 202 124 / 4;
+#X obj 202 146 * 3.14159;
+#X floatatom 202 168 5 0 0 0 - - -;
+#X msg 176 208 \$1 60;
+#X obj 176 230 line~;
+#X msg 84 208 \$1 60;
+#X obj 85 232 line~;
+#X text 77 367 adapted from http://puredata.hurleur.com/sujet-5326-stereo-crossfader-adjustable-curve
+(as used by 76synth);
+#X connect 0 0 2 0;
+#X connect 1 0 12 0;
+#X connect 2 0 6 1;
+#X connect 4 0 5 0;
+#X connect 5 0 6 0;
+#X connect 6 0 7 0;
+#X connect 8 0 18 0;
+#X connect 9 0 20 0;
+#X connect 12 0 13 0;
+#X connect 13 0 14 0;
+#X connect 14 0 15 0;
+#X connect 15 0 16 0;
+#X connect 16 0 17 0;
+#X connect 17 0 8 0;
+#X connect 17 0 9 0;
+#X connect 18 0 19 0;
+#X connect 19 0 2 1;
+#X connect 20 0 21 0;
+#X connect 21 0 5 1;
+#X restore 18 364 pd crossfade;
+#X obj 18 266 +~;
+#N canvas 394 175 839 516 schroederReverb 0;
+#X obj 82 91 +~;
+#X obj 82 18 inlet~;
+#X obj 142 91 +~;
+#X obj 327 213 +~;
+#X obj 327 254 +~;
+#X obj 327 293 *~ 0.4;
+#X obj 359 213 -~;
+#X obj 376 293 *~ 0.37;
+#X obj 359 254 +~;
+#X obj 82 247 outlet~;
+#X obj 142 247 outlet~;
+#X obj 390 213 +~;
+#X obj 420 213 -~;
+#X obj 390 254 -~;
+#X obj 421 254 -~;
+#X obj 431 294 *~ 0.333;
+#X obj 492 294 *~ 0.3;
+#X text 427 454 Schroeder reverb \, source: Andy Farnell's Designing
+Sound \, page 234 \, Claude Heiland-Allen credited;
+#X obj 127 18 delread~ drom3A 101;
+#X obj 250 18 delread~ drom3B 143;
+#X obj 373 18 delread~ drom3C 165;
+#X obj 496 18 delread~ drom3D 177;
+#X obj 87 341 delwrite~ drom3A 1000;
+#X obj 222 341 delwrite~ drom3B 1000;
+#X obj 357 341 delwrite~ drom3C 1000;
+#X obj 492 341 delwrite~ drom3D 1000;
+#X connect 0 0 3 0;
+#X connect 0 0 9 0;
+#X connect 0 0 6 0;
+#X connect 1 0 0 0;
+#X connect 1 0 2 0;
+#X connect 2 0 10 0;
+#X connect 2 0 6 1;
+#X connect 2 0 3 1;
+#X connect 3 0 4 0;
+#X connect 3 0 13 0;
+#X connect 4 0 5 0;
+#X connect 5 0 22 0;
+#X connect 6 0 8 0;
+#X connect 6 0 14 0;
+#X connect 7 0 23 0;
+#X connect 8 0 7 0;
+#X connect 11 0 13 1;
+#X connect 11 0 4 1;
+#X connect 12 0 14 1;
+#X connect 12 0 8 1;
+#X connect 13 0 15 0;
+#X connect 14 0 16 0;
+#X connect 15 0 24 0;
+#X connect 16 0 25 0;
+#X connect 18 0 0 1;
+#X connect 19 0 2 1;
+#X connect 20 0 11 0;
+#X connect 20 0 12 0;
+#X connect 21 0 11 1;
+#X connect 21 0 12 1;
+#X restore 18 532 pd schroederReverb;
+#X obj 123 574 outlet~;
+#N canvas 404 50 889 639 OmGen 0;
+#X obj 250 596 outlet~;
+#X obj 101 22 inlet;
+#X obj 101 127 phasor~ 100;
+#X obj 101 149 -~ 0.5;
+#X obj 101 171 cos~;
+#X obj 101 193 +~ 1;
+#X obj 101 215 *~ 0.5;
+#X obj 101 237 *~;
+#X obj 206 137 sig~;
+#X obj 206 159 lop~ 10;
+#X obj 191 190 *~;
+#X obj 191 212 cos~;
+#X floatatom 101 76 5 0 0 1 frequency - -;
+#X floatatom 206 117 5 0 0 1 ripple - -;
+#X obj 101 299 *~;
+#X floatatom 355 155 5 0 0 1 width - -;
+#X obj 101 352 *~;
+#X obj 101 374 +~ 1;
+#X obj 37 447 /~;
+#X obj 37 374 sig~ 1;
+#X obj 40 504 hip~ 1;
+#X obj 205 21 inlet;
+#X obj 355 21 inlet;
+#X connect 1 0 12 0;
+#X connect 2 0 3 0;
+#X connect 3 0 4 0;
+#X connect 3 0 10 0;
+#X connect 4 0 5 0;
+#X connect 5 0 6 0;
+#X connect 6 0 7 0;
+#X connect 7 0 14 0;
+#X connect 8 0 9 0;
+#X connect 9 0 10 1;
+#X connect 10 0 11 0;
+#X connect 11 0 7 1;
+#X connect 12 0 2 0;
+#X connect 13 0 8 0;
+#X connect 14 0 16 0;
+#X connect 14 0 16 1;
+#X connect 15 0 14 1;
+#X connect 16 0 17 0;
+#X connect 17 0 18 1;
+#X connect 18 0 20 0;
+#X connect 19 0 18 0;
+#X connect 20 0 0 0;
+#X connect 21 0 13 0;
+#X connect 22 0 15 0;
+#X restore 18 155 pd OmGen;
+#X floatatom 20 -70 5 0 0 1 osc1 - -;
+#N canvas 404 50 889 639 OmGen 0;
+#X obj 250 596 outlet~;
+#X obj 101 22 inlet;
+#X obj 101 127 phasor~ 100;
+#X obj 101 149 -~ 0.5;
+#X obj 101 171 cos~;
+#X obj 101 193 +~ 1;
+#X obj 101 215 *~ 0.5;
+#X obj 101 237 *~;
+#X obj 206 137 sig~;
+#X obj 206 159 lop~ 10;
+#X obj 191 190 *~;
+#X obj 191 212 cos~;
+#X floatatom 101 76 5 0 0 1 frequency - -;
+#X floatatom 206 117 5 0 0 1 ripple - -;
+#X obj 101 299 *~;
+#X floatatom 355 155 5 0 0 1 width - -;
+#X obj 101 352 *~;
+#X obj 101 374 +~ 1;
+#X obj 37 447 /~;
+#X obj 37 374 sig~ 1;
+#X obj 40 504 hip~ 1;
+#X obj 205 21 inlet;
+#X obj 355 21 inlet;
+#X connect 1 0 12 0;
+#X connect 2 0 3 0;
+#X connect 3 0 4 0;
+#X connect 3 0 10 0;
+#X connect 4 0 5 0;
+#X connect 5 0 6 0;
+#X connect 6 0 7 0;
+#X connect 7 0 14 0;
+#X connect 8 0 9 0;
+#X connect 9 0 10 1;
+#X connect 10 0 11 0;
+#X connect 11 0 7 1;
+#X connect 12 0 2 0;
+#X connect 13 0 8 0;
+#X connect 14 0 16 0;
+#X connect 14 0 16 1;
+#X connect 15 0 14 1;
+#X connect 16 0 17 0;
+#X connect 17 0 18 1;
+#X connect 18 0 20 0;
+#X connect 19 0 18 0;
+#X connect 20 0 0 0;
+#X connect 21 0 13 0;
+#X connect 22 0 15 0;
+#X restore 101 155 pd OmGen;
+#X floatatom 641 -7 5 0 0 1 speed - -;
+#X obj 741 -65 + 5;
+#X floatatom 552 -7 5 0 0 1 freq - -;
+#X obj 846 -124 line;
+#X obj 846 -95 * 10;
+#X obj 846 -65 + 2;
+#X floatatom 445 -70 5 0 0 1 lfo2 - -;
+#X obj 445 -119 + 0.001;
+#X obj 159 200 *~ 0.7;
+#X obj 233 200 *~ 0.5;
+#X obj 159 266 +~;
+#N canvas 404 50 889 639 OmGen 0;
+#X obj 250 596 outlet~;
+#X obj 101 22 inlet;
+#X obj 101 127 phasor~ 100;
+#X obj 101 149 -~ 0.5;
+#X obj 101 171 cos~;
+#X obj 101 193 +~ 1;
+#X obj 101 215 *~ 0.5;
+#X obj 101 237 *~;
+#X obj 206 137 sig~;
+#X obj 206 159 lop~ 10;
+#X obj 191 190 *~;
+#X obj 191 212 cos~;
+#X floatatom 101 76 5 0 0 1 frequency - -;
+#X floatatom 206 117 5 0 0 1 ripple - -;
+#X obj 101 299 *~;
+#X floatatom 355 155 5 0 0 1 width - -;
+#X obj 101 352 *~;
+#X obj 101 374 +~ 1;
+#X obj 37 447 /~;
+#X obj 37 374 sig~ 1;
+#X obj 40 504 hip~ 1;
+#X obj 205 21 inlet;
+#X obj 355 21 inlet;
+#X connect 1 0 12 0;
+#X connect 2 0 3 0;
+#X connect 3 0 4 0;
+#X connect 3 0 10 0;
+#X connect 4 0 5 0;
+#X connect 5 0 6 0;
+#X connect 6 0 7 0;
+#X connect 7 0 14 0;
+#X connect 8 0 9 0;
+#X connect 9 0 10 1;
+#X connect 10 0 11 0;
+#X connect 11 0 7 1;
+#X connect 12 0 2 0;
+#X connect 13 0 8 0;
+#X connect 14 0 16 0;
+#X connect 14 0 16 1;
+#X connect 15 0 14 1;
+#X connect 16 0 17 0;
+#X connect 17 0 18 1;
+#X connect 18 0 20 0;
+#X connect 19 0 18 0;
+#X connect 20 0 0 0;
+#X connect 21 0 13 0;
+#X connect 22 0 15 0;
+#X restore 159 155 pd OmGen;
+#X floatatom 343 -70 5 0 0 1 osc2 - -;
+#N canvas 404 50 889 639 OmGen 0;
+#X obj 250 596 outlet~;
+#X obj 101 22 inlet;
+#X obj 101 127 phasor~ 100;
+#X obj 101 149 -~ 0.5;
+#X obj 101 171 cos~;
+#X obj 101 193 +~ 1;
+#X obj 101 215 *~ 0.5;
+#X obj 101 237 *~;
+#X obj 206 137 sig~;
+#X obj 206 159 lop~ 10;
+#X obj 191 190 *~;
+#X obj 191 212 cos~;
+#X floatatom 101 76 5 0 0 1 frequency - -;
+#X floatatom 206 117 5 0 0 1 ripple - -;
+#X obj 101 299 *~;
+#X floatatom 355 155 5 0 0 1 width - -;
+#X obj 101 352 *~;
+#X obj 101 374 +~ 1;
+#X obj 37 447 /~;
+#X obj 37 374 sig~ 1;
+#X obj 72 525 hip~ 1;
+#X obj 205 21 inlet;
+#X obj 355 21 inlet;
+#X connect 1 0 12 0;
+#X connect 2 0 3 0;
+#X connect 3 0 4 0;
+#X connect 3 0 10 0;
+#X connect 4 0 5 0;
+#X connect 5 0 6 0;
+#X connect 6 0 7 0;
+#X connect 7 0 14 0;
+#X connect 8 0 9 0;
+#X connect 9 0 10 1;
+#X connect 10 0 11 0;
+#X connect 11 0 7 1;
+#X connect 12 0 2 0;
+#X connect 13 0 8 0;
+#X connect 14 0 16 0;
+#X connect 14 0 16 1;
+#X connect 15 0 14 1;
+#X connect 16 0 17 0;
+#X connect 17 0 18 1;
+#X connect 18 0 20 0;
+#X connect 19 0 18 0;
+#X connect 20 0 0 0;
+#X connect 21 0 13 0;
+#X connect 22 0 15 0;
+#X restore 233 155 pd OmGen;
+#X obj 30 -51 * 2;
+#X obj 122 -142 * 0.55;
+#X obj 445 -142 * 0.55;
+#X obj 352 -51 * 2;
+#N canvas 442 125 906 644 rescalePitch2 0;
+#X obj 27 120 ftom;
+#X obj 126 18 inlet;
+#X floatatom 27 62 5 0 0 0 - - -;
+#X obj 155 392 % 12;
+#X floatatom 155 414 5 0 0 1 pitch_class - -;
+#X obj -61 240 / 12;
+#X obj -61 262 - 1;
+#X floatatom -61 284 5 0 0 1 register - -;
+#X floatatom -28 240 5 0 0 1 midi_note - -;
+#X obj 27 38 mtof;
+#X floatatom 27 18 5 0 0 0 - - -;
+#X obj -61 350 * 12;
+#X obj -76 415 +;
+#X floatatom -76 437 5 0 0 0 - - -;
+#X obj -76 458 mtof;
+#X floatatom -76 480 10 0 0 0 - - -;
+#X obj -76 569 outlet;
+#X obj 27 82 int;
+#X floatatom 27 102 5 0 0 0 - - -;
+#X obj -76 548 line;
+#X obj -61 326 int;
+#X msg -76 529 \$1 10;
+#X floatatom 154 250 5 0 0 1 mapped_pitch - -;
+#X obj 204 47 sel 0 1 2 3 4 5 6 7 8 9 10 11;
+#X msg 200 100 0;
+#X msg 233 100 2;
+#X msg 266 100 3;
+#X msg 299 100 5;
+#X msg 331 100 7;
+#X msg 364 100 8;
+#X msg 397 100 8;
+#X text 330 187 based on Todd Winkler's Scale subpatch \, see p. 198
+of Composing Interactive Music \, 2001 paperback 1st ed.;
+#X obj -76 499 + 0.6;
+#X obj 38 177 t f f;
+#X connect 0 0 8 0;
+#X connect 0 0 33 0;
+#X connect 1 0 2 0;
+#X connect 2 0 17 0;
+#X connect 3 0 4 0;
+#X connect 4 0 23 0;
+#X connect 5 0 6 0;
+#X connect 6 0 7 0;
+#X connect 7 0 20 0;
+#X connect 9 0 2 0;
+#X connect 10 0 9 0;
+#X connect 11 0 12 0;
+#X connect 12 0 13 0;
+#X connect 13 0 14 0;
+#X connect 14 0 15 0;
+#X connect 15 0 32 0;
+#X connect 17 0 18 0;
+#X connect 18 0 0 0;
+#X connect 19 0 16 0;
+#X connect 20 0 11 0;
+#X connect 21 0 19 0;
+#X connect 22 0 12 1;
+#X connect 23 0 24 0;
+#X connect 23 1 24 0;
+#X connect 23 2 25 0;
+#X connect 23 3 26 0;
+#X connect 23 4 26 0;
+#X connect 23 5 27 0;
+#X connect 23 6 27 0;
+#X connect 23 7 28 0;
+#X connect 23 8 28 0;
+#X connect 23 9 29 0;
+#X connect 23 10 29 0;
+#X connect 23 11 30 0;
+#X connect 24 0 22 0;
+#X connect 25 0 22 0;
+#X connect 26 0 22 0;
+#X connect 27 0 22 0;
+#X connect 28 0 22 0;
+#X connect 29 0 22 0;
+#X connect 30 0 22 0;
+#X connect 32 0 21 0;
+#X connect 33 0 5 0;
+#X connect 33 1 3 0;
+#X restore 343 -97 pd rescalePitch2;
+#N canvas 94 354 703 423 filter 0;
+#X floatatom 296 96 5 0 0 0 - - -;
+#X floatatom 605 120 5 0 0 0 - - -;
+#X obj 538 121 +~ 1;
+#X floatatom 538 79 5 0 0 0 - - -;
+#X floatatom 602 144 5 0 0 0 - - -;
+#X obj 538 162 +~ 100;
+#X obj 538 100 osc~ 0.25;
+#X obj 538 141 *~ 2000;
+#X obj 68 49 inlet~;
+#X obj 196 319 outlet~;
+#X obj 538 39 inlet;
+#X obj 597 39 inlet;
+#X obj 296 115 + 0.01;
+#X obj 87 199 vcf~ 1;
+#X connect 0 0 12 0;
+#X connect 1 0 7 1;
+#X connect 2 0 7 0;
+#X connect 3 0 6 0;
+#X connect 4 0 5 1;
+#X connect 5 0 13 1;
+#X connect 6 0 2 0;
+#X connect 7 0 5 0;
+#X connect 8 0 13 0;
+#X connect 10 0 3 0;
+#X connect 11 0 0 0;
+#X connect 12 0 13 2;
+#X connect 13 0 9 0;
+#X restore 18 319 pd filter;
+#X obj 947 -56 * 3.5;
+#N canvas 94 354 703 423 filter 0;
+#X floatatom 296 96 5 0 0 0 - - -;
+#X floatatom 605 120 5 0 0 0 - - -;
+#X obj 538 121 +~ 1;
+#X floatatom 538 79 5 0 0 0 - - -;
+#X floatatom 602 144 5 0 0 0 - - -;
+#X obj 538 162 +~ 100;
+#X obj 538 100 osc~ 0.25;
+#X obj 538 141 *~ 2000;
+#X obj 68 49 inlet~;
+#X obj 196 319 outlet~;
+#X obj 538 39 inlet;
+#X obj 597 39 inlet;
+#X obj 296 115 + 0.01;
+#X obj 87 199 vcf~ 1;
+#X connect 0 0 12 0;
+#X connect 1 0 7 1;
+#X connect 2 0 7 0;
+#X connect 3 0 6 0;
+#X connect 4 0 5 1;
+#X connect 5 0 13 1;
+#X connect 6 0 2 0;
+#X connect 7 0 5 0;
+#X connect 8 0 13 0;
+#X connect 10 0 3 0;
+#X connect 11 0 0 0;
+#X connect 12 0 13 2;
+#X connect 13 0 9 0;
+#X restore 159 319 pd filter;
+#X floatatom 947 -78 5 0 0 0 - - -;
+#N canvas 0 22 450 300 !- 0;
+#X obj 92 21 inlet;
+#X obj 124 240 outlet;
+#X floatatom 92 57 5 0 0 0 - - -;
+#X obj 124 204 - 1;
+#X obj 92 106 trigger b f;
+#X obj 82 158 f 1;
+#X connect 0 0 2 0;
+#X connect 2 0 4 0;
+#X connect 3 0 1 0;
+#X connect 4 0 5 0;
+#X connect 4 1 3 1;
+#X connect 5 0 3 0;
+#X restore 947 -101 pd !-;
+#X obj 741 -95 * 95;
+#X obj 947 -35 clip 1 3.5;
+#X obj 1049 -102 * 0.6;
+#X obj 20 -142 * 1400;
+#X obj 343 -142 * 1400;
+#X obj 20 -119 + 79;
+#X obj 343 -119 + 79;
+#X obj 1165 -181 inlet;
+#X obj 1165 -7 tgl 15 0 empty empty power 17 7 0 10 -262144 -1 -1 0
+1;
+#X obj 1165 200 vline~;
+#X obj 1165 30 select 1;
+#X msg 1210 58 0 500;
+#X msg 1165 58 1 500;
+#X obj 18 502 *~;
+#N canvas 137 22 1294 809 speed 0;
+#X obj 5 131 +~;
+#X obj 275 584 *~;
+#X obj 383 120 osc~;
+#X obj 383 142 *~;
+#X obj 383 208 vd~ a1;
+#X obj 464 371 osc~;
+#X obj 464 393 *~;
+#X obj 464 459 vd~ a2;
+#X floatatom 290 -22 5 0 0 1 feedback - -;
+#X floatatom 383 -22 5 0 0 1 rate - -;
+#X floatatom 457 -22 5 0 0 1 depth - -;
+#X obj 42 644 outlet~;
+#X floatatom 290 8 10 0 0 0 - - -;
+#X floatatom 383 8 10 0 0 0 - - -;
+#X floatatom 457 8 10 0 0 0 - - -;
+#X obj 785 57 inlet;
+#X obj 785 88 pack f 200;
+#X floatatom 785 145 5 0 0 0 - - -;
+#X obj 785 118 line;
+#X obj 829 57 hsl 128 15 0 1 0 0 empty empty empty -2 -8 0 10 -262144
+-1 -1 0 1;
+#X obj 785 166 * 10;
+#X obj 785 188 + 1;
+#X obj 111 456 > 1;
+#X obj 111 475 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0
+1;
+#X floatatom 785 210 5 0 0 0 - - -;
+#X obj 784 229 int;
+#X floatatom 784 249 5 0 0 0 - - -;
+#X obj 784 307 sel 2 3 4 5 6 7 8 9 10 11;
+#X obj 784 268 change;
+#X obj 111 434 change;
+#N canvas 0 22 687 515 crossfade 0;
+#X obj 158 33 inlet~;
+#X obj 202 33 inlet;
+#X obj 161 255 *~;
+#X text 203 14 crossfade;
+#X obj 70 33 inlet~;
+#X obj 73 255 *~;
+#X obj 146 284 +~;
+#X obj 146 313 outlet~;
+#X obj 177 187 sin;
+#X obj 84 185 cos;
+#X text 68 15 1;
+#X text 159 14 2;
+#X obj 202 58 * 2;
+#X obj 202 80 - 1;
+#X obj 202 102 + 1;
+#X obj 202 124 / 4;
+#X obj 202 146 * 3.14159;
+#X floatatom 202 168 5 0 0 0 - - -;
+#X msg 176 208 \$1 60;
+#X obj 176 230 line~;
+#X msg 84 208 \$1 60;
+#X obj 85 232 line~;
+#X text 77 367 adapted from http://puredata.hurleur.com/sujet-5326-stereo-crossfader-adjustable-curve
+(as used by 76synth);
+#X connect 0 0 2 0;
+#X connect 1 0 12 0;
+#X connect 2 0 6 1;
+#X connect 4 0 5 0;
+#X connect 5 0 6 0;
+#X connect 6 0 7 0;
+#X connect 8 0 18 0;
+#X connect 9 0 20 0;
+#X connect 12 0 13 0;
+#X connect 13 0 14 0;
+#X connect 14 0 15 0;
+#X connect 15 0 16 0;
+#X connect 16 0 17 0;
+#X connect 17 0 8 0;
+#X connect 17 0 9 0;
+#X connect 18 0 19 0;
+#X connect 19 0 2 1;
+#X connect 20 0 21 0;
+#X connect 21 0 5 1;
+#X restore 42 577 pd crossfade;
+#X floatatom 111 494 5 0 0 0 - - -;
+#X obj 290 35 pack f 200;
+#X obj 383 35 pack f 200;
+#X obj 457 35 pack f 200;
+#X obj 20 82 *~ 0.3;
+#X obj 5 -11 delread~ fb_drom 2;
+#X obj 159 -21 inlet~;
+#X obj 42 622 clip~ -1 1;
+#X obj 42 600 hip~ 1;
+#X obj 275 618 delwrite~ fb_drom 1000;
+#X obj 5 193 delwrite~ a1 1000;
+#X obj 18 171 delwrite~ a2 1000;
+#X obj 383 186 +~;
+#X obj 464 437 +~;
+#X obj 383 164 *~;
+#X obj 464 415 *~;
+#X floatatom 532 -22 5 0 0 1 delay - -;
+#X obj 42 494 *~ 0.7;
+#X text 712 -3 chorus/flange effect;
+#X obj 863 649 unpack f f f f;
+#X floatatom 533 8 10 0 0 0 - - -;
+#X obj 533 35 pack f 200;
+#X obj 383 65 line~;
+#X obj 457 65 line~;
+#X obj 533 65 line~;
+#X obj 290 65 line~;
+#X obj 290 485 clip~ -1 1;
+#X obj 290 516 *~ 0.4;
+#X msg 959 338 0.8 1 0.25 10;
+#X msg 959 360 0.8 2 0.25 10;
+#X msg 959 382 0.8 2 0.5 10;
+#X msg 960 404 0.8 3 0.7 10;
+#X msg 960 426 0.8 4 0.7 10;
+#X msg 960 449 0.8 4 0.8 10;
+#X msg 961 471 0.8 5 0.9 10;
+#X msg 961 494 0.8 6 1 10;
+#X msg 961 516 0.8 7 1 10;
+#X msg 961 539 0.9 9 1 10;
+#X obj 434 520 +~;
+#X obj 32 107 *~ 0.25;
+#X obj 449 491 +~;
+#X obj 464 348 +~ 0.25;
+#X connect 0 0 41 0;
+#X connect 0 0 42 0;
+#X connect 1 0 40 0;
+#X connect 2 0 3 0;
+#X connect 3 0 45 0;
+#X connect 4 0 71 0;
+#X connect 5 0 6 0;
+#X connect 6 0 46 0;
+#X connect 7 0 71 1;
+#X connect 8 0 12 0;
+#X connect 9 0 13 0;
+#X connect 10 0 14 0;
+#X connect 12 0 32 0;
+#X connect 13 0 33 0;
+#X connect 14 0 34 0;
+#X connect 15 0 16 0;
+#X connect 16 0 18 0;
+#X connect 17 0 20 0;
+#X connect 18 0 17 0;
+#X connect 19 0 16 0;
+#X connect 20 0 21 0;
+#X connect 21 0 24 0;
+#X connect 22 0 23 0;
+#X connect 23 0 31 0;
+#X connect 24 0 25 0;
+#X connect 25 0 26 0;
+#X connect 25 0 29 0;
+#X connect 26 0 28 0;
+#X connect 27 0 59 0;
+#X connect 27 1 60 0;
+#X connect 27 2 61 0;
+#X connect 27 3 62 0;
+#X connect 27 4 63 0;
+#X connect 27 5 64 0;
+#X connect 27 6 65 0;
+#X connect 27 7 66 0;
+#X connect 27 8 67 0;
+#X connect 27 9 68 0;
+#X connect 28 0 27 0;
+#X connect 29 0 22 0;
+#X connect 30 0 39 0;
+#X connect 31 0 30 2;
+#X connect 32 0 56 0;
+#X connect 33 0 53 0;
+#X connect 34 0 54 0;
+#X connect 35 0 0 1;
+#X connect 35 0 70 0;
+#X connect 36 0 0 0;
+#X connect 37 0 35 0;
+#X connect 37 0 48 0;
+#X connect 38 0 11 0;
+#X connect 39 0 38 0;
+#X connect 43 0 4 0;
+#X connect 44 0 7 0;
+#X connect 45 0 43 0;
+#X connect 46 0 44 0;
+#X connect 47 0 51 0;
+#X connect 48 0 30 0;
+#X connect 50 0 8 0;
+#X connect 50 1 9 0;
+#X connect 50 2 10 0;
+#X connect 50 3 47 0;
+#X connect 51 0 52 0;
+#X connect 52 0 55 0;
+#X connect 53 0 2 0;
+#X connect 53 0 72 0;
+#X connect 54 0 3 1;
+#X connect 54 0 6 1;
+#X connect 54 0 45 1;
+#X connect 54 0 46 1;
+#X connect 55 0 43 1;
+#X connect 55 0 44 1;
+#X connect 56 0 57 0;
+#X connect 57 0 58 0;
+#X connect 58 0 1 1;
+#X connect 59 0 50 0;
+#X connect 60 0 50 0;
+#X connect 61 0 50 0;
+#X connect 62 0 50 0;
+#X connect 63 0 50 0;
+#X connect 64 0 50 0;
+#X connect 65 0 50 0;
+#X connect 66 0 50 0;
+#X connect 67 0 50 0;
+#X connect 68 0 50 0;
+#X connect 69 0 30 1;
+#X connect 70 0 69 0;
+#X connect 71 0 1 0;
+#X connect 71 0 69 1;
+#X connect 72 0 5 0;
+#X restore 18 403 pd speed;
+#N canvas 300 26 906 644 rescalePitch1 0;
+#X obj 27 120 ftom;
+#X obj 126 18 inlet;
+#X floatatom 27 62 5 0 0 0 - - -;
+#X obj 108 414 % 12;
+#X floatatom 108 436 5 0 0 1 pitch_class - -;
+#X obj -58 220 / 12;
+#X obj -58 242 - 1;
+#X floatatom -58 264 5 0 0 1 register - -;
+#X floatatom -25 220 5 0 0 1 midi_note - -;
+#X obj 27 38 mtof;
+#X floatatom 27 18 5 0 0 0 - - -;
+#X obj -58 330 * 12;
+#X floatatom 154 250 5 0 0 1 mapped_pitch - -;
+#X obj -73 395 +;
+#X floatatom -73 417 5 0 0 0 - - -;
+#X obj -73 436 mtof;
+#X floatatom -73 458 10 0 0 0 - - -;
+#X obj -73 516 outlet;
+#X obj 27 82 int;
+#X floatatom 27 102 5 0 0 0 - - -;
+#X obj -73 495 line;
+#X obj -58 306 int;
+#X text 330 187 based on Todd Winkler's Scale subpatch \, see p. 198
+of Composing Interactive Music \, 2001 paperback 1st ed.;
+#X msg -73 476 \$1 10;
+#X obj 204 47 sel 0 1 2 3 4 5 6 7 8 9 10 11;
+#X text 331 9 c minor scale;
+#X msg 200 100 0;
+#X msg 233 100 2;
+#X msg 266 100 3;
+#X msg 299 100 5;
+#X msg 331 100 7;
+#X msg 364 100 8;
+#X msg 397 100 8;
+#X obj 38 177 t f f;
+#X connect 0 0 8 0;
+#X connect 0 0 33 0;
+#X connect 1 0 2 0;
+#X connect 2 0 18 0;
+#X connect 3 0 4 0;
+#X connect 4 0 24 0;
+#X connect 5 0 6 0;
+#X connect 6 0 7 0;
+#X connect 7 0 21 0;
+#X connect 9 0 2 0;
+#X connect 10 0 9 0;
+#X connect 11 0 13 0;
+#X connect 12 0 13 1;
+#X connect 13 0 14 0;
+#X connect 14 0 15 0;
+#X connect 15 0 16 0;
+#X connect 16 0 23 0;
+#X connect 18 0 19 0;
+#X connect 19 0 0 0;
+#X connect 20 0 17 0;
+#X connect 21 0 11 0;
+#X connect 23 0 20 0;
+#X connect 24 0 26 0;
+#X connect 24 1 26 0;
+#X connect 24 2 27 0;
+#X connect 24 3 28 0;
+#X connect 24 4 28 0;
+#X connect 24 5 29 0;
+#X connect 24 6 29 0;
+#X connect 24 7 30 0;
+#X connect 24 8 30 0;
+#X connect 24 9 31 0;
+#X connect 24 10 31 0;
+#X connect 24 11 32 0;
+#X connect 26 0 12 0;
+#X connect 27 0 12 0;
+#X connect 28 0 12 0;
+#X connect 29 0 12 0;
+#X connect 30 0 12 0;
+#X connect 31 0 12 0;
+#X connect 32 0 12 0;
+#X connect 33 0 5 0;
+#X connect 33 1 3 0;
+#X restore 20 -97 pd rescalePitch1;
+#X connect 0 0 29 2;
+#X connect 1 0 0 0;
+#X connect 2 0 1 0;
+#X connect 3 0 63 0;
+#X connect 4 0 51 0;
+#X connect 5 0 2 0;
+#X connect 6 0 64 0;
+#X connect 7 0 52 0;
+#X connect 9 0 55 1;
+#X connect 10 0 9 0;
+#X connect 11 0 33 2;
+#X connect 11 0 35 2;
+#X connect 11 0 47 2;
+#X connect 11 0 49 2;
+#X connect 12 0 57 2;
+#X connect 12 0 55 2;
+#X connect 13 0 62 0;
+#X connect 14 0 13 0;
+#X connect 15 0 60 0;
+#X connect 16 0 15 0;
+#X connect 17 0 39 0;
+#X connect 18 0 59 0;
+#X connect 19 0 18 0;
+#X connect 20 0 21 1;
+#X connect 21 0 73 0;
+#X connect 22 0 36 0;
+#X connect 23 0 16 0;
+#X connect 24 0 17 0;
+#X connect 25 0 19 0;
+#X connect 26 0 14 0;
+#X connect 27 0 30 0;
+#X connect 28 0 30 1;
+#X connect 29 0 74 0;
+#X connect 30 0 55 0;
+#X connect 31 0 8 0;
+#X connect 31 1 32 0;
+#X connect 33 0 27 0;
+#X connect 34 0 33 0;
+#X connect 34 0 50 0;
+#X connect 35 0 28 0;
+#X connect 36 0 74 1;
+#X connect 37 0 11 0;
+#X connect 38 0 33 1;
+#X connect 38 0 35 1;
+#X connect 38 0 47 1;
+#X connect 38 0 49 1;
+#X connect 39 0 40 0;
+#X connect 40 0 41 0;
+#X connect 41 0 38 0;
+#X connect 42 0 57 1;
+#X connect 43 0 42 0;
+#X connect 44 0 46 0;
+#X connect 45 0 46 1;
+#X connect 46 0 57 0;
+#X connect 47 0 44 0;
+#X connect 48 0 47 0;
+#X connect 48 0 53 0;
+#X connect 49 0 45 0;
+#X connect 50 0 35 0;
+#X connect 51 0 10 0;
+#X connect 52 0 43 0;
+#X connect 53 0 49 0;
+#X connect 54 0 48 0;
+#X connect 55 0 29 0;
+#X connect 56 0 61 0;
+#X connect 57 0 29 1;
+#X connect 58 0 56 0;
+#X connect 59 0 58 0;
+#X connect 60 0 37 0;
+#X connect 61 0 12 0;
+#X connect 62 0 20 0;
+#X connect 63 0 65 0;
+#X connect 64 0 66 0;
+#X connect 65 0 75 0;
+#X connect 66 0 54 0;
+#X connect 67 0 68 0;
+#X connect 68 0 70 0;
+#X connect 69 0 73 1;
+#X connect 70 0 72 0;
+#X connect 70 1 71 0;
+#X connect 71 0 69 0;
+#X connect 72 0 69 0;
+#X connect 73 0 31 0;
+#X connect 74 0 21 0;
+#X connect 75 0 34 0;
+#X restore 239 532 pd proto_drom_________________________________;
+#X obj 627 426 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0
+1;
+#X text 77 -14 Pd patch for protoDrom tutorial 3 by Shawn Greenlee
+;
+#X obj 627 400 r pd_power;
+#X text 77 1 based on Fluxama's DR-OM iOS app;
+#X connect 1 0 0 0;
+#X connect 2 0 1 0;
+#X connect 3 0 25 0;
+#X connect 4 0 25 2;
+#X connect 5 0 25 1;
+#X connect 6 0 25 3;
+#X connect 7 0 25 4;
+#X connect 8 0 25 5;
+#X connect 9 0 25 7;
+#X connect 10 0 25 6;
+#X connect 11 0 25 8;
+#X connect 12 0 25 9;
+#X connect 13 0 0 1;
+#X connect 14 0 13 0;
+#X connect 15 0 3 0;
+#X connect 16 0 5 0;
+#X connect 17 0 4 0;
+#X connect 18 0 6 0;
+#X connect 19 0 7 0;
+#X connect 20 0 8 0;
+#X connect 21 0 10 0;
+#X connect 22 0 9 0;
+#X connect 23 0 11 0;
+#X connect 24 0 12 0;
+#X connect 25 0 2 0;
+#X connect 25 1 14 0;
+#X connect 26 0 25 10;
+#X connect 28 0 26 0;
205 protoDrom_tutorial3/protoDrom_tutorial3.pde
View
@@ -0,0 +1,205 @@
+/**
+ * protoDrom tutorial 3: fully functioning DR-OM prototype
+ * by Shawn Greenlee
+ *
+ * for this example, you will need these libraries:
+ * 1) libPd for Processing (puredataP5) - https://github.com/libpd/puredatap5
+ * 2) controlP5 - http://www.sojamo.de/libraries/controlP5/
+ * 3) oscP5 - http://www.sojamo.de/libraries/oscP5/
+ * consult documentation for these libaries for further info.
+ */
+
+// OK, let's get started...
+
+// first, import the libaries (these need to be installed in your libraries folder)
+
+import org.puredata.processing.PureData;
+import controlP5.*;
+import oscP5.*;
+import netP5.*; // netP5 is included with the oscP5 library
+
+// then, declare variables for the libraries
+
+PureData pd;
+ControlP5 controlP5;
+OscP5 oscP5;
+
+// and we'll need to declare ten floats
+
+float osc1 = 0.16;
+float lfo1 = 0.14;
+float mix = 0.5;
+float osc2 = 0.08;
+float lfo2 = 0.1;
+float speed = 0.1;
+float depth = 0.22;
+float freq = 0.85;
+float res = 0.75;
+float vol = 0.5;
+
+// and a boolean so we have an on/off toggle
+
+boolean power = false;
+
+
+// ok, now we are ready for the setup function
+
+void setup() {
+ size(680, 400);
+ frameRate(25);
+ pd = new PureData(this, 44100, 0, 2); // set sampling rate, input channels, & output channels
+ pd.openPatch("drom_t3.pd"); // open the Pd patch contained in the data folder
+ pd.start(); // get Pd ready
+ controlP5 = new ControlP5(this); // get controlP5 ready
+ oscP5 = new OscP5(this, 8000); // get oscP5 ready and set the incoming port for communication (this is the connection point for your mobile app)
+
+ // while we are here, let's change our colors for controlP5
+
+ controlP5.setColorForeground(#ffffff);
+ controlP5.setColorBackground(#999999);
+ controlP5.setColorLabel(#ffffff);
+ controlP5.setColorValue(#ffffff);
+ controlP5.setColorActive(#ffffff);
+
+ // and we must setup our controls, ten sliders
+
+ Slider osc1 = controlP5.addSlider("osc1", 0, 1, 0.16, 40, 50, 30, 200); // name, range-lo, range-hi, start-val, pos-X, pos-Y, width, height
+ osc1.setSliderMode(Slider.FLEXIBLE); // this gives us a fader-like interface
+
+ Slider lfo1 = controlP5.addSlider("lfo1", 0, 1, 0.14, 100, 50, 30, 200);
+ lfo1.setSliderMode(Slider.FLEXIBLE);
+
+ Slider mix = controlP5.addSlider("mix", 0, 1, 0.5, 160, 50, 30, 200);
+ mix.setSliderMode(Slider.FLEXIBLE);
+
+ Slider osc2 = controlP5.addSlider("osc2", 0, 1, 0.08, 220, 50, 30, 200);
+ osc2.setSliderMode(Slider.FLEXIBLE);
+
+ Slider lfo2 = controlP5.addSlider("lfo2", 0, 1, 0.1, 280, 50, 30, 200);
+ lfo2.setSliderMode(Slider.FLEXIBLE);
+
+ Slider speed = controlP5.addSlider("speed", 0, 1, 0.1, 340, 50, 30, 200);
+ speed.setSliderMode(Slider.FLEXIBLE);
+
+ Slider depth = controlP5.addSlider("depth", 0, 1, 0.22, 400, 50, 30, 200);
+ depth.setSliderMode(Slider.FLEXIBLE);
+
+ Slider freq = controlP5.addSlider("freq", 0, 1, 0.85, 460, 50, 30, 200);
+ freq.setSliderMode(Slider.FLEXIBLE);
+
+ Slider res = controlP5.addSlider("res", 0, 1, 0.75, 520, 50, 30, 200);
+ res.setSliderMode(Slider.FLEXIBLE);
+
+ Slider vol = controlP5.addSlider("vol", 0, 1, 0.5, 580, 50, 30, 200);
+ vol.setSliderMode(Slider.FLEXIBLE);
+
+ // then, one toggle
+
+ controlP5.addToggle("power", false, 40, 300, 40, 20).setMode(ControlP5.SWITCH);
+}
+
+// OK, setup is done
+// now for the draw function which will send the slider values to the Pd patch
+
+void draw() {
+ background(#77896C); // we need to set background color in the draw function, so that the slider values draw correctly, comment out to see the difference
+ pd.sendFloat("pd_osc1", (float)osc1);
+ pd.sendFloat("pd_lfo1", (float)vol);
+ pd.sendFloat("pd_mix", (float)mix);
+ pd.sendFloat("pd_osc2", (float)osc2);
+ pd.sendFloat("pd_lfo2", (float)lfo2);
+ pd.sendFloat("pd_speed", (float)speed);
+ pd.sendFloat("pd_depth", (float)depth);
+ pd.sendFloat("pd_freq", (float)freq);
+ pd.sendFloat("pd_res", (float)res);
+ pd.sendFloat("pd_vol", (float)vol);
+
+ // and get our boolean toggle sent to Pd
+ if (power==true) {
+ pd.sendFloat("pd_power", (0));
+ }
+ else {
+ pd.sendFloat("pd_power", (1));
+ }
+}
+
+
+/**
+ * now to set up OSC communication so that the sliders and toggle can be controlled remotely
+ * you'll need an app capable of sending custom OSC messages, mobile apps like TouchOSC and TB Midi Stuff are good options
+ * send your messages from your mobile app on outgoing port: 8000 (which we determined in the setup function)
+ * don't forget to set the IP address for the host computer on your mobile app
+ */
+
+
+void oscEvent(OscMessage theOscMessage) {
+
+ String addr = theOscMessage.addrPattern();
+ float val1 = theOscMessage.get(0).floatValue();
+
+ if (addr.equals("/drom/osc1")) {
+ osc1 = val1;
+ }
+ controlP5.controller("osc1").setValue(osc1);
+
+ if (addr.equals("/drom/lfo1")) {
+ lfo1 = val1;
+ }
+ controlP5.controller("lfo1").setValue(lfo1);
+
+ if (addr.equals("/drom/mix")) {
+ mix = val1;
+ }
+ controlP5.controller("mix").setValue(mix);
+
+ if (addr.equals("/drom/osc2")) {
+ osc2 = val1;
+ }
+ controlP5.controller("osc2").setValue(osc2);
+
+ if (addr.equals("/drom/lfo2")) {
+ lfo2 = val1;
+ }
+ controlP5.controller("lfo2").setValue(lfo2);
+
+ if (addr.equals("/drom/speed")) {
+ speed = val1;
+ }
+ controlP5.controller("speed").setValue(speed);
+
+ if (addr.equals("/drom/depth")) {
+ depth = val1;
+ }
+ controlP5.controller("depth").setValue(depth);
+
+ if (addr.equals("/drom/freq")) {
+ freq = val1;
+ }
+ controlP5.controller("freq").setValue(freq);
+
+ if (addr.equals("/drom/res")) {
+ res = val1;
+ }
+ controlP5.controller("res").setValue(res);
+
+ if (addr.equals("/drom/vol")) {
+ vol = val1;
+ }
+ controlP5.controller("vol").setValue(vol);
+
+// here's the way for handling the boolean toggle
+
+ if (addr.equals("/drom/power")) {
+ if (val1 == 1) {
+ power = false;
+ controlP5.controller("power").setValue(0);
+ }
+ if (val1 == 0) {
+ power = true;
+ controlP5.controller("power").setValue(1);
+ }
+ }
+}
+
+// if this runs for you, export an application and give it a try
+
BIN  tbms_template/protoDrom.tbms
View
Binary file not shown
Please sign in to comment.
Something went wrong with that request. Please try again.