From 809caa08507fd4958eb6646fec3723cd2a236846 Mon Sep 17 00:00:00 2001 From: Rob Hamilton Date: Thu, 24 Sep 2020 12:05:14 -0400 Subject: [PATCH] adding global MIDI send controls --- hamilr4.pd | 73 ++++++++++++++++++++++++---- masheen.pd | 124 ++++++++++++++++++++++++++++++++++++------------ midi_io.pd | 41 +++++++++++++++- user_keysend.pd | 104 +++++++++++++++++++++++----------------- utilities.pd | 77 ++++++++++++++++++++---------- 5 files changed, 310 insertions(+), 109 deletions(-) diff --git a/hamilr4.pd b/hamilr4.pd index 48a75bb..5ba64d1 100644 --- a/hamilr4.pd +++ b/hamilr4.pd @@ -10,12 +10,12 @@ the second is for data; #X obj 19 58 inlet~; #X obj 79 58 inlet; #X obj 1030 56 receive hamilr4_tempo; -#X obj 1184 56 receive hamilr4_control; +#X obj 1194 56 receive hamilr4_control; #X obj 1030 97 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1 -1; -#X obj 1184 119 list trim; -#X msg 1184 140 hamilr4 key 0 c 99; -#X obj 1184 98 list prepend set; +#X obj 1194 119 list trim; +#X msg 1194 140 hamilr4 key 1 Meta_L 0; +#X obj 1194 98 list prepend set; #X text 1030 0 Two named receives \, one for tempo (receives a "bang" event from the global clock metro) and the other receives a list of control data... this can be any size.; @@ -1786,7 +1786,7 @@ selectring the parent patch for example.; #X obj 933 952 list trim; #X obj 937 221 list prepend set; #X obj 937 245 list trim; -#X msg 937 269 hamilr4 key 0 c 99; +#X msg 937 269 hamilr4 key 1 Meta_L 0; #X obj 800 100 r hamilr4_control; #X text 753 61 Listen for user on/off keyboard output control messages / prefixed with "onoff"; @@ -1797,7 +1797,7 @@ selectring the parent patch for example.; #X text 215 117 Put your username here to send all keystroke messages to your [r username_control] receive - remove "_" to see messages sent to "hamilr4_control"; -#X msg 68 259 hamilr4 key 0 c 99; +#X msg 68 259 hamilr4 key 1 Meta_L 0; #X connect 2 0 4 0; #X connect 2 0 10 0; #X connect 3 0 81 0; @@ -1878,7 +1878,7 @@ to "hamilr4_control"; #X text 1151 198 CONTROL DATA; #X obj 1242 466 receive bilgeh_control; #X obj 1239 503 print; -#X obj 417 472 class_3; +#X obj 277 443 class_3; #N canvas 0 23 960 1031 data_parsing 0; #X obj 259 124 textfile; #X obj 259 81 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1 @@ -1897,7 +1897,7 @@ to "hamilr4_control"; #X obj 167 353 r student_1; #X obj 39 134 unpack s s; #X msg 167 376 set \$1; -#X msg 167 399 bilge; +#X msg 167 399 bilgeh; #X msg 218 275 \; channelstrip_1 label test; #X floatatom 244 320 5 0 0 2 - channelstrip_1 -; #X symbolatom 155 252 10 0 0 0 - - -; @@ -1922,6 +1922,37 @@ to "hamilr4_control"; #X connect 14 0 15 0; #X connect 14 0 18 0; #X restore 215 397 pd data_parsing; +#X obj 580 543 r hamilr4_midi; +#X obj 600 590 list trim; +#X msg 600 611 hamilr4 midi key 1 54 38 0; +#X obj 600 569 list prepend set; +#X obj 580 687 route hamilr4; +#X obj 580 711 route midi; +#X obj 580 755 route key; +#X obj 760 755 route ctl; +#X obj 609 797 list trim; +#X msg 609 818 1 54 38 0; +#X obj 609 776 list prepend set; +#X obj 580 662 list trim; +#X obj 790 797 list trim; +#X msg 790 818 1 58 57 0; +#X obj 790 776 list prepend set; +#X obj 580 849 unpack f f f f; +#X obj 760 849 unpack f f f; +#X floatatom 580 873 5 0 0 0 - - -; +#X floatatom 620 873 5 0 0 0 - - -; +#X floatatom 660 873 5 0 0 0 - - -; +#X floatatom 700 873 5 0 0 0 - - -; +#X floatatom 760 873 5 0 0 0 - - -; +#X floatatom 800 873 5 0 0 0 - - -; +#X floatatom 840 873 5 0 0 0 - - -; +#X text 887 872 Value \, Ctl \, Channel; +#X text 542 493 NEW MIDI PARSING EXAMPLE; +#X obj 1373 57 r hamilr4_midi; +#X obj 1373 118 list trim; +#X msg 1373 139 hamilr4 midi key 1 54 38 0; +#X obj 1373 97 list prepend set; +#X text 325 874 Channel \, Key \, Velocity \, Aftertouch; #X connect 7 0 9 0; #X connect 8 0 12 0; #X connect 10 0 11 0; @@ -1937,4 +1968,30 @@ to "hamilr4_control"; #X connect 36 0 38 0; #X connect 39 0 37 0; #X connect 41 0 42 0; +#X connect 45 0 48 0; +#X connect 45 0 56 0; +#X connect 46 0 47 0; +#X connect 48 0 46 0; +#X connect 49 0 50 0; +#X connect 50 0 51 0; +#X connect 50 0 52 0; +#X connect 51 0 55 0; +#X connect 51 0 60 0; +#X connect 52 0 59 0; +#X connect 52 0 61 0; +#X connect 53 0 54 0; +#X connect 55 0 53 0; +#X connect 56 0 49 0; +#X connect 57 0 58 0; +#X connect 59 0 57 0; +#X connect 60 0 62 0; +#X connect 60 1 63 0; +#X connect 60 2 64 0; +#X connect 60 3 65 0; +#X connect 61 0 66 0; +#X connect 61 1 67 0; +#X connect 61 2 68 0; +#X connect 71 0 74 0; +#X connect 72 0 73 0; +#X connect 74 0 72 0; #X coords 0 980 1 979 200 200 0; diff --git a/masheen.pd b/masheen.pd index 719bae2..f3d6e8d 100644 --- a/masheen.pd +++ b/masheen.pd @@ -143,7 +143,6 @@ #X coords 0 -1 1 1 220 60 2 100 100; #X restore 1263 1 pd masheen_global_tempo; #X obj 1483 1 dsp_onoff; -#X text 1511 88 Key Sends; #N canvas 384 54 666 989 keyboard-examples 0; #X obj 93 168 list trim; #X msg 93 189 username key 1 Meta_L 0; @@ -271,28 +270,28 @@ files).; #X connect 17 0 0 0; #X connect 18 0 1 0; #X restore 1086 695 pd sample_keyboard_local_sends; -#X obj 1492 150 user_keysend bilgeh; -#X obj 1492 169 user_keysend boller; -#X obj 1492 188 user_keysend corres2; -#X obj 1492 226 user_keysend golubm; -#X obj 1492 245 user_keysend johnsa23; -#X obj 1492 264 user_keysend krantm; -#X obj 1492 283 user_keysend lillij2; -#X obj 1492 302 user_keysend liuz18; -#X obj 1492 321 user_keysend lockwa; -#X obj 1492 340 user_keysend mcneee; -#X obj 1492 359 user_keysend mejiak; -#X obj 1492 397 user_keysend olynia; -#X obj 1492 416 user_keysend paris; -#X obj 1492 435 user_keysend powerj7; -#X obj 1492 454 user_keysend sabary; -#X obj 1492 473 user_keysend smelcg; -#X obj 1492 490 user_keysend stansj; -#X obj 1492 509 user_keysend thompj17; -#X obj 1492 207 user_keysend fallit; +#X obj 1462 150 user_keysend bilgeh; +#X obj 1462 169 user_keysend boller; +#X obj 1462 188 user_keysend corres2; +#X obj 1462 226 user_keysend golubm; +#X obj 1462 245 user_keysend johnsa23; +#X obj 1462 264 user_keysend krantm; +#X obj 1462 283 user_keysend lillij2; +#X obj 1462 302 user_keysend liuz18; +#X obj 1462 321 user_keysend lockwa; +#X obj 1462 340 user_keysend mcneee; +#X obj 1462 359 user_keysend mejiak; +#X obj 1462 397 user_keysend olynia; +#X obj 1462 416 user_keysend paris; +#X obj 1462 435 user_keysend powerj7; +#X obj 1462 454 user_keysend sabary; +#X obj 1462 473 user_keysend smelcg; +#X obj 1462 490 user_keysend stansj; +#X obj 1462 509 user_keysend thompj17; +#X obj 1462 207 user_keysend fallit; #X text -105 11 [ARTS 2020] FALL 2020 "MASHEEN"; -#X obj 1492 378 user_keysend nelsoc5; -#X obj 1492 133 user_keysend hamilr4; +#X obj 1462 378 user_keysend nelsoc5; +#X obj 1462 133 user_keysend hamilr4; #X obj -67 609 throw~ username_audio_1; #X obj -83 89 bilgeh; #X obj -83 112 boller; @@ -324,13 +323,76 @@ files).; -1 -1 0 1; #X obj 754 36 / 1270; #X obj 804 77 lop~ 5000; -#X connect 58 0 59 0; -#X connect 58 1 60 0; -#X connect 59 0 65 0; -#X connect 60 0 57 1; -#X connect 61 0 64 0; -#X connect 62 0 59 1; -#X connect 62 0 60 1; +#X text 1452 102 Key/MIDI Sends; +#N canvas 0 23 1014 681 midi-examples 0; +#X obj 326 248 list trim; +#X msg 326 269 username midi key 1 61 37 0; +#X obj 326 227 list prepend set; +#X obj 306 369 route midi; +#X obj 306 413 route key; +#X obj 486 413 route ctl; +#X obj 335 455 list trim; +#X msg 335 476 1 61 37 0; +#X obj 335 434 list prepend set; +#X obj 306 320 list trim; +#X obj 516 455 list trim; +#X msg 516 476 1 58 57 0; +#X obj 516 434 list prepend set; +#X obj 306 507 unpack f f f f; +#X obj 486 507 unpack f f f; +#X floatatom 306 531 5 0 0 0 - - -; +#X floatatom 346 531 5 0 0 0 - - -; +#X floatatom 386 531 5 0 0 0 - - -; +#X floatatom 426 531 5 0 0 0 - - -; +#X floatatom 486 531 5 0 0 0 - - -; +#X floatatom 526 531 5 0 0 0 - - -; +#X floatatom 566 531 5 0 0 0 - - -; +#X text 613 530 Value \, Ctl \, Channel; +#X text 68 36 NEW MIDI PARSING EXAMPLE; +#X text 51 532 Channel \, Key \, Velocity \, Aftertouch; +#X text 72 91 MIDI parsing is handled globally \, like with keyboard +data. If the checkbox for a given named send is checked on the main +Masheen page \, then MIDI will be sent to that user's named send.; +#X text 70 167 Key/MIDI Sends; +#X text 451 312 Here you can see how to break apart the MIDI message. +On the left \, MIDI key data \, such as channel \, key number \, velocity +and after-touch are parsed out. On the right \, control data (such +as the turning of a knob or press of a button on the midi controller) +are extracted.; +#X obj 75 205 user_keysend username; +#X obj 306 201 r username_midi; +#X obj 306 345 route username; +#X connect 0 0 1 0; +#X connect 2 0 0 0; +#X connect 3 0 4 0; +#X connect 3 0 5 0; +#X connect 4 0 8 0; +#X connect 4 0 13 0; +#X connect 5 0 12 0; +#X connect 5 0 14 0; +#X connect 6 0 7 0; +#X connect 8 0 6 0; +#X connect 9 0 30 0; +#X connect 10 0 11 0; +#X connect 12 0 10 0; +#X connect 13 0 15 0; +#X connect 13 1 16 0; +#X connect 13 2 17 0; +#X connect 13 3 18 0; +#X connect 14 0 19 0; +#X connect 14 1 20 0; +#X connect 14 2 21 0; +#X connect 29 0 2 0; +#X connect 29 0 9 0; +#X connect 30 0 3 0; +#X restore 1302 675 pd midi-examples; +#X connect 57 0 58 0; +#X connect 57 1 59 0; +#X connect 58 0 64 0; +#X connect 59 0 56 1; +#X connect 60 0 63 0; +#X connect 61 0 58 1; +#X connect 61 0 59 1; +#X connect 62 0 60 0; #X connect 63 0 61 0; -#X connect 64 0 62 0; -#X connect 65 0 57 0; +#X connect 64 0 56 0; diff --git a/midi_io.pd b/midi_io.pd index 532db2d..0aba945 100644 --- a/midi_io.pd +++ b/midi_io.pd @@ -110,7 +110,7 @@ #X floatatom 203 137 5 0 0 0 - - -; #X floatatom 174 56 5 0 0 0 - - -; #X floatatom 243 137 5 0 0 0 - - -; -#N canvas 324 92 686 486 input_data_______________ 0; +#N canvas 340 319 686 486 input_data_______________ 0; #X obj 188 92 stripnote; #X floatatom 188 116 5 0 0 0 - - -; #X floatatom 247 115 5 0 0 0 - - -; @@ -216,6 +216,27 @@ #X text 381 120 chan; #X obj 467 80 outlet; #X obj 466 50 pack f f f; +#X obj 689 243 pack f s; +#X obj 689 279 list append; +#X obj 689 310 list prepend key; +#X obj 689 338 list prepend \$1; +#X obj 689 429 s \$1_control; +#X obj 782 429 outlet; +#X obj 689 369 gate; +#X obj 897 349 tgl 18 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 +1; +#X obj 834 345 inlet; +#X symbolatom 915 349 10 0 0 0 - - -; +#X obj 916 243 loadbang; +#X obj 916 272 list prepend \$1; +#X obj 916 322 list trim; +#X obj 916 296 list prepend set; +#X obj 689 179 r global_keyname_L; +#X obj 742 201 r global_keyname_R; +#X obj 763 223 r global_keyup; +#X obj 773 245 r global_key; +#X obj 3 163 s global_midi_key; +#X obj 448 110 s global_midi_ctl; #X connect 0 0 1 0; #X connect 0 1 1 1; #X connect 1 0 2 0; @@ -290,6 +311,7 @@ #X connect 87 0 86 0; #X connect 87 1 84 2; #X connect 94 0 95 0; +#X connect 94 0 161 0; #X connect 94 1 89 0; #X connect 94 2 90 0; #X connect 94 3 91 0; @@ -332,4 +354,21 @@ #X connect 136 2 135 0; #X connect 136 2 142 2; #X connect 142 0 141 0; +#X connect 142 0 162 0; +#X connect 143 0 144 0; +#X connect 144 0 145 0; +#X connect 145 0 146 0; +#X connect 146 0 149 0; +#X connect 149 0 147 0; +#X connect 149 1 148 0; +#X connect 150 0 149 1; +#X connect 151 0 149 1; +#X connect 153 0 154 0; +#X connect 154 0 156 0; +#X connect 155 0 152 0; +#X connect 156 0 155 0; +#X connect 157 0 143 0; +#X connect 158 0 143 1; +#X connect 159 0 144 1; +#X connect 160 0 144 1; #X coords 0 -1 1 1 340 60 2 100 100; diff --git a/user_keysend.pd b/user_keysend.pd index 03a39d9..076ea42 100644 --- a/user_keysend.pd +++ b/user_keysend.pd @@ -1,46 +1,64 @@ -#N canvas 440 123 641 397 12; -#X obj -94 -165 key; -#X floatatom -94 -139 5 0 0 0 - - -; -#X obj -139 -165 keyup; -#X floatatom -139 -139 5 0 0 0 - - -; -#X obj -266 -166 keyname; -#X text -18 -167 key: 119 keyname_s: symbol w keyname: 1 keyup: 119 -keyname_s: symbol w keyname: 0; -#X obj -207 -106 pack f s; -#X obj -207 -70 list append; -#X obj -207 -39 list prepend key; -#X obj -207 -11 list prepend \$1; -#X obj -207 80 s \$1_control; -#X symbolatom -220 -140 10 0 0 0 - - -; -#X floatatom -266 -140 5 0 0 0 - - -; -#X text -283 -210 SEND KEYSTROKE DATA TO EACH USER'S UNIQUE SEND; -#X obj -114 80 outlet; -#X obj -207 20 gate; +#N canvas 440 123 1109 508 12; +#X obj -207 -79 pack f s; +#X obj -207 -43 list append; +#X obj -207 -12 list prepend key; +#X obj -207 16 list prepend \$1; +#X obj -207 137 s \$1_control; +#X text -262 -183 SEND KEYSTROKE DATA TO EACH USER'S UNIQUE SEND; +#X obj -114 137 outlet; +#X obj -207 77 gate; #X obj 1 0 tgl 18 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 1; -#X obj -62 1 inlet; -#X symbolatom 19 0 10 0 0 0 - - -; -#X obj 20 -106 loadbang; -#X obj 20 -77 list prepend \$1; -#X obj 20 -27 list trim; -#X obj 20 -53 list prepend set; +#X obj -182 41 inlet; +#X symbolatom 39 0 10 0 0 0 - - -; +#X obj 40 -106 loadbang; +#X obj 40 -77 list prepend \$1; +#X obj 40 -27 list trim; +#X obj 40 -53 list prepend set; +#X obj -207 -143 r global_keyname_L; +#X obj -154 -121 r global_keyname_R; +#X obj -133 -99 r global_keyup; +#X obj -123 -77 r global_key; +#X obj 368 79 outlet; +#X obj 275 19 gate; +#X obj 20 0 tgl 18 0 empty empty empty 17 7 0 10 -262144 -1 -1 1 1 +; +#X obj 300 -33 inlet; +#X obj 274 -61 list prepend \$1; +#X obj 274 -110 list prepend key; +#X obj 275 79 s \$1_midi; +#X obj 273 -133 r global_midi_key; +#X obj 407 -134 r global_midi_ctl; +#X text 245 -182 SEND GLOBAL MIDI TO EACH USER'S UNIQUE SEND; +#X obj 407 -109 list prepend ctl; +#X obj 407 -59 list prepend \$1; +#X obj 274 -86 list prepend midi; +#X obj 407 -84 list prepend midi; #X connect 0 0 1 0; -#X connect 1 0 7 1; +#X connect 1 0 2 0; #X connect 2 0 3 0; -#X connect 3 0 7 1; -#X connect 4 0 12 0; -#X connect 4 1 11 0; -#X connect 6 0 7 0; -#X connect 7 0 8 0; -#X connect 8 0 9 0; -#X connect 9 0 15 0; -#X connect 11 0 6 1; -#X connect 12 0 6 0; -#X connect 15 0 10 0; -#X connect 15 1 14 0; -#X connect 16 0 15 1; -#X connect 17 0 15 1; -#X connect 19 0 20 0; -#X connect 20 0 22 0; -#X connect 21 0 18 0; -#X connect 22 0 21 0; -#X coords 0 -1 1 1 91 18 2 0 0; +#X connect 3 0 7 0; +#X connect 7 0 4 0; +#X connect 7 1 6 0; +#X connect 8 0 7 1; +#X connect 9 0 7 1; +#X connect 11 0 12 0; +#X connect 12 0 14 0; +#X connect 13 0 10 0; +#X connect 14 0 13 0; +#X connect 15 0 0 0; +#X connect 16 0 0 1; +#X connect 17 0 1 1; +#X connect 18 0 1 1; +#X connect 20 0 25 0; +#X connect 20 1 19 0; +#X connect 21 0 20 1; +#X connect 22 0 20 1; +#X connect 23 0 20 0; +#X connect 24 0 31 0; +#X connect 26 0 24 0; +#X connect 27 0 29 0; +#X connect 29 0 32 0; +#X connect 30 0 20 0; +#X connect 31 0 23 0; +#X connect 32 0 30 0; +#X coords 0 -1 1 1 111 18 2 0 0; diff --git a/utilities.pd b/utilities.pd index 071656d..32551d8 100644 --- a/utilities.pd +++ b/utilities.pd @@ -1,30 +1,30 @@ #N canvas 560 123 777 652 12; -#X msg 235 77 60000 \$1; -#X obj 235 101 /; -#X floatatom 235 125 10 0 0 0 - - -; -#X floatatom 235 50 5 0 0 0 - - -; -#X text 20 47 Convert BPM to milliseconds; -#X obj 362 80 expr 60000/$f1; -#X floatatom 362 124 10 0 0 0 - - -; -#X text 281 49 bpm; -#X text 311 125 ms; -#X text 438 124 ms; -#X obj 513 102 bpmtoms; -#X floatatom 513 157 5 0 0 0 - - -; -#X floatatom 513 73 5 0 0 0 - - -; -#X text 555 158 ms; -#X text 273 241 Put your username here to send all keystroke messages +#X msg 235 257 60000 \$1; +#X obj 235 281 /; +#X floatatom 235 305 10 0 0 0 - - -; +#X floatatom 235 230 5 0 0 0 - - -; +#X text 20 227 Convert BPM to milliseconds; +#X obj 362 260 expr 60000/$f1; +#X floatatom 362 304 10 0 0 0 - - -; +#X text 281 229 bpm; +#X text 311 305 ms; +#X text 438 304 ms; +#X obj 513 282 bpmtoms; +#X floatatom 513 337 5 0 0 0 - - -; +#X floatatom 513 253 5 0 0 0 - - -; +#X text 555 338 ms; +#X text 273 381 Put your username here to send all keystroke messages to your [r username_control] receive; -#X obj 57 362 list trim; -#X msg 57 383 your_username_here key 1 Meta_L 0; -#X obj 57 341 list prepend set; -#X obj 58 245 keycontrol your_username_here; -#X obj 57 299 receive your_username_here_control; -#X obj 59 484 mouse_osx; -#X text 26 455 MOUSE CONTROLLER - OSX VERSION; -#X text 25 542 MOUSE CONTROLLER - WINDOWS (use the "hidio" external) +#X obj 57 502 list trim; +#X msg 57 523 your_username_here key 0 ?? 0; +#X obj 57 481 list prepend set; +#X obj 58 385 keycontrol your_username_here; +#X obj 57 439 receive your_username_here_control; +#X obj 59 624 mouse_osx; +#X text 26 595 MOUSE CONTROLLER - OSX VERSION; +#X text 25 682 MOUSE CONTROLLER - WINDOWS (use the "hidio" external) ; -#X text 22 209 OLD - KEYBOARD CONTROLLER - THIS GOES INTO YOUR SUBPATCHES +#X text 22 349 OLD - KEYBOARD CONTROLLER - THIS GOES INTO YOUR SUBPATCHES ; #N canvas 0 23 450 300 osc_receive_touchOSC 0; #X obj 355 371 oscparse; @@ -69,8 +69,25 @@ to your [r username_control] receive; #X connect 18 0 19 0; #X connect 18 1 20 0; #X connect 21 0 0 0; -#X restore 539 572 pd osc_receive_touchOSC; -#X text 534 540 OSC WITH INTEGERS IN NAMESPACE; +#X restore 539 712 pd osc_receive_touchOSC; +#X text 534 680 OSC WITH INTEGERS IN NAMESPACE; +#X obj 265 45 key; +#X floatatom 265 71 5 0 0 0 - - -; +#X obj 220 45 keyup; +#X floatatom 220 71 5 0 0 0 - - -; +#X obj 93 44 keyname; +#X symbolatom 139 70 10 0 0 0 - - -; +#X floatatom 93 70 5 0 0 0 - - -; +#X text 26 9 GLOBAL KEYBOARD SENDS - this sends to each named channel +; +#X obj 452 16 r global_keyname_L; +#X obj 462 38 r global_keyname_R; +#X obj 472 60 r global_keyup; +#X obj 482 82 r global_key; +#X obj 93 184 s global_keyname_L; +#X obj 140 158 s global_keyname_R; +#X obj 220 131 s global_keyup; +#X obj 265 105 s global_key; #X connect 0 0 1 0; #X connect 1 0 2 0; #X connect 3 0 0 0; @@ -82,3 +99,11 @@ to your [r username_control] receive; #X connect 15 0 16 0; #X connect 17 0 15 0; #X connect 19 0 17 0; +#X connect 26 0 27 0; +#X connect 27 0 41 0; +#X connect 28 0 29 0; +#X connect 29 0 40 0; +#X connect 30 0 32 0; +#X connect 30 1 31 0; +#X connect 31 0 39 0; +#X connect 32 0 38 0;