From 22cfa83a42097833c3f6caa7121ff48f96677437 Mon Sep 17 00:00:00 2001
From: Ivica Ico Bukvic <ico@vt.edu>
Date: Sun, 21 Jul 2013 14:14:26 -0400
Subject: [PATCH] finished importing the remainder of new K12 module
 abstractions, updated GUI to reflect them, improved key press capture,
 reformatted GUI object menu inside K12 mode to allow for more space

---
 l2ork_addons/K12/icons/data-sound.xcf | Bin 0 -> 9170 bytes
 l2ork_addons/K12/icons/data.png       | Bin 0 -> 1401 bytes
 l2ork_addons/K12/icons/data_on.png    | Bin 0 -> 1483 bytes
 l2ork_addons/K12/icons/sound.png      | Bin 0 -> 1493 bytes
 l2ork_addons/K12/icons/sound_on.png   | Bin 0 -> 1757 bytes
 l2ork_addons/K12/logic_mapper-help.pd |  26 ++--
 pd/src/pd.tk                          | 201 +++++++++++++++++++++-----
 7 files changed, 175 insertions(+), 52 deletions(-)
 create mode 100644 l2ork_addons/K12/icons/data-sound.xcf
 create mode 100644 l2ork_addons/K12/icons/data.png
 create mode 100644 l2ork_addons/K12/icons/data_on.png
 create mode 100644 l2ork_addons/K12/icons/sound.png
 create mode 100644 l2ork_addons/K12/icons/sound_on.png

diff --git a/l2ork_addons/K12/icons/data-sound.xcf b/l2ork_addons/K12/icons/data-sound.xcf
new file mode 100644
index 0000000000000000000000000000000000000000..4b4e9866212d81c7b8709259a76e21286ae5b834
GIT binary patch
literal 9170
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
H4~KsNnxM~f

literal 0
HcmV?d00001

