diff --git a/images/screenshot.png b/images/screenshot.png new file mode 100644 index 0000000..5e6731e Binary files /dev/null and b/images/screenshot.png differ diff --git a/images/tbmidistuff_protodrom.png b/images/tbmidistuff_protodrom.png new file mode 100644 index 0000000..9ae6738 Binary files /dev/null and b/images/tbmidistuff_protodrom.png differ diff --git a/protoDrom_tutorial1/data/drom_t1.pd b/protoDrom_tutorial1/data/drom_t1.pd new file mode 100644 index 0000000..ffc3be0 --- /dev/null +++ b/protoDrom_tutorial1/data/drom_t1.pd @@ -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; diff --git a/protoDrom_tutorial1/protoDrom_tutorial1.pde b/protoDrom_tutorial1/protoDrom_tutorial1.pde new file mode 100644 index 0000000..36d3da0 --- /dev/null +++ b/protoDrom_tutorial1/protoDrom_tutorial1.pde @@ -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 + diff --git a/protoDrom_tutorial2/data/drom_t2.pd b/protoDrom_tutorial2/data/drom_t2.pd new file mode 100644 index 0000000..0b4e92a --- /dev/null +++ b/protoDrom_tutorial2/data/drom_t2.pd @@ -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; diff --git a/protoDrom_tutorial2/protoDrom_tutorial2.pde b/protoDrom_tutorial2/protoDrom_tutorial2.pde new file mode 100644 index 0000000..bfda2d2 --- /dev/null +++ b/protoDrom_tutorial2/protoDrom_tutorial2.pde @@ -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... + diff --git a/protoDrom_tutorial3/data/drom_t3.pd b/protoDrom_tutorial3/data/drom_t3.pd new file mode 100644 index 0000000..60281ae --- /dev/null +++ b/protoDrom_tutorial3/data/drom_t3.pd @@ -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; diff --git a/protoDrom_tutorial3/protoDrom_tutorial3.pde b/protoDrom_tutorial3/protoDrom_tutorial3.pde new file mode 100644 index 0000000..fdd3c1f --- /dev/null +++ b/protoDrom_tutorial3/protoDrom_tutorial3.pde @@ -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 + diff --git a/tbms_template/protoDrom.tbms b/tbms_template/protoDrom.tbms new file mode 100644 index 0000000..f416ee6 Binary files /dev/null and b/tbms_template/protoDrom.tbms differ