diff --git a/l2ork_addons/K12/icons/data.png b/l2ork_addons/K12/icons/data.png
new file mode 100644
index 0000000000000000000000000000000000000000..a25fa64a04577c123c989d7195bdfdaf2f11adbd
GIT binary patch
literal 1401
zcmV-<1%~>GP)<h;3K|Lk000e1NJLTq002<{000#T1^@s6K1Kpe00001b5ch_0Itp)
z=>Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2i*r1
z5dtPkOz_kI00j9-L_t(o!|j)ENR?+8#((#7&N0ui(?6_;X=Jpy1p6=t2bTNSi1JG{
zu(dKA5iVjx2)Qo~>O(k}jApP#ThRwuWQAY)(1f*U!<wg3Czje2+T0&2>Cic6rq1`h
z_vMjJYFf4!jdQ^R=e^(Ox$pP6&h_5c^NOk#lEf3iBq>Oem?SYtViNaBR8_IR6;M@u
zqJ)m)h=`oD<Am4iJr)QAzRb+bEMK!`O+jmGYuZHXH*DDORwxuIPK+&IzPu<Q=eT44
z{{2f5*9;8}NqTzvCrwRF!KcKXT3|%vrmDsP2k?rBs4A}Os%2ECSYW-Xz7vbZHlI6p
zZdXxJ(dq8)?#21}`5#wQRJ=IeqPn`e`QdQ*<({6N#kIAy3r6A%4Gmx0eCt(peMUw`
zOL1}Wfy7v8X=zttuB}_Qz8Z_g=2uo$hT`$K=ieY~L}XTYUJ)4<k%$qI?|~~oC(xs+
zw^cPRB94f701xnhS|5j4zu)hMLZN77Wo7H-%a^~{xN+mLef#!pyL9Q&7=_f=*Jl}H
zhI4XqT8|t#5_*zdpE+};proYa^YiD=zaEK1yi-t^+6z%tkBE2yM?~Txatr7I+Ew*}
z0Wikg7Lj%lxga7JMdT--9q0mn1^QI=FPqn^sw2e8163z!1%AKZ-M)Q$TXuGKb6Hv0
zs>FMZjg2!pJ3BL$EnC)>mzUQai9}{MHa5<f3W0m}?8%uqbLO4hyLYz)0)g0}Lx-Ms
z97o2yhxf%GmMo*HKD)nRAO`dSzW_f2*MMeKy=b|*Zj8A%##lsT&=~WlF{V>QnndJB
zRlOo2%|M%~wu?wNa7$Gqs@iW2%4d~p5=?81g0r);`}6YhI=Z{NmnPOdefspm-rn8?
zJ9g{{uUoh7MoLP`Ky`KXOOGg>ks7Y5YE4Z|!OE2@f0#RW?(n8fo9d4rKfXE|jgFAx
z6%n6(KF5mV4sa8=AtKjAq#bAjT7V{FOrz!Ex`^B~#tbFae<Yb3W1>J5=ml_HS43pG
zh@=41fHc4di0irmyRkk?st-s7QULM${bXfj#p3b!Y*qCF+Sk|Ty?XWP!eB7izhcFT
zyMWG{H}7soN5_(AG};gh28TsNtYTC|#Ow7Ywi;1YM1-?v&(4m=<FgA33tNE5-o1Oj
ztFEqo@9^QnZdqB`bzlfk5pjS)5gAa`L10)!`fdEN;GL4C8>3e0V-OC9eU`*#z}SC%
znyUH|=C}g`1NVS75%E-2Rpm4{H_uwTc5NN-hpI|$ZtlhQ_V(2~ckX=d=+UE%s_NRF
z<iz9g{;saB->q645gE2-C|kB{*%b^1Yy12A8-Tlj>+|^zmY0|3hr{8Mr%s)6cm^PV
zJHdSq@HS9yRqaVlO)WCUoOE5+?>J7H<2ch@*9`^&flmX0z-O-OPFK}5*L71>HAO_~
zjWL@aa_(&cUKkahZr`Fg&&t_zG7{$iRlrB~Is-T{%J~z=IUsjbj&FdXadH<~BY0S@
z5C0EeEFR!Zpa3{%V@rWqwr|R)kz$+ssz=QK0q|~usU?m~;Qgt#u>YDw50DP51ik_)
zfD+)2Rb>bW1B2tN{o9h52`rkV&KuTYJ0Eh6{SCNkTgfv)qKq6lfH=?!>;jrCX&3Fh
zMZhaS%>=o=weJ7gBsI4IXMo!i%sBv*CcpNRNFs?Oo*w=Ip?q=(Lz`Un00000NkvXX
Hu0mjftgW5Z

literal 0
HcmV?d00001

diff --git a/l2ork_addons/K12/icons/data_on.png b/l2ork_addons/K12/icons/data_on.png
new file mode 100644
index 0000000000000000000000000000000000000000..c283677b4ef6e520397bed527aa24aae1bfe46ec
GIT binary patch
literal 1483
zcmV;+1vL7JP)<h;3K|Lk000e1NJLTq002<{000#T1^@s6K1Kpe00001b5ch_0Itp)
z=>Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2i*r1
z5h51(5#-tc00m1)L_t(o!|j+`Y!p=($A4#Lw%vAHd!dwS16UvhDNslWfr1trOGtPC
zd_X`Ym>BSZ2cr+@3#KGUH1W9=R3yZB2{9rBv|NHzZY>lF_Ci_cb$f4jm)&-|mzm?k
zY?opwP{4;K`+u34Gw1r7|9t105#B?)B~d+-lqiBI#3;ll#Hb?D5CY`$-CGjg-4!{H
zwP>W+;>ekr&gzA;*|a>DWLw;rZNEQzm4@~nKHt1LQuf&|C;94V`6I{tt9UzkGcqIB
zQc7OkRm$%>x00F=_y5q75`;jLUME;$5n3!lvw$>^Qr-tE#8dU}J+vDD!;th3405Bn
zgP$+lq_pf3rQ6<QS@yJ1Z5q3s9IvX!<MVT;vyYh>lK?2*P(<;DqDZ~9Umj%B@`Y?%
zo;&9FKb^0psoTks${My5<e@6!xd0nxB7}kr1&~8N6ut2u42K<~rxnB1gW+`}{XUQe
zLQxSyL5QcHfT9S}5^WUDn?=d{>nPq(#Ex%|(B~N(RkymS9gC_^IDZyLDr=u<%_U`*
zDBZT6AIh&02!+NEY@~^Vf>1Ru3<wM%y)KhgcME!REgFCva3crYW+T;th)+bs#zTzN
zY-|a;)DnwOHKddXWaPDZQr9Yqpde=k74}y4ox04Y>tB!D>-7v!=jf&&XC^bJr1EF=
zZF)Teq$S$M4e;-}CNd`_QIwm_p>tJK*jp)>JL5q}Bjzi_@M?rvCJhLMAQV9AK?wRW
zbR7ad<j?@p=LJ19A}0P<dJyU9M|%42m&L{-EU^fy4K#}hGR6w3W<rj!nonyODj<Xc
z$jJ4ulH#l^&7Q_Lrz;;QuW9YV-r2|2m5b3-h4Q*a{<zk_JFhJopM!vsvWvWxpNrL^
z@xiKP>^oIK{+ui<nu<V#s~Vu|5DH-EA<#p}Pyj+fkP;d6o6v#*@DDy_V|fz!2a*0k
zq}O@BEG7=2X{K|-KtX^d#*BpnZiJ$Os)80{!WIHmg^ZLWI-DL*R6ybnhNyG&lA2)S
zrPL%ql97@`RilHAD;A=uin(|p!Vg85p+-?nAj6IV+WK5{y1XpS%0T+OtjtQ|qm~Zt
z*zIJeC72FFf?<SR7IvGiL(p%!aNN7|(<<OY2EqmyX$E0tO?vwsgd#xEK(m-I!wU8E
zAoL(cR}&~I_3i!C*c*9!*<1`yA0SwgnZ)guHqKODrzj`ObdF(|8(&}u!`+MC*<>!-
z(2<yMOO9V*{hTS-oUQ0?({b<RX0rc8IeQDUdDi{q`9d5^hHf5*ygV#%(hW&hdpA?8
z3Px8m2!;Av9XR{@SZwv7JM16?3pBy60WW8--lQ-^4+ne0JO+G7cMnGQgVQ&p<V<Zd
z->qFhoZk}}e@jj}i@t8)ll&}F;w%#Y;$w8rAELtHB7bT!01o#cN9#NJ?N%4bdyb8&
zzhY_%HI5!~CMQ0&@58m7wB8$H@&5A<y??N}jSrV*O>Bs|AvxF5&&j*JoY=esfQG&S
zT>c<kAHPAY_TUFpP&e3hwt>@k`<@8m{;C!ZtX)9C^wd#lnd9CNYksU`$CBx2iZZbv
z>W0KM6y!#ihr@LpTxxSsvSuDBaTc7uAXhqE<h__Q3Lt<*RhXZiNOhNoX19;&Nn?L`
zl(+PgZi``7s_mh9ZRQJBUP(*fSVK4K=44C^h{<1+nc0!5kZjeMJ2{cnvnI2ra5l+S
zGcGl|eOz|9*;_b!%zjqBJc)~KE-th>9|`fm^)`xTOeQUU?3lMbZyI~b?av*eaP3?b
l{V5y$ixY(yg&38oe*u=}N_j~;Lka)@002ovPDHLkV1m0it3dz&

literal 0
HcmV?d00001

diff --git a/l2ork_addons/K12/icons/sound.png b/l2ork_addons/K12/icons/sound.png
new file mode 100644
index 0000000000000000000000000000000000000000..a90a95cd9480455153b64085326a6493e1809eb1
GIT binary patch
literal 1493
zcmV;`1uFW9P)<h;3K|Lk000e1NJLTq002?|000#T1^@s6)p5B`00001b5ch_0Itp)
z=>Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2i*r1
z5d|}7(1Q2?00mV^L_t(o!|j-VOw?r@$KRjt-Ent<GKNehq+aGlsT5gRblG?1u+hf)
z!L^|SLWQxhF7*!$RFt;doYo&LKv7tXnhsdtT7Pix2Wz9@EC_LPz`V7x<cw&SNBolK
z(?6fvu8V^!O8>df_H57deBaOW{eEB1=g0Ssm^l|wTe4|U1W}MtkWr9P3lEZ+H2@@I
zj&$M9ojdi!#Ke;(lc~vUHh*HX*$y5)e0cMG+Pb>BwRXGx9jnz^XD}EpTCLVPyWPI;
z%$YOmLbXKHve><YHAK{6u~_OG8yiz1)d!lvV7OqhSk5OWCs*mZ?sU7|iT{uvGcy2?
zMnt0k?f|$8z$jiy%nT9z4es{s+h6bM>dLC9s5s~Gc=p!T)*jU~ZSKU06P2Ob;^N{=
zm&<k3ZnuxLwY8OxkB{%Vbm>xgT3Xuh{{8!p6c-m~F4Y@ya&j&lI&`RXZf=eue0wJ|
zJN<tDuHN3>eJ+>l!sO(nH76(MR7pw6v*DHntta7RB%)aW;{*UosU#v=2_OML3^Q8*
zScoV_yp@9*tXAvUhK7dYd3kxag72j3`kUR|-OYh<OG`^~et!P@)z#Hid-m-4A@s@W
z>+9E)m6aWDYHF%*I-R2dk6~u#VjdaL1p2F2uRi8*IC`3!o4X>>&$n+)P0hLk2M$!$
z)YMcK6&2kiB8XEF$pFAKfGGfz0A>M<G4qc!&uN(fBrx*|B8meL1HcNv%*@M($YeAc
z8%IV)N^CaUR0!n1?3a;|u{S<G-q+pT9X4EbU3dC?zWDzB{_{%#+1lE=s-U3YJ-6F^
z(BW|S7SprP2}lA_n3a|Fn%C=19vB#?C8B8nQ_MU=M1Kf4KL8&y|E6i$OxR*WMAJkx
zs%hFV5%m#KFEf7wpr44Y0k|F)7k90&u<%I$<IL=r129QyFvz}|$Ky#aEG)b{Uw8y8
zKR^Gn$Ky#~YIx`7=6ZEq|6=#<-ET=s3INiA-qj#|BN3V8`Ybcw0Wbz&RM+*-hlYmM
z1Go-gP~Q7nBDyR*hKa}<3^C%Wt!dgFBJ#>6SA9NTK~GQ5%SNN|gQTRS>@8citUG=B
z^caAv07d}(%*<nczdv!ujvY57{~E-*P120aY|PHi9-Ek$NR;b_py$#8#ZU^O7NRjq
z0{{~<o7&sk-9Dc$xxBpm31+@4-t(&*^eBMuMSoS=0D$j^sGphph^Vivt?kR1nVFTE
zrVSF2hlp+y(eM9f#Ww<Y2|yKqR(ar#)YQ}zrBtj^DuIZmIy*bpF!KY<yk04_ftept
zN^MX|r75L04h{}JrD@ufQtD}?)H6~EpI1t4W9Ap6ZDVGKQYw>~w*p|LR0cDri~ixj
zzNMw5ub51x8=ak<c4l71%n71du9PxI@MW?Lz{LIhl(GOg3!pt{ZV14}g%-ue#-<a|
zuu{s*%vJ#E%9SheN~z_{yh16pT>5d$ysV?6BNo6MGaJQI=L2&bz{xNvWigPCN>trf
zO8^iY1~mXG7g=)*Ky}dA3t-Ix`n3Q?7XcFkpdY~Ie*v-rz`1(`?4zJu6>J*;{1h~{
z1Na5NrZD?#lIt6S<~{>ZzQDbY0QfWlFk1oiNN$Z3<YNGC19;?Kfn)%E0A2+U4`2m=
z7bSVW8=}n<FLMD%l|qvO;BA@D3(-Fa;HHG9UA!ws`c-mJwg|y|2%u~MkOqmO=K!1%
zh;Q7>5Y7b9AXRWy!ue|eMPc-h1Gos_7JwNE&5Hms!st@~d@Q+YO4^9brG)#%5vFkT
v%>y#frUl+tl44S#{~AOsYEg^Ye{X*RGD>z0Y8J?-00000NkvXXu0mjf8K}Q=

literal 0
HcmV?d00001

diff --git a/l2ork_addons/K12/icons/sound_on.png b/l2ork_addons/K12/icons/sound_on.png
new file mode 100644
index 0000000000000000000000000000000000000000..a0f8a597f453bb4d725a90bb02b5456fbf830fa2
GIT binary patch
literal 1757
zcmV<31|s>1P)<h;3K|Lk000e1NJLTq002?|000#T1^@s6)p5B`00001b5ch_0Itp)
z=>Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2i*r1
z5g|2jTgGbu00v!2L_t(o!|j-RP+Zj=$3N%pF3%;vLU;=ciG)X+)Cn3f#%xBKXlkgB
zamG%gPMXeGt+tJ|Nhexs9cztR9c$}r#z!<dZJnkg8WYi!DcXcI8fFL(LLel&>;el}
zSQl9KanJ1^3l}IMfn=(Gbbm8Dd*<x-+;e`P`}_UQIV*<WdQ>B77i~%uK@?;ZWE5o7
zW;G*1L7<^&^V@TF)i?5D?Lj(vJ(vs%D@zKvdu=7Q@}e2qW=9`S*Zh-DkDcPo@F;2K
z1g<Wz@<8=9d^105n$~>#!wkRm=sD+}sxjaGFlk8%)IPYGCAkadq@OU8!9a3CEXCRB
z*vc1ir)@d8mId>MD1^YM4ST>82gVqL(FB?X=K=dvO+9;#wDH`gYRWIk<dl1m$NsjT
z8=iP$287**nz?`H2mGRXHILo4j;xd<`n<!`9B!q0$4-8K$9K4S#WyZ08Xmc|ihEys
zkB@)#!#U|E)+nWh*FQ#^v!C}rZ>93V7kF;d25!2d{CwmP2oM4-97G2E7}c(3L}D@`
zVF4mO35-TCnh?eqguw(t%z*oHZ3Fur+RWmtGyqETGI;x^-{bM!b<^fM+2>))&JWnT
z{RfogW$696mId6s?n+jd7jfNhU*lWW9Evh67YuUKnhM@M*u?8~pR;LA#oX(fB1lb)
zr?NPo%Hn)(Te*xIp4drA&O%DZ*DHiTLm-3zKnsT;97Ki!psHx2UgS`Jq(*8ZUSz)m
z)!vGF`WVu666v<1o^c@u`;a4Ew16Kp4WStD`p3vlO-2Ysp8#O{&1<GD^!dF9xT|W#
zG>B8JEH8r}eR~DZ?>%tQHR?~BZ{+dab-2C5a~m)v<Ae|hp|I4N%YD~h#UJ(^1fhUb
z(Z)v6Muw1sy{H3Dr290gs{_@34AtI>9B@K7c$UpZ4WSJWA_tsER|l%24Yj)+)zyLQ
zJB8}Dv;2|_-uS2<&F_l<22c!$iH}eaLZPmulbg<ywl`i;PF+jqMT0ENwD6PlSFv^1
zhcf_0+6qE3MB0i0VK7F5K&r^VD00+`=JT+jID=1*wj<qkWN%jlnzIAdaUALDKn^(3
zhKE26|JP<S7Yq8)g8s+@fTwL%HvauEyXqUcwm6&8oOD)Rnn!-BIZ|t5VnH$D7#N~3
zH36iI)ZZ!5i>9FgMOo=|pYiHWPB^X0Ci=!}ldhSnHyF`?d)HsXnqR-jC(WHym08ik
zA+&LarOyLuC=x5ZU6FxO)l*dqhd`?21^o1WIfCpvHP2o90<0w6OvC0%KC=&Uz%j_4
z#&)*7*T7|2$-J~-DVfP;Fq!}@@<wCh5C-FPkctArfU3%f&eNj<ls=DM)F*Iing&vW
zCL=KVyC>Vu4!!-y?^dw!)!lq{-+JN|O^+Pa)v33o+divrQcA=H9e*zL+@vVjtZCS+
zkqu`otn$lGj<aQNGw<AT8H57lCB<>l(L?D%GqarmItNC`O^QSIbm`!N-6t?8%9M?6
zJT^5ARaFsy?Ca8hlLOt8FWCgQELq6!K0L&4Y{k>EYA$B?`pGiKetie>IHQ3_Y?o4R
z_vn4Atrlw9`_4J8rmYuSfhCf5;UMV=F}OTK5yu0gk?)`%f@2U0;2iXko)9x0oo9bN
zKd&s}A6;i?>G#dsk3A>ctjf21H6XWsd<<32bfU)>z#KCf<o8q*@bVXST4!;nwcp1p
zN9^2Fk+1jJtQOvF>6vxzzqGipS<mfgj6vbqb){_is1-Sni^fs6j~5P~=Es*8d^M^4
z$`J<*-9v0$xrkK-sR#s(y<WEOKh9mtC!s91B=Tfc3Dtl8f(I%K*-)HGMq&*8qe0$p
zck|SNlRQ~f!XiteKIWlSi@E;o!vs{xt!3HdC&%k4_t%yl-fVKR@B5dZca0S}DO6;q
z@M@!DR*fn(e8Dhn1H<e&;pUyAE}mIe#*%dN{BJiy+t$we|Hwn#L%iA4P5o&PE?<Cn
zlR{~_nLC%|v2khc41H7Impt3h#lIYbc>Ez!<4jzgpUTg!EM!^c%qyA8H^wsuyV&0~
zfYUb?Im9Q$acyBb_g5B@lN6_GQ+Cucv~BHK*Et$exo+3LX>$8?P0Ehi$t$8FSP*NZ
zI4zOY1!>%|EO*+o|K}j17X9}p3Ni}v|HS?SBX70p?&>s200000NkvXXu0mjfIHpma

literal 0
HcmV?d00001

diff --git a/l2ork_addons/K12/logic_mapper-help.pd b/l2ork_addons/K12/logic_mapper-help.pd
index 5552c22c6..db620fa5d 100755
--- a/l2ork_addons/K12/logic_mapper-help.pd
+++ b/l2ork_addons/K12/logic_mapper-help.pd
@@ -1,9 +1,9 @@
 #N canvas 110 24 503 501 10;
-#X obj 20 293 cnv 15 486 220 empty empty empty 20 12 0 14 -233017 -66577
+#X obj 20 313 cnv 15 486 220 empty empty empty 20 12 0 14 -233017 -66577
 0;
 #X obj 25 184 K12/wii_speed;
-#X obj 123 530 K12/instr_sustained2;
-#X obj 25 755 output;
+#X obj 123 550 K12/instr_sustained2;
+#X obj 25 795 output;
 #N canvas 521 27 450 514 META 0;
 #X text 9 66 OUTLET_0 Connect this to an instrument or another math
 object;
@@ -12,28 +12,29 @@ object;
 each other;
 #X text 9 104 OUTLET_1 Connect this to an instrument or another math
 object;
-#X restore 458 819 pd META;
+#X restore 458 871 pd META;
 #X obj 13 43 cnv 3 501 3 empty empty empty 5 14 0 20 -260097 -191407
 0;
 #X obj 13 14 cnv 15 501 28 empty empty Mapper 5 14 0 20 -139274 -262144
 0;
 #X obj 484 46 ggee/image @pd_extra/K12/icons/l2ork.png;
 #X obj 25 69 K12/wii_connect;
-#X text 133 339 With the top toggle option selected \, the outlets
+#X text 133 359 With the top toggle option selected \, the outlets
 will always be zero.;
-#X text 133 305 There are four different functions that the Mapper
+#X text 133 325 There are four different functions that the Mapper
 object will do.;
-#X text 133 373 With the second toggle option selected \, the right
+#X text 133 393 With the second toggle option selected \, the right
 outlet will be the opposite of the left outlet (in other words \, when
 one is 0 the other is 1).;
-#X text 134 457 With the fourth toggle option selected \, as the left
+#X text 134 477 With the fourth toggle option selected \, as the left
 slider increases from 0 to 1 the right slider increases slowly at first
 and then quickly \, also from 0 to 1;
-#X text 133 420 With the third toggle option selected \, the left slider
+#X text 133 440 With the third toggle option selected \, the left slider
 ranges from 0 to 1 and the right slider ranges from 0 to 0.5;
-#X obj 25 298 K12/logic_mapper;
-#X obj 25 530 K12/instr_sustained1;
-#X obj 124 640 K12/fx_reverb;
+#X obj 25 318 K12/logic_mapper;
+#X obj 25 550 K12/instr_sustained1;
+#X obj 124 660 K12/fx_reverb;
+#X obj 133 213 K12/math_number;
 #X connect 1 0 14 0;
 #X connect 2 0 16 0;
 #X connect 8 0 1 0;
@@ -41,3 +42,4 @@ ranges from 0 to 1 and the right slider ranges from 0 to 0.5;
 #X connect 14 1 2 0;
 #X connect 15 0 3 0;
 #X connect 16 0 3 0;
+#X connect 17 0 14 0;
diff --git a/pd/src/pd.tk b/pd/src/pd.tk
index aefb3c5c4..47cbd7ead 100644
--- a/pd/src/pd.tk
+++ b/pd/src/pd.tk
@@ -347,45 +347,49 @@ proc pdtk_enable_k12_mode {extra_dir} {
 	image create photo i.wii_buttons -file $extra_dir/K12/icons/wii_buttons.png
 	image create photo i.wii_speed -file $extra_dir/K12/icons/wii_speed.png
 	image create photo i.wii_hit -file $extra_dir/K12/icons/wii_hit.png
-	image create photo i.sarcduino -file $extra_dir/K12/icons/sarcduino_on.png
 
+	image create photo i.sarcduino -file $extra_dir/K12/icons/sarcduino_on.png
 	image create photo i.sarcduino_digital -file $extra_dir/K12/icons/sarcduino_digital.png
 	image create photo i.sarcduino_analog -file $extra_dir/K12/icons/sarcduino_analog.png
 	image create photo i.sarcduino_hit -file $extra_dir/K12/icons/sarcduino_hit.png
 	image create photo i.sarcduino_piezo -file $extra_dir/K12/icons/sarcduino_piezo.png
 	#image create photo i.sarcduino_net -file $extra_dir/K12/icons/sarcduino_net.png
-	image create photo i.math_number -file $extra_dir/K12/icons/math_number.png
 
+	image create photo i.math_number -file $extra_dir/K12/icons/math_number.png
 	image create photo i.math_netsend -file $extra_dir/K12/icons/math_netsend.png
 	image create photo i.math_netreceive -file $extra_dir/K12/icons/math_netreceive.png
 	image create photo i.math_tag -file $extra_dir/K12/icons/math_tag.png
 	image create photo i.math_routebytag -file $extra_dir/K12/icons/math_routebytag.png
-	image create photo i.math_average -file $extra_dir/K12/icons/math_average.png
 
+	image create photo i.math_average -file $extra_dir/K12/icons/math_average.png
 	image create photo i.math_random -file $extra_dir/K12/icons/math_random.png
 	image create photo i.math_add -file $extra_dir/K12/icons/math_add.png
 	image create photo i.math_subtract -file $extra_dir/K12/icons/math_subtract.png
 	image create photo i.math_multiply -file $extra_dir/K12/icons/math_multiply.png
-	image create photo i.math_divide -file $extra_dir/K12/icons/math_divide.png
 
+	image create photo i.math_divide -file $extra_dir/K12/icons/math_divide.png
 	image create photo i.math_scale -file $extra_dir/K12/icons/math_scale.png
+
 	image create photo i.logic_compare -file $extra_dir/K12/icons/logic_compare.png
-	#image create photo i.logic_mapper -file $extra_dir/K12/icons/logic_mapper.png
+	image create photo i.logic_mapper -file $extra_dir/K12/icons/logic_mapper.png
 	image create photo i.logic_metronome -file $extra_dir/K12/icons/logic_metronome.png
 	image create photo i.logic_counter -file $extra_dir/K12/icons/logic_counter.png
 	image create photo i.logic_sequencer -file $extra_dir/K12/icons/logic_sequencer.png
 
+	image create photo i.preset -file $extra_dir/K12/icons/preset.png
+	image create photo i.comment -file $extra_dir/K12/icons/comment.png
+
 	image create photo i.signal_microphone -file $extra_dir/K12/icons/signal_microphone.png
 	image create photo i.signal_netsend -file $extra_dir/K12/icons/signal_netsend.png
 	image create photo i.signal_netreceive -file $extra_dir/K12/icons/signal_netreceive.png	
 	image create photo i.signal_sampler -file $extra_dir/K12/icons/signal_sampler.png
 	image create photo i.signal_player -file $extra_dir/K12/icons/signal_player.png
 
-	image create photo i.signal_envelope -file $extra_dir/K12/icons/signal_envelope.png
 	image create photo i.signal_sine -file $extra_dir/K12/icons/signal_sine.png
 	image create photo i.signal_saw -file $extra_dir/K12/icons/signal_saw.png
 	image create photo i.signal_square -file $extra_dir/K12/icons/signal_square.png
 	image create photo i.signal_triangle -file $extra_dir/K12/icons/signal_triangle.png
+	image create photo i.signal_envelope -file $extra_dir/K12/icons/signal_envelope.png
 
 	image create photo i.signal_noise -file $extra_dir/K12/icons/signal_noise.png
 	image create photo i.signal_pink -file $extra_dir/K12/icons/signal_pink.png
@@ -402,12 +406,15 @@ proc pdtk_enable_k12_mode {extra_dir} {
 	image create photo i.fx_reverb -file $extra_dir/K12/icons/fx_reverb.png
 
 	image create photo i.output -file $extra_dir/K12/icons/audio_on.png
-	image create photo i.preset -file $extra_dir/K12/icons/preset.png
-	image create photo i.comment -file $extra_dir/K12/icons/comment.png
 
 	image create photo i.edit -file $extra_dir/K12/icons/edit.png
 	image create photo i.perform -file $extra_dir/K12/icons/perform.png
 
+	image create photo i.data -file $extra_dir/K12/icons/data.png
+	image create photo i.sound -file $extra_dir/K12/icons/sound.png
+	image create photo i.data_on -file $extra_dir/K12/icons/data_on.png
+	image create photo i.sound_on -file $extra_dir/K12/icons/sound_on.png
+
 	#pack forget .controls.switches.audiobutton
 	#pack forget .controls.inout
 	#.mbar.audio delete 0 2
@@ -2260,6 +2267,24 @@ proc put_K12_objects {name object} {
 	}
 }
 
+proc pdtk_k12_show_data_icons {name} {
+	$name.k12frame.datasound.data configure -image i.data_on
+	$name.k12frame.datasound.sound configure -image i.sound
+	catch {
+		pack forget $name.k12frame.signal_1 $name.k12frame.signal_2 $name.k12frame.signal_3 $name.k12frame.instr $name.k12frame.fx $name.k12frame.output
+		pack $name.k12frame.wii $name.k12frame.arduino $name.k12frame.math_1 $name.k12frame.math_2 $name.k12frame.math_3 $name.k12frame.logic $name.k12frame.other -side top -expand 0 -fill x
+	}
+}
+
+proc pdtk_k12_show_sound_icons {name} {
+	$name.k12frame.datasound.data configure -image i.data
+	$name.k12frame.datasound.sound configure -image i.sound_on
+	catch {
+		pack forget $name.k12frame.wii $name.k12frame.arduino $name.k12frame.math_1 $name.k12frame.math_2 $name.k12frame.math_3 $name.k12frame.logic $name.k12frame.other
+		pack $name.k12frame.signal_1 $name.k12frame.signal_2 $name.k12frame.signal_3 $name.k12frame.instr $name.k12frame.fx $name.k12frame.output -side top -expand 0 -fill x
+	}
+}
+
 ############# pdtk_canvas_new -- create a new canvas ###############
 proc pdtk_canvas_new {name width height geometry editable} {
     global pd_tearoff put_tearoff
@@ -2376,11 +2401,23 @@ proc pdtk_canvas_new {name width height geometry editable} {
 		}
 		pack $name.k12frame.edit.b -side left -expand 1 -padx 1 -pady 0
 		setTooltip $name.k12frame.edit.b "Toggle between building and playing an instrument"
+		pdtk_standardkeybindings $name.k12frame.edit.b
+
+		# ---------------------------------- DATA VS SOUND BUTTONS ----------------------------------
+		match_linux_wm [list frame $name.k12frame.datasound -relief flat]
+		match_linux_wm [list button $name.k12frame.datasound.data -text "DATA" -image i.data_on -command [concat pdtk_k12_show_data_icons $name]]
+		match_linux_wm [list button $name.k12frame.datasound.sound -text "SOUND" -image i.sound -command [concat pdtk_k12_show_sound_icons $name]]
+		pack $name.k12frame.datasound.data $name.k12frame.datasound.sound -side left -pady 1 -padx 1 -expand 0
+		setTooltip $name.k12frame.datasound.data "Show DATA objects"
+		setTooltip $name.k12frame.datasound.sound "Show SOUND objects"
+		pdtk_standardkeybindings $name.k12frame.datasound.data
+		pdtk_standardkeybindings $name.k12frame.datasound.sound
 
 		# ---------------------------------- MESSAGES LABEL -----------------------------------------
-		match_linux_wm [list frame $name.k12frame.msgs -relief flat]
-		match_linux_wm [list label $name.k12frame.msgs.label -relief flat -text "MESSAGES"]
-		pack $name.k12frame.msgs.label -fill x -pady 0 -padx 1
+
+		#match_linux_wm [list frame $name.k12frame.msgs -relief flat]
+		#match_linux_wm [list label $name.k12frame.msgs.label -relief flat -text "MESSAGES"]
+		#pack $name.k12frame.msgs.label -fill x -pady 0 -padx 1
 
 		# ---------------------------------- WII -----------------------------------------
 		match_linux_wm [list frame $name.k12frame.wii -relief flat]
@@ -2397,6 +2434,10 @@ proc pdtk_canvas_new {name width height geometry editable} {
 		setTooltip $name.k12frame.wii.b_wii_buttons "Wiimote Buttons: Use this to select which Wiimote button should activate objects connected to this object"
 		setTooltip $name.k12frame.wii.b_wii_hit "Wiimote Hit: Use this to detect when the wiimote has been shaken"
 		setTooltip $name.k12frame.wii.b_wii_speed "Wiimote Speed: Use this to detect how quickly is Wiimote moving"
+		pdtk_standardkeybindings $name.k12frame.wii.b_wii_connect
+		pdtk_standardkeybindings $name.k12frame.wii.b_wii_buttons
+		pdtk_standardkeybindings $name.k12frame.wii.b_wii_speed
+		pdtk_standardkeybindings $name.k12frame.wii.b_wii_hit
 
 		# ---------------------------------- ARDUINO -----------------------------------------
 		match_linux_wm [list frame $name.k12frame.arduino -relief flat]
@@ -2416,25 +2457,38 @@ proc pdtk_canvas_new {name width height geometry editable} {
 		setTooltip $name.k12frame.arduino.b_sarcduino_analog "Arduino Analog: Use this to monitor analog sensor speed"
 		setTooltip $name.k12frame.arduino.b_sarcduino_hit "Arduino Hit: Use this to detect when the arduino analog sensor data has rapidly changed"
 		setTooltip $name.k12frame.arduino.b_sarcduino_piezo "Arduino Piezo: Use this to analyze data coming from a piezo microphone sensor"
+		pdtk_standardkeybindings $name.k12frame.arduino.b_sarcduino
+		pdtk_standardkeybindings $name.k12frame.arduino.b_sarcduino_digital
+		pdtk_standardkeybindings $name.k12frame.arduino.b_sarcduino_analog
+		pdtk_standardkeybindings $name.k12frame.arduino.b_sarcduino_hit
+		pdtk_standardkeybindings $name.k12frame.arduino.b_sarcduino_piezo
 
 		# ---------------------------------- MATH ROW 1 -----------------------------------------
 		match_linux_wm [list frame $name.k12frame.math_1 -relief flat]
 		#match_linux_wm [list button $name.k12frame.math_1.b_sarcduino_net -image i.sarcduino_net \
 		#	-command [concat put_K12_objects $name sarcduino_net]]
-		match_linux_wm [list button $name.k12frame.math_1.b_preset -image i.preset \
-			-command [concat put_K12_objects $name preset]] 
 		match_linux_wm [list button $name.k12frame.math_1.b_math_number -image i.math_number \
 			-command [concat put_K12_objects $name math_number]]
-		match_linux_wm [list button $name.k12frame.math_1.b_math_average -image i.math_average \
-			-command [concat put_K12_objects $name math_average]]
-		match_linux_wm [list button $name.k12frame.math_1.b_math_random -image i.math_random \
-			-command [concat put_K12_objects $name math_random]]
-		pack $name.k12frame.math_1.b_preset $name.k12frame.math_1.b_math_number $name.k12frame.math_1.b_math_average $name.k12frame.math_1.b_math_random -side left -expand 0 -padx 1 -pady 1
+		match_linux_wm [list button $name.k12frame.math_1.b_math_netsend -image i.math_netsend \
+			-command [concat put_K12_objects $name math_netsend]]
+		match_linux_wm [list button $name.k12frame.math_1.b_math_netreceive -image i.math_netreceive \
+			-command [concat put_K12_objects $name math_netreceive]]
+		match_linux_wm [list button $name.k12frame.math_1.b_math_tag -image i.math_tag \
+			-command [concat put_K12_objects $name math_tag]]
+		match_linux_wm [list button $name.k12frame.math_1.b_math_routebytag -image i.math_routebytag \
+			-command [concat put_K12_objects $name math_routebytag]]
+		pack $name.k12frame.math_1.b_math_number $name.k12frame.math_1.b_math_netsend $name.k12frame.math_1.b_math_netreceive $name.k12frame.math_1.b_math_tag $name.k12frame.math_1.b_math_routebytag -side left -expand 0 -padx 1 -pady 1
 		#setTooltip $name.k12frame.math_1.b_sarcduino_net "Arduino Net: Use this to retrieve data from arduino devices connected via network"
-		setTooltip $name.k12frame.math_1.b_preset "Preset: Use this to store and recall up to four different states of your instrument"
 		setTooltip $name.k12frame.math_1.b_math_number "Number: Use this to assign a value to other objects"
-		setTooltip $name.k12frame.math_1.b_math_average "Average: Use this to calculate average from a stream of numbers"
-		setTooltip $name.k12frame.math_1.b_math_random "Random: Use this to generate random numbers"
+		setTooltip $name.k12frame.math_1.b_math_netsend "Netsend: Use this to send data over network to another computer"
+		setTooltip $name.k12frame.math_1.b_math_netreceive "Netreceive: Use this to receive data from another computer over network"
+		setTooltip $name.k12frame.math_1.b_math_tag "Tag: Use this to tag data to be sent over network"
+		setTooltip $name.k12frame.math_1.b_math_routebytag "Route By Tag: Use this to filter incoming network data by tag"
+		pdtk_standardkeybindings $name.k12frame.math_1.b_math_number
+		pdtk_standardkeybindings $name.k12frame.math_1.b_math_netsend
+		pdtk_standardkeybindings $name.k12frame.math_1.b_math_netreceive
+		pdtk_standardkeybindings $name.k12frame.math_1.b_math_tag
+		pdtk_standardkeybindings $name.k12frame.math_1.b_math_routebytag
 
 		# ---------------------------------- MATH ROW 2 -----------------------------------------
 		match_linux_wm [list frame $name.k12frame.math_2 -relief flat]
@@ -2446,51 +2500,98 @@ proc pdtk_canvas_new {name width height geometry editable} {
 			-command [concat put_K12_objects $name math_multiply]]
 		match_linux_wm [list button $name.k12frame.math_2.b_math_divide -image i.math_divide \
 			-command [concat put_K12_objects $name math_divide]]
-		match_linux_wm [list button $name.k12frame.math_2.b_math_scale -image i.math_scale \
-			-command [concat put_K12_objects $name math_scale]]
-		pack $name.k12frame.math_2.b_math_add $name.k12frame.math_2.b_math_subtract $name.k12frame.math_2.b_math_multiply $name.k12frame.math_2.b_math_divide $name.k12frame.math_2.b_math_scale -side left -expand 0 -padx 1 -pady 1
+		match_linux_wm [list button $name.k12frame.math_2.b_math_random -image i.math_random \
+			-command [concat put_K12_objects $name math_random]]
+		pack $name.k12frame.math_2.b_math_add $name.k12frame.math_2.b_math_subtract $name.k12frame.math_2.b_math_multiply $name.k12frame.math_2.b_math_divide $name.k12frame.math_2.b_math_random -side left -expand 0 -padx 1 -pady 1
 		setTooltip $name.k12frame.math_2.b_math_add "Add: Use this to add two values"
 		setTooltip $name.k12frame.math_2.b_math_subtract "Subtract: Use this to subtract two values"
 		setTooltip $name.k12frame.math_2.b_math_multiply "Multiply: Use this to multiply two values"
 		setTooltip $name.k12frame.math_2.b_math_divide "Divide: Use this to divide two values"
-		setTooltip $name.k12frame.math_2.b_math_scale "Scale: Use this to scale incoming values to a new range and direction"
+		setTooltip $name.k12frame.math_2.b_math_random "Random: Use this to generate random numbers"
+		pdtk_standardkeybindings $name.k12frame.math_2.b_math_add
+		pdtk_standardkeybindings $name.k12frame.math_2.b_math_subtract
+		pdtk_standardkeybindings $name.k12frame.math_2.b_math_multiply
+		pdtk_standardkeybindings $name.k12frame.math_2.b_math_divide
+		pdtk_standardkeybindings $name.k12frame.math_2.b_math_random
+
+		# ---------------------------------- MATH ROW 3 -----------------------------------------
+		match_linux_wm [list frame $name.k12frame.math_3 -relief flat]
+		match_linux_wm [list button $name.k12frame.math_3.b_math_average -image i.math_average \
+			-command [concat put_K12_objects $name math_average]]
+		match_linux_wm [list button $name.k12frame.math_3.b_math_scale -image i.math_scale \
+			-command [concat put_K12_objects $name math_scale]]
+		pack $name.k12frame.math_3.b_math_average $name.k12frame.math_3.b_math_scale -side left -expand 0 -padx 1 -pady 1
+		setTooltip $name.k12frame.math_3.b_math_average "Average: Use this to calculate average from a stream of numbers"
+		setTooltip $name.k12frame.math_3.b_math_scale "Scale: Use this to scale incoming values to a new range and direction"
+		pdtk_standardkeybindings $name.k12frame.math_3.b_math_average
+		pdtk_standardkeybindings $name.k12frame.math_3.b_math_scale
 
 		# ---------------------------------- LOGIC -----------------------------------------
 		match_linux_wm [list frame $name.k12frame.logic -relief flat]
 		match_linux_wm [list button $name.k12frame.logic.b_logic_compare -image i.logic_compare \
 			-command [concat put_K12_objects $name logic_compare]]
-		#match_linux_wm [list button $name.k12frame.logic.b_logic_mapper -image i.logic_mapper \
-		#	-command [concat put_K12_objects $name logic_mapper]]
+		match_linux_wm [list button $name.k12frame.logic.b_logic_mapper -image i.logic_mapper \
+			-command [concat put_K12_objects $name logic_mapper]]
 		match_linux_wm [list button $name.k12frame.logic.b_logic_metronome -image i.logic_metronome \
 			-command [concat put_K12_objects $name logic_metronome]]
 		match_linux_wm [list button $name.k12frame.logic.b_logic_counter -image i.logic_counter \
 			-command [concat put_K12_objects $name logic_counter]]
 		match_linux_wm [list button $name.k12frame.logic.b_logic_sequencer -image i.logic_sequencer \
 			-command [concat put_K12_objects $name logic_sequencer]]
-		pack $name.k12frame.logic.b_logic_compare $name.k12frame.logic.b_logic_metronome $name.k12frame.logic.b_logic_counter $name.k12frame.logic.b_logic_sequencer -side left -expand 0 -padx 1 -pady 1
+		pack $name.k12frame.logic.b_logic_compare $name.k12frame.logic.b_logic_mapper $name.k12frame.logic.b_logic_metronome $name.k12frame.logic.b_logic_counter $name.k12frame.logic.b_logic_sequencer -side left -expand 0 -padx 1 -pady 1
 		setTooltip $name.k12frame.logic.b_logic_compare "Compare: Use this to compare two values"
-		#setTooltip $name.k12frame.logic.b_logic_mapper "Mapper: Use this to map one value to two different but related values"
+		setTooltip $name.k12frame.logic.b_logic_mapper "Mapper: Use this to map one value to two different but related values"
 		setTooltip $name.k12frame.logic.b_logic_metronome "Metronome: Use this to create a steady pulse"
 		setTooltip $name.k12frame.logic.b_logic_counter "Counter: Use this to count events"
 		setTooltip $name.k12frame.logic.b_logic_sequencer "Sequencer: Use this to map values to MIDI pitches"
+		pdtk_standardkeybindings $name.k12frame.logic.b_logic_compare
+		pdtk_standardkeybindings $name.k12frame.logic.b_logic_mapper
+		pdtk_standardkeybindings $name.k12frame.logic.b_logic_metronome
+		pdtk_standardkeybindings $name.k12frame.logic.b_logic_counter
+		pdtk_standardkeybindings $name.k12frame.logic.b_logic_sequencer
+
+		# ---------------------------------- OTHER -----------------------------------------
+		match_linux_wm [list frame $name.k12frame.other -relief flat]
+		match_linux_wm [list button $name.k12frame.other.b_preset -image i.preset \
+			-command [concat put_K12_objects $name preset]] 
+		match_linux_wm [list button $name.k12frame.other.b_comment -image i.comment \
+			-command [concat menu_comment $name 1]]
+		pack $name.k12frame.other.b_preset $name.k12frame.other.b_comment -side left -expand 0 -padx 1 -pady 1
+		setTooltip $name.k12frame.other.b_preset "Preset: Use this to store and recall up to four different states of your instrument"
+		setTooltip $name.k12frame.other.b_comment "Comment: Use this to post comments inside your patch"
+		pdtk_standardkeybindings $name.k12frame.other.b_preset
+		pdtk_standardkeybindings $name.k12frame.other.b_comment
 
 		# ---------------------------------- SOUND LABEL -----------------------------------------
-		match_linux_wm [list frame $name.k12frame.sound -relief flat]
-		match_linux_wm [list label $name.k12frame.sound.label -relief flat -text "SOUND"]
-		pack $name.k12frame.sound.label -fill x -pady 0 -padx 1
+		#match_linux_wm [list frame $name.k12frame.sound -relief flat]
+		#match_linux_wm [list label $name.k12frame.sound.label -relief flat -text "SOUND"]
+		#pack $name.k12frame.sound.label -fill x -pady 0 -padx 1
 
 		# ---------------------------------- SIGNAL ROW 1 -----------------------------------------
 		match_linux_wm [list frame $name.k12frame.signal_1 -relief flat]
 		match_linux_wm [list button $name.k12frame.signal_1.b_signal_microphone -image i.signal_microphone \
 			-command [concat put_K12_objects $name signal_microphone]]
+
+		match_linux_wm [list button $name.k12frame.signal_1.b_signal_netsend -image i.signal_netsend \
+			-command [concat put_K12_objects $name signal_netsend]]
+		match_linux_wm [list button $name.k12frame.signal_1.b_signal_netreceive -image i.signal_netreceive \
+			-command [concat put_K12_objects $name signal_netreceive]]
+
 		match_linux_wm [list button $name.k12frame.signal_1.b_signal_sampler -image i.signal_sampler \
 			-command [concat put_K12_objects $name signal_sampler]]
-		match_linux_wm [list button $name.k12frame.signal_1.b_signal_envelope -image i.signal_envelope \
-			-command [concat put_K12_objects $name signal_envelope]]
-		pack $name.k12frame.signal_1.b_signal_microphone $name.k12frame.signal_1.b_signal_sampler $name.k12frame.signal_1.b_signal_envelope -side left -expand 0 -padx 1 -pady 1
+		match_linux_wm [list button $name.k12frame.signal_1.b_signal_player -image i.signal_player \
+			-command [concat put_K12_objects $name signal_player]]
+		pack $name.k12frame.signal_1.b_signal_microphone $name.k12frame.signal_1.b_signal_netsend $name.k12frame.signal_1.b_signal_netreceive $name.k12frame.signal_1.b_signal_sampler $name.k12frame.signal_1.b_signal_player -side left -expand 0 -padx 1 -pady 1
 		setTooltip $name.k12frame.signal_1.b_signal_microphone "Microphone: Use this to capture and monitor microphone input"
-		setTooltip $name.k12frame.signal_1.b_signal_sampler "Sampler: Use this to record audio from microphone and plaly it back in various ways"
-		setTooltip $name.k12frame.signal_1.b_signal_envelope "Envelope: Use this to shape sound loudness"
+		setTooltip $name.k12frame.signal_1.b_signal_netsend "Netsend Sound: Use this to send your sound over network to another computer"
+		setTooltip $name.k12frame.signal_1.b_signal_netreceive "Netreceive Sound: Use this to receive sound from another computer over network"
+		setTooltip $name.k12frame.signal_1.b_signal_sampler "Sampler: Use this to record audio from microphone and play it back in various ways"
+		setTooltip $name.k12frame.signal_1.b_signal_player "Player: Use this to play WAV files in various ways"
+		pdtk_standardkeybindings $name.k12frame.signal_1.b_signal_microphone
+		pdtk_standardkeybindings $name.k12frame.signal_1.b_signal_netsend
+		pdtk_standardkeybindings $name.k12frame.signal_1.b_signal_netreceive
+		pdtk_standardkeybindings $name.k12frame.signal_1.b_signal_sampler
+		pdtk_standardkeybindings $name.k12frame.signal_1.b_signal_player
 
 		# ---------------------------------- SIGNAL ROW 2 -----------------------------------------
 		match_linux_wm [list frame $name.k12frame.signal_2 -relief flat]
@@ -2502,11 +2603,19 @@ proc pdtk_canvas_new {name width height geometry editable} {
 			-command [concat put_K12_objects $name signal_square]]
 		match_linux_wm [list button $name.k12frame.signal_2.b_signal_triangle -image i.signal_triangle \
 			-command [concat put_K12_objects $name signal_triangle]]
-		pack $name.k12frame.signal_2.b_signal_sine $name.k12frame.signal_2.b_signal_saw $name.k12frame.signal_2.b_signal_square $name.k12frame.signal_2.b_signal_triangle -side left -expand 0 -padx 1 -pady 1
+		match_linux_wm [list button $name.k12frame.signal_2.b_signal_envelope -image i.signal_envelope \
+			-command [concat put_K12_objects $name signal_envelope]]
+		pack $name.k12frame.signal_2.b_signal_sine $name.k12frame.signal_2.b_signal_saw $name.k12frame.signal_2.b_signal_square $name.k12frame.signal_2.b_signal_triangle $name.k12frame.signal_2.b_signal_envelope -side left -expand 0 -padx 1 -pady 1
 		setTooltip $name.k12frame.signal_2.b_signal_sine "Sine: Use this to generate sine tone"
 		setTooltip $name.k12frame.signal_2.b_signal_saw "Sawtooth: Use this to generate sawtooth tone"
 		setTooltip $name.k12frame.signal_2.b_signal_square "Square: Use this to generate square tone"
 		setTooltip $name.k12frame.signal_2.b_signal_triangle "Triangle: Use this to generate triangle tone"
+		setTooltip $name.k12frame.signal_2.b_signal_envelope "Envelope: Use this to shape sound loudness"
+		pdtk_standardkeybindings $name.k12frame.signal_2.b_signal_sine
+		pdtk_standardkeybindings $name.k12frame.signal_2.b_signal_saw
+		pdtk_standardkeybindings $name.k12frame.signal_2.b_signal_square
+		pdtk_standardkeybindings $name.k12frame.signal_2.b_signal_triangle
+		pdtk_standardkeybindings $name.k12frame.signal_2.b_signal_envelope
 
 		# ---------------------------------- SIGNAL ROW 3 -----------------------------------------
 		match_linux_wm [list frame $name.k12frame.signal_3 -relief flat]
@@ -2523,6 +2632,10 @@ proc pdtk_canvas_new {name width height geometry editable} {
 		setTooltip $name.k12frame.signal_3.b_signal_pink "Pink: Use this to generate pink (softer) noise"
 		setTooltip $name.k12frame.signal_3.b_signal_add "Signal Add: Use this to add two sounds (signals)"
 		setTooltip $name.k12frame.signal_3.b_signal_multiply "Signal Multiply: Use this to multiply two sounds (signals)"
+		pdtk_standardkeybindings $name.k12frame.signal_3.b_signal_noise 
+		pdtk_standardkeybindings $name.k12frame.signal_3.b_signal_pink
+		pdtk_standardkeybindings $name.k12frame.signal_3.b_signal_add
+		pdtk_standardkeybindings $name.k12frame.signal_3.b_signal_multiply
 
 		# ---------------------------------- INSTRUMENTS -----------------------------------------
 		match_linux_wm [list frame $name.k12frame.instr -relief flat]
@@ -2539,6 +2652,10 @@ proc pdtk_canvas_new {name width height geometry editable} {
 		setTooltip $name.k12frame.instr.b_instr_short2 "Short Sound 2: Use this to produce short sounds like a single snare drum hit"
 		setTooltip $name.k12frame.instr.b_instr_sustained1 "Sustained Sound 1: Use this to produce long sustained sound like a sound of a woodwind instrument"
 		setTooltip $name.k12frame.instr.b_instr_sustained2 "Sustained Sound 2: Use this to produce long sustained sound like a sound of brass instrument"
+		pdtk_standardkeybindings $name.k12frame.instr.b_instr_short1
+		pdtk_standardkeybindings $name.k12frame.instr.b_instr_short2
+		pdtk_standardkeybindings $name.k12frame.instr.b_instr_sustained1
+		pdtk_standardkeybindings $name.k12frame.instr.b_instr_sustained2
 
 		# ---------------------------------- F/X -----------------------------------------
 		match_linux_wm [list frame $name.k12frame.fx -relief flat]
@@ -2552,6 +2669,9 @@ proc pdtk_canvas_new {name width height geometry editable} {
 		setTooltip $name.k12frame.fx.b_fx_filter "Filter: Use this to make sound appear muffled or brighter"
 		setTooltip $name.k12frame.fx.b_fx_multitap "Echo: Use this to make sound echo"
 		setTooltip $name.k12frame.fx.b_fx_reverb "Reverb: Use this to make sound appear as if it is being played in a large space"
+		pdtk_standardkeybindings $name.k12frame.fx.b_fx_filter
+		pdtk_standardkeybindings $name.k12frame.fx.b_fx_multitap
+		pdtk_standardkeybindings $name.k12frame.fx.b_fx_reverb
 
 		# ---------------------------------- OUTPUT/OTHER -----------------------------------------
 
@@ -2560,9 +2680,10 @@ proc pdtk_canvas_new {name width height geometry editable} {
 			-command [concat put_K12_objects $name output]] 	
 		pack $name.k12frame.output.b_output -side left -expand 0 -padx 1 -pady 1
 		setTooltip $name.k12frame.output.b_output "Output: Use this to send audio from computer into speakers"
+		pdtk_standardkeybindings $name.k12frame.output.b_output
 
 		# ---------------------------------------- NOW PACK THEM ALL -----------------------------------------
-		pack $name.k12frame.edit $name.k12frame.msgs $name.k12frame.wii $name.k12frame.arduino $name.k12frame.math_1 $name.k12frame.arduino $name.k12frame.math_2 $name.k12frame.logic $name.k12frame.sound $name.k12frame.signal_1 $name.k12frame.signal_2 $name.k12frame.signal_3 $name.k12frame.instr $name.k12frame.fx $name.k12frame.output -side top -expand 0 -fill x 
+		pack $name.k12frame.edit $name.k12frame.datasound $name.k12frame.wii $name.k12frame.arduino $name.k12frame.math_1 $name.k12frame.math_2 $name.k12frame.math_3 $name.k12frame.logic $name.k12frame.other -side top -expand 0 -fill x
 	}
 
     canvas $name.c -width $width -height $height -background $::canvas_color($name) \
@@ -2590,7 +2711,7 @@ proc pdtk_canvas_new {name width height geometry editable} {
 	if { $k12_mode == 0 } {
     	wm minsize $name 50 20
 	} else {
-		wm minsize $name 580 532
+		wm minsize $name 580 372
 	}
     wm geometry $name $geometry
     # the file menu
-- 
GitLab