<?xml version="1.0"?>
<?xml-stylesheet type="text/css" href="http://cycling74.com/wiki/skins/common/feed.css?303"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
		<id>http://cycling74.com/wiki/api.php?action=feedcontributions&amp;user=Gtaylor%40rtqe.net&amp;feedformat=atom</id>
		<title>Cycling '74 Wiki - User contributions [en]</title>
		<link rel="self" type="application/atom+xml" href="http://cycling74.com/wiki/api.php?action=feedcontributions&amp;user=Gtaylor%40rtqe.net&amp;feedformat=atom"/>
		<link rel="alternate" type="text/html" href="http://cycling74.com/wiki/index.php?title=Special:Contributions/Gtaylor@rtqe.net"/>
		<updated>2013-05-19T21:36:05Z</updated>
		<subtitle>User contributions</subtitle>
		<generator>MediaWiki 1.19.1</generator>

	<entry>
		<id>http://cycling74.com/wiki/index.php?title=bucket</id>
		<title>bucket</title>
		<link rel="alternate" type="text/html" href="http://cycling74.com/wiki/index.php?title=bucket"/>
				<updated>2013-04-30T06:05:54Z</updated>
		
		<summary type="html">&lt;p&gt;Gtaylor@rtqe.net: /* People who looked at/used this object also looked at.... */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==[//www.cycling74.com/docs/max6/dynamic/c74_docs.html#bucket bucket online refpage]==&lt;br /&gt;
&lt;br /&gt;
==Using the {{maxword|name=bucket}} object==&lt;br /&gt;
&lt;br /&gt;
The {{maxword|name=bucket}} object implements a [//en.wikipedia.org/wiki/Bucket_brigade bucket brigade] device (in the electronics world, this is sometimes referred to as [//en.wikipedia.org/wiki/Bucket-brigade_device a discrete time-analogue delay line]). As the examples below suggest, it's useful for single-sample delay lines, calculating averages, computing velocity and acceleration, and permutating lists by rotating them.&lt;br /&gt;
&lt;br /&gt;
=={{maxword|name=bucket}} Tutorials==&lt;br /&gt;
&lt;br /&gt;
In the Max tutorial on abstractions, you can find a classic example of why the {{maxword|name=bucket}} object is so useful - [//www.cycling74.com/docs/max6/dynamic/c74_docs.html#basicchapter15 this Max tutorial] demonstrates its use as a single sample delay for number values useful for constructing drawing commands.&lt;br /&gt;
&lt;br /&gt;
=={{maxword|name=bucket}} Tips and Workarounds==&lt;br /&gt;
&lt;br /&gt;
===Velocity and Acceleration===&lt;br /&gt;
&lt;br /&gt;
Lots of people use the &amp;lt;strong&amp;gt;bucket&amp;lt;/strong&amp;gt; object for shifting data in series, it's computationally useful for calculating first and second derivatives for streams of data. The terms &amp;quot;first and second derivative&amp;quot; are math-speak for keeping track of:&lt;br /&gt;
&lt;br /&gt;
* the rate that things are changing (that's what velocity (the first derivative) is - the rate of change in a value over time.&lt;br /&gt;
&lt;br /&gt;
* the ''rate of the rate'' that things are changing - that's what acceleration (the second derivative) is.&lt;br /&gt;
&lt;br /&gt;
[[File:Bucket-in-action.png]]&lt;br /&gt;
&lt;br /&gt;
Here's a patch that does that:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;maxpat&amp;gt;&lt;br /&gt;
----------begin_max5_patcher----------&lt;br /&gt;
863.3oc4XFrbaBCDF9r8SgJmZmwICRf.bu0mgbrISGLHaqDP3QHbcZl7tWoE&lt;br /&gt;
vA2ZrAFC8Pu.dEBs69oesR32lOyZU1AVtE5qnuilM6s4ylAMYZXVk8LqzvCQ&lt;br /&gt;
Ig4P2rhxRSYBk0hxmoXGTP6psLjLTwPYqQM+cz1PwF1ihOmyhxDwnXljuOTw&lt;br /&gt;
2y9xih5QIgKzOsP.CEopQQQJWjvTfewUMtKTEskK17CIKRUF2d1d2au.4rz2&lt;br /&gt;
bC6EXt4pMPOU8R7XHDyV87cjk09bclPIBSYvi9ljGlX8giyJT0d1tt+xMq.6&lt;br /&gt;
6saLB47eAi.lbr4cRVtlP5bLSbRXRg.y1L.n5KnmLuz6ymatr3FNGbj6q4xb&lt;br /&gt;
0HfcW+flXGiuH1CFOrO..pc0JlzpmYrS.AR0xYPJbkX2RB612DlbzwRcuUL4&lt;br /&gt;
OXhvUIrSfw4Ubkih50crx.0haDGHqUZIf0fTXoEIJddBOt+TpZ4HojOXLXgc&lt;br /&gt;
BZgSjgSiblRGR53tzw2QONubzS5tjqds70nsQKCplbLUs7oqXBOpXpkRV0wn&lt;br /&gt;
i6okrlF3px1rQO38cQJApG4srd04EViZednh6.TO6RtoVCUkqcTCgCtYZH6i&lt;br /&gt;
0AmJwff8ScN7W63oiWY1YwF4pXqpNtK9RZDreeqii6Ys5gWjtElDKKDuXxND&lt;br /&gt;
8rjw45jg.qd7cuHY7FaxL3kTs.lOcmV31WwR81Y1NvocJKHhaAImkHODJxQO&lt;br /&gt;
nO+05dgEpOlz5Bo0IYg2V3rpH5ElBQF318XO3Vf+k3CYP7gL.9byKzLHsS89&lt;br /&gt;
mcQ637en1ohOcR639OT6.wC70R+wmJC4jo8SYVdVgLpd3pJLf9HqhY4Jt.Nr&lt;br /&gt;
Ui9XNIbiNskGGyDM2CNlma1VFPx4+nmtFNlON4pwio9NhLIwiSWvC9J3IkGu&lt;br /&gt;
KSukQ0TjqVNQ0I.Ivbqo0GN5lk..qtJPCltIX6tDO9SV7zI931uIXGGOyTJl&lt;br /&gt;
BkMplfAqwXB1uqqXlnIXsmvWKbNoOWkmdAN.AWB+MUd5u4q1ZD3IoK3bxnYm&lt;br /&gt;
p+LrxONvV+zR1dpElBa64goGsFAR61AkhS+TJTJsgRgZ6MlJktrUky.UJk6q&lt;br /&gt;
Gta2dlLuZHg.QepmmyjFSuEfIWTZBGlwRx1yq6ObBCqPo9rMJ8AaJjkGL4Pf&lt;br /&gt;
m0biede9u0DMhQJ&lt;br /&gt;
-----------end_max5_patcher-----------&lt;br /&gt;
&amp;lt;/maxpat&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Running Averages===&lt;br /&gt;
&lt;br /&gt;
I also tend to use the object quite a bit in situations where I desire a running average over some finite set of events (if you want a running average for an stream or unspecified set of values, you'd use the {{maxword|name=mean}} object). Here's an example that calculates the average of the last 8 floating point input values:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;maxpat&amp;gt;&lt;br /&gt;
----------begin_max5_patcher----------&lt;br /&gt;
498.3ocuV1sajBBEG+Z8ofvkabm.9AZ6c84nYyFFkYKsJZTrc11z28UO3z1Y&lt;br /&gt;
CyHocJwnjywCG9wePN9RX.da6dw.FcM5VTPvKgAAfqYGAK1A3F99xZ9.DFtc&lt;br /&gt;
TWKz3HyqTiMR0jM7N56NMQAdIKd635x6jp+76dQo1Lhz7zMjHTbbFz71SzuV&lt;br /&gt;
5irxLlau+m4GFxx1lFgBx.FO650vv4GQNNA.dsxOwJ+zU4mUbB7MYQ+2NgId&lt;br /&gt;
L11LicolYJwSS46P1zh8lT8CDYCMNy5TNdw4tVkdP9LvIMdymUInWQmaRuBj&lt;br /&gt;
Bx4jhc0sbsU83MRmgRwafdfuoWxqufpRGu7AztiurJQEWXIJwzvHaxVSirJO&lt;br /&gt;
odQddtFML1702yDutfvRf8LYqumAGcBMIwKZx1wxGDZTwYO7yIUoXcUgvbea&lt;br /&gt;
RzYtsIWT2jKnq3Zo5+qP.XO6+XMbncru7.TKeIidm6JwfVp3ZYq5CwjeTL2I&lt;br /&gt;
qpDpOdXbkbfusV.vSrtV5JMLGng5MZRbflLuQSpCzj3MZlWEnqPS5Qw7cSSr&lt;br /&gt;
CzD6MZRbflDuQSpCzj5MZxbflLuQCyAZXdilbGnI2azPbflOy4MlxV7ttGE8&lt;br /&gt;
CKoD.YpH+8s8ylrHvTpLlPsabu3Q4g3geaAy6mpNqmJMO1aJQtufMUfbZbdM&lt;br /&gt;
7efczjOq&lt;br /&gt;
-----------end_max5_patcher-----------&lt;br /&gt;
&amp;lt;/maxpat&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===A Bucket for Symbols===&lt;br /&gt;
&lt;br /&gt;
The {{maxword|name=bucket}} object is a little unusual in that you don't need to worry about using arguments to the object in order to have it work with floating point values. In fact, {{maxword|name=bucket}} is ''so'' useful that people often ask whether or not there's a Max object that is similar but will work with symbols or lists. While there isn't a specific object, here's a Max patch that does exactly that (and it also helpfully outputs stuff in standard right-to-left order, too):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;maxpat&amp;gt;&lt;br /&gt;
----------begin_max5_patcher----------&lt;br /&gt;
778.3oc2X10bhBCEF9Z7WACWy5jOfjvd296Xmc1A0Ta5ffCDacam9eeIm.pc&lt;br /&gt;
KsDEw05zYTOGfj22mdxW7xDufYEakUA9e2+m9dduLwyCRYR30D6ErJc67rzJ&lt;br /&gt;
31BVIqpRWJCBsWSK2pg72UrorMY9lUp7LoFdBRSx0kxJYtNUqJx+cobt11q7&lt;br /&gt;
D9z3PeBYJJzG07g+u12REazsMEtsoR0yuWku78MSLzLTh42XwAMjZAnxhYO7&lt;br /&gt;
MJtUm2UjqySWIgK8iRUZV6Urcp9Oqk1lOHXWKYdnJ0yvEv0cmI6qSlX9HbfL&lt;br /&gt;
TeeoTdRPjJL9lDMPHRoG.QnI+PHhtZg3SEmBBYLKBGXcHiCOqK0gjjqUDVj+&lt;br /&gt;
4UgtSCbryzP7UkFePAkHhCETb9vpnDTfdDjEknOaTIgciMpjyvf4E3ANyVTh&lt;br /&gt;
6PL9la8AF2Ze9.wHiwcGiQWqXr2sp3LOhEQtyC5+adjKepVHuCGOm4WJWdRk&lt;br /&gt;
U1o2wwtruCRuKSfiguhPVl9AX7j18V3WDTRPnAhxDg6nDcihR6jTX9vPIWfb&lt;br /&gt;
Fk3ja5pRgXXnTvntiR5ULJ09Y9yL+0IMwcxkn9m3CYWdtc00tAC+D4xrz7ku&lt;br /&gt;
6aWXEbOAYp7+8MD.Nwj+s.rpdc04s8bih8w65oExJsJGJwN3dLSB4u2u2qVr&lt;br /&gt;
PBWG0jYkZw5BUttQCbDeJlUeZMdcaSXFfYRE2Dsu2TUoyxj.95t.3XbAoGWX&lt;br /&gt;
F+eTtPjLUPoTLcuKpSMxtf1mKnGmKDbxNIG9lnQv.lCHdf351A7iy.LRjQxB&lt;br /&gt;
X32AAig7SFA4yStTxmhN+xmGAqJbQjO97KeAheojO2A0Sv8H+yXsrKECly+c&lt;br /&gt;
vr+iodvtL1xbr9KkdntnG1ESODWp9MmO8Z5+W39zSGKoBueQ3vnhHbGQQw1Q&lt;br /&gt;
rzcQiwL8tL5.P.9311yd+viSrupg2D03NLZTcmS0RniycMyd13GFm0Qj0cbh&lt;br /&gt;
vc2Y2.a550OJKqZTHXr585+PQoIjEBgpbaHrC9fR4ip16mBYRKq25ttde6aJ&lt;br /&gt;
sa6dqfELwzOuN4u.mi5K2B&lt;br /&gt;
-----------end_max5_patcher-----------&lt;br /&gt;
&amp;lt;/maxpat&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Arbitrary List Rotation ===&lt;br /&gt;
&lt;br /&gt;
One way to think of the {{maxword|name=bucket}} object is a as an object that adds new input values and rotates the list by one position. While you can rotate a list forward or backward using the ''r2l'' and ''l2r'' messages to the {{maxword|name=bucket}} object, performing arbitrary list rotations can be done using the {{maxword|name=zl}} object and specifying the '''rot''' option:&lt;br /&gt;
&lt;br /&gt;
[[File:Bucket-in-action-2.png]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;maxpat&amp;gt;&lt;br /&gt;
----------begin_max5_patcher----------&lt;br /&gt;
1116.3oc2Y1zbaqBEFds8uBtZtK80iPf9HcWW1scamNYP1DGZk.O.xIoc5+8&lt;br /&gt;
q.jh+H1wXEEZFOYhrEBc3bdz6AyA86oShJEORUQfOA9FXxjeOcxDaSlFlzc9&lt;br /&gt;
jnZxiKpHJa2hVHpqobczL20zzG011+xcfmDMfGHbMPK.RglnolljfJlRCJeB&lt;br /&gt;
TKjTf9dBGH3TvZghoYB9LPixzLE7qJysADk+ftPOG7UZMstjJM2h1YPFekwP&lt;br /&gt;
zMTNf2XtnB7.qpBTQIanfUj0p+o2ypXb5BQC25d3tFuSv0bRM05xeVxHU8cu&lt;br /&gt;
0bLdEUaiRXWiqkTUavRL94sxVuxQJDFNOdFHAgMeD2c.78slRzn6sUbusH5E&lt;br /&gt;
22F.6ZGTl4dQ4Hm4JLejsqoL9qh8Kq+BSl2aK1Ra.zRp+qnO.tStpzNdyiMM&lt;br /&gt;
7moSMGl44iUGMiFFl1OfS5Z00j9o0TWzFwLxFPTIguJ54H7XXovgEKjSs3MA&lt;br /&gt;
dJnfNFTPQOacYaXnoxaobRYk8VFBdpoJEYE8EpdEUC9W3EhsjihM3ovlOrJM&lt;br /&gt;
2bDaOBu4hXENZ.73TyBXxWzl7S4SZimZlJn8KptrU.guDzFfqaz1L91t2ToG&lt;br /&gt;
EU2qjlgw34o85ojBaVVxkkkgvWeoYoNoCLsXm7rKDKIich1GJ.gd6.BdMCH7&lt;br /&gt;
HnfhupAzaWAkby0LfPucETRwUMfFAET90LfRFAET1UMfFAED58EPaHxm4yGJ&lt;br /&gt;
zkWXV3XBJevnC9pIe89sps50k2RzZIqrQS29MUGC6fnAUUMTwc8M229tluRv&lt;br /&gt;
WcbbtW2T2KjZO5WO2PG4ZLdaI7jpWFQGqWcSn0CuC5xFlh0aC20sRp9OtT8E&lt;br /&gt;
8gV5+hxSzfR.68UaYEUybZLezVYtZcSrmbgZqznQrT1TLHd2+9KVTKNta+Ub&lt;br /&gt;
0y51dDXwkAmAUWaaNmVvu.c.7U0AdLubRd+rJG77e2XAEMd4.x1ZvE0.X767&lt;br /&gt;
S3yl.f1YmKxSGxbqvwT+6j8ayB9atoN2XwABieC5+3QTyzsyrnQgImbpSyzl&lt;br /&gt;
9HYPtoGFjlIeDoxZxheBX6+2ERnhQT0zuPuNwS1MC.OYiHdJaV7SpFTLJ+da&lt;br /&gt;
wqJZN0+9fKX1vw0d+.r89ru1gCdgJ1A2z99LTIZjK5Cit4ylA1N7KoJMiae2&lt;br /&gt;
C6zoz85y8rkKo7c2+ykLkYsXKO8Jy80cLiT9Y7FyF.FH24fg539S1d976Mcx&lt;br /&gt;
NGcfgiNPOoSVvnS54nSb3nSrmzIMXzAeFuwrueAhNGLTmlN3fQGz4nSQ3nSg&lt;br /&gt;
mzAEL5jbN5jGN5j6IcRBFcfmiNYgiNYdRGXvny47Fyd8EJ5f7jNgwc74YEDG&lt;br /&gt;
rGV93NgKOGOBKMslsbsfw0psU4lZV.drcuuvaOa63Ldq.vC+GGLZ5yjlv3fI&lt;br /&gt;
0fd4OgqxCX5GJsOzmeUIObOs7QKCGZoGtpXIqWugJUc1z5Js07+CgzbZ1L6o&lt;br /&gt;
Lt6TaA6QRpYG7c829pBhHx1Rt0s0a2Hc07+XgY6EZGm+L8+wpYGFn&lt;br /&gt;
-----------end_max5_patcher-----------&lt;br /&gt;
&amp;lt;/maxpat&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Third-Party Max externals similar to the {{maxword|name=bucket}} object==&lt;br /&gt;
&lt;br /&gt;
[//www.maxobjects.com/?request=bucket Maxobjects.com listing for the bucket object]&lt;br /&gt;
&lt;br /&gt;
==People who looked at/used this object also looked at....==&lt;br /&gt;
&lt;br /&gt;
The [http://www.cycling74.com/docs/max6/dynamic/c74_docs.html#zl zl] object (in its '''zl rot''' form). Useful for performing rotations of lists.&lt;br /&gt;
&lt;br /&gt;
The [http://www.cycling74.com/docs/max6/dynamic/c74_docs.html#cycle cycle] object&lt;br /&gt;
&lt;br /&gt;
==Errors or Clarifications==&lt;br /&gt;
&lt;br /&gt;
(please list things that you believe to be errors or omissions from the existing refpage)&lt;br /&gt;
&lt;br /&gt;
[[Category:Max Refpage extensions ( symbol, A - F)]]&lt;br /&gt;
[[Category:Refpage extensions]]&lt;/div&gt;</summary>
		<author><name>Gtaylor@rtqe.net</name></author>	</entry>

	<entry>
		<id>http://cycling74.com/wiki/index.php?title=bucket</id>
		<title>bucket</title>
		<link rel="alternate" type="text/html" href="http://cycling74.com/wiki/index.php?title=bucket"/>
				<updated>2013-04-30T06:05:07Z</updated>
		
		<summary type="html">&lt;p&gt;Gtaylor@rtqe.net: /* {{maxword|name=bucket}} Tips and Workarounds */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==[//www.cycling74.com/docs/max6/dynamic/c74_docs.html#bucket bucket online refpage]==&lt;br /&gt;
&lt;br /&gt;
==Using the {{maxword|name=bucket}} object==&lt;br /&gt;
&lt;br /&gt;
The {{maxword|name=bucket}} object implements a [//en.wikipedia.org/wiki/Bucket_brigade bucket brigade] device (in the electronics world, this is sometimes referred to as [//en.wikipedia.org/wiki/Bucket-brigade_device a discrete time-analogue delay line]). As the examples below suggest, it's useful for single-sample delay lines, calculating averages, computing velocity and acceleration, and permutating lists by rotating them.&lt;br /&gt;
&lt;br /&gt;
=={{maxword|name=bucket}} Tutorials==&lt;br /&gt;
&lt;br /&gt;
In the Max tutorial on abstractions, you can find a classic example of why the {{maxword|name=bucket}} object is so useful - [//www.cycling74.com/docs/max6/dynamic/c74_docs.html#basicchapter15 this Max tutorial] demonstrates its use as a single sample delay for number values useful for constructing drawing commands.&lt;br /&gt;
&lt;br /&gt;
=={{maxword|name=bucket}} Tips and Workarounds==&lt;br /&gt;
&lt;br /&gt;
===Velocity and Acceleration===&lt;br /&gt;
&lt;br /&gt;
Lots of people use the &amp;lt;strong&amp;gt;bucket&amp;lt;/strong&amp;gt; object for shifting data in series, it's computationally useful for calculating first and second derivatives for streams of data. The terms &amp;quot;first and second derivative&amp;quot; are math-speak for keeping track of:&lt;br /&gt;
&lt;br /&gt;
* the rate that things are changing (that's what velocity (the first derivative) is - the rate of change in a value over time.&lt;br /&gt;
&lt;br /&gt;
* the ''rate of the rate'' that things are changing - that's what acceleration (the second derivative) is.&lt;br /&gt;
&lt;br /&gt;
[[File:Bucket-in-action.png]]&lt;br /&gt;
&lt;br /&gt;
Here's a patch that does that:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;maxpat&amp;gt;&lt;br /&gt;
----------begin_max5_patcher----------&lt;br /&gt;
863.3oc4XFrbaBCDF9r8SgJmZmwICRf.bu0mgbrISGLHaqDP3QHbcZl7tWoE&lt;br /&gt;
vA2ZrAFC8Pu.dEBs69oesR32lOyZU1AVtE5qnuilM6s4ylAMYZXVk8LqzvCQ&lt;br /&gt;
Ig4P2rhxRSYBk0hxmoXGTP6psLjLTwPYqQM+cz1PwF1ihOmyhxDwnXljuOTw&lt;br /&gt;
2y9xih5QIgKzOsP.CEopQQQJWjvTfewUMtKTEskK17CIKRUF2d1d2au.4rz2&lt;br /&gt;
bC6EXt4pMPOU8R7XHDyV87cjk09bclPIBSYvi9ljGlX8giyJT0d1tt+xMq.6&lt;br /&gt;
6saLB47eAi.lbr4cRVtlP5bLSbRXRg.y1L.n5KnmLuz6ymatr3FNGbj6q4xb&lt;br /&gt;
0HfcW+flXGiuH1CFOrO..pc0JlzpmYrS.AR0xYPJbkX2RB612DlbzwRcuUL4&lt;br /&gt;
OXhvUIrSfw4Ubkih50crx.0haDGHqUZIf0fTXoEIJddBOt+TpZ4HojOXLXgc&lt;br /&gt;
BZgSjgSiblRGR53tzw2QONubzS5tjqds70nsQKCplbLUs7oqXBOpXpkRV0wn&lt;br /&gt;
i6okrlF3px1rQO38cQJApG4srd04EViZednh6.TO6RtoVCUkqcTCgCtYZH6i&lt;br /&gt;
0AmJwff8ScN7W63oiWY1YwF4pXqpNtK9RZDreeqii6Ys5gWjtElDKKDuXxND&lt;br /&gt;
8rjw45jg.qd7cuHY7FaxL3kTs.lOcmV31WwR81Y1NvocJKHhaAImkHODJxQO&lt;br /&gt;
nO+05dgEpOlz5Bo0IYg2V3rpH5ElBQF318XO3Vf+k3CYP7gL.9byKzLHsS89&lt;br /&gt;
mcQ637en1ohOcR639OT6.wC70R+wmJC4jo8SYVdVgLpd3pJLf9HqhY4Jt.Nr&lt;br /&gt;
Ui9XNIbiNskGGyDM2CNlma1VFPx4+nmtFNlON4pwio9NhLIwiSWvC9J3IkGu&lt;br /&gt;
KSukQ0TjqVNQ0I.Ivbqo0GN5lk..qtJPCltIX6tDO9SV7zI931uIXGGOyTJl&lt;br /&gt;
BkMplfAqwXB1uqqXlnIXsmvWKbNoOWkmdAN.AWB+MUd5u4q1ZD3IoK3bxnYm&lt;br /&gt;
p+LrxONvV+zR1dpElBa64goGsFAR61AkhS+TJTJsgRgZ6MlJktrUky.UJk6q&lt;br /&gt;
Gta2dlLuZHg.QepmmyjFSuEfIWTZBGlwRx1yq6ObBCqPo9rMJ8AaJjkGL4Pf&lt;br /&gt;
m0biede9u0DMhQJ&lt;br /&gt;
-----------end_max5_patcher-----------&lt;br /&gt;
&amp;lt;/maxpat&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Running Averages===&lt;br /&gt;
&lt;br /&gt;
I also tend to use the object quite a bit in situations where I desire a running average over some finite set of events (if you want a running average for an stream or unspecified set of values, you'd use the {{maxword|name=mean}} object). Here's an example that calculates the average of the last 8 floating point input values:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;maxpat&amp;gt;&lt;br /&gt;
----------begin_max5_patcher----------&lt;br /&gt;
498.3ocuV1sajBBEG+Z8ofvkabm.9AZ6c84nYyFFkYKsJZTrc11z28UO3z1Y&lt;br /&gt;
CyHocJwnjywCG9wePN9RX.da6dw.FcM5VTPvKgAAfqYGAK1A3F99xZ9.DFtc&lt;br /&gt;
TWKz3HyqTiMR0jM7N56NMQAdIKd635x6jp+76dQo1Lhz7zMjHTbbFz71SzuV&lt;br /&gt;
5irxLlau+m4GFxx1lFgBx.FO650vv4GQNNA.dsxOwJ+zU4mUbB7MYQ+2NgId&lt;br /&gt;
L11LicolYJwSS46P1zh8lT8CDYCMNy5TNdw4tVkdP9LvIMdymUInWQmaRuBj&lt;br /&gt;
Bx4jhc0sbsU83MRmgRwafdfuoWxqufpRGu7AztiurJQEWXIJwzvHaxVSirJO&lt;br /&gt;
odQddtFML1702yDutfvRf8LYqumAGcBMIwKZx1wxGDZTwYO7yIUoXcUgvbea&lt;br /&gt;
RzYtsIWT2jKnq3Zo5+qP.XO6+XMbncru7.TKeIidm6JwfVp3ZYq5CwjeTL2I&lt;br /&gt;
qpDpOdXbkbfusV.vSrtV5JMLGng5MZRbflLuQSpCzj3MZlWEnqPS5Qw7cSSr&lt;br /&gt;
CzD6MZRbflDuQSpCzj5MZxbflLuQCyAZXdilbGnI2azPbflOy4MlxV7ttGE8&lt;br /&gt;
CKoD.YpH+8s8ylrHvTpLlPsabu3Q4g3geaAy6mpNqmJMO1aJQtufMUfbZbdM&lt;br /&gt;
7efczjOq&lt;br /&gt;
-----------end_max5_patcher-----------&lt;br /&gt;
&amp;lt;/maxpat&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===A Bucket for Symbols===&lt;br /&gt;
&lt;br /&gt;
The {{maxword|name=bucket}} object is a little unusual in that you don't need to worry about using arguments to the object in order to have it work with floating point values. In fact, {{maxword|name=bucket}} is ''so'' useful that people often ask whether or not there's a Max object that is similar but will work with symbols or lists. While there isn't a specific object, here's a Max patch that does exactly that (and it also helpfully outputs stuff in standard right-to-left order, too):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;maxpat&amp;gt;&lt;br /&gt;
----------begin_max5_patcher----------&lt;br /&gt;
778.3oc2X10bhBCEF9Z7WACWy5jOfjvd296Xmc1A0Ta5ffCDacam9eeIm.pc&lt;br /&gt;
KsDEw05zYTOGfj22mdxW7xDufYEakUA9e2+m9dduLwyCRYR30D6ErJc67rzJ&lt;br /&gt;
31BVIqpRWJCBsWSK2pg72UrorMY9lUp7LoFdBRSx0kxJYtNUqJx+cobt11q7&lt;br /&gt;
D9z3PeBYJJzG07g+u12REazsMEtsoR0yuWku78MSLzLTh42XwAMjZAnxhYO7&lt;br /&gt;
MJtUm2UjqySWIgK8iRUZV6Urcp9Oqk1lOHXWKYdnJ0yvEv0cmI6qSlX9HbfL&lt;br /&gt;
TeeoTdRPjJL9lDMPHRoG.QnI+PHhtZg3SEmBBYLKBGXcHiCOqK0gjjqUDVj+&lt;br /&gt;
4UgtSCbryzP7UkFePAkHhCETb9vpnDTfdDjEknOaTIgciMpjyvf4E3ANyVTh&lt;br /&gt;
6PL9la8AF2Ze9.wHiwcGiQWqXr2sp3LOhEQtyC5+adjKepVHuCGOm4WJWdRk&lt;br /&gt;
U1o2wwtruCRuKSfiguhPVl9AX7j18V3WDTRPnAhxDg6nDcihR6jTX9vPIWfb&lt;br /&gt;
Fk3ja5pRgXXnTvntiR5ULJ09Y9yL+0IMwcxkn9m3CYWdtc00tAC+D4xrz7ku&lt;br /&gt;
6aWXEbOAYp7+8MD.Nwj+s.rpdc04s8bih8w65oExJsJGJwN3dLSB4u2u2qVr&lt;br /&gt;
PBWG0jYkZw5BUttQCbDeJlUeZMdcaSXFfYRE2Dsu2TUoyxj.95t.3XbAoGWX&lt;br /&gt;
F+eTtPjLUPoTLcuKpSMxtf1mKnGmKDbxNIG9lnQv.lCHdf351A7iy.LRjQxB&lt;br /&gt;
X32AAig7SFA4yStTxmhN+xmGAqJbQjO97KeAheojO2A0Sv8H+yXsrKECly+c&lt;br /&gt;
vr+iodvtL1xbr9KkdntnG1ESODWp9MmO8Z5+W39zSGKoBueQ3vnhHbGQQw1Q&lt;br /&gt;
rzcQiwL8tL5.P.9311yd+viSrupg2D03NLZTcmS0RniycMyd13GFm0Qj0cbh&lt;br /&gt;
vc2Y2.a550OJKqZTHXr585+PQoIjEBgpbaHrC9fR4ip16mBYRKq25ttde6aJ&lt;br /&gt;
sa6dqfELwzOuN4u.mi5K2B&lt;br /&gt;
-----------end_max5_patcher-----------&lt;br /&gt;
&amp;lt;/maxpat&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Arbitrary List Rotation ===&lt;br /&gt;
&lt;br /&gt;
One way to think of the {{maxword|name=bucket}} object is a as an object that adds new input values and rotates the list by one position. While you can rotate a list forward or backward using the ''r2l'' and ''l2r'' messages to the {{maxword|name=bucket}} object, performing arbitrary list rotations can be done using the {{maxword|name=zl}} object and specifying the '''rot''' option:&lt;br /&gt;
&lt;br /&gt;
[[File:Bucket-in-action-2.png]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;maxpat&amp;gt;&lt;br /&gt;
----------begin_max5_patcher----------&lt;br /&gt;
1116.3oc2Y1zbaqBEFds8uBtZtK80iPf9HcWW1scamNYP1DGZk.O.xIoc5+8&lt;br /&gt;
q.jh+H1wXEEZFOYhrEBc3bdz6AyA86oShJEORUQfOA9FXxjeOcxDaSlFlzc9&lt;br /&gt;
jnZxiKpHJa2hVHpqobczL20zzG011+xcfmDMfGHbMPK.RglnolljfJlRCJeB&lt;br /&gt;
TKjTf9dBGH3TvZghoYB9LPixzLE7qJysADk+ftPOG7UZMstjJM2h1YPFekwP&lt;br /&gt;
zMTNf2XtnB7.qpBTQIanfUj0p+o2ypXb5BQC25d3tFuSv0bRM05xeVxHU8cu&lt;br /&gt;
0bLdEUaiRXWiqkTUavRL94sxVuxQJDFNOdFHAgMeD2c.78slRzn6sUbusH5E&lt;br /&gt;
22F.6ZGTl4dQ4Hm4JLejsqoL9qh8Kq+BSl2aK1Ra.zRp+qnO.tStpzNdyiMM&lt;br /&gt;
7moSMGl44iUGMiFFl1OfS5Z00j9o0TWzFwLxFPTIguJ54H7XXovgEKjSs3MA&lt;br /&gt;
dJnfNFTPQOacYaXnoxaobRYk8VFBdpoJEYE8EpdEUC9W3EhsjihM3ovlOrJM&lt;br /&gt;
2bDaOBu4hXENZ.73TyBXxWzl7S4SZimZlJn8KptrU.guDzFfqaz1L91t2ToG&lt;br /&gt;
EU2qjlgw34o85ojBaVVxkkkgvWeoYoNoCLsXm7rKDKIich1GJ.gd6.BdMCH7&lt;br /&gt;
HnfhupAzaWAkby0LfPucETRwUMfFAET90LfRFAET1UMfFAED58EPaHxm4yGJ&lt;br /&gt;
zkWXV3XBJevnC9pIe89sps50k2RzZIqrQS29MUGC6fnAUUMTwc8M229tluRv&lt;br /&gt;
WcbbtW2T2KjZO5WO2PG4ZLdaI7jpWFQGqWcSn0CuC5xFlh0aC20sRp9OtT8E&lt;br /&gt;
8gV5+hxSzfR.68UaYEUybZLezVYtZcSrmbgZqznQrT1TLHd2+9KVTKNta+Ub&lt;br /&gt;
0y51dDXwkAmAUWaaNmVvu.c.7U0AdLubRd+rJG77e2XAEMd4.x1ZvE0.X767&lt;br /&gt;
S3yl.f1YmKxSGxbqvwT+6j8ayB9atoN2XwABieC5+3QTyzsyrnQgImbpSyzl&lt;br /&gt;
9HYPtoGFjlIeDoxZxheBX6+2ERnhQT0zuPuNwS1MC.OYiHdJaV7SpFTLJ+da&lt;br /&gt;
wqJZN0+9fKX1vw0d+.r89ru1gCdgJ1A2z99LTIZjK5Cit4ylA1N7KoJMiae2&lt;br /&gt;
C6zoz85y8rkKo7c2+ykLkYsXKO8Jy80cLiT9Y7FyF.FH24fg539S1d976Mcx&lt;br /&gt;
NGcfgiNPOoSVvnS54nSb3nSrmzIMXzAeFuwrueAhNGLTmlN3fQGz4nSQ3nSg&lt;br /&gt;
mzAEL5jbN5jGN5j6IcRBFcfmiNYgiNYdRGXvny47Fyd8EJ5f7jNgwc74YEDG&lt;br /&gt;
rGV93NgKOGOBKMslsbsfw0psU4lZV.drcuuvaOa63Ldq.vC+GGLZ5yjlv3fI&lt;br /&gt;
0fd4OgqxCX5GJsOzmeUIObOs7QKCGZoGtpXIqWugJUc1z5Js07+CgzbZ1L6o&lt;br /&gt;
Lt6TaA6QRpYG7c829pBhHx1Rt0s0a2Hc07+XgY6EZGm+L8+wpYGFn&lt;br /&gt;
-----------end_max5_patcher-----------&lt;br /&gt;
&amp;lt;/maxpat&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Third-Party Max externals similar to the {{maxword|name=bucket}} object==&lt;br /&gt;
&lt;br /&gt;
[//www.maxobjects.com/?request=bucket Maxobjects.com listing for the bucket object]&lt;br /&gt;
&lt;br /&gt;
==People who looked at/used this object also looked at....==&lt;br /&gt;
&lt;br /&gt;
The [http://www.cycling74.com/docs/max6/dynamic/c74_docs.html#zl zl] object (in its '''zl rot''' form). Useful for performing rotations of lists where the list offset is an odd number greater than 1.&lt;br /&gt;
&lt;br /&gt;
The [http://www.cycling74.com/docs/max6/dynamic/c74_docs.html#cycle cycle] object&lt;br /&gt;
&lt;br /&gt;
==Errors or Clarifications==&lt;br /&gt;
&lt;br /&gt;
(please list things that you believe to be errors or omissions from the existing refpage)&lt;br /&gt;
&lt;br /&gt;
[[Category:Max Refpage extensions ( symbol, A - F)]]&lt;br /&gt;
[[Category:Refpage extensions]]&lt;/div&gt;</summary>
		<author><name>Gtaylor@rtqe.net</name></author>	</entry>

	<entry>
		<id>http://cycling74.com/wiki/index.php?title=File:Bucket-in-action-2.png</id>
		<title>File:Bucket-in-action-2.png</title>
		<link rel="alternate" type="text/html" href="http://cycling74.com/wiki/index.php?title=File:Bucket-in-action-2.png"/>
				<updated>2013-04-30T06:04:35Z</updated>
		
		<summary type="html">&lt;p&gt;Gtaylor@rtqe.net: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Gtaylor@rtqe.net</name></author>	</entry>

	<entry>
		<id>http://cycling74.com/wiki/index.php?title=bucket</id>
		<title>bucket</title>
		<link rel="alternate" type="text/html" href="http://cycling74.com/wiki/index.php?title=bucket"/>
				<updated>2013-04-30T05:46:11Z</updated>
		
		<summary type="html">&lt;p&gt;Gtaylor@rtqe.net: /* {{maxword|name=bucket}} Tips and Workarounds */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==[//www.cycling74.com/docs/max6/dynamic/c74_docs.html#bucket bucket online refpage]==&lt;br /&gt;
&lt;br /&gt;
==Using the {{maxword|name=bucket}} object==&lt;br /&gt;
&lt;br /&gt;
The {{maxword|name=bucket}} object implements a [//en.wikipedia.org/wiki/Bucket_brigade bucket brigade] device (in the electronics world, this is sometimes referred to as [//en.wikipedia.org/wiki/Bucket-brigade_device a discrete time-analogue delay line]). As the examples below suggest, it's useful for single-sample delay lines, calculating averages, computing velocity and acceleration, and permutating lists by rotating them.&lt;br /&gt;
&lt;br /&gt;
=={{maxword|name=bucket}} Tutorials==&lt;br /&gt;
&lt;br /&gt;
In the Max tutorial on abstractions, you can find a classic example of why the {{maxword|name=bucket}} object is so useful - [//www.cycling74.com/docs/max6/dynamic/c74_docs.html#basicchapter15 this Max tutorial] demonstrates its use as a single sample delay for number values useful for constructing drawing commands.&lt;br /&gt;
&lt;br /&gt;
=={{maxword|name=bucket}} Tips and Workarounds==&lt;br /&gt;
&lt;br /&gt;
===Velocity and Acceleration===&lt;br /&gt;
&lt;br /&gt;
Lots of people use the &amp;lt;strong&amp;gt;bucket&amp;lt;/strong&amp;gt; object for shifting data in series, it's computationally useful for calculating first and second derivatives for streams of data. The terms &amp;quot;first and second derivative&amp;quot; are math-speak for keeping track of:&lt;br /&gt;
&lt;br /&gt;
* the rate that things are changing (that's what velocity (the first derivative) is - the rate of change in a value over time.&lt;br /&gt;
&lt;br /&gt;
* the ''rate of the rate'' that things are changing - that's what acceleration (the second derivative) is.&lt;br /&gt;
&lt;br /&gt;
[[File:Bucket-in-action.png]]&lt;br /&gt;
&lt;br /&gt;
Here's a patch that does that:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;maxpat&amp;gt;&lt;br /&gt;
----------begin_max5_patcher----------&lt;br /&gt;
863.3oc4XFrbaBCDF9r8SgJmZmwICRf.bu0mgbrISGLHaqDP3QHbcZl7tWoE&lt;br /&gt;
vA2ZrAFC8Pu.dEBs69oesR32lOyZU1AVtE5qnuilM6s4ylAMYZXVk8LqzvCQ&lt;br /&gt;
Ig4P2rhxRSYBk0hxmoXGTP6psLjLTwPYqQM+cz1PwF1ihOmyhxDwnXljuOTw&lt;br /&gt;
2y9xih5QIgKzOsP.CEopQQQJWjvTfewUMtKTEskK17CIKRUF2d1d2au.4rz2&lt;br /&gt;
bC6EXt4pMPOU8R7XHDyV87cjk09bclPIBSYvi9ljGlX8giyJT0d1tt+xMq.6&lt;br /&gt;
6saLB47eAi.lbr4cRVtlP5bLSbRXRg.y1L.n5KnmLuz6ymatr3FNGbj6q4xb&lt;br /&gt;
0HfcW+flXGiuH1CFOrO..pc0JlzpmYrS.AR0xYPJbkX2RB612DlbzwRcuUL4&lt;br /&gt;
OXhvUIrSfw4Ubkih50crx.0haDGHqUZIf0fTXoEIJddBOt+TpZ4HojOXLXgc&lt;br /&gt;
BZgSjgSiblRGR53tzw2QONubzS5tjqds70nsQKCplbLUs7oqXBOpXpkRV0wn&lt;br /&gt;
i6okrlF3px1rQO38cQJApG4srd04EViZednh6.TO6RtoVCUkqcTCgCtYZH6i&lt;br /&gt;
0AmJwff8ScN7W63oiWY1YwF4pXqpNtK9RZDreeqii6Ys5gWjtElDKKDuXxND&lt;br /&gt;
8rjw45jg.qd7cuHY7FaxL3kTs.lOcmV31WwR81Y1NvocJKHhaAImkHODJxQO&lt;br /&gt;
nO+05dgEpOlz5Bo0IYg2V3rpH5ElBQF318XO3Vf+k3CYP7gL.9byKzLHsS89&lt;br /&gt;
mcQ637en1ohOcR639OT6.wC70R+wmJC4jo8SYVdVgLpd3pJLf9HqhY4Jt.Nr&lt;br /&gt;
Ui9XNIbiNskGGyDM2CNlma1VFPx4+nmtFNlON4pwio9NhLIwiSWvC9J3IkGu&lt;br /&gt;
KSukQ0TjqVNQ0I.Ivbqo0GN5lk..qtJPCltIX6tDO9SV7zI931uIXGGOyTJl&lt;br /&gt;
BkMplfAqwXB1uqqXlnIXsmvWKbNoOWkmdAN.AWB+MUd5u4q1ZD3IoK3bxnYm&lt;br /&gt;
p+LrxONvV+zR1dpElBa64goGsFAR61AkhS+TJTJsgRgZ6MlJktrUky.UJk6q&lt;br /&gt;
Gta2dlLuZHg.QepmmyjFSuEfIWTZBGlwRx1yq6ObBCqPo9rMJ8AaJjkGL4Pf&lt;br /&gt;
m0biede9u0DMhQJ&lt;br /&gt;
-----------end_max5_patcher-----------&lt;br /&gt;
&amp;lt;/maxpat&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Running Averages===&lt;br /&gt;
&lt;br /&gt;
I also tend to use the object quite a bit in situations where I desire a running average over some finite set of events (if you want a running average for an stream or unspecified set of values, you'd use the {{maxword|name=mean}} object). Here's an example that calculates the average of the last 8 floating point input values:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;maxpat&amp;gt;&lt;br /&gt;
----------begin_max5_patcher----------&lt;br /&gt;
498.3ocuV1sajBBEG+Z8ofvkabm.9AZ6c84nYyFFkYKsJZTrc11z28UO3z1Y&lt;br /&gt;
CyHocJwnjywCG9wePN9RX.da6dw.FcM5VTPvKgAAfqYGAK1A3F99xZ9.DFtc&lt;br /&gt;
TWKz3HyqTiMR0jM7N56NMQAdIKd635x6jp+76dQo1Lhz7zMjHTbbFz71SzuV&lt;br /&gt;
5irxLlau+m4GFxx1lFgBx.FO650vv4GQNNA.dsxOwJ+zU4mUbB7MYQ+2NgId&lt;br /&gt;
L11LicolYJwSS46P1zh8lT8CDYCMNy5TNdw4tVkdP9LvIMdymUInWQmaRuBj&lt;br /&gt;
Bx4jhc0sbsU83MRmgRwafdfuoWxqufpRGu7AztiurJQEWXIJwzvHaxVSirJO&lt;br /&gt;
odQddtFML1702yDutfvRf8LYqumAGcBMIwKZx1wxGDZTwYO7yIUoXcUgvbea&lt;br /&gt;
RzYtsIWT2jKnq3Zo5+qP.XO6+XMbncru7.TKeIidm6JwfVp3ZYq5CwjeTL2I&lt;br /&gt;
qpDpOdXbkbfusV.vSrtV5JMLGng5MZRbflLuQSpCzj3MZlWEnqPS5Qw7cSSr&lt;br /&gt;
CzD6MZRbflDuQSpCzj5MZxbflLuQCyAZXdilbGnI2azPbflOy4MlxV7ttGE8&lt;br /&gt;
CKoD.YpH+8s8ylrHvTpLlPsabu3Q4g3geaAy6mpNqmJMO1aJQtufMUfbZbdM&lt;br /&gt;
7efczjOq&lt;br /&gt;
-----------end_max5_patcher-----------&lt;br /&gt;
&amp;lt;/maxpat&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===A Bucket for Symbols===&lt;br /&gt;
&lt;br /&gt;
The {{maxword|name=bucket}} object is a little unusual in that you don't need to worry about using arguments to the object in order to have it work with floating point values. In fact, {{maxword|name=bucket}} is ''so'' useful that people often ask whether or not there's a Max object that is similar but will work with symbols or lists. While there isn't a specific object, here's a Max patch that does exactly that (and it also helpfully outputs stuff in standard right-to-left order, too):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;maxpat&amp;gt;&lt;br /&gt;
----------begin_max5_patcher----------&lt;br /&gt;
778.3oc2X10bhBCEF9Z7WACWy5jOfjvd296Xmc1A0Ta5ffCDacam9eeIm.pc&lt;br /&gt;
KsDEw05zYTOGfj22mdxW7xDufYEakUA9e2+m9dduLwyCRYR30D6ErJc67rzJ&lt;br /&gt;
31BVIqpRWJCBsWSK2pg72UrorMY9lUp7LoFdBRSx0kxJYtNUqJx+cobt11q7&lt;br /&gt;
D9z3PeBYJJzG07g+u12REazsMEtsoR0yuWku78MSLzLTh42XwAMjZAnxhYO7&lt;br /&gt;
MJtUm2UjqySWIgK8iRUZV6Urcp9Oqk1lOHXWKYdnJ0yvEv0cmI6qSlX9HbfL&lt;br /&gt;
TeeoTdRPjJL9lDMPHRoG.QnI+PHhtZg3SEmBBYLKBGXcHiCOqK0gjjqUDVj+&lt;br /&gt;
4UgtSCbryzP7UkFePAkHhCETb9vpnDTfdDjEknOaTIgciMpjyvf4E3ANyVTh&lt;br /&gt;
6PL9la8AF2Ze9.wHiwcGiQWqXr2sp3LOhEQtyC5+adjKepVHuCGOm4WJWdRk&lt;br /&gt;
U1o2wwtruCRuKSfiguhPVl9AX7j18V3WDTRPnAhxDg6nDcihR6jTX9vPIWfb&lt;br /&gt;
Fk3ja5pRgXXnTvntiR5ULJ09Y9yL+0IMwcxkn9m3CYWdtc00tAC+D4xrz7ku&lt;br /&gt;
6aWXEbOAYp7+8MD.Nwj+s.rpdc04s8bih8w65oExJsJGJwN3dLSB4u2u2qVr&lt;br /&gt;
PBWG0jYkZw5BUttQCbDeJlUeZMdcaSXFfYRE2Dsu2TUoyxj.95t.3XbAoGWX&lt;br /&gt;
F+eTtPjLUPoTLcuKpSMxtf1mKnGmKDbxNIG9lnQv.lCHdf351A7iy.LRjQxB&lt;br /&gt;
X32AAig7SFA4yStTxmhN+xmGAqJbQjO97KeAheojO2A0Sv8H+yXsrKECly+c&lt;br /&gt;
vr+iodvtL1xbr9KkdntnG1ESODWp9MmO8Z5+W39zSGKoBueQ3vnhHbGQQw1Q&lt;br /&gt;
rzcQiwL8tL5.P.9311yd+viSrupg2D03NLZTcmS0RniycMyd13GFm0Qj0cbh&lt;br /&gt;
vc2Y2.a550OJKqZTHXr585+PQoIjEBgpbaHrC9fR4ip16mBYRKq25ttde6aJ&lt;br /&gt;
sa6dqfELwzOuN4u.mi5K2B&lt;br /&gt;
-----------end_max5_patcher-----------&lt;br /&gt;
&amp;lt;/maxpat&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Third-Party Max externals similar to the {{maxword|name=bucket}} object==&lt;br /&gt;
&lt;br /&gt;
[//www.maxobjects.com/?request=bucket Maxobjects.com listing for the bucket object]&lt;br /&gt;
&lt;br /&gt;
==People who looked at/used this object also looked at....==&lt;br /&gt;
&lt;br /&gt;
The [http://www.cycling74.com/docs/max6/dynamic/c74_docs.html#zl zl] object (in its '''zl rot''' form). Useful for performing rotations of lists where the list offset is an odd number greater than 1.&lt;br /&gt;
&lt;br /&gt;
The [http://www.cycling74.com/docs/max6/dynamic/c74_docs.html#cycle cycle] object&lt;br /&gt;
&lt;br /&gt;
==Errors or Clarifications==&lt;br /&gt;
&lt;br /&gt;
(please list things that you believe to be errors or omissions from the existing refpage)&lt;br /&gt;
&lt;br /&gt;
[[Category:Max Refpage extensions ( symbol, A - F)]]&lt;br /&gt;
[[Category:Refpage extensions]]&lt;/div&gt;</summary>
		<author><name>Gtaylor@rtqe.net</name></author>	</entry>

	<entry>
		<id>http://cycling74.com/wiki/index.php?title=bucket</id>
		<title>bucket</title>
		<link rel="alternate" type="text/html" href="http://cycling74.com/wiki/index.php?title=bucket"/>
				<updated>2013-04-30T05:42:35Z</updated>
		
		<summary type="html">&lt;p&gt;Gtaylor@rtqe.net: /* People who looked at/used this object also looked at.... */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==[//www.cycling74.com/docs/max6/dynamic/c74_docs.html#bucket bucket online refpage]==&lt;br /&gt;
&lt;br /&gt;
==Using the {{maxword|name=bucket}} object==&lt;br /&gt;
&lt;br /&gt;
The {{maxword|name=bucket}} object implements a [//en.wikipedia.org/wiki/Bucket_brigade bucket brigade] device (in the electronics world, this is sometimes referred to as [//en.wikipedia.org/wiki/Bucket-brigade_device a discrete time-analogue delay line]). As the examples below suggest, it's useful for single-sample delay lines, calculating averages, computing velocity and acceleration, and permutating lists by rotating them.&lt;br /&gt;
&lt;br /&gt;
=={{maxword|name=bucket}} Tutorials==&lt;br /&gt;
&lt;br /&gt;
In the Max tutorial on abstractions, you can find a classic example of why the {{maxword|name=bucket}} object is so useful - [//www.cycling74.com/docs/max6/dynamic/c74_docs.html#basicchapter15 this Max tutorial] demonstrates its use as a single sample delay for number values useful for constructing drawing commands.&lt;br /&gt;
&lt;br /&gt;
=={{maxword|name=bucket}} Tips and Workarounds==&lt;br /&gt;
&lt;br /&gt;
Lots of people use the &amp;lt;strong&amp;gt;bucket&amp;lt;/strong&amp;gt; object for shifting data in series, it's computationally useful for calculating first and second derivatives for streams of data. The terms &amp;quot;first and second derivative&amp;quot; are math-speak for keeping track of:&lt;br /&gt;
&lt;br /&gt;
* the rate that things are changing (that's what velocity (the first derivative) is - the rate of change in a value over time.&lt;br /&gt;
&lt;br /&gt;
* the ''rate of the rate'' that things are changing - that's what acceleration (the second derivative) is.&lt;br /&gt;
&lt;br /&gt;
[[File:Bucket-in-action.png]]&lt;br /&gt;
&lt;br /&gt;
Here's a patch that does that:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;maxpat&amp;gt;&lt;br /&gt;
----------begin_max5_patcher----------&lt;br /&gt;
863.3oc4XFrbaBCDF9r8SgJmZmwICRf.bu0mgbrISGLHaqDP3QHbcZl7tWoE&lt;br /&gt;
vA2ZrAFC8Pu.dEBs69oesR32lOyZU1AVtE5qnuilM6s4ylAMYZXVk8LqzvCQ&lt;br /&gt;
Ig4P2rhxRSYBk0hxmoXGTP6psLjLTwPYqQM+cz1PwF1ihOmyhxDwnXljuOTw&lt;br /&gt;
2y9xih5QIgKzOsP.CEopQQQJWjvTfewUMtKTEskK17CIKRUF2d1d2au.4rz2&lt;br /&gt;
bC6EXt4pMPOU8R7XHDyV87cjk09bclPIBSYvi9ljGlX8giyJT0d1tt+xMq.6&lt;br /&gt;
6saLB47eAi.lbr4cRVtlP5bLSbRXRg.y1L.n5KnmLuz6ymatr3FNGbj6q4xb&lt;br /&gt;
0HfcW+flXGiuH1CFOrO..pc0JlzpmYrS.AR0xYPJbkX2RB612DlbzwRcuUL4&lt;br /&gt;
OXhvUIrSfw4Ubkih50crx.0haDGHqUZIf0fTXoEIJddBOt+TpZ4HojOXLXgc&lt;br /&gt;
BZgSjgSiblRGR53tzw2QONubzS5tjqds70nsQKCplbLUs7oqXBOpXpkRV0wn&lt;br /&gt;
i6okrlF3px1rQO38cQJApG4srd04EViZednh6.TO6RtoVCUkqcTCgCtYZH6i&lt;br /&gt;
0AmJwff8ScN7W63oiWY1YwF4pXqpNtK9RZDreeqii6Ys5gWjtElDKKDuXxND&lt;br /&gt;
8rjw45jg.qd7cuHY7FaxL3kTs.lOcmV31WwR81Y1NvocJKHhaAImkHODJxQO&lt;br /&gt;
nO+05dgEpOlz5Bo0IYg2V3rpH5ElBQF318XO3Vf+k3CYP7gL.9byKzLHsS89&lt;br /&gt;
mcQ637en1ohOcR639OT6.wC70R+wmJC4jo8SYVdVgLpd3pJLf9HqhY4Jt.Nr&lt;br /&gt;
Ui9XNIbiNskGGyDM2CNlma1VFPx4+nmtFNlON4pwio9NhLIwiSWvC9J3IkGu&lt;br /&gt;
KSukQ0TjqVNQ0I.Ivbqo0GN5lk..qtJPCltIX6tDO9SV7zI931uIXGGOyTJl&lt;br /&gt;
BkMplfAqwXB1uqqXlnIXsmvWKbNoOWkmdAN.AWB+MUd5u4q1ZD3IoK3bxnYm&lt;br /&gt;
p+LrxONvV+zR1dpElBa64goGsFAR61AkhS+TJTJsgRgZ6MlJktrUky.UJk6q&lt;br /&gt;
Gta2dlLuZHg.QepmmyjFSuEfIWTZBGlwRx1yq6ObBCqPo9rMJ8AaJjkGL4Pf&lt;br /&gt;
m0biede9u0DMhQJ&lt;br /&gt;
-----------end_max5_patcher-----------&lt;br /&gt;
&amp;lt;/maxpat&amp;gt;&lt;br /&gt;
&lt;br /&gt;
I also tend to use the object quite a bit in situations where I desire a running average over some finite set of events (if you want a running average for an stream or unspecified set of values, you'd use the {{maxword|name=mean}} object). Here's an example that calculates the average of the last 8 floating point input values:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;maxpat&amp;gt;&lt;br /&gt;
----------begin_max5_patcher----------&lt;br /&gt;
498.3ocuV1sajBBEG+Z8ofvkabm.9AZ6c84nYyFFkYKsJZTrc11z28UO3z1Y&lt;br /&gt;
CyHocJwnjywCG9wePN9RX.da6dw.FcM5VTPvKgAAfqYGAK1A3F99xZ9.DFtc&lt;br /&gt;
TWKz3HyqTiMR0jM7N56NMQAdIKd635x6jp+76dQo1Lhz7zMjHTbbFz71SzuV&lt;br /&gt;
5irxLlau+m4GFxx1lFgBx.FO650vv4GQNNA.dsxOwJ+zU4mUbB7MYQ+2NgId&lt;br /&gt;
L11LicolYJwSS46P1zh8lT8CDYCMNy5TNdw4tVkdP9LvIMdymUInWQmaRuBj&lt;br /&gt;
Bx4jhc0sbsU83MRmgRwafdfuoWxqufpRGu7AztiurJQEWXIJwzvHaxVSirJO&lt;br /&gt;
odQddtFML1702yDutfvRf8LYqumAGcBMIwKZx1wxGDZTwYO7yIUoXcUgvbea&lt;br /&gt;
RzYtsIWT2jKnq3Zo5+qP.XO6+XMbncru7.TKeIidm6JwfVp3ZYq5CwjeTL2I&lt;br /&gt;
qpDpOdXbkbfusV.vSrtV5JMLGng5MZRbflLuQSpCzj3MZlWEnqPS5Qw7cSSr&lt;br /&gt;
CzD6MZRbflDuQSpCzj5MZxbflLuQCyAZXdilbGnI2azPbflOy4MlxV7ttGE8&lt;br /&gt;
CKoD.YpH+8s8ylrHvTpLlPsabu3Q4g3geaAy6mpNqmJMO1aJQtufMUfbZbdM&lt;br /&gt;
7efczjOq&lt;br /&gt;
-----------end_max5_patcher-----------&lt;br /&gt;
&amp;lt;/maxpat&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The {{maxword|name=bucket}} object is a little unusual in that you don't need to worry about using arguments to the object in order to have it work with floating point values. In fact, {{maxword|name=bucket}} is ''so'' useful that people often ask whether or not there's a Max object that is similar but will work with symbols or lists. While there isn't a specific object, here's a Max patch that does exactly that (and it also helpfully outputs stuff in standard right-to-left order, too):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;maxpat&amp;gt;&lt;br /&gt;
----------begin_max5_patcher----------&lt;br /&gt;
778.3oc2X10bhBCEF9Z7WACWy5jOfjvd296Xmc1A0Ta5ffCDacam9eeIm.pc&lt;br /&gt;
KsDEw05zYTOGfj22mdxW7xDufYEakUA9e2+m9dduLwyCRYR30D6ErJc67rzJ&lt;br /&gt;
31BVIqpRWJCBsWSK2pg72UrorMY9lUp7LoFdBRSx0kxJYtNUqJx+cobt11q7&lt;br /&gt;
D9z3PeBYJJzG07g+u12REazsMEtsoR0yuWku78MSLzLTh42XwAMjZAnxhYO7&lt;br /&gt;
MJtUm2UjqySWIgK8iRUZV6Urcp9Oqk1lOHXWKYdnJ0yvEv0cmI6qSlX9HbfL&lt;br /&gt;
TeeoTdRPjJL9lDMPHRoG.QnI+PHhtZg3SEmBBYLKBGXcHiCOqK0gjjqUDVj+&lt;br /&gt;
4UgtSCbryzP7UkFePAkHhCETb9vpnDTfdDjEknOaTIgciMpjyvf4E3ANyVTh&lt;br /&gt;
6PL9la8AF2Ze9.wHiwcGiQWqXr2sp3LOhEQtyC5+adjKepVHuCGOm4WJWdRk&lt;br /&gt;
U1o2wwtruCRuKSfiguhPVl9AX7j18V3WDTRPnAhxDg6nDcihR6jTX9vPIWfb&lt;br /&gt;
Fk3ja5pRgXXnTvntiR5ULJ09Y9yL+0IMwcxkn9m3CYWdtc00tAC+D4xrz7ku&lt;br /&gt;
6aWXEbOAYp7+8MD.Nwj+s.rpdc04s8bih8w65oExJsJGJwN3dLSB4u2u2qVr&lt;br /&gt;
PBWG0jYkZw5BUttQCbDeJlUeZMdcaSXFfYRE2Dsu2TUoyxj.95t.3XbAoGWX&lt;br /&gt;
F+eTtPjLUPoTLcuKpSMxtf1mKnGmKDbxNIG9lnQv.lCHdf351A7iy.LRjQxB&lt;br /&gt;
X32AAig7SFA4yStTxmhN+xmGAqJbQjO97KeAheojO2A0Sv8H+yXsrKECly+c&lt;br /&gt;
vr+iodvtL1xbr9KkdntnG1ESODWp9MmO8Z5+W39zSGKoBueQ3vnhHbGQQw1Q&lt;br /&gt;
rzcQiwL8tL5.P.9311yd+viSrupg2D03NLZTcmS0RniycMyd13GFm0Qj0cbh&lt;br /&gt;
vc2Y2.a550OJKqZTHXr585+PQoIjEBgpbaHrC9fR4ip16mBYRKq25ttde6aJ&lt;br /&gt;
sa6dqfELwzOuN4u.mi5K2B&lt;br /&gt;
-----------end_max5_patcher-----------&lt;br /&gt;
&amp;lt;/maxpat&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Third-Party Max externals similar to the {{maxword|name=bucket}} object==&lt;br /&gt;
&lt;br /&gt;
[//www.maxobjects.com/?request=bucket Maxobjects.com listing for the bucket object]&lt;br /&gt;
&lt;br /&gt;
==People who looked at/used this object also looked at....==&lt;br /&gt;
&lt;br /&gt;
The [http://www.cycling74.com/docs/max6/dynamic/c74_docs.html#zl zl] object (in its '''zl rot''' form). Useful for performing rotations of lists where the list offset is an odd number greater than 1.&lt;br /&gt;
&lt;br /&gt;
The [http://www.cycling74.com/docs/max6/dynamic/c74_docs.html#cycle cycle] object&lt;br /&gt;
&lt;br /&gt;
==Errors or Clarifications==&lt;br /&gt;
&lt;br /&gt;
(please list things that you believe to be errors or omissions from the existing refpage)&lt;br /&gt;
&lt;br /&gt;
[[Category:Max Refpage extensions ( symbol, A - F)]]&lt;br /&gt;
[[Category:Refpage extensions]]&lt;/div&gt;</summary>
		<author><name>Gtaylor@rtqe.net</name></author>	</entry>

	<entry>
		<id>http://cycling74.com/wiki/index.php?title=bucket</id>
		<title>bucket</title>
		<link rel="alternate" type="text/html" href="http://cycling74.com/wiki/index.php?title=bucket"/>
				<updated>2013-04-30T05:42:16Z</updated>
		
		<summary type="html">&lt;p&gt;Gtaylor@rtqe.net: /* People who looked at/used this object also looked at.... */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==[//www.cycling74.com/docs/max6/dynamic/c74_docs.html#bucket bucket online refpage]==&lt;br /&gt;
&lt;br /&gt;
==Using the {{maxword|name=bucket}} object==&lt;br /&gt;
&lt;br /&gt;
The {{maxword|name=bucket}} object implements a [//en.wikipedia.org/wiki/Bucket_brigade bucket brigade] device (in the electronics world, this is sometimes referred to as [//en.wikipedia.org/wiki/Bucket-brigade_device a discrete time-analogue delay line]). As the examples below suggest, it's useful for single-sample delay lines, calculating averages, computing velocity and acceleration, and permutating lists by rotating them.&lt;br /&gt;
&lt;br /&gt;
=={{maxword|name=bucket}} Tutorials==&lt;br /&gt;
&lt;br /&gt;
In the Max tutorial on abstractions, you can find a classic example of why the {{maxword|name=bucket}} object is so useful - [//www.cycling74.com/docs/max6/dynamic/c74_docs.html#basicchapter15 this Max tutorial] demonstrates its use as a single sample delay for number values useful for constructing drawing commands.&lt;br /&gt;
&lt;br /&gt;
=={{maxword|name=bucket}} Tips and Workarounds==&lt;br /&gt;
&lt;br /&gt;
Lots of people use the &amp;lt;strong&amp;gt;bucket&amp;lt;/strong&amp;gt; object for shifting data in series, it's computationally useful for calculating first and second derivatives for streams of data. The terms &amp;quot;first and second derivative&amp;quot; are math-speak for keeping track of:&lt;br /&gt;
&lt;br /&gt;
* the rate that things are changing (that's what velocity (the first derivative) is - the rate of change in a value over time.&lt;br /&gt;
&lt;br /&gt;
* the ''rate of the rate'' that things are changing - that's what acceleration (the second derivative) is.&lt;br /&gt;
&lt;br /&gt;
[[File:Bucket-in-action.png]]&lt;br /&gt;
&lt;br /&gt;
Here's a patch that does that:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;maxpat&amp;gt;&lt;br /&gt;
----------begin_max5_patcher----------&lt;br /&gt;
863.3oc4XFrbaBCDF9r8SgJmZmwICRf.bu0mgbrISGLHaqDP3QHbcZl7tWoE&lt;br /&gt;
vA2ZrAFC8Pu.dEBs69oesR32lOyZU1AVtE5qnuilM6s4ylAMYZXVk8LqzvCQ&lt;br /&gt;
Ig4P2rhxRSYBk0hxmoXGTP6psLjLTwPYqQM+cz1PwF1ihOmyhxDwnXljuOTw&lt;br /&gt;
2y9xih5QIgKzOsP.CEopQQQJWjvTfewUMtKTEskK17CIKRUF2d1d2au.4rz2&lt;br /&gt;
bC6EXt4pMPOU8R7XHDyV87cjk09bclPIBSYvi9ljGlX8giyJT0d1tt+xMq.6&lt;br /&gt;
6saLB47eAi.lbr4cRVtlP5bLSbRXRg.y1L.n5KnmLuz6ymatr3FNGbj6q4xb&lt;br /&gt;
0HfcW+flXGiuH1CFOrO..pc0JlzpmYrS.AR0xYPJbkX2RB612DlbzwRcuUL4&lt;br /&gt;
OXhvUIrSfw4Ubkih50crx.0haDGHqUZIf0fTXoEIJddBOt+TpZ4HojOXLXgc&lt;br /&gt;
BZgSjgSiblRGR53tzw2QONubzS5tjqds70nsQKCplbLUs7oqXBOpXpkRV0wn&lt;br /&gt;
i6okrlF3px1rQO38cQJApG4srd04EViZednh6.TO6RtoVCUkqcTCgCtYZH6i&lt;br /&gt;
0AmJwff8ScN7W63oiWY1YwF4pXqpNtK9RZDreeqii6Ys5gWjtElDKKDuXxND&lt;br /&gt;
8rjw45jg.qd7cuHY7FaxL3kTs.lOcmV31WwR81Y1NvocJKHhaAImkHODJxQO&lt;br /&gt;
nO+05dgEpOlz5Bo0IYg2V3rpH5ElBQF318XO3Vf+k3CYP7gL.9byKzLHsS89&lt;br /&gt;
mcQ637en1ohOcR639OT6.wC70R+wmJC4jo8SYVdVgLpd3pJLf9HqhY4Jt.Nr&lt;br /&gt;
Ui9XNIbiNskGGyDM2CNlma1VFPx4+nmtFNlON4pwio9NhLIwiSWvC9J3IkGu&lt;br /&gt;
KSukQ0TjqVNQ0I.Ivbqo0GN5lk..qtJPCltIX6tDO9SV7zI931uIXGGOyTJl&lt;br /&gt;
BkMplfAqwXB1uqqXlnIXsmvWKbNoOWkmdAN.AWB+MUd5u4q1ZD3IoK3bxnYm&lt;br /&gt;
p+LrxONvV+zR1dpElBa64goGsFAR61AkhS+TJTJsgRgZ6MlJktrUky.UJk6q&lt;br /&gt;
Gta2dlLuZHg.QepmmyjFSuEfIWTZBGlwRx1yq6ObBCqPo9rMJ8AaJjkGL4Pf&lt;br /&gt;
m0biede9u0DMhQJ&lt;br /&gt;
-----------end_max5_patcher-----------&lt;br /&gt;
&amp;lt;/maxpat&amp;gt;&lt;br /&gt;
&lt;br /&gt;
I also tend to use the object quite a bit in situations where I desire a running average over some finite set of events (if you want a running average for an stream or unspecified set of values, you'd use the {{maxword|name=mean}} object). Here's an example that calculates the average of the last 8 floating point input values:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;maxpat&amp;gt;&lt;br /&gt;
----------begin_max5_patcher----------&lt;br /&gt;
498.3ocuV1sajBBEG+Z8ofvkabm.9AZ6c84nYyFFkYKsJZTrc11z28UO3z1Y&lt;br /&gt;
CyHocJwnjywCG9wePN9RX.da6dw.FcM5VTPvKgAAfqYGAK1A3F99xZ9.DFtc&lt;br /&gt;
TWKz3HyqTiMR0jM7N56NMQAdIKd635x6jp+76dQo1Lhz7zMjHTbbFz71SzuV&lt;br /&gt;
5irxLlau+m4GFxx1lFgBx.FO650vv4GQNNA.dsxOwJ+zU4mUbB7MYQ+2NgId&lt;br /&gt;
L11LicolYJwSS46P1zh8lT8CDYCMNy5TNdw4tVkdP9LvIMdymUInWQmaRuBj&lt;br /&gt;
Bx4jhc0sbsU83MRmgRwafdfuoWxqufpRGu7AztiurJQEWXIJwzvHaxVSirJO&lt;br /&gt;
odQddtFML1702yDutfvRf8LYqumAGcBMIwKZx1wxGDZTwYO7yIUoXcUgvbea&lt;br /&gt;
RzYtsIWT2jKnq3Zo5+qP.XO6+XMbncru7.TKeIidm6JwfVp3ZYq5CwjeTL2I&lt;br /&gt;
qpDpOdXbkbfusV.vSrtV5JMLGng5MZRbflLuQSpCzj3MZlWEnqPS5Qw7cSSr&lt;br /&gt;
CzD6MZRbflDuQSpCzj5MZxbflLuQCyAZXdilbGnI2azPbflOy4MlxV7ttGE8&lt;br /&gt;
CKoD.YpH+8s8ylrHvTpLlPsabu3Q4g3geaAy6mpNqmJMO1aJQtufMUfbZbdM&lt;br /&gt;
7efczjOq&lt;br /&gt;
-----------end_max5_patcher-----------&lt;br /&gt;
&amp;lt;/maxpat&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The {{maxword|name=bucket}} object is a little unusual in that you don't need to worry about using arguments to the object in order to have it work with floating point values. In fact, {{maxword|name=bucket}} is ''so'' useful that people often ask whether or not there's a Max object that is similar but will work with symbols or lists. While there isn't a specific object, here's a Max patch that does exactly that (and it also helpfully outputs stuff in standard right-to-left order, too):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;maxpat&amp;gt;&lt;br /&gt;
----------begin_max5_patcher----------&lt;br /&gt;
778.3oc2X10bhBCEF9Z7WACWy5jOfjvd296Xmc1A0Ta5ffCDacam9eeIm.pc&lt;br /&gt;
KsDEw05zYTOGfj22mdxW7xDufYEakUA9e2+m9dduLwyCRYR30D6ErJc67rzJ&lt;br /&gt;
31BVIqpRWJCBsWSK2pg72UrorMY9lUp7LoFdBRSx0kxJYtNUqJx+cobt11q7&lt;br /&gt;
D9z3PeBYJJzG07g+u12REazsMEtsoR0yuWku78MSLzLTh42XwAMjZAnxhYO7&lt;br /&gt;
MJtUm2UjqySWIgK8iRUZV6Urcp9Oqk1lOHXWKYdnJ0yvEv0cmI6qSlX9HbfL&lt;br /&gt;
TeeoTdRPjJL9lDMPHRoG.QnI+PHhtZg3SEmBBYLKBGXcHiCOqK0gjjqUDVj+&lt;br /&gt;
4UgtSCbryzP7UkFePAkHhCETb9vpnDTfdDjEknOaTIgciMpjyvf4E3ANyVTh&lt;br /&gt;
6PL9la8AF2Ze9.wHiwcGiQWqXr2sp3LOhEQtyC5+adjKepVHuCGOm4WJWdRk&lt;br /&gt;
U1o2wwtruCRuKSfiguhPVl9AX7j18V3WDTRPnAhxDg6nDcihR6jTX9vPIWfb&lt;br /&gt;
Fk3ja5pRgXXnTvntiR5ULJ09Y9yL+0IMwcxkn9m3CYWdtc00tAC+D4xrz7ku&lt;br /&gt;
6aWXEbOAYp7+8MD.Nwj+s.rpdc04s8bih8w65oExJsJGJwN3dLSB4u2u2qVr&lt;br /&gt;
PBWG0jYkZw5BUttQCbDeJlUeZMdcaSXFfYRE2Dsu2TUoyxj.95t.3XbAoGWX&lt;br /&gt;
F+eTtPjLUPoTLcuKpSMxtf1mKnGmKDbxNIG9lnQv.lCHdf351A7iy.LRjQxB&lt;br /&gt;
X32AAig7SFA4yStTxmhN+xmGAqJbQjO97KeAheojO2A0Sv8H+yXsrKECly+c&lt;br /&gt;
vr+iodvtL1xbr9KkdntnG1ESODWp9MmO8Z5+W39zSGKoBueQ3vnhHbGQQw1Q&lt;br /&gt;
rzcQiwL8tL5.P.9311yd+viSrupg2D03NLZTcmS0RniycMyd13GFm0Qj0cbh&lt;br /&gt;
vc2Y2.a550OJKqZTHXr585+PQoIjEBgpbaHrC9fR4ip16mBYRKq25ttde6aJ&lt;br /&gt;
sa6dqfELwzOuN4u.mi5K2B&lt;br /&gt;
-----------end_max5_patcher-----------&lt;br /&gt;
&amp;lt;/maxpat&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Third-Party Max externals similar to the {{maxword|name=bucket}} object==&lt;br /&gt;
&lt;br /&gt;
[//www.maxobjects.com/?request=bucket Maxobjects.com listing for the bucket object]&lt;br /&gt;
&lt;br /&gt;
==People who looked at/used this object also looked at....==&lt;br /&gt;
&lt;br /&gt;
The [http://www.cycling74.com/docs/max6/dynamic/c74_docs.html#zl zl] object (in its '''zl rot''' form). Useful for performing rotations of lists where the list offset is an odd number greater than 1.&lt;br /&gt;
The [http://www.cycling74.com/docs/max6/dynamic/c74_docs.html#cycle cycle] object&lt;br /&gt;
&lt;br /&gt;
==Errors or Clarifications==&lt;br /&gt;
&lt;br /&gt;
(please list things that you believe to be errors or omissions from the existing refpage)&lt;br /&gt;
&lt;br /&gt;
[[Category:Max Refpage extensions ( symbol, A - F)]]&lt;br /&gt;
[[Category:Refpage extensions]]&lt;/div&gt;</summary>
		<author><name>Gtaylor@rtqe.net</name></author>	</entry>

	<entry>
		<id>http://cycling74.com/wiki/index.php?title=bucket</id>
		<title>bucket</title>
		<link rel="alternate" type="text/html" href="http://cycling74.com/wiki/index.php?title=bucket"/>
				<updated>2013-04-30T05:39:53Z</updated>
		
		<summary type="html">&lt;p&gt;Gtaylor@rtqe.net: /* {{maxword|name=bucket}} Tips and Workarounds */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==[//www.cycling74.com/docs/max6/dynamic/c74_docs.html#bucket bucket online refpage]==&lt;br /&gt;
&lt;br /&gt;
==Using the {{maxword|name=bucket}} object==&lt;br /&gt;
&lt;br /&gt;
The {{maxword|name=bucket}} object implements a [//en.wikipedia.org/wiki/Bucket_brigade bucket brigade] device (in the electronics world, this is sometimes referred to as [//en.wikipedia.org/wiki/Bucket-brigade_device a discrete time-analogue delay line]). As the examples below suggest, it's useful for single-sample delay lines, calculating averages, computing velocity and acceleration, and permutating lists by rotating them.&lt;br /&gt;
&lt;br /&gt;
=={{maxword|name=bucket}} Tutorials==&lt;br /&gt;
&lt;br /&gt;
In the Max tutorial on abstractions, you can find a classic example of why the {{maxword|name=bucket}} object is so useful - [//www.cycling74.com/docs/max6/dynamic/c74_docs.html#basicchapter15 this Max tutorial] demonstrates its use as a single sample delay for number values useful for constructing drawing commands.&lt;br /&gt;
&lt;br /&gt;
=={{maxword|name=bucket}} Tips and Workarounds==&lt;br /&gt;
&lt;br /&gt;
Lots of people use the &amp;lt;strong&amp;gt;bucket&amp;lt;/strong&amp;gt; object for shifting data in series, it's computationally useful for calculating first and second derivatives for streams of data. The terms &amp;quot;first and second derivative&amp;quot; are math-speak for keeping track of:&lt;br /&gt;
&lt;br /&gt;
* the rate that things are changing (that's what velocity (the first derivative) is - the rate of change in a value over time.&lt;br /&gt;
&lt;br /&gt;
* the ''rate of the rate'' that things are changing - that's what acceleration (the second derivative) is.&lt;br /&gt;
&lt;br /&gt;
[[File:Bucket-in-action.png]]&lt;br /&gt;
&lt;br /&gt;
Here's a patch that does that:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;maxpat&amp;gt;&lt;br /&gt;
----------begin_max5_patcher----------&lt;br /&gt;
863.3oc4XFrbaBCDF9r8SgJmZmwICRf.bu0mgbrISGLHaqDP3QHbcZl7tWoE&lt;br /&gt;
vA2ZrAFC8Pu.dEBs69oesR32lOyZU1AVtE5qnuilM6s4ylAMYZXVk8LqzvCQ&lt;br /&gt;
Ig4P2rhxRSYBk0hxmoXGTP6psLjLTwPYqQM+cz1PwF1ihOmyhxDwnXljuOTw&lt;br /&gt;
2y9xih5QIgKzOsP.CEopQQQJWjvTfewUMtKTEskK17CIKRUF2d1d2au.4rz2&lt;br /&gt;
bC6EXt4pMPOU8R7XHDyV87cjk09bclPIBSYvi9ljGlX8giyJT0d1tt+xMq.6&lt;br /&gt;
6saLB47eAi.lbr4cRVtlP5bLSbRXRg.y1L.n5KnmLuz6ymatr3FNGbj6q4xb&lt;br /&gt;
0HfcW+flXGiuH1CFOrO..pc0JlzpmYrS.AR0xYPJbkX2RB612DlbzwRcuUL4&lt;br /&gt;
OXhvUIrSfw4Ubkih50crx.0haDGHqUZIf0fTXoEIJddBOt+TpZ4HojOXLXgc&lt;br /&gt;
BZgSjgSiblRGR53tzw2QONubzS5tjqds70nsQKCplbLUs7oqXBOpXpkRV0wn&lt;br /&gt;
i6okrlF3px1rQO38cQJApG4srd04EViZednh6.TO6RtoVCUkqcTCgCtYZH6i&lt;br /&gt;
0AmJwff8ScN7W63oiWY1YwF4pXqpNtK9RZDreeqii6Ys5gWjtElDKKDuXxND&lt;br /&gt;
8rjw45jg.qd7cuHY7FaxL3kTs.lOcmV31WwR81Y1NvocJKHhaAImkHODJxQO&lt;br /&gt;
nO+05dgEpOlz5Bo0IYg2V3rpH5ElBQF318XO3Vf+k3CYP7gL.9byKzLHsS89&lt;br /&gt;
mcQ637en1ohOcR639OT6.wC70R+wmJC4jo8SYVdVgLpd3pJLf9HqhY4Jt.Nr&lt;br /&gt;
Ui9XNIbiNskGGyDM2CNlma1VFPx4+nmtFNlON4pwio9NhLIwiSWvC9J3IkGu&lt;br /&gt;
KSukQ0TjqVNQ0I.Ivbqo0GN5lk..qtJPCltIX6tDO9SV7zI931uIXGGOyTJl&lt;br /&gt;
BkMplfAqwXB1uqqXlnIXsmvWKbNoOWkmdAN.AWB+MUd5u4q1ZD3IoK3bxnYm&lt;br /&gt;
p+LrxONvV+zR1dpElBa64goGsFAR61AkhS+TJTJsgRgZ6MlJktrUky.UJk6q&lt;br /&gt;
Gta2dlLuZHg.QepmmyjFSuEfIWTZBGlwRx1yq6ObBCqPo9rMJ8AaJjkGL4Pf&lt;br /&gt;
m0biede9u0DMhQJ&lt;br /&gt;
-----------end_max5_patcher-----------&lt;br /&gt;
&amp;lt;/maxpat&amp;gt;&lt;br /&gt;
&lt;br /&gt;
I also tend to use the object quite a bit in situations where I desire a running average over some finite set of events (if you want a running average for an stream or unspecified set of values, you'd use the {{maxword|name=mean}} object). Here's an example that calculates the average of the last 8 floating point input values:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;maxpat&amp;gt;&lt;br /&gt;
----------begin_max5_patcher----------&lt;br /&gt;
498.3ocuV1sajBBEG+Z8ofvkabm.9AZ6c84nYyFFkYKsJZTrc11z28UO3z1Y&lt;br /&gt;
CyHocJwnjywCG9wePN9RX.da6dw.FcM5VTPvKgAAfqYGAK1A3F99xZ9.DFtc&lt;br /&gt;
TWKz3HyqTiMR0jM7N56NMQAdIKd635x6jp+76dQo1Lhz7zMjHTbbFz71SzuV&lt;br /&gt;
5irxLlau+m4GFxx1lFgBx.FO650vv4GQNNA.dsxOwJ+zU4mUbB7MYQ+2NgId&lt;br /&gt;
L11LicolYJwSS46P1zh8lT8CDYCMNy5TNdw4tVkdP9LvIMdymUInWQmaRuBj&lt;br /&gt;
Bx4jhc0sbsU83MRmgRwafdfuoWxqufpRGu7AztiurJQEWXIJwzvHaxVSirJO&lt;br /&gt;
odQddtFML1702yDutfvRf8LYqumAGcBMIwKZx1wxGDZTwYO7yIUoXcUgvbea&lt;br /&gt;
RzYtsIWT2jKnq3Zo5+qP.XO6+XMbncru7.TKeIidm6JwfVp3ZYq5CwjeTL2I&lt;br /&gt;
qpDpOdXbkbfusV.vSrtV5JMLGng5MZRbflLuQSpCzj3MZlWEnqPS5Qw7cSSr&lt;br /&gt;
CzD6MZRbflDuQSpCzj5MZxbflLuQCyAZXdilbGnI2azPbflOy4MlxV7ttGE8&lt;br /&gt;
CKoD.YpH+8s8ylrHvTpLlPsabu3Q4g3geaAy6mpNqmJMO1aJQtufMUfbZbdM&lt;br /&gt;
7efczjOq&lt;br /&gt;
-----------end_max5_patcher-----------&lt;br /&gt;
&amp;lt;/maxpat&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The {{maxword|name=bucket}} object is a little unusual in that you don't need to worry about using arguments to the object in order to have it work with floating point values. In fact, {{maxword|name=bucket}} is ''so'' useful that people often ask whether or not there's a Max object that is similar but will work with symbols or lists. While there isn't a specific object, here's a Max patch that does exactly that (and it also helpfully outputs stuff in standard right-to-left order, too):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;maxpat&amp;gt;&lt;br /&gt;
----------begin_max5_patcher----------&lt;br /&gt;
778.3oc2X10bhBCEF9Z7WACWy5jOfjvd296Xmc1A0Ta5ffCDacam9eeIm.pc&lt;br /&gt;
KsDEw05zYTOGfj22mdxW7xDufYEakUA9e2+m9dduLwyCRYR30D6ErJc67rzJ&lt;br /&gt;
31BVIqpRWJCBsWSK2pg72UrorMY9lUp7LoFdBRSx0kxJYtNUqJx+cobt11q7&lt;br /&gt;
D9z3PeBYJJzG07g+u12REazsMEtsoR0yuWku78MSLzLTh42XwAMjZAnxhYO7&lt;br /&gt;
MJtUm2UjqySWIgK8iRUZV6Urcp9Oqk1lOHXWKYdnJ0yvEv0cmI6qSlX9HbfL&lt;br /&gt;
TeeoTdRPjJL9lDMPHRoG.QnI+PHhtZg3SEmBBYLKBGXcHiCOqK0gjjqUDVj+&lt;br /&gt;
4UgtSCbryzP7UkFePAkHhCETb9vpnDTfdDjEknOaTIgciMpjyvf4E3ANyVTh&lt;br /&gt;
6PL9la8AF2Ze9.wHiwcGiQWqXr2sp3LOhEQtyC5+adjKepVHuCGOm4WJWdRk&lt;br /&gt;
U1o2wwtruCRuKSfiguhPVl9AX7j18V3WDTRPnAhxDg6nDcihR6jTX9vPIWfb&lt;br /&gt;
Fk3ja5pRgXXnTvntiR5ULJ09Y9yL+0IMwcxkn9m3CYWdtc00tAC+D4xrz7ku&lt;br /&gt;
6aWXEbOAYp7+8MD.Nwj+s.rpdc04s8bih8w65oExJsJGJwN3dLSB4u2u2qVr&lt;br /&gt;
PBWG0jYkZw5BUttQCbDeJlUeZMdcaSXFfYRE2Dsu2TUoyxj.95t.3XbAoGWX&lt;br /&gt;
F+eTtPjLUPoTLcuKpSMxtf1mKnGmKDbxNIG9lnQv.lCHdf351A7iy.LRjQxB&lt;br /&gt;
X32AAig7SFA4yStTxmhN+xmGAqJbQjO97KeAheojO2A0Sv8H+yXsrKECly+c&lt;br /&gt;
vr+iodvtL1xbr9KkdntnG1ESODWp9MmO8Z5+W39zSGKoBueQ3vnhHbGQQw1Q&lt;br /&gt;
rzcQiwL8tL5.P.9311yd+viSrupg2D03NLZTcmS0RniycMyd13GFm0Qj0cbh&lt;br /&gt;
vc2Y2.a550OJKqZTHXr585+PQoIjEBgpbaHrC9fR4ip16mBYRKq25ttde6aJ&lt;br /&gt;
sa6dqfELwzOuN4u.mi5K2B&lt;br /&gt;
-----------end_max5_patcher-----------&lt;br /&gt;
&amp;lt;/maxpat&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Third-Party Max externals similar to the {{maxword|name=bucket}} object==&lt;br /&gt;
&lt;br /&gt;
[//www.maxobjects.com/?request=bucket Maxobjects.com listing for the bucket object]&lt;br /&gt;
&lt;br /&gt;
==People who looked at/used this object also looked at....==&lt;br /&gt;
&lt;br /&gt;
The [http://www.cycling74.com/docs/max6/dynamic/c74_docs.html#cycle cycle] object&lt;br /&gt;
&lt;br /&gt;
==Errors or Clarifications==&lt;br /&gt;
&lt;br /&gt;
(please list things that you believe to be errors or omissions from the existing refpage)&lt;br /&gt;
&lt;br /&gt;
[[Category:Max Refpage extensions ( symbol, A - F)]]&lt;br /&gt;
[[Category:Refpage extensions]]&lt;/div&gt;</summary>
		<author><name>Gtaylor@rtqe.net</name></author>	</entry>

	<entry>
		<id>http://cycling74.com/wiki/index.php?title=File:Bucket-in-action.png</id>
		<title>File:Bucket-in-action.png</title>
		<link rel="alternate" type="text/html" href="http://cycling74.com/wiki/index.php?title=File:Bucket-in-action.png"/>
				<updated>2013-04-30T05:38:44Z</updated>
		
		<summary type="html">&lt;p&gt;Gtaylor@rtqe.net: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Gtaylor@rtqe.net</name></author>	</entry>

	<entry>
		<id>http://cycling74.com/wiki/index.php?title=bucket</id>
		<title>bucket</title>
		<link rel="alternate" type="text/html" href="http://cycling74.com/wiki/index.php?title=bucket"/>
				<updated>2013-04-30T05:31:44Z</updated>
		
		<summary type="html">&lt;p&gt;Gtaylor@rtqe.net: /* Using the {{maxword|name=bucket}} object */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==[//www.cycling74.com/docs/max6/dynamic/c74_docs.html#bucket bucket online refpage]==&lt;br /&gt;
&lt;br /&gt;
==Using the {{maxword|name=bucket}} object==&lt;br /&gt;
&lt;br /&gt;
The {{maxword|name=bucket}} object implements a [//en.wikipedia.org/wiki/Bucket_brigade bucket brigade] device (in the electronics world, this is sometimes referred to as [//en.wikipedia.org/wiki/Bucket-brigade_device a discrete time-analogue delay line]). As the examples below suggest, it's useful for single-sample delay lines, calculating averages, computing velocity and acceleration, and permutating lists by rotating them.&lt;br /&gt;
&lt;br /&gt;
=={{maxword|name=bucket}} Tutorials==&lt;br /&gt;
&lt;br /&gt;
In the Max tutorial on abstractions, you can find a classic example of why the {{maxword|name=bucket}} object is so useful - [//www.cycling74.com/docs/max6/dynamic/c74_docs.html#basicchapter15 this Max tutorial] demonstrates its use as a single sample delay for number values useful for constructing drawing commands.&lt;br /&gt;
&lt;br /&gt;
=={{maxword|name=bucket}} Tips and Workarounds==&lt;br /&gt;
&lt;br /&gt;
Lots of people use the &amp;lt;strong&amp;gt;bucket&amp;lt;/strong&amp;gt; object for shifting data in series, it's computationally useful for calculating first and second derivatives for streams of data. The terms &amp;quot;first and second derivative&amp;quot; are math-speak for keeping track of:&lt;br /&gt;
&lt;br /&gt;
* the rate that things are changing (that's what velocity (the first derivative) is - the rate of change in a value over time.&lt;br /&gt;
&lt;br /&gt;
* the ''rate of the rate'' that things are changing - that's what acceleration (the second derivative) is.&lt;br /&gt;
&lt;br /&gt;
Here's a patch that does that:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;maxpat&amp;gt;&lt;br /&gt;
----------begin_max5_patcher----------&lt;br /&gt;
863.3oc4XFrbaBCDF9r8SgJmZmwICRf.bu0mgbrISGLHaqDP3QHbcZl7tWoE&lt;br /&gt;
vA2ZrAFC8Pu.dEBs69oesR32lOyZU1AVtE5qnuilM6s4ylAMYZXVk8LqzvCQ&lt;br /&gt;
Ig4P2rhxRSYBk0hxmoXGTP6psLjLTwPYqQM+cz1PwF1ihOmyhxDwnXljuOTw&lt;br /&gt;
2y9xih5QIgKzOsP.CEopQQQJWjvTfewUMtKTEskK17CIKRUF2d1d2au.4rz2&lt;br /&gt;
bC6EXt4pMPOU8R7XHDyV87cjk09bclPIBSYvi9ljGlX8giyJT0d1tt+xMq.6&lt;br /&gt;
6saLB47eAi.lbr4cRVtlP5bLSbRXRg.y1L.n5KnmLuz6ymatr3FNGbj6q4xb&lt;br /&gt;
0HfcW+flXGiuH1CFOrO..pc0JlzpmYrS.AR0xYPJbkX2RB612DlbzwRcuUL4&lt;br /&gt;
OXhvUIrSfw4Ubkih50crx.0haDGHqUZIf0fTXoEIJddBOt+TpZ4HojOXLXgc&lt;br /&gt;
BZgSjgSiblRGR53tzw2QONubzS5tjqds70nsQKCplbLUs7oqXBOpXpkRV0wn&lt;br /&gt;
i6okrlF3px1rQO38cQJApG4srd04EViZednh6.TO6RtoVCUkqcTCgCtYZH6i&lt;br /&gt;
0AmJwff8ScN7W63oiWY1YwF4pXqpNtK9RZDreeqii6Ys5gWjtElDKKDuXxND&lt;br /&gt;
8rjw45jg.qd7cuHY7FaxL3kTs.lOcmV31WwR81Y1NvocJKHhaAImkHODJxQO&lt;br /&gt;
nO+05dgEpOlz5Bo0IYg2V3rpH5ElBQF318XO3Vf+k3CYP7gL.9byKzLHsS89&lt;br /&gt;
mcQ637en1ohOcR639OT6.wC70R+wmJC4jo8SYVdVgLpd3pJLf9HqhY4Jt.Nr&lt;br /&gt;
Ui9XNIbiNskGGyDM2CNlma1VFPx4+nmtFNlON4pwio9NhLIwiSWvC9J3IkGu&lt;br /&gt;
KSukQ0TjqVNQ0I.Ivbqo0GN5lk..qtJPCltIX6tDO9SV7zI931uIXGGOyTJl&lt;br /&gt;
BkMplfAqwXB1uqqXlnIXsmvWKbNoOWkmdAN.AWB+MUd5u4q1ZD3IoK3bxnYm&lt;br /&gt;
p+LrxONvV+zR1dpElBa64goGsFAR61AkhS+TJTJsgRgZ6MlJktrUky.UJk6q&lt;br /&gt;
Gta2dlLuZHg.QepmmyjFSuEfIWTZBGlwRx1yq6ObBCqPo9rMJ8AaJjkGL4Pf&lt;br /&gt;
m0biede9u0DMhQJ&lt;br /&gt;
-----------end_max5_patcher-----------&lt;br /&gt;
&amp;lt;/maxpat&amp;gt;&lt;br /&gt;
&lt;br /&gt;
I also tend to use the object quite a bit in situations where I desire a running average over some finite set of events (if you want a running average for an stream or unspecified set of values, you'd use the {{maxword|name=mean}} object). Here's an example that calculates the average of the last 8 floating point input values:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;maxpat&amp;gt;&lt;br /&gt;
----------begin_max5_patcher----------&lt;br /&gt;
498.3ocuV1sajBBEG+Z8ofvkabm.9AZ6c84nYyFFkYKsJZTrc11z28UO3z1Y&lt;br /&gt;
CyHocJwnjywCG9wePN9RX.da6dw.FcM5VTPvKgAAfqYGAK1A3F99xZ9.DFtc&lt;br /&gt;
TWKz3HyqTiMR0jM7N56NMQAdIKd635x6jp+76dQo1Lhz7zMjHTbbFz71SzuV&lt;br /&gt;
5irxLlau+m4GFxx1lFgBx.FO650vv4GQNNA.dsxOwJ+zU4mUbB7MYQ+2NgId&lt;br /&gt;
L11LicolYJwSS46P1zh8lT8CDYCMNy5TNdw4tVkdP9LvIMdymUInWQmaRuBj&lt;br /&gt;
Bx4jhc0sbsU83MRmgRwafdfuoWxqufpRGu7AztiurJQEWXIJwzvHaxVSirJO&lt;br /&gt;
odQddtFML1702yDutfvRf8LYqumAGcBMIwKZx1wxGDZTwYO7yIUoXcUgvbea&lt;br /&gt;
RzYtsIWT2jKnq3Zo5+qP.XO6+XMbncru7.TKeIidm6JwfVp3ZYq5CwjeTL2I&lt;br /&gt;
qpDpOdXbkbfusV.vSrtV5JMLGng5MZRbflLuQSpCzj3MZlWEnqPS5Qw7cSSr&lt;br /&gt;
CzD6MZRbflDuQSpCzj5MZxbflLuQCyAZXdilbGnI2azPbflOy4MlxV7ttGE8&lt;br /&gt;
CKoD.YpH+8s8ylrHvTpLlPsabu3Q4g3geaAy6mpNqmJMO1aJQtufMUfbZbdM&lt;br /&gt;
7efczjOq&lt;br /&gt;
-----------end_max5_patcher-----------&lt;br /&gt;
&amp;lt;/maxpat&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The {{maxword|name=bucket}} object is a little unusual in that you don't need to worry about using arguments to the object in order to have it work with floating point values. In fact, {{maxword|name=bucket}} is ''so'' useful that people often ask whether or not there's a Max object that is similar but will work with symbols or lists. While there isn't a specific object, here's a Max patch that does exactly that (and it also helpfully outputs stuff in standard right-to-left order, too):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;maxpat&amp;gt;&lt;br /&gt;
----------begin_max5_patcher----------&lt;br /&gt;
778.3oc2X10bhBCEF9Z7WACWy5jOfjvd296Xmc1A0Ta5ffCDacam9eeIm.pc&lt;br /&gt;
KsDEw05zYTOGfj22mdxW7xDufYEakUA9e2+m9dduLwyCRYR30D6ErJc67rzJ&lt;br /&gt;
31BVIqpRWJCBsWSK2pg72UrorMY9lUp7LoFdBRSx0kxJYtNUqJx+cobt11q7&lt;br /&gt;
D9z3PeBYJJzG07g+u12REazsMEtsoR0yuWku78MSLzLTh42XwAMjZAnxhYO7&lt;br /&gt;
MJtUm2UjqySWIgK8iRUZV6Urcp9Oqk1lOHXWKYdnJ0yvEv0cmI6qSlX9HbfL&lt;br /&gt;
TeeoTdRPjJL9lDMPHRoG.QnI+PHhtZg3SEmBBYLKBGXcHiCOqK0gjjqUDVj+&lt;br /&gt;
4UgtSCbryzP7UkFePAkHhCETb9vpnDTfdDjEknOaTIgciMpjyvf4E3ANyVTh&lt;br /&gt;
6PL9la8AF2Ze9.wHiwcGiQWqXr2sp3LOhEQtyC5+adjKepVHuCGOm4WJWdRk&lt;br /&gt;
U1o2wwtruCRuKSfiguhPVl9AX7j18V3WDTRPnAhxDg6nDcihR6jTX9vPIWfb&lt;br /&gt;
Fk3ja5pRgXXnTvntiR5ULJ09Y9yL+0IMwcxkn9m3CYWdtc00tAC+D4xrz7ku&lt;br /&gt;
6aWXEbOAYp7+8MD.Nwj+s.rpdc04s8bih8w65oExJsJGJwN3dLSB4u2u2qVr&lt;br /&gt;
PBWG0jYkZw5BUttQCbDeJlUeZMdcaSXFfYRE2Dsu2TUoyxj.95t.3XbAoGWX&lt;br /&gt;
F+eTtPjLUPoTLcuKpSMxtf1mKnGmKDbxNIG9lnQv.lCHdf351A7iy.LRjQxB&lt;br /&gt;
X32AAig7SFA4yStTxmhN+xmGAqJbQjO97KeAheojO2A0Sv8H+yXsrKECly+c&lt;br /&gt;
vr+iodvtL1xbr9KkdntnG1ESODWp9MmO8Z5+W39zSGKoBueQ3vnhHbGQQw1Q&lt;br /&gt;
rzcQiwL8tL5.P.9311yd+viSrupg2D03NLZTcmS0RniycMyd13GFm0Qj0cbh&lt;br /&gt;
vc2Y2.a550OJKqZTHXr585+PQoIjEBgpbaHrC9fR4ip16mBYRKq25ttde6aJ&lt;br /&gt;
sa6dqfELwzOuN4u.mi5K2B&lt;br /&gt;
-----------end_max5_patcher-----------&lt;br /&gt;
&amp;lt;/maxpat&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Third-Party Max externals similar to the {{maxword|name=bucket}} object==&lt;br /&gt;
&lt;br /&gt;
[//www.maxobjects.com/?request=bucket Maxobjects.com listing for the bucket object]&lt;br /&gt;
&lt;br /&gt;
==People who looked at/used this object also looked at....==&lt;br /&gt;
&lt;br /&gt;
The [http://www.cycling74.com/docs/max6/dynamic/c74_docs.html#cycle cycle] object&lt;br /&gt;
&lt;br /&gt;
==Errors or Clarifications==&lt;br /&gt;
&lt;br /&gt;
(please list things that you believe to be errors or omissions from the existing refpage)&lt;br /&gt;
&lt;br /&gt;
[[Category:Max Refpage extensions ( symbol, A - F)]]&lt;br /&gt;
[[Category:Refpage extensions]]&lt;/div&gt;</summary>
		<author><name>Gtaylor@rtqe.net</name></author>	</entry>

	<entry>
		<id>http://cycling74.com/wiki/index.php?title=bucket</id>
		<title>bucket</title>
		<link rel="alternate" type="text/html" href="http://cycling74.com/wiki/index.php?title=bucket"/>
				<updated>2013-04-30T05:29:23Z</updated>
		
		<summary type="html">&lt;p&gt;Gtaylor@rtqe.net: /* Using the {{maxword|name=bucket}} object */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==[//www.cycling74.com/docs/max6/dynamic/c74_docs.html#bucket bucket online refpage]==&lt;br /&gt;
&lt;br /&gt;
==Using the {{maxword|name=bucket}} object==&lt;br /&gt;
&lt;br /&gt;
The {{maxword|name=bucket}} object implements a [//en.wikipedia.org/wiki/Bucket_brigade bucket brigade] device (in the electronics world, this is sometimes referred to as [//en.wikipedia.org/wiki/Bucket-brigade_device a discrete time-analogue delay line]).&lt;br /&gt;
&lt;br /&gt;
=={{maxword|name=bucket}} Tutorials==&lt;br /&gt;
&lt;br /&gt;
In the Max tutorial on abstractions, you can find a classic example of why the {{maxword|name=bucket}} object is so useful - [//www.cycling74.com/docs/max6/dynamic/c74_docs.html#basicchapter15 this Max tutorial] demonstrates its use as a single sample delay for number values useful for constructing drawing commands.&lt;br /&gt;
&lt;br /&gt;
=={{maxword|name=bucket}} Tips and Workarounds==&lt;br /&gt;
&lt;br /&gt;
Lots of people use the &amp;lt;strong&amp;gt;bucket&amp;lt;/strong&amp;gt; object for shifting data in series, it's computationally useful for calculating first and second derivatives for streams of data. The terms &amp;quot;first and second derivative&amp;quot; are math-speak for keeping track of:&lt;br /&gt;
&lt;br /&gt;
* the rate that things are changing (that's what velocity (the first derivative) is - the rate of change in a value over time.&lt;br /&gt;
&lt;br /&gt;
* the ''rate of the rate'' that things are changing - that's what acceleration (the second derivative) is.&lt;br /&gt;
&lt;br /&gt;
Here's a patch that does that:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;maxpat&amp;gt;&lt;br /&gt;
----------begin_max5_patcher----------&lt;br /&gt;
863.3oc4XFrbaBCDF9r8SgJmZmwICRf.bu0mgbrISGLHaqDP3QHbcZl7tWoE&lt;br /&gt;
vA2ZrAFC8Pu.dEBs69oesR32lOyZU1AVtE5qnuilM6s4ylAMYZXVk8LqzvCQ&lt;br /&gt;
Ig4P2rhxRSYBk0hxmoXGTP6psLjLTwPYqQM+cz1PwF1ihOmyhxDwnXljuOTw&lt;br /&gt;
2y9xih5QIgKzOsP.CEopQQQJWjvTfewUMtKTEskK17CIKRUF2d1d2au.4rz2&lt;br /&gt;
bC6EXt4pMPOU8R7XHDyV87cjk09bclPIBSYvi9ljGlX8giyJT0d1tt+xMq.6&lt;br /&gt;
6saLB47eAi.lbr4cRVtlP5bLSbRXRg.y1L.n5KnmLuz6ymatr3FNGbj6q4xb&lt;br /&gt;
0HfcW+flXGiuH1CFOrO..pc0JlzpmYrS.AR0xYPJbkX2RB612DlbzwRcuUL4&lt;br /&gt;
OXhvUIrSfw4Ubkih50crx.0haDGHqUZIf0fTXoEIJddBOt+TpZ4HojOXLXgc&lt;br /&gt;
BZgSjgSiblRGR53tzw2QONubzS5tjqds70nsQKCplbLUs7oqXBOpXpkRV0wn&lt;br /&gt;
i6okrlF3px1rQO38cQJApG4srd04EViZednh6.TO6RtoVCUkqcTCgCtYZH6i&lt;br /&gt;
0AmJwff8ScN7W63oiWY1YwF4pXqpNtK9RZDreeqii6Ys5gWjtElDKKDuXxND&lt;br /&gt;
8rjw45jg.qd7cuHY7FaxL3kTs.lOcmV31WwR81Y1NvocJKHhaAImkHODJxQO&lt;br /&gt;
nO+05dgEpOlz5Bo0IYg2V3rpH5ElBQF318XO3Vf+k3CYP7gL.9byKzLHsS89&lt;br /&gt;
mcQ637en1ohOcR639OT6.wC70R+wmJC4jo8SYVdVgLpd3pJLf9HqhY4Jt.Nr&lt;br /&gt;
Ui9XNIbiNskGGyDM2CNlma1VFPx4+nmtFNlON4pwio9NhLIwiSWvC9J3IkGu&lt;br /&gt;
KSukQ0TjqVNQ0I.Ivbqo0GN5lk..qtJPCltIX6tDO9SV7zI931uIXGGOyTJl&lt;br /&gt;
BkMplfAqwXB1uqqXlnIXsmvWKbNoOWkmdAN.AWB+MUd5u4q1ZD3IoK3bxnYm&lt;br /&gt;
p+LrxONvV+zR1dpElBa64goGsFAR61AkhS+TJTJsgRgZ6MlJktrUky.UJk6q&lt;br /&gt;
Gta2dlLuZHg.QepmmyjFSuEfIWTZBGlwRx1yq6ObBCqPo9rMJ8AaJjkGL4Pf&lt;br /&gt;
m0biede9u0DMhQJ&lt;br /&gt;
-----------end_max5_patcher-----------&lt;br /&gt;
&amp;lt;/maxpat&amp;gt;&lt;br /&gt;
&lt;br /&gt;
I also tend to use the object quite a bit in situations where I desire a running average over some finite set of events (if you want a running average for an stream or unspecified set of values, you'd use the {{maxword|name=mean}} object). Here's an example that calculates the average of the last 8 floating point input values:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;maxpat&amp;gt;&lt;br /&gt;
----------begin_max5_patcher----------&lt;br /&gt;
498.3ocuV1sajBBEG+Z8ofvkabm.9AZ6c84nYyFFkYKsJZTrc11z28UO3z1Y&lt;br /&gt;
CyHocJwnjywCG9wePN9RX.da6dw.FcM5VTPvKgAAfqYGAK1A3F99xZ9.DFtc&lt;br /&gt;
TWKz3HyqTiMR0jM7N56NMQAdIKd635x6jp+76dQo1Lhz7zMjHTbbFz71SzuV&lt;br /&gt;
5irxLlau+m4GFxx1lFgBx.FO650vv4GQNNA.dsxOwJ+zU4mUbB7MYQ+2NgId&lt;br /&gt;
L11LicolYJwSS46P1zh8lT8CDYCMNy5TNdw4tVkdP9LvIMdymUInWQmaRuBj&lt;br /&gt;
Bx4jhc0sbsU83MRmgRwafdfuoWxqufpRGu7AztiurJQEWXIJwzvHaxVSirJO&lt;br /&gt;
odQddtFML1702yDutfvRf8LYqumAGcBMIwKZx1wxGDZTwYO7yIUoXcUgvbea&lt;br /&gt;
RzYtsIWT2jKnq3Zo5+qP.XO6+XMbncru7.TKeIidm6JwfVp3ZYq5CwjeTL2I&lt;br /&gt;
qpDpOdXbkbfusV.vSrtV5JMLGng5MZRbflLuQSpCzj3MZlWEnqPS5Qw7cSSr&lt;br /&gt;
CzD6MZRbflDuQSpCzj5MZxbflLuQCyAZXdilbGnI2azPbflOy4MlxV7ttGE8&lt;br /&gt;
CKoD.YpH+8s8ylrHvTpLlPsabu3Q4g3geaAy6mpNqmJMO1aJQtufMUfbZbdM&lt;br /&gt;
7efczjOq&lt;br /&gt;
-----------end_max5_patcher-----------&lt;br /&gt;
&amp;lt;/maxpat&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The {{maxword|name=bucket}} object is a little unusual in that you don't need to worry about using arguments to the object in order to have it work with floating point values. In fact, {{maxword|name=bucket}} is ''so'' useful that people often ask whether or not there's a Max object that is similar but will work with symbols or lists. While there isn't a specific object, here's a Max patch that does exactly that (and it also helpfully outputs stuff in standard right-to-left order, too):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;maxpat&amp;gt;&lt;br /&gt;
----------begin_max5_patcher----------&lt;br /&gt;
778.3oc2X10bhBCEF9Z7WACWy5jOfjvd296Xmc1A0Ta5ffCDacam9eeIm.pc&lt;br /&gt;
KsDEw05zYTOGfj22mdxW7xDufYEakUA9e2+m9dduLwyCRYR30D6ErJc67rzJ&lt;br /&gt;
31BVIqpRWJCBsWSK2pg72UrorMY9lUp7LoFdBRSx0kxJYtNUqJx+cobt11q7&lt;br /&gt;
D9z3PeBYJJzG07g+u12REazsMEtsoR0yuWku78MSLzLTh42XwAMjZAnxhYO7&lt;br /&gt;
MJtUm2UjqySWIgK8iRUZV6Urcp9Oqk1lOHXWKYdnJ0yvEv0cmI6qSlX9HbfL&lt;br /&gt;
TeeoTdRPjJL9lDMPHRoG.QnI+PHhtZg3SEmBBYLKBGXcHiCOqK0gjjqUDVj+&lt;br /&gt;
4UgtSCbryzP7UkFePAkHhCETb9vpnDTfdDjEknOaTIgciMpjyvf4E3ANyVTh&lt;br /&gt;
6PL9la8AF2Ze9.wHiwcGiQWqXr2sp3LOhEQtyC5+adjKepVHuCGOm4WJWdRk&lt;br /&gt;
U1o2wwtruCRuKSfiguhPVl9AX7j18V3WDTRPnAhxDg6nDcihR6jTX9vPIWfb&lt;br /&gt;
Fk3ja5pRgXXnTvntiR5ULJ09Y9yL+0IMwcxkn9m3CYWdtc00tAC+D4xrz7ku&lt;br /&gt;
6aWXEbOAYp7+8MD.Nwj+s.rpdc04s8bih8w65oExJsJGJwN3dLSB4u2u2qVr&lt;br /&gt;
PBWG0jYkZw5BUttQCbDeJlUeZMdcaSXFfYRE2Dsu2TUoyxj.95t.3XbAoGWX&lt;br /&gt;
F+eTtPjLUPoTLcuKpSMxtf1mKnGmKDbxNIG9lnQv.lCHdf351A7iy.LRjQxB&lt;br /&gt;
X32AAig7SFA4yStTxmhN+xmGAqJbQjO97KeAheojO2A0Sv8H+yXsrKECly+c&lt;br /&gt;
vr+iodvtL1xbr9KkdntnG1ESODWp9MmO8Z5+W39zSGKoBueQ3vnhHbGQQw1Q&lt;br /&gt;
rzcQiwL8tL5.P.9311yd+viSrupg2D03NLZTcmS0RniycMyd13GFm0Qj0cbh&lt;br /&gt;
vc2Y2.a550OJKqZTHXr585+PQoIjEBgpbaHrC9fR4ip16mBYRKq25ttde6aJ&lt;br /&gt;
sa6dqfELwzOuN4u.mi5K2B&lt;br /&gt;
-----------end_max5_patcher-----------&lt;br /&gt;
&amp;lt;/maxpat&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Third-Party Max externals similar to the {{maxword|name=bucket}} object==&lt;br /&gt;
&lt;br /&gt;
[//www.maxobjects.com/?request=bucket Maxobjects.com listing for the bucket object]&lt;br /&gt;
&lt;br /&gt;
==People who looked at/used this object also looked at....==&lt;br /&gt;
&lt;br /&gt;
The [http://www.cycling74.com/docs/max6/dynamic/c74_docs.html#cycle cycle] object&lt;br /&gt;
&lt;br /&gt;
==Errors or Clarifications==&lt;br /&gt;
&lt;br /&gt;
(please list things that you believe to be errors or omissions from the existing refpage)&lt;br /&gt;
&lt;br /&gt;
[[Category:Max Refpage extensions ( symbol, A - F)]]&lt;br /&gt;
[[Category:Refpage extensions]]&lt;/div&gt;</summary>
		<author><name>Gtaylor@rtqe.net</name></author>	</entry>

	<entry>
		<id>http://cycling74.com/wiki/index.php?title=bucket</id>
		<title>bucket</title>
		<link rel="alternate" type="text/html" href="http://cycling74.com/wiki/index.php?title=bucket"/>
				<updated>2013-04-30T05:23:55Z</updated>
		
		<summary type="html">&lt;p&gt;Gtaylor@rtqe.net: /* {{maxword|name=bucket}} Tutorials */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==[//www.cycling74.com/docs/max6/dynamic/c74_docs.html#bucket bucket online refpage]==&lt;br /&gt;
&lt;br /&gt;
==Using the {{maxword|name=bucket}} object==&lt;br /&gt;
&lt;br /&gt;
=={{maxword|name=bucket}} Tutorials==&lt;br /&gt;
&lt;br /&gt;
In the Max tutorial on abstractions, you can find a classic example of why the {{maxword|name=bucket}} object is so useful - [//www.cycling74.com/docs/max6/dynamic/c74_docs.html#basicchapter15 this Max tutorial] demonstrates its use as a single sample delay for number values useful for constructing drawing commands.&lt;br /&gt;
&lt;br /&gt;
=={{maxword|name=bucket}} Tips and Workarounds==&lt;br /&gt;
&lt;br /&gt;
Lots of people use the &amp;lt;strong&amp;gt;bucket&amp;lt;/strong&amp;gt; object for shifting data in series, it's computationally useful for calculating first and second derivatives for streams of data. The terms &amp;quot;first and second derivative&amp;quot; are math-speak for keeping track of:&lt;br /&gt;
&lt;br /&gt;
* the rate that things are changing (that's what velocity (the first derivative) is - the rate of change in a value over time.&lt;br /&gt;
&lt;br /&gt;
* the ''rate of the rate'' that things are changing - that's what acceleration (the second derivative) is.&lt;br /&gt;
&lt;br /&gt;
Here's a patch that does that:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;maxpat&amp;gt;&lt;br /&gt;
----------begin_max5_patcher----------&lt;br /&gt;
863.3oc4XFrbaBCDF9r8SgJmZmwICRf.bu0mgbrISGLHaqDP3QHbcZl7tWoE&lt;br /&gt;
vA2ZrAFC8Pu.dEBs69oesR32lOyZU1AVtE5qnuilM6s4ylAMYZXVk8LqzvCQ&lt;br /&gt;
Ig4P2rhxRSYBk0hxmoXGTP6psLjLTwPYqQM+cz1PwF1ihOmyhxDwnXljuOTw&lt;br /&gt;
2y9xih5QIgKzOsP.CEopQQQJWjvTfewUMtKTEskK17CIKRUF2d1d2au.4rz2&lt;br /&gt;
bC6EXt4pMPOU8R7XHDyV87cjk09bclPIBSYvi9ljGlX8giyJT0d1tt+xMq.6&lt;br /&gt;
6saLB47eAi.lbr4cRVtlP5bLSbRXRg.y1L.n5KnmLuz6ymatr3FNGbj6q4xb&lt;br /&gt;
0HfcW+flXGiuH1CFOrO..pc0JlzpmYrS.AR0xYPJbkX2RB612DlbzwRcuUL4&lt;br /&gt;
OXhvUIrSfw4Ubkih50crx.0haDGHqUZIf0fTXoEIJddBOt+TpZ4HojOXLXgc&lt;br /&gt;
BZgSjgSiblRGR53tzw2QONubzS5tjqds70nsQKCplbLUs7oqXBOpXpkRV0wn&lt;br /&gt;
i6okrlF3px1rQO38cQJApG4srd04EViZednh6.TO6RtoVCUkqcTCgCtYZH6i&lt;br /&gt;
0AmJwff8ScN7W63oiWY1YwF4pXqpNtK9RZDreeqii6Ys5gWjtElDKKDuXxND&lt;br /&gt;
8rjw45jg.qd7cuHY7FaxL3kTs.lOcmV31WwR81Y1NvocJKHhaAImkHODJxQO&lt;br /&gt;
nO+05dgEpOlz5Bo0IYg2V3rpH5ElBQF318XO3Vf+k3CYP7gL.9byKzLHsS89&lt;br /&gt;
mcQ637en1ohOcR639OT6.wC70R+wmJC4jo8SYVdVgLpd3pJLf9HqhY4Jt.Nr&lt;br /&gt;
Ui9XNIbiNskGGyDM2CNlma1VFPx4+nmtFNlON4pwio9NhLIwiSWvC9J3IkGu&lt;br /&gt;
KSukQ0TjqVNQ0I.Ivbqo0GN5lk..qtJPCltIX6tDO9SV7zI931uIXGGOyTJl&lt;br /&gt;
BkMplfAqwXB1uqqXlnIXsmvWKbNoOWkmdAN.AWB+MUd5u4q1ZD3IoK3bxnYm&lt;br /&gt;
p+LrxONvV+zR1dpElBa64goGsFAR61AkhS+TJTJsgRgZ6MlJktrUky.UJk6q&lt;br /&gt;
Gta2dlLuZHg.QepmmyjFSuEfIWTZBGlwRx1yq6ObBCqPo9rMJ8AaJjkGL4Pf&lt;br /&gt;
m0biede9u0DMhQJ&lt;br /&gt;
-----------end_max5_patcher-----------&lt;br /&gt;
&amp;lt;/maxpat&amp;gt;&lt;br /&gt;
&lt;br /&gt;
I also tend to use the object quite a bit in situations where I desire a running average over some finite set of events (if you want a running average for an stream or unspecified set of values, you'd use the {{maxword|name=mean}} object). Here's an example that calculates the average of the last 8 floating point input values:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;maxpat&amp;gt;&lt;br /&gt;
----------begin_max5_patcher----------&lt;br /&gt;
498.3ocuV1sajBBEG+Z8ofvkabm.9AZ6c84nYyFFkYKsJZTrc11z28UO3z1Y&lt;br /&gt;
CyHocJwnjywCG9wePN9RX.da6dw.FcM5VTPvKgAAfqYGAK1A3F99xZ9.DFtc&lt;br /&gt;
TWKz3HyqTiMR0jM7N56NMQAdIKd635x6jp+76dQo1Lhz7zMjHTbbFz71SzuV&lt;br /&gt;
5irxLlau+m4GFxx1lFgBx.FO650vv4GQNNA.dsxOwJ+zU4mUbB7MYQ+2NgId&lt;br /&gt;
L11LicolYJwSS46P1zh8lT8CDYCMNy5TNdw4tVkdP9LvIMdymUInWQmaRuBj&lt;br /&gt;
Bx4jhc0sbsU83MRmgRwafdfuoWxqufpRGu7AztiurJQEWXIJwzvHaxVSirJO&lt;br /&gt;
odQddtFML1702yDutfvRf8LYqumAGcBMIwKZx1wxGDZTwYO7yIUoXcUgvbea&lt;br /&gt;
RzYtsIWT2jKnq3Zo5+qP.XO6+XMbncru7.TKeIidm6JwfVp3ZYq5CwjeTL2I&lt;br /&gt;
qpDpOdXbkbfusV.vSrtV5JMLGng5MZRbflLuQSpCzj3MZlWEnqPS5Qw7cSSr&lt;br /&gt;
CzD6MZRbflDuQSpCzj5MZxbflLuQCyAZXdilbGnI2azPbflOy4MlxV7ttGE8&lt;br /&gt;
CKoD.YpH+8s8ylrHvTpLlPsabu3Q4g3geaAy6mpNqmJMO1aJQtufMUfbZbdM&lt;br /&gt;
7efczjOq&lt;br /&gt;
-----------end_max5_patcher-----------&lt;br /&gt;
&amp;lt;/maxpat&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The {{maxword|name=bucket}} object is a little unusual in that you don't need to worry about using arguments to the object in order to have it work with floating point values. In fact, {{maxword|name=bucket}} is ''so'' useful that people often ask whether or not there's a Max object that is similar but will work with symbols or lists. While there isn't a specific object, here's a Max patch that does exactly that (and it also helpfully outputs stuff in standard right-to-left order, too):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;maxpat&amp;gt;&lt;br /&gt;
----------begin_max5_patcher----------&lt;br /&gt;
778.3oc2X10bhBCEF9Z7WACWy5jOfjvd296Xmc1A0Ta5ffCDacam9eeIm.pc&lt;br /&gt;
KsDEw05zYTOGfj22mdxW7xDufYEakUA9e2+m9dduLwyCRYR30D6ErJc67rzJ&lt;br /&gt;
31BVIqpRWJCBsWSK2pg72UrorMY9lUp7LoFdBRSx0kxJYtNUqJx+cobt11q7&lt;br /&gt;
D9z3PeBYJJzG07g+u12REazsMEtsoR0yuWku78MSLzLTh42XwAMjZAnxhYO7&lt;br /&gt;
MJtUm2UjqySWIgK8iRUZV6Urcp9Oqk1lOHXWKYdnJ0yvEv0cmI6qSlX9HbfL&lt;br /&gt;
TeeoTdRPjJL9lDMPHRoG.QnI+PHhtZg3SEmBBYLKBGXcHiCOqK0gjjqUDVj+&lt;br /&gt;
4UgtSCbryzP7UkFePAkHhCETb9vpnDTfdDjEknOaTIgciMpjyvf4E3ANyVTh&lt;br /&gt;
6PL9la8AF2Ze9.wHiwcGiQWqXr2sp3LOhEQtyC5+adjKepVHuCGOm4WJWdRk&lt;br /&gt;
U1o2wwtruCRuKSfiguhPVl9AX7j18V3WDTRPnAhxDg6nDcihR6jTX9vPIWfb&lt;br /&gt;
Fk3ja5pRgXXnTvntiR5ULJ09Y9yL+0IMwcxkn9m3CYWdtc00tAC+D4xrz7ku&lt;br /&gt;
6aWXEbOAYp7+8MD.Nwj+s.rpdc04s8bih8w65oExJsJGJwN3dLSB4u2u2qVr&lt;br /&gt;
PBWG0jYkZw5BUttQCbDeJlUeZMdcaSXFfYRE2Dsu2TUoyxj.95t.3XbAoGWX&lt;br /&gt;
F+eTtPjLUPoTLcuKpSMxtf1mKnGmKDbxNIG9lnQv.lCHdf351A7iy.LRjQxB&lt;br /&gt;
X32AAig7SFA4yStTxmhN+xmGAqJbQjO97KeAheojO2A0Sv8H+yXsrKECly+c&lt;br /&gt;
vr+iodvtL1xbr9KkdntnG1ESODWp9MmO8Z5+W39zSGKoBueQ3vnhHbGQQw1Q&lt;br /&gt;
rzcQiwL8tL5.P.9311yd+viSrupg2D03NLZTcmS0RniycMyd13GFm0Qj0cbh&lt;br /&gt;
vc2Y2.a550OJKqZTHXr585+PQoIjEBgpbaHrC9fR4ip16mBYRKq25ttde6aJ&lt;br /&gt;
sa6dqfELwzOuN4u.mi5K2B&lt;br /&gt;
-----------end_max5_patcher-----------&lt;br /&gt;
&amp;lt;/maxpat&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Third-Party Max externals similar to the {{maxword|name=bucket}} object==&lt;br /&gt;
&lt;br /&gt;
[//www.maxobjects.com/?request=bucket Maxobjects.com listing for the bucket object]&lt;br /&gt;
&lt;br /&gt;
==People who looked at/used this object also looked at....==&lt;br /&gt;
&lt;br /&gt;
The [http://www.cycling74.com/docs/max6/dynamic/c74_docs.html#cycle cycle] object&lt;br /&gt;
&lt;br /&gt;
==Errors or Clarifications==&lt;br /&gt;
&lt;br /&gt;
(please list things that you believe to be errors or omissions from the existing refpage)&lt;br /&gt;
&lt;br /&gt;
[[Category:Max Refpage extensions ( symbol, A - F)]]&lt;br /&gt;
[[Category:Refpage extensions]]&lt;/div&gt;</summary>
		<author><name>Gtaylor@rtqe.net</name></author>	</entry>

	<entry>
		<id>http://cycling74.com/wiki/index.php?title=bucket</id>
		<title>bucket</title>
		<link rel="alternate" type="text/html" href="http://cycling74.com/wiki/index.php?title=bucket"/>
				<updated>2013-04-30T05:18:34Z</updated>
		
		<summary type="html">&lt;p&gt;Gtaylor@rtqe.net: /* {{maxword|name=bucket}} Tips and Workarounds */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==[//www.cycling74.com/docs/max6/dynamic/c74_docs.html#bucket bucket online refpage]==&lt;br /&gt;
&lt;br /&gt;
==Using the {{maxword|name=bucket}} object==&lt;br /&gt;
&lt;br /&gt;
=={{maxword|name=bucket}} Tutorials==&lt;br /&gt;
&lt;br /&gt;
=={{maxword|name=bucket}} Tips and Workarounds==&lt;br /&gt;
&lt;br /&gt;
Lots of people use the &amp;lt;strong&amp;gt;bucket&amp;lt;/strong&amp;gt; object for shifting data in series, it's computationally useful for calculating first and second derivatives for streams of data. The terms &amp;quot;first and second derivative&amp;quot; are math-speak for keeping track of:&lt;br /&gt;
&lt;br /&gt;
* the rate that things are changing (that's what velocity (the first derivative) is - the rate of change in a value over time.&lt;br /&gt;
&lt;br /&gt;
* the ''rate of the rate'' that things are changing - that's what acceleration (the second derivative) is.&lt;br /&gt;
&lt;br /&gt;
Here's a patch that does that:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;maxpat&amp;gt;&lt;br /&gt;
----------begin_max5_patcher----------&lt;br /&gt;
863.3oc4XFrbaBCDF9r8SgJmZmwICRf.bu0mgbrISGLHaqDP3QHbcZl7tWoE&lt;br /&gt;
vA2ZrAFC8Pu.dEBs69oesR32lOyZU1AVtE5qnuilM6s4ylAMYZXVk8LqzvCQ&lt;br /&gt;
Ig4P2rhxRSYBk0hxmoXGTP6psLjLTwPYqQM+cz1PwF1ihOmyhxDwnXljuOTw&lt;br /&gt;
2y9xih5QIgKzOsP.CEopQQQJWjvTfewUMtKTEskK17CIKRUF2d1d2au.4rz2&lt;br /&gt;
bC6EXt4pMPOU8R7XHDyV87cjk09bclPIBSYvi9ljGlX8giyJT0d1tt+xMq.6&lt;br /&gt;
6saLB47eAi.lbr4cRVtlP5bLSbRXRg.y1L.n5KnmLuz6ymatr3FNGbj6q4xb&lt;br /&gt;
0HfcW+flXGiuH1CFOrO..pc0JlzpmYrS.AR0xYPJbkX2RB612DlbzwRcuUL4&lt;br /&gt;
OXhvUIrSfw4Ubkih50crx.0haDGHqUZIf0fTXoEIJddBOt+TpZ4HojOXLXgc&lt;br /&gt;
BZgSjgSiblRGR53tzw2QONubzS5tjqds70nsQKCplbLUs7oqXBOpXpkRV0wn&lt;br /&gt;
i6okrlF3px1rQO38cQJApG4srd04EViZednh6.TO6RtoVCUkqcTCgCtYZH6i&lt;br /&gt;
0AmJwff8ScN7W63oiWY1YwF4pXqpNtK9RZDreeqii6Ys5gWjtElDKKDuXxND&lt;br /&gt;
8rjw45jg.qd7cuHY7FaxL3kTs.lOcmV31WwR81Y1NvocJKHhaAImkHODJxQO&lt;br /&gt;
nO+05dgEpOlz5Bo0IYg2V3rpH5ElBQF318XO3Vf+k3CYP7gL.9byKzLHsS89&lt;br /&gt;
mcQ637en1ohOcR639OT6.wC70R+wmJC4jo8SYVdVgLpd3pJLf9HqhY4Jt.Nr&lt;br /&gt;
Ui9XNIbiNskGGyDM2CNlma1VFPx4+nmtFNlON4pwio9NhLIwiSWvC9J3IkGu&lt;br /&gt;
KSukQ0TjqVNQ0I.Ivbqo0GN5lk..qtJPCltIX6tDO9SV7zI931uIXGGOyTJl&lt;br /&gt;
BkMplfAqwXB1uqqXlnIXsmvWKbNoOWkmdAN.AWB+MUd5u4q1ZD3IoK3bxnYm&lt;br /&gt;
p+LrxONvV+zR1dpElBa64goGsFAR61AkhS+TJTJsgRgZ6MlJktrUky.UJk6q&lt;br /&gt;
Gta2dlLuZHg.QepmmyjFSuEfIWTZBGlwRx1yq6ObBCqPo9rMJ8AaJjkGL4Pf&lt;br /&gt;
m0biede9u0DMhQJ&lt;br /&gt;
-----------end_max5_patcher-----------&lt;br /&gt;
&amp;lt;/maxpat&amp;gt;&lt;br /&gt;
&lt;br /&gt;
I also tend to use the object quite a bit in situations where I desire a running average over some finite set of events (if you want a running average for an stream or unspecified set of values, you'd use the {{maxword|name=mean}} object). Here's an example that calculates the average of the last 8 floating point input values:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;maxpat&amp;gt;&lt;br /&gt;
----------begin_max5_patcher----------&lt;br /&gt;
498.3ocuV1sajBBEG+Z8ofvkabm.9AZ6c84nYyFFkYKsJZTrc11z28UO3z1Y&lt;br /&gt;
CyHocJwnjywCG9wePN9RX.da6dw.FcM5VTPvKgAAfqYGAK1A3F99xZ9.DFtc&lt;br /&gt;
TWKz3HyqTiMR0jM7N56NMQAdIKd635x6jp+76dQo1Lhz7zMjHTbbFz71SzuV&lt;br /&gt;
5irxLlau+m4GFxx1lFgBx.FO650vv4GQNNA.dsxOwJ+zU4mUbB7MYQ+2NgId&lt;br /&gt;
L11LicolYJwSS46P1zh8lT8CDYCMNy5TNdw4tVkdP9LvIMdymUInWQmaRuBj&lt;br /&gt;
Bx4jhc0sbsU83MRmgRwafdfuoWxqufpRGu7AztiurJQEWXIJwzvHaxVSirJO&lt;br /&gt;
odQddtFML1702yDutfvRf8LYqumAGcBMIwKZx1wxGDZTwYO7yIUoXcUgvbea&lt;br /&gt;
RzYtsIWT2jKnq3Zo5+qP.XO6+XMbncru7.TKeIidm6JwfVp3ZYq5CwjeTL2I&lt;br /&gt;
qpDpOdXbkbfusV.vSrtV5JMLGng5MZRbflLuQSpCzj3MZlWEnqPS5Qw7cSSr&lt;br /&gt;
CzD6MZRbflDuQSpCzj5MZxbflLuQCyAZXdilbGnI2azPbflOy4MlxV7ttGE8&lt;br /&gt;
CKoD.YpH+8s8ylrHvTpLlPsabu3Q4g3geaAy6mpNqmJMO1aJQtufMUfbZbdM&lt;br /&gt;
7efczjOq&lt;br /&gt;
-----------end_max5_patcher-----------&lt;br /&gt;
&amp;lt;/maxpat&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The {{maxword|name=bucket}} object is a little unusual in that you don't need to worry about using arguments to the object in order to have it work with floating point values. In fact, {{maxword|name=bucket}} is ''so'' useful that people often ask whether or not there's a Max object that is similar but will work with symbols or lists. While there isn't a specific object, here's a Max patch that does exactly that (and it also helpfully outputs stuff in standard right-to-left order, too):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;maxpat&amp;gt;&lt;br /&gt;
----------begin_max5_patcher----------&lt;br /&gt;
778.3oc2X10bhBCEF9Z7WACWy5jOfjvd296Xmc1A0Ta5ffCDacam9eeIm.pc&lt;br /&gt;
KsDEw05zYTOGfj22mdxW7xDufYEakUA9e2+m9dduLwyCRYR30D6ErJc67rzJ&lt;br /&gt;
31BVIqpRWJCBsWSK2pg72UrorMY9lUp7LoFdBRSx0kxJYtNUqJx+cobt11q7&lt;br /&gt;
D9z3PeBYJJzG07g+u12REazsMEtsoR0yuWku78MSLzLTh42XwAMjZAnxhYO7&lt;br /&gt;
MJtUm2UjqySWIgK8iRUZV6Urcp9Oqk1lOHXWKYdnJ0yvEv0cmI6qSlX9HbfL&lt;br /&gt;
TeeoTdRPjJL9lDMPHRoG.QnI+PHhtZg3SEmBBYLKBGXcHiCOqK0gjjqUDVj+&lt;br /&gt;
4UgtSCbryzP7UkFePAkHhCETb9vpnDTfdDjEknOaTIgciMpjyvf4E3ANyVTh&lt;br /&gt;
6PL9la8AF2Ze9.wHiwcGiQWqXr2sp3LOhEQtyC5+adjKepVHuCGOm4WJWdRk&lt;br /&gt;
U1o2wwtruCRuKSfiguhPVl9AX7j18V3WDTRPnAhxDg6nDcihR6jTX9vPIWfb&lt;br /&gt;
Fk3ja5pRgXXnTvntiR5ULJ09Y9yL+0IMwcxkn9m3CYWdtc00tAC+D4xrz7ku&lt;br /&gt;
6aWXEbOAYp7+8MD.Nwj+s.rpdc04s8bih8w65oExJsJGJwN3dLSB4u2u2qVr&lt;br /&gt;
PBWG0jYkZw5BUttQCbDeJlUeZMdcaSXFfYRE2Dsu2TUoyxj.95t.3XbAoGWX&lt;br /&gt;
F+eTtPjLUPoTLcuKpSMxtf1mKnGmKDbxNIG9lnQv.lCHdf351A7iy.LRjQxB&lt;br /&gt;
X32AAig7SFA4yStTxmhN+xmGAqJbQjO97KeAheojO2A0Sv8H+yXsrKECly+c&lt;br /&gt;
vr+iodvtL1xbr9KkdntnG1ESODWp9MmO8Z5+W39zSGKoBueQ3vnhHbGQQw1Q&lt;br /&gt;
rzcQiwL8tL5.P.9311yd+viSrupg2D03NLZTcmS0RniycMyd13GFm0Qj0cbh&lt;br /&gt;
vc2Y2.a550OJKqZTHXr585+PQoIjEBgpbaHrC9fR4ip16mBYRKq25ttde6aJ&lt;br /&gt;
sa6dqfELwzOuN4u.mi5K2B&lt;br /&gt;
-----------end_max5_patcher-----------&lt;br /&gt;
&amp;lt;/maxpat&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Third-Party Max externals similar to the {{maxword|name=bucket}} object==&lt;br /&gt;
&lt;br /&gt;
[//www.maxobjects.com/?request=bucket Maxobjects.com listing for the bucket object]&lt;br /&gt;
&lt;br /&gt;
==People who looked at/used this object also looked at....==&lt;br /&gt;
&lt;br /&gt;
The [http://www.cycling74.com/docs/max6/dynamic/c74_docs.html#cycle cycle] object&lt;br /&gt;
&lt;br /&gt;
==Errors or Clarifications==&lt;br /&gt;
&lt;br /&gt;
(please list things that you believe to be errors or omissions from the existing refpage)&lt;br /&gt;
&lt;br /&gt;
[[Category:Max Refpage extensions ( symbol, A - F)]]&lt;br /&gt;
[[Category:Refpage extensions]]&lt;/div&gt;</summary>
		<author><name>Gtaylor@rtqe.net</name></author>	</entry>

	<entry>
		<id>http://cycling74.com/wiki/index.php?title=bucket</id>
		<title>bucket</title>
		<link rel="alternate" type="text/html" href="http://cycling74.com/wiki/index.php?title=bucket"/>
				<updated>2013-04-02T19:56:38Z</updated>
		
		<summary type="html">&lt;p&gt;Gtaylor@rtqe.net: /* {{maxword|name=bucket}} Tips and Workarounds */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==[//www.cycling74.com/docs/max6/dynamic/c74_docs.html#bucket bucket online refpage]==&lt;br /&gt;
&lt;br /&gt;
==Using the {{maxword|name=bucket}} object==&lt;br /&gt;
&lt;br /&gt;
=={{maxword|name=bucket}} Tutorials==&lt;br /&gt;
&lt;br /&gt;
=={{maxword|name=bucket}} Tips and Workarounds==&lt;br /&gt;
&lt;br /&gt;
While lots of people use the &amp;lt;strong&amp;gt;bucket&amp;lt;/strong&amp;gt; object for shifting data in series, it's computationally useful for calculating first and second derivatives for streams of data.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;maxpat&amp;gt;&lt;br /&gt;
----------begin_max5_patcher----------&lt;br /&gt;
863.3oc4XFrbaBCDF9r8SgJmZmwICRf.bu0mgbrISGLHaqDP3QHbcZl7tWoE&lt;br /&gt;
vA2ZrAFC8Pu.dEBs69oesR32lOyZU1AVtE5qnuilM6s4ylAMYZXVk8LqzvCQ&lt;br /&gt;
Ig4P2rhxRSYBk0hxmoXGTP6psLjLTwPYqQM+cz1PwF1ihOmyhxDwnXljuOTw&lt;br /&gt;
2y9xih5QIgKzOsP.CEopQQQJWjvTfewUMtKTEskK17CIKRUF2d1d2au.4rz2&lt;br /&gt;
bC6EXt4pMPOU8R7XHDyV87cjk09bclPIBSYvi9ljGlX8giyJT0d1tt+xMq.6&lt;br /&gt;
6saLB47eAi.lbr4cRVtlP5bLSbRXRg.y1L.n5KnmLuz6ymatr3FNGbj6q4xb&lt;br /&gt;
0HfcW+flXGiuH1CFOrO..pc0JlzpmYrS.AR0xYPJbkX2RB612DlbzwRcuUL4&lt;br /&gt;
OXhvUIrSfw4Ubkih50crx.0haDGHqUZIf0fTXoEIJddBOt+TpZ4HojOXLXgc&lt;br /&gt;
BZgSjgSiblRGR53tzw2QONubzS5tjqds70nsQKCplbLUs7oqXBOpXpkRV0wn&lt;br /&gt;
i6okrlF3px1rQO38cQJApG4srd04EViZednh6.TO6RtoVCUkqcTCgCtYZH6i&lt;br /&gt;
0AmJwff8ScN7W63oiWY1YwF4pXqpNtK9RZDreeqii6Ys5gWjtElDKKDuXxND&lt;br /&gt;
8rjw45jg.qd7cuHY7FaxL3kTs.lOcmV31WwR81Y1NvocJKHhaAImkHODJxQO&lt;br /&gt;
nO+05dgEpOlz5Bo0IYg2V3rpH5ElBQF318XO3Vf+k3CYP7gL.9byKzLHsS89&lt;br /&gt;
mcQ637en1ohOcR639OT6.wC70R+wmJC4jo8SYVdVgLpd3pJLf9HqhY4Jt.Nr&lt;br /&gt;
Ui9XNIbiNskGGyDM2CNlma1VFPx4+nmtFNlON4pwio9NhLIwiSWvC9J3IkGu&lt;br /&gt;
KSukQ0TjqVNQ0I.Ivbqo0GN5lk..qtJPCltIX6tDO9SV7zI931uIXGGOyTJl&lt;br /&gt;
BkMplfAqwXB1uqqXlnIXsmvWKbNoOWkmdAN.AWB+MUd5u4q1ZD3IoK3bxnYm&lt;br /&gt;
p+LrxONvV+zR1dpElBa64goGsFAR61AkhS+TJTJsgRgZ6MlJktrUky.UJk6q&lt;br /&gt;
Gta2dlLuZHg.QepmmyjFSuEfIWTZBGlwRx1yq6ObBCqPo9rMJ8AaJjkGL4Pf&lt;br /&gt;
m0biede9u0DMhQJ&lt;br /&gt;
-----------end_max5_patcher-----------&lt;br /&gt;
&amp;lt;/maxpat&amp;gt;&lt;br /&gt;
&lt;br /&gt;
I also tend to use the object quite a bit in situations where I desire a running average over some finite set of events (if you want a running average for an stream or unspecified set of values, you'd use the {{maxword|name=mean}} object). Here's an example that calculates the average of the last 8 floating point input values:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;maxpat&amp;gt;&lt;br /&gt;
----------begin_max5_patcher----------&lt;br /&gt;
498.3ocuV1sajBBEG+Z8ofvkabm.9AZ6c84nYyFFkYKsJZTrc11z28UO3z1Y&lt;br /&gt;
CyHocJwnjywCG9wePN9RX.da6dw.FcM5VTPvKgAAfqYGAK1A3F99xZ9.DFtc&lt;br /&gt;
TWKz3HyqTiMR0jM7N56NMQAdIKd635x6jp+76dQo1Lhz7zMjHTbbFz71SzuV&lt;br /&gt;
5irxLlau+m4GFxx1lFgBx.FO650vv4GQNNA.dsxOwJ+zU4mUbB7MYQ+2NgId&lt;br /&gt;
L11LicolYJwSS46P1zh8lT8CDYCMNy5TNdw4tVkdP9LvIMdymUInWQmaRuBj&lt;br /&gt;
Bx4jhc0sbsU83MRmgRwafdfuoWxqufpRGu7AztiurJQEWXIJwzvHaxVSirJO&lt;br /&gt;
odQddtFML1702yDutfvRf8LYqumAGcBMIwKZx1wxGDZTwYO7yIUoXcUgvbea&lt;br /&gt;
RzYtsIWT2jKnq3Zo5+qP.XO6+XMbncru7.TKeIidm6JwfVp3ZYq5CwjeTL2I&lt;br /&gt;
qpDpOdXbkbfusV.vSrtV5JMLGng5MZRbflLuQSpCzj3MZlWEnqPS5Qw7cSSr&lt;br /&gt;
CzD6MZRbflDuQSpCzj5MZxbflLuQCyAZXdilbGnI2azPbflOy4MlxV7ttGE8&lt;br /&gt;
CKoD.YpH+8s8ylrHvTpLlPsabu3Q4g3geaAy6mpNqmJMO1aJQtufMUfbZbdM&lt;br /&gt;
7efczjOq&lt;br /&gt;
-----------end_max5_patcher-----------&lt;br /&gt;
&amp;lt;/maxpat&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Third-Party Max externals similar to the {{maxword|name=bucket}} object==&lt;br /&gt;
&lt;br /&gt;
[//www.maxobjects.com/?request=bucket Maxobjects.com listing for the bucket object]&lt;br /&gt;
&lt;br /&gt;
==People who looked at/used this object also looked at....==&lt;br /&gt;
&lt;br /&gt;
The [http://www.cycling74.com/docs/max6/dynamic/c74_docs.html#cycle cycle] object&lt;br /&gt;
&lt;br /&gt;
==Errors or Clarifications==&lt;br /&gt;
&lt;br /&gt;
(please list things that you believe to be errors or omissions from the existing refpage)&lt;br /&gt;
&lt;br /&gt;
[[Category:Max Refpage extensions ( symbol, A - F)]]&lt;br /&gt;
[[Category:Refpage extensions]]&lt;/div&gt;</summary>
		<author><name>Gtaylor@rtqe.net</name></author>	</entry>

	<entry>
		<id>http://cycling74.com/wiki/index.php?title=bucket</id>
		<title>bucket</title>
		<link rel="alternate" type="text/html" href="http://cycling74.com/wiki/index.php?title=bucket"/>
				<updated>2013-04-02T19:55:54Z</updated>
		
		<summary type="html">&lt;p&gt;Gtaylor@rtqe.net: /* {{maxword|name=bucket}} Tips and Workarounds */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==[//www.cycling74.com/docs/max6/dynamic/c74_docs.html#bucket bucket online refpage]==&lt;br /&gt;
&lt;br /&gt;
==Using the {{maxword|name=bucket}} object==&lt;br /&gt;
&lt;br /&gt;
=={{maxword|name=bucket}} Tutorials==&lt;br /&gt;
&lt;br /&gt;
=={{maxword|name=bucket}} Tips and Workarounds==&lt;br /&gt;
&lt;br /&gt;
While lots of people use the &amp;lt;strong&amp;gt;bucket&amp;lt;/strong&amp;gt; object for shifting data in series, it's computationally useful for calculating first and second derivatives for streams of data.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;maxpat&amp;gt;&lt;br /&gt;
----------begin_max5_patcher----------&lt;br /&gt;
863.3oc4XFrbaBCDF9r8SgJmZmwICRf.bu0mgbrISGLHaqDP3QHbcZl7tWoE&lt;br /&gt;
vA2ZrAFC8Pu.dEBs69oesR32lOyZU1AVtE5qnuilM6s4ylAMYZXVk8LqzvCQ&lt;br /&gt;
Ig4P2rhxRSYBk0hxmoXGTP6psLjLTwPYqQM+cz1PwF1ihOmyhxDwnXljuOTw&lt;br /&gt;
2y9xih5QIgKzOsP.CEopQQQJWjvTfewUMtKTEskK17CIKRUF2d1d2au.4rz2&lt;br /&gt;
bC6EXt4pMPOU8R7XHDyV87cjk09bclPIBSYvi9ljGlX8giyJT0d1tt+xMq.6&lt;br /&gt;
6saLB47eAi.lbr4cRVtlP5bLSbRXRg.y1L.n5KnmLuz6ymatr3FNGbj6q4xb&lt;br /&gt;
0HfcW+flXGiuH1CFOrO..pc0JlzpmYrS.AR0xYPJbkX2RB612DlbzwRcuUL4&lt;br /&gt;
OXhvUIrSfw4Ubkih50crx.0haDGHqUZIf0fTXoEIJddBOt+TpZ4HojOXLXgc&lt;br /&gt;
BZgSjgSiblRGR53tzw2QONubzS5tjqds70nsQKCplbLUs7oqXBOpXpkRV0wn&lt;br /&gt;
i6okrlF3px1rQO38cQJApG4srd04EViZednh6.TO6RtoVCUkqcTCgCtYZH6i&lt;br /&gt;
0AmJwff8ScN7W63oiWY1YwF4pXqpNtK9RZDreeqii6Ys5gWjtElDKKDuXxND&lt;br /&gt;
8rjw45jg.qd7cuHY7FaxL3kTs.lOcmV31WwR81Y1NvocJKHhaAImkHODJxQO&lt;br /&gt;
nO+05dgEpOlz5Bo0IYg2V3rpH5ElBQF318XO3Vf+k3CYP7gL.9byKzLHsS89&lt;br /&gt;
mcQ637en1ohOcR639OT6.wC70R+wmJC4jo8SYVdVgLpd3pJLf9HqhY4Jt.Nr&lt;br /&gt;
Ui9XNIbiNskGGyDM2CNlma1VFPx4+nmtFNlON4pwio9NhLIwiSWvC9J3IkGu&lt;br /&gt;
KSukQ0TjqVNQ0I.Ivbqo0GN5lk..qtJPCltIX6tDO9SV7zI931uIXGGOyTJl&lt;br /&gt;
BkMplfAqwXB1uqqXlnIXsmvWKbNoOWkmdAN.AWB+MUd5u4q1ZD3IoK3bxnYm&lt;br /&gt;
p+LrxONvV+zR1dpElBa64goGsFAR61AkhS+TJTJsgRgZ6MlJktrUky.UJk6q&lt;br /&gt;
Gta2dlLuZHg.QepmmyjFSuEfIWTZBGlwRx1yq6ObBCqPo9rMJ8AaJjkGL4Pf&lt;br /&gt;
m0biede9u0DMhQJ&lt;br /&gt;
-----------end_max5_patcher-----------&lt;br /&gt;
&amp;lt;/maxpat&amp;gt;&lt;br /&gt;
&lt;br /&gt;
I also tend to use the object quite a bit in situations where I desire a running average over some finite set of events (if you want a running average for an unspecified set of values, you'd use the {{maxword|name=mean}} object). Here's an example that calculates the average of the last 8 floating point input values:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;maxpat&amp;gt;&lt;br /&gt;
----------begin_max5_patcher----------&lt;br /&gt;
498.3ocuV1sajBBEG+Z8ofvkabm.9AZ6c84nYyFFkYKsJZTrc11z28UO3z1Y&lt;br /&gt;
CyHocJwnjywCG9wePN9RX.da6dw.FcM5VTPvKgAAfqYGAK1A3F99xZ9.DFtc&lt;br /&gt;
TWKz3HyqTiMR0jM7N56NMQAdIKd635x6jp+76dQo1Lhz7zMjHTbbFz71SzuV&lt;br /&gt;
5irxLlau+m4GFxx1lFgBx.FO650vv4GQNNA.dsxOwJ+zU4mUbB7MYQ+2NgId&lt;br /&gt;
L11LicolYJwSS46P1zh8lT8CDYCMNy5TNdw4tVkdP9LvIMdymUInWQmaRuBj&lt;br /&gt;
Bx4jhc0sbsU83MRmgRwafdfuoWxqufpRGu7AztiurJQEWXIJwzvHaxVSirJO&lt;br /&gt;
odQddtFML1702yDutfvRf8LYqumAGcBMIwKZx1wxGDZTwYO7yIUoXcUgvbea&lt;br /&gt;
RzYtsIWT2jKnq3Zo5+qP.XO6+XMbncru7.TKeIidm6JwfVp3ZYq5CwjeTL2I&lt;br /&gt;
qpDpOdXbkbfusV.vSrtV5JMLGng5MZRbflLuQSpCzj3MZlWEnqPS5Qw7cSSr&lt;br /&gt;
CzD6MZRbflDuQSpCzj5MZxbflLuQCyAZXdilbGnI2azPbflOy4MlxV7ttGE8&lt;br /&gt;
CKoD.YpH+8s8ylrHvTpLlPsabu3Q4g3geaAy6mpNqmJMO1aJQtufMUfbZbdM&lt;br /&gt;
7efczjOq&lt;br /&gt;
-----------end_max5_patcher-----------&lt;br /&gt;
&amp;lt;/maxpat&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Third-Party Max externals similar to the {{maxword|name=bucket}} object==&lt;br /&gt;
&lt;br /&gt;
[//www.maxobjects.com/?request=bucket Maxobjects.com listing for the bucket object]&lt;br /&gt;
&lt;br /&gt;
==People who looked at/used this object also looked at....==&lt;br /&gt;
&lt;br /&gt;
The [http://www.cycling74.com/docs/max6/dynamic/c74_docs.html#cycle cycle] object&lt;br /&gt;
&lt;br /&gt;
==Errors or Clarifications==&lt;br /&gt;
&lt;br /&gt;
(please list things that you believe to be errors or omissions from the existing refpage)&lt;br /&gt;
&lt;br /&gt;
[[Category:Max Refpage extensions ( symbol, A - F)]]&lt;br /&gt;
[[Category:Refpage extensions]]&lt;/div&gt;</summary>
		<author><name>Gtaylor@rtqe.net</name></author>	</entry>

	<entry>
		<id>http://cycling74.com/wiki/index.php?title=bucket</id>
		<title>bucket</title>
		<link rel="alternate" type="text/html" href="http://cycling74.com/wiki/index.php?title=bucket"/>
				<updated>2013-04-02T19:55:31Z</updated>
		
		<summary type="html">&lt;p&gt;Gtaylor@rtqe.net: /* {{maxword|name=bucket}} Tips and Workarounds */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==[//www.cycling74.com/docs/max6/dynamic/c74_docs.html#bucket bucket online refpage]==&lt;br /&gt;
&lt;br /&gt;
==Using the {{maxword|name=bucket}} object==&lt;br /&gt;
&lt;br /&gt;
=={{maxword|name=bucket}} Tutorials==&lt;br /&gt;
&lt;br /&gt;
=={{maxword|name=bucket}} Tips and Workarounds==&lt;br /&gt;
&lt;br /&gt;
While lots of people use the &amp;lt;strong&amp;gt;bucket&amp;lt;/strong&amp;gt; object for shifting data in series, it's computationally useful for calculating first and second derivatives for streams of data.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;maxpat&amp;gt;&lt;br /&gt;
----------begin_max5_patcher----------&lt;br /&gt;
863.3oc4XFrbaBCDF9r8SgJmZmwICRf.bu0mgbrISGLHaqDP3QHbcZl7tWoE&lt;br /&gt;
vA2ZrAFC8Pu.dEBs69oesR32lOyZU1AVtE5qnuilM6s4ylAMYZXVk8LqzvCQ&lt;br /&gt;
Ig4P2rhxRSYBk0hxmoXGTP6psLjLTwPYqQM+cz1PwF1ihOmyhxDwnXljuOTw&lt;br /&gt;
2y9xih5QIgKzOsP.CEopQQQJWjvTfewUMtKTEskK17CIKRUF2d1d2au.4rz2&lt;br /&gt;
bC6EXt4pMPOU8R7XHDyV87cjk09bclPIBSYvi9ljGlX8giyJT0d1tt+xMq.6&lt;br /&gt;
6saLB47eAi.lbr4cRVtlP5bLSbRXRg.y1L.n5KnmLuz6ymatr3FNGbj6q4xb&lt;br /&gt;
0HfcW+flXGiuH1CFOrO..pc0JlzpmYrS.AR0xYPJbkX2RB612DlbzwRcuUL4&lt;br /&gt;
OXhvUIrSfw4Ubkih50crx.0haDGHqUZIf0fTXoEIJddBOt+TpZ4HojOXLXgc&lt;br /&gt;
BZgSjgSiblRGR53tzw2QONubzS5tjqds70nsQKCplbLUs7oqXBOpXpkRV0wn&lt;br /&gt;
i6okrlF3px1rQO38cQJApG4srd04EViZednh6.TO6RtoVCUkqcTCgCtYZH6i&lt;br /&gt;
0AmJwff8ScN7W63oiWY1YwF4pXqpNtK9RZDreeqii6Ys5gWjtElDKKDuXxND&lt;br /&gt;
8rjw45jg.qd7cuHY7FaxL3kTs.lOcmV31WwR81Y1NvocJKHhaAImkHODJxQO&lt;br /&gt;
nO+05dgEpOlz5Bo0IYg2V3rpH5ElBQF318XO3Vf+k3CYP7gL.9byKzLHsS89&lt;br /&gt;
mcQ637en1ohOcR639OT6.wC70R+wmJC4jo8SYVdVgLpd3pJLf9HqhY4Jt.Nr&lt;br /&gt;
Ui9XNIbiNskGGyDM2CNlma1VFPx4+nmtFNlON4pwio9NhLIwiSWvC9J3IkGu&lt;br /&gt;
KSukQ0TjqVNQ0I.Ivbqo0GN5lk..qtJPCltIX6tDO9SV7zI931uIXGGOyTJl&lt;br /&gt;
BkMplfAqwXB1uqqXlnIXsmvWKbNoOWkmdAN.AWB+MUd5u4q1ZD3IoK3bxnYm&lt;br /&gt;
p+LrxONvV+zR1dpElBa64goGsFAR61AkhS+TJTJsgRgZ6MlJktrUky.UJk6q&lt;br /&gt;
Gta2dlLuZHg.QepmmyjFSuEfIWTZBGlwRx1yq6ObBCqPo9rMJ8AaJjkGL4Pf&lt;br /&gt;
m0biede9u0DMhQJ&lt;br /&gt;
-----------end_max5_patcher-----------&lt;br /&gt;
&amp;lt;/maxpat&amp;gt;&lt;br /&gt;
&lt;br /&gt;
I also tend to use the object quite a bit in situations where I desire a running average over some finite set of events (if you want a running average for an unspecified set of values, you'd use the {{maxword|name=mean}} object. Here's an example that calculates the average of the last 8 floating point input values:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;maxpat&amp;gt;&lt;br /&gt;
----------begin_max5_patcher----------&lt;br /&gt;
498.3ocuV1sajBBEG+Z8ofvkabm.9AZ6c84nYyFFkYKsJZTrc11z28UO3z1Y&lt;br /&gt;
CyHocJwnjywCG9wePN9RX.da6dw.FcM5VTPvKgAAfqYGAK1A3F99xZ9.DFtc&lt;br /&gt;
TWKz3HyqTiMR0jM7N56NMQAdIKd635x6jp+76dQo1Lhz7zMjHTbbFz71SzuV&lt;br /&gt;
5irxLlau+m4GFxx1lFgBx.FO650vv4GQNNA.dsxOwJ+zU4mUbB7MYQ+2NgId&lt;br /&gt;
L11LicolYJwSS46P1zh8lT8CDYCMNy5TNdw4tVkdP9LvIMdymUInWQmaRuBj&lt;br /&gt;
Bx4jhc0sbsU83MRmgRwafdfuoWxqufpRGu7AztiurJQEWXIJwzvHaxVSirJO&lt;br /&gt;
odQddtFML1702yDutfvRf8LYqumAGcBMIwKZx1wxGDZTwYO7yIUoXcUgvbea&lt;br /&gt;
RzYtsIWT2jKnq3Zo5+qP.XO6+XMbncru7.TKeIidm6JwfVp3ZYq5CwjeTL2I&lt;br /&gt;
qpDpOdXbkbfusV.vSrtV5JMLGng5MZRbflLuQSpCzj3MZlWEnqPS5Qw7cSSr&lt;br /&gt;
CzD6MZRbflDuQSpCzj5MZxbflLuQCyAZXdilbGnI2azPbflOy4MlxV7ttGE8&lt;br /&gt;
CKoD.YpH+8s8ylrHvTpLlPsabu3Q4g3geaAy6mpNqmJMO1aJQtufMUfbZbdM&lt;br /&gt;
7efczjOq&lt;br /&gt;
-----------end_max5_patcher-----------&lt;br /&gt;
&amp;lt;/maxpat&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Third-Party Max externals similar to the {{maxword|name=bucket}} object==&lt;br /&gt;
&lt;br /&gt;
[//www.maxobjects.com/?request=bucket Maxobjects.com listing for the bucket object]&lt;br /&gt;
&lt;br /&gt;
==People who looked at/used this object also looked at....==&lt;br /&gt;
&lt;br /&gt;
The [http://www.cycling74.com/docs/max6/dynamic/c74_docs.html#cycle cycle] object&lt;br /&gt;
&lt;br /&gt;
==Errors or Clarifications==&lt;br /&gt;
&lt;br /&gt;
(please list things that you believe to be errors or omissions from the existing refpage)&lt;br /&gt;
&lt;br /&gt;
[[Category:Max Refpage extensions ( symbol, A - F)]]&lt;br /&gt;
[[Category:Refpage extensions]]&lt;/div&gt;</summary>
		<author><name>Gtaylor@rtqe.net</name></author>	</entry>

	<entry>
		<id>http://cycling74.com/wiki/index.php?title=bucket</id>
		<title>bucket</title>
		<link rel="alternate" type="text/html" href="http://cycling74.com/wiki/index.php?title=bucket"/>
				<updated>2013-04-02T17:27:06Z</updated>
		
		<summary type="html">&lt;p&gt;Gtaylor@rtqe.net: /* People who looked at/used this object also looked at.... */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==[//www.cycling74.com/docs/max6/dynamic/c74_docs.html#bucket bucket online refpage]==&lt;br /&gt;
&lt;br /&gt;
==Using the {{maxword|name=bucket}} object==&lt;br /&gt;
&lt;br /&gt;
=={{maxword|name=bucket}} Tutorials==&lt;br /&gt;
&lt;br /&gt;
=={{maxword|name=bucket}} Tips and Workarounds==&lt;br /&gt;
&lt;br /&gt;
While lots of people use the &amp;lt;strong&amp;gt;bucket&amp;lt;/strong&amp;gt; object for shifting data in series, it's computationally useful for calculating first and second derivatives for streams of data.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;maxpat&amp;gt;&lt;br /&gt;
----------begin_max5_patcher----------&lt;br /&gt;
863.3oc4XFrbaBCDF9r8SgJmZmwICRf.bu0mgbrISGLHaqDP3QHbcZl7tWoE&lt;br /&gt;
vA2ZrAFC8Pu.dEBs69oesR32lOyZU1AVtE5qnuilM6s4ylAMYZXVk8LqzvCQ&lt;br /&gt;
Ig4P2rhxRSYBk0hxmoXGTP6psLjLTwPYqQM+cz1PwF1ihOmyhxDwnXljuOTw&lt;br /&gt;
2y9xih5QIgKzOsP.CEopQQQJWjvTfewUMtKTEskK17CIKRUF2d1d2au.4rz2&lt;br /&gt;
bC6EXt4pMPOU8R7XHDyV87cjk09bclPIBSYvi9ljGlX8giyJT0d1tt+xMq.6&lt;br /&gt;
6saLB47eAi.lbr4cRVtlP5bLSbRXRg.y1L.n5KnmLuz6ymatr3FNGbj6q4xb&lt;br /&gt;
0HfcW+flXGiuH1CFOrO..pc0JlzpmYrS.AR0xYPJbkX2RB612DlbzwRcuUL4&lt;br /&gt;
OXhvUIrSfw4Ubkih50crx.0haDGHqUZIf0fTXoEIJddBOt+TpZ4HojOXLXgc&lt;br /&gt;
BZgSjgSiblRGR53tzw2QONubzS5tjqds70nsQKCplbLUs7oqXBOpXpkRV0wn&lt;br /&gt;
i6okrlF3px1rQO38cQJApG4srd04EViZednh6.TO6RtoVCUkqcTCgCtYZH6i&lt;br /&gt;
0AmJwff8ScN7W63oiWY1YwF4pXqpNtK9RZDreeqii6Ys5gWjtElDKKDuXxND&lt;br /&gt;
8rjw45jg.qd7cuHY7FaxL3kTs.lOcmV31WwR81Y1NvocJKHhaAImkHODJxQO&lt;br /&gt;
nO+05dgEpOlz5Bo0IYg2V3rpH5ElBQF318XO3Vf+k3CYP7gL.9byKzLHsS89&lt;br /&gt;
mcQ637en1ohOcR639OT6.wC70R+wmJC4jo8SYVdVgLpd3pJLf9HqhY4Jt.Nr&lt;br /&gt;
Ui9XNIbiNskGGyDM2CNlma1VFPx4+nmtFNlON4pwio9NhLIwiSWvC9J3IkGu&lt;br /&gt;
KSukQ0TjqVNQ0I.Ivbqo0GN5lk..qtJPCltIX6tDO9SV7zI931uIXGGOyTJl&lt;br /&gt;
BkMplfAqwXB1uqqXlnIXsmvWKbNoOWkmdAN.AWB+MUd5u4q1ZD3IoK3bxnYm&lt;br /&gt;
p+LrxONvV+zR1dpElBa64goGsFAR61AkhS+TJTJsgRgZ6MlJktrUky.UJk6q&lt;br /&gt;
Gta2dlLuZHg.QepmmyjFSuEfIWTZBGlwRx1yq6ObBCqPo9rMJ8AaJjkGL4Pf&lt;br /&gt;
m0biede9u0DMhQJ&lt;br /&gt;
-----------end_max5_patcher-----------&lt;br /&gt;
&amp;lt;/maxpat&amp;gt;&lt;br /&gt;
&lt;br /&gt;
I also tend to use the object quite a bit in situations where I desire a running average over some history of events. Here's an example that calculates the average of the last 8 floating point input values:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;maxpat&amp;gt;&lt;br /&gt;
----------begin_max5_patcher----------&lt;br /&gt;
498.3ocuV1sajBBEG+Z8ofvkabm.9AZ6c84nYyFFkYKsJZTrc11z28UO3z1Y&lt;br /&gt;
CyHocJwnjywCG9wePN9RX.da6dw.FcM5VTPvKgAAfqYGAK1A3F99xZ9.DFtc&lt;br /&gt;
TWKz3HyqTiMR0jM7N56NMQAdIKd635x6jp+76dQo1Lhz7zMjHTbbFz71SzuV&lt;br /&gt;
5irxLlau+m4GFxx1lFgBx.FO650vv4GQNNA.dsxOwJ+zU4mUbB7MYQ+2NgId&lt;br /&gt;
L11LicolYJwSS46P1zh8lT8CDYCMNy5TNdw4tVkdP9LvIMdymUInWQmaRuBj&lt;br /&gt;
Bx4jhc0sbsU83MRmgRwafdfuoWxqufpRGu7AztiurJQEWXIJwzvHaxVSirJO&lt;br /&gt;
odQddtFML1702yDutfvRf8LYqumAGcBMIwKZx1wxGDZTwYO7yIUoXcUgvbea&lt;br /&gt;
RzYtsIWT2jKnq3Zo5+qP.XO6+XMbncru7.TKeIidm6JwfVp3ZYq5CwjeTL2I&lt;br /&gt;
qpDpOdXbkbfusV.vSrtV5JMLGng5MZRbflLuQSpCzj3MZlWEnqPS5Qw7cSSr&lt;br /&gt;
CzD6MZRbflDuQSpCzj5MZxbflLuQCyAZXdilbGnI2azPbflOy4MlxV7ttGE8&lt;br /&gt;
CKoD.YpH+8s8ylrHvTpLlPsabu3Q4g3geaAy6mpNqmJMO1aJQtufMUfbZbdM&lt;br /&gt;
7efczjOq&lt;br /&gt;
-----------end_max5_patcher-----------&lt;br /&gt;
&amp;lt;/maxpat&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Third-Party Max externals similar to the {{maxword|name=bucket}} object==&lt;br /&gt;
&lt;br /&gt;
[//www.maxobjects.com/?request=bucket Maxobjects.com listing for the bucket object]&lt;br /&gt;
&lt;br /&gt;
==People who looked at/used this object also looked at....==&lt;br /&gt;
&lt;br /&gt;
The [http://www.cycling74.com/docs/max6/dynamic/c74_docs.html#cycle cycle] object&lt;br /&gt;
&lt;br /&gt;
==Errors or Clarifications==&lt;br /&gt;
&lt;br /&gt;
(please list things that you believe to be errors or omissions from the existing refpage)&lt;br /&gt;
&lt;br /&gt;
[[Category:Max Refpage extensions ( symbol, A - F)]]&lt;br /&gt;
[[Category:Refpage extensions]]&lt;/div&gt;</summary>
		<author><name>Gtaylor@rtqe.net</name></author>	</entry>

	<entry>
		<id>http://cycling74.com/wiki/index.php?title=bucket</id>
		<title>bucket</title>
		<link rel="alternate" type="text/html" href="http://cycling74.com/wiki/index.php?title=bucket"/>
				<updated>2013-04-02T17:24:27Z</updated>
		
		<summary type="html">&lt;p&gt;Gtaylor@rtqe.net: /* {{maxword|name=bucket}} Tips and Workarounds */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==[//www.cycling74.com/docs/max6/dynamic/c74_docs.html#bucket bucket online refpage]==&lt;br /&gt;
&lt;br /&gt;
==Using the {{maxword|name=bucket}} object==&lt;br /&gt;
&lt;br /&gt;
=={{maxword|name=bucket}} Tutorials==&lt;br /&gt;
&lt;br /&gt;
=={{maxword|name=bucket}} Tips and Workarounds==&lt;br /&gt;
&lt;br /&gt;
While lots of people use the &amp;lt;strong&amp;gt;bucket&amp;lt;/strong&amp;gt; object for shifting data in series, it's computationally useful for calculating first and second derivatives for streams of data.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;maxpat&amp;gt;&lt;br /&gt;
----------begin_max5_patcher----------&lt;br /&gt;
863.3oc4XFrbaBCDF9r8SgJmZmwICRf.bu0mgbrISGLHaqDP3QHbcZl7tWoE&lt;br /&gt;
vA2ZrAFC8Pu.dEBs69oesR32lOyZU1AVtE5qnuilM6s4ylAMYZXVk8LqzvCQ&lt;br /&gt;
Ig4P2rhxRSYBk0hxmoXGTP6psLjLTwPYqQM+cz1PwF1ihOmyhxDwnXljuOTw&lt;br /&gt;
2y9xih5QIgKzOsP.CEopQQQJWjvTfewUMtKTEskK17CIKRUF2d1d2au.4rz2&lt;br /&gt;
bC6EXt4pMPOU8R7XHDyV87cjk09bclPIBSYvi9ljGlX8giyJT0d1tt+xMq.6&lt;br /&gt;
6saLB47eAi.lbr4cRVtlP5bLSbRXRg.y1L.n5KnmLuz6ymatr3FNGbj6q4xb&lt;br /&gt;
0HfcW+flXGiuH1CFOrO..pc0JlzpmYrS.AR0xYPJbkX2RB612DlbzwRcuUL4&lt;br /&gt;
OXhvUIrSfw4Ubkih50crx.0haDGHqUZIf0fTXoEIJddBOt+TpZ4HojOXLXgc&lt;br /&gt;
BZgSjgSiblRGR53tzw2QONubzS5tjqds70nsQKCplbLUs7oqXBOpXpkRV0wn&lt;br /&gt;
i6okrlF3px1rQO38cQJApG4srd04EViZednh6.TO6RtoVCUkqcTCgCtYZH6i&lt;br /&gt;
0AmJwff8ScN7W63oiWY1YwF4pXqpNtK9RZDreeqii6Ys5gWjtElDKKDuXxND&lt;br /&gt;
8rjw45jg.qd7cuHY7FaxL3kTs.lOcmV31WwR81Y1NvocJKHhaAImkHODJxQO&lt;br /&gt;
nO+05dgEpOlz5Bo0IYg2V3rpH5ElBQF318XO3Vf+k3CYP7gL.9byKzLHsS89&lt;br /&gt;
mcQ637en1ohOcR639OT6.wC70R+wmJC4jo8SYVdVgLpd3pJLf9HqhY4Jt.Nr&lt;br /&gt;
Ui9XNIbiNskGGyDM2CNlma1VFPx4+nmtFNlON4pwio9NhLIwiSWvC9J3IkGu&lt;br /&gt;
KSukQ0TjqVNQ0I.Ivbqo0GN5lk..qtJPCltIX6tDO9SV7zI931uIXGGOyTJl&lt;br /&gt;
BkMplfAqwXB1uqqXlnIXsmvWKbNoOWkmdAN.AWB+MUd5u4q1ZD3IoK3bxnYm&lt;br /&gt;
p+LrxONvV+zR1dpElBa64goGsFAR61AkhS+TJTJsgRgZ6MlJktrUky.UJk6q&lt;br /&gt;
Gta2dlLuZHg.QepmmyjFSuEfIWTZBGlwRx1yq6ObBCqPo9rMJ8AaJjkGL4Pf&lt;br /&gt;
m0biede9u0DMhQJ&lt;br /&gt;
-----------end_max5_patcher-----------&lt;br /&gt;
&amp;lt;/maxpat&amp;gt;&lt;br /&gt;
&lt;br /&gt;
I also tend to use the object quite a bit in situations where I desire a running average over some history of events. Here's an example that calculates the average of the last 8 floating point input values:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;maxpat&amp;gt;&lt;br /&gt;
----------begin_max5_patcher----------&lt;br /&gt;
498.3ocuV1sajBBEG+Z8ofvkabm.9AZ6c84nYyFFkYKsJZTrc11z28UO3z1Y&lt;br /&gt;
CyHocJwnjywCG9wePN9RX.da6dw.FcM5VTPvKgAAfqYGAK1A3F99xZ9.DFtc&lt;br /&gt;
TWKz3HyqTiMR0jM7N56NMQAdIKd635x6jp+76dQo1Lhz7zMjHTbbFz71SzuV&lt;br /&gt;
5irxLlau+m4GFxx1lFgBx.FO650vv4GQNNA.dsxOwJ+zU4mUbB7MYQ+2NgId&lt;br /&gt;
L11LicolYJwSS46P1zh8lT8CDYCMNy5TNdw4tVkdP9LvIMdymUInWQmaRuBj&lt;br /&gt;
Bx4jhc0sbsU83MRmgRwafdfuoWxqufpRGu7AztiurJQEWXIJwzvHaxVSirJO&lt;br /&gt;
odQddtFML1702yDutfvRf8LYqumAGcBMIwKZx1wxGDZTwYO7yIUoXcUgvbea&lt;br /&gt;
RzYtsIWT2jKnq3Zo5+qP.XO6+XMbncru7.TKeIidm6JwfVp3ZYq5CwjeTL2I&lt;br /&gt;
qpDpOdXbkbfusV.vSrtV5JMLGng5MZRbflLuQSpCzj3MZlWEnqPS5Qw7cSSr&lt;br /&gt;
CzD6MZRbflDuQSpCzj5MZxbflLuQCyAZXdilbGnI2azPbflOy4MlxV7ttGE8&lt;br /&gt;
CKoD.YpH+8s8ylrHvTpLlPsabu3Q4g3geaAy6mpNqmJMO1aJQtufMUfbZbdM&lt;br /&gt;
7efczjOq&lt;br /&gt;
-----------end_max5_patcher-----------&lt;br /&gt;
&amp;lt;/maxpat&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Third-Party Max externals similar to the {{maxword|name=bucket}} object==&lt;br /&gt;
&lt;br /&gt;
[//www.maxobjects.com/?request=bucket Maxobjects.com listing for the bucket object]&lt;br /&gt;
&lt;br /&gt;
==People who looked at/used this object also looked at....==&lt;br /&gt;
&lt;br /&gt;
==Errors or Clarifications==&lt;br /&gt;
&lt;br /&gt;
(please list things that you believe to be errors or omissions from the existing refpage)&lt;br /&gt;
&lt;br /&gt;
[[Category:Max Refpage extensions ( symbol, A - F)]]&lt;br /&gt;
[[Category:Refpage extensions]]&lt;/div&gt;</summary>
		<author><name>Gtaylor@rtqe.net</name></author>	</entry>

	<entry>
		<id>http://cycling74.com/wiki/index.php?title=bucket</id>
		<title>bucket</title>
		<link rel="alternate" type="text/html" href="http://cycling74.com/wiki/index.php?title=bucket"/>
				<updated>2013-04-02T06:01:11Z</updated>
		
		<summary type="html">&lt;p&gt;Gtaylor@rtqe.net: /* {{maxword|name=bucket}} Tips and Workarounds */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==[//www.cycling74.com/docs/max6/dynamic/c74_docs.html#bucket bucket online refpage]==&lt;br /&gt;
&lt;br /&gt;
==Using the {{maxword|name=bucket}} object==&lt;br /&gt;
&lt;br /&gt;
=={{maxword|name=bucket}} Tutorials==&lt;br /&gt;
&lt;br /&gt;
=={{maxword|name=bucket}} Tips and Workarounds==&lt;br /&gt;
&lt;br /&gt;
While lots of people use the &amp;lt;strong&amp;gt;bucket&amp;lt;/strong&amp;gt; object for shifting data in series, it's computationally useful for calculating first and second derivatives for streams of data.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;maxpat&amp;gt;&lt;br /&gt;
----------begin_max5_patcher----------&lt;br /&gt;
863.3oc4XFrbaBCDF9r8SgJmZmwICRf.bu0mgbrISGLHaqDP3QHbcZl7tWoE&lt;br /&gt;
vA2ZrAFC8Pu.dEBs69oesR32lOyZU1AVtE5qnuilM6s4ylAMYZXVk8LqzvCQ&lt;br /&gt;
Ig4P2rhxRSYBk0hxmoXGTP6psLjLTwPYqQM+cz1PwF1ihOmyhxDwnXljuOTw&lt;br /&gt;
2y9xih5QIgKzOsP.CEopQQQJWjvTfewUMtKTEskK17CIKRUF2d1d2au.4rz2&lt;br /&gt;
bC6EXt4pMPOU8R7XHDyV87cjk09bclPIBSYvi9ljGlX8giyJT0d1tt+xMq.6&lt;br /&gt;
6saLB47eAi.lbr4cRVtlP5bLSbRXRg.y1L.n5KnmLuz6ymatr3FNGbj6q4xb&lt;br /&gt;
0HfcW+flXGiuH1CFOrO..pc0JlzpmYrS.AR0xYPJbkX2RB612DlbzwRcuUL4&lt;br /&gt;
OXhvUIrSfw4Ubkih50crx.0haDGHqUZIf0fTXoEIJddBOt+TpZ4HojOXLXgc&lt;br /&gt;
BZgSjgSiblRGR53tzw2QONubzS5tjqds70nsQKCplbLUs7oqXBOpXpkRV0wn&lt;br /&gt;
i6okrlF3px1rQO38cQJApG4srd04EViZednh6.TO6RtoVCUkqcTCgCtYZH6i&lt;br /&gt;
0AmJwff8ScN7W63oiWY1YwF4pXqpNtK9RZDreeqii6Ys5gWjtElDKKDuXxND&lt;br /&gt;
8rjw45jg.qd7cuHY7FaxL3kTs.lOcmV31WwR81Y1NvocJKHhaAImkHODJxQO&lt;br /&gt;
nO+05dgEpOlz5Bo0IYg2V3rpH5ElBQF318XO3Vf+k3CYP7gL.9byKzLHsS89&lt;br /&gt;
mcQ637en1ohOcR639OT6.wC70R+wmJC4jo8SYVdVgLpd3pJLf9HqhY4Jt.Nr&lt;br /&gt;
Ui9XNIbiNskGGyDM2CNlma1VFPx4+nmtFNlON4pwio9NhLIwiSWvC9J3IkGu&lt;br /&gt;
KSukQ0TjqVNQ0I.Ivbqo0GN5lk..qtJPCltIX6tDO9SV7zI931uIXGGOyTJl&lt;br /&gt;
BkMplfAqwXB1uqqXlnIXsmvWKbNoOWkmdAN.AWB+MUd5u4q1ZD3IoK3bxnYm&lt;br /&gt;
p+LrxONvV+zR1dpElBa64goGsFAR61AkhS+TJTJsgRgZ6MlJktrUky.UJk6q&lt;br /&gt;
Gta2dlLuZHg.QepmmyjFSuEfIWTZBGlwRx1yq6ObBCqPo9rMJ8AaJjkGL4Pf&lt;br /&gt;
m0biede9u0DMhQJ&lt;br /&gt;
-----------end_max5_patcher-----------&lt;br /&gt;
&amp;lt;/maxpat&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Third-Party Max externals similar to the {{maxword|name=bucket}} object==&lt;br /&gt;
&lt;br /&gt;
[//www.maxobjects.com/?request=bucket Maxobjects.com listing for the bucket object]&lt;br /&gt;
&lt;br /&gt;
==People who looked at/used this object also looked at....==&lt;br /&gt;
&lt;br /&gt;
==Errors or Clarifications==&lt;br /&gt;
&lt;br /&gt;
(please list things that you believe to be errors or omissions from the existing refpage)&lt;br /&gt;
&lt;br /&gt;
[[Category:Max Refpage extensions ( symbol, A - F)]]&lt;br /&gt;
[[Category:Refpage extensions]]&lt;/div&gt;</summary>
		<author><name>Gtaylor@rtqe.net</name></author>	</entry>

	<entry>
		<id>http://cycling74.com/wiki/index.php?title=bucket</id>
		<title>bucket</title>
		<link rel="alternate" type="text/html" href="http://cycling74.com/wiki/index.php?title=bucket"/>
				<updated>2013-04-02T05:59:49Z</updated>
		
		<summary type="html">&lt;p&gt;Gtaylor@rtqe.net: /* {{maxword|name=bucket}} Tips and Workarounds */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==[//www.cycling74.com/docs/max6/dynamic/c74_docs.html#bucket bucket online refpage]==&lt;br /&gt;
&lt;br /&gt;
==Using the {{maxword|name=bucket}} object==&lt;br /&gt;
&lt;br /&gt;
=={{maxword|name=bucket}} Tutorials==&lt;br /&gt;
&lt;br /&gt;
=={{maxword|name=bucket}} Tips and Workarounds==&lt;br /&gt;
&lt;br /&gt;
While lots of people use the &amp;lt;strong&amp;gt;bucket&amp;lt;/strong&amp;gt; object for shifting data in series, it's computationally useful for calculating first and second derivatives for streams of data.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;maxcode&amp;gt;&lt;br /&gt;
----------begin_max5_patcher----------&lt;br /&gt;
863.3oc4XFrbaBCDF9r8SgJmZmwICRf.bu0mgbrISGLHaqDP3QHbcZl7tWoE&lt;br /&gt;
vA2ZrAFC8Pu.dEBs69oesR32lOyZU1AVtE5qnuilM6s4ylAMYZXVk8LqzvCQ&lt;br /&gt;
Ig4P2rhxRSYBk0hxmoXGTP6psLjLTwPYqQM+cz1PwF1ihOmyhxDwnXljuOTw&lt;br /&gt;
2y9xih5QIgKzOsP.CEopQQQJWjvTfewUMtKTEskK17CIKRUF2d1d2au.4rz2&lt;br /&gt;
bC6EXt4pMPOU8R7XHDyV87cjk09bclPIBSYvi9ljGlX8giyJT0d1tt+xMq.6&lt;br /&gt;
6saLB47eAi.lbr4cRVtlP5bLSbRXRg.y1L.n5KnmLuz6ymatr3FNGbj6q4xb&lt;br /&gt;
0HfcW+flXGiuH1CFOrO..pc0JlzpmYrS.AR0xYPJbkX2RB612DlbzwRcuUL4&lt;br /&gt;
OXhvUIrSfw4Ubkih50crx.0haDGHqUZIf0fTXoEIJddBOt+TpZ4HojOXLXgc&lt;br /&gt;
BZgSjgSiblRGR53tzw2QONubzS5tjqds70nsQKCplbLUs7oqXBOpXpkRV0wn&lt;br /&gt;
i6okrlF3px1rQO38cQJApG4srd04EViZednh6.TO6RtoVCUkqcTCgCtYZH6i&lt;br /&gt;
0AmJwff8ScN7W63oiWY1YwF4pXqpNtK9RZDreeqii6Ys5gWjtElDKKDuXxND&lt;br /&gt;
8rjw45jg.qd7cuHY7FaxL3kTs.lOcmV31WwR81Y1NvocJKHhaAImkHODJxQO&lt;br /&gt;
nO+05dgEpOlz5Bo0IYg2V3rpH5ElBQF318XO3Vf+k3CYP7gL.9byKzLHsS89&lt;br /&gt;
mcQ637en1ohOcR639OT6.wC70R+wmJC4jo8SYVdVgLpd3pJLf9HqhY4Jt.Nr&lt;br /&gt;
Ui9XNIbiNskGGyDM2CNlma1VFPx4+nmtFNlON4pwio9NhLIwiSWvC9J3IkGu&lt;br /&gt;
KSukQ0TjqVNQ0I.Ivbqo0GN5lk..qtJPCltIX6tDO9SV7zI931uIXGGOyTJl&lt;br /&gt;
BkMplfAqwXB1uqqXlnIXsmvWKbNoOWkmdAN.AWB+MUd5u4q1ZD3IoK3bxnYm&lt;br /&gt;
p+LrxONvV+zR1dpElBa64goGsFAR61AkhS+TJTJsgRgZ6MlJktrUky.UJk6q&lt;br /&gt;
Gta2dlLuZHg.QepmmyjFSuEfIWTZBGlwRx1yq6ObBCqPo9rMJ8AaJjkGL4Pf&lt;br /&gt;
m0biede9u0DMhQJ&lt;br /&gt;
-----------end_max5_patcher-----------&lt;br /&gt;
&amp;lt;/maxcode&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Third-Party Max externals similar to the {{maxword|name=bucket}} object==&lt;br /&gt;
&lt;br /&gt;
[//www.maxobjects.com/?request=bucket Maxobjects.com listing for the bucket object]&lt;br /&gt;
&lt;br /&gt;
==People who looked at/used this object also looked at....==&lt;br /&gt;
&lt;br /&gt;
==Errors or Clarifications==&lt;br /&gt;
&lt;br /&gt;
(please list things that you believe to be errors or omissions from the existing refpage)&lt;br /&gt;
&lt;br /&gt;
[[Category:Max Refpage extensions ( symbol, A - F)]]&lt;br /&gt;
[[Category:Refpage extensions]]&lt;/div&gt;</summary>
		<author><name>Gtaylor@rtqe.net</name></author>	</entry>

	<entry>
		<id>http://cycling74.com/wiki/index.php?title=mtof</id>
		<title>mtof</title>
		<link rel="alternate" type="text/html" href="http://cycling74.com/wiki/index.php?title=mtof"/>
				<updated>2013-03-27T18:14:44Z</updated>
		
		<summary type="html">&lt;p&gt;Gtaylor@rtqe.net: /* {{maxword|name=mtof}} Tips and Workarounds */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==[//www.cycling74.com/docs/max6/dynamic/c74_docs.html#mtof mtof online refpage]==&lt;br /&gt;
&lt;br /&gt;
==Using the {{maxword|name=mtof}} object==&lt;br /&gt;
&lt;br /&gt;
=={{maxword|name=mtof}} Tutorials==&lt;br /&gt;
&lt;br /&gt;
=={{maxword|name=mtof}} Tips and Workarounds==&lt;br /&gt;
&lt;br /&gt;
Since frequency is exponential rather than linear, using a simple slider never gave me good results for doing things like setting filter cutoff frequencies.&lt;br /&gt;
&lt;br /&gt;
The '''mtof''' object is perfect for this use. The ability to work with floating point values means that you can produce smooth filter cutoff values by sending the '''mtof'''object a floating point value between 0. and 127. for cutoff frequencies between 8.176 and 12541. Hz.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;maxpat&amp;gt;&lt;br /&gt;
----------begin_max5_patcher----------&lt;br /&gt;
656.3oc0VssaiBCD8YxWAhmoQXtkj8s86XUUjSvI0UD6HaCaZq59su1iwIjM&lt;br /&gt;
PKDEgz9.fYlQiOyYNdfOl4ErgehHC7+g+u7879XlmGXxXvq4cufC3SaKwRHr&lt;br /&gt;
.x6E3s+IHz5hUcfxJIJvWbiwiX01Wnr8qEjsJatiSSmuHKzOEsbdj9Ql6t+y&lt;br /&gt;
WxDuR4RUTiUZAro7Mu9zx.ioOmMybKbfnsjVSluGSYmQbMVvvGH83cr0SbdN&lt;br /&gt;
TIPUgRx6sfxtsfVDbN+BMhTDwZBCuoDvFpwmMEp2NRrabfjtmgKCBauxbsqj&lt;br /&gt;
iUlEkToFjNTHw0jh0XkRP2ToHWVIaXsFZyPLkUD9NmYm81vqhQUR0aVDlFda&lt;br /&gt;
.GzjuwmgT5xKkY79zhnN8S0ompqHnPitPkWEjiJ5JAxW3BU+c2qhsjy12Un1&lt;br /&gt;
HAYl6wH0bLxu0sWWyUQNorl4TIoagFpegFZEBjVKiAcFn1hi5UlgtUlk61xc&lt;br /&gt;
b1Ex4mBCS2xij9tU3E65M8p87e9wwJx5ccyIIC3vWRhgNxVMO6KIkzaIkrGN&lt;br /&gt;
oD9kqtKJSejVWHmmRHHRBSgUTNqEYjfV.ZhbXDTTys1LwfzYw4YszYqV7M5r&lt;br /&gt;
3aozzumR6ZPWzHo6yy41fY6eD75XYnX3.YVz3Ynj+aXndNrdPo+9vcRaYvY0&lt;br /&gt;
jzwO.C83NqdMa.PPO6m8u+ADTFF6WSQRdkXqKUMSQ7uTHEDohxfymshQ+Ude&lt;br /&gt;
z4XdgVTPXs6pETooQCkaTmspghlq2otQyxIEMQC.MQSBZFZmZZPS9.PS1jgl&lt;br /&gt;
zAhloQ2fF.ZRmLtIY.nAcmnwN9Ae7XMQHaRI.D8r3W4B3+nCgWoL6qvvw.Ao&lt;br /&gt;
l5h2ZAKzScU5QtUB6vwSKy0+Hqde9b1eAH1SDsC&lt;br /&gt;
-----------end_max5_patcher-----------&lt;br /&gt;
&amp;lt;/maxpat&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Third-Party Max externals similar to the {{maxword|name=mtof}} object==&lt;br /&gt;
&lt;br /&gt;
[//www.maxobjects.com/?request=mtof Maxobjects.com listing for the mtof object]&lt;br /&gt;
&lt;br /&gt;
==People who looked at/used this object also looked at....==&lt;br /&gt;
&lt;br /&gt;
==Errors or Clarifications==&lt;br /&gt;
&lt;br /&gt;
(please list things that you believe to be errors or omissions from the existing refpage)&lt;br /&gt;
&lt;br /&gt;
[[Category:Max Refpage extensions (G - M)]]&lt;br /&gt;
[[Category:Refpage extensions]]&lt;/div&gt;</summary>
		<author><name>Gtaylor@rtqe.net</name></author>	</entry>

	<entry>
		<id>http://cycling74.com/wiki/index.php?title=mtof</id>
		<title>mtof</title>
		<link rel="alternate" type="text/html" href="http://cycling74.com/wiki/index.php?title=mtof"/>
				<updated>2013-03-27T18:11:54Z</updated>
		
		<summary type="html">&lt;p&gt;Gtaylor@rtqe.net: /* {{maxword|name=mtof}} Tips and Workarounds */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==[//www.cycling74.com/docs/max6/dynamic/c74_docs.html#mtof mtof online refpage]==&lt;br /&gt;
&lt;br /&gt;
==Using the {{maxword|name=mtof}} object==&lt;br /&gt;
&lt;br /&gt;
=={{maxword|name=mtof}} Tutorials==&lt;br /&gt;
&lt;br /&gt;
=={{maxword|name=mtof}} Tips and Workarounds==&lt;br /&gt;
&lt;br /&gt;
Since frequency is exponential rather than linear, using a simple slider never gave me good results for doing things like setting filter cutoff frequencies.&lt;br /&gt;
&lt;br /&gt;
The '''mtof''' object is perfect for this use. The ability to work with floating point values means that you can produce smooth filter cutoff values by sending the '''mtof'''object a floating point value between 0. and 127. for cutoff frequencies between 8.176 and 12541. Hz.&lt;br /&gt;
&lt;br /&gt;
==Third-Party Max externals similar to the {{maxword|name=mtof}} object==&lt;br /&gt;
&lt;br /&gt;
[//www.maxobjects.com/?request=mtof Maxobjects.com listing for the mtof object]&lt;br /&gt;
&lt;br /&gt;
==People who looked at/used this object also looked at....==&lt;br /&gt;
&lt;br /&gt;
==Errors or Clarifications==&lt;br /&gt;
&lt;br /&gt;
(please list things that you believe to be errors or omissions from the existing refpage)&lt;br /&gt;
&lt;br /&gt;
[[Category:Max Refpage extensions (G - M)]]&lt;br /&gt;
[[Category:Refpage extensions]]&lt;/div&gt;</summary>
		<author><name>Gtaylor@rtqe.net</name></author>	</entry>

	<entry>
		<id>http://cycling74.com/wiki/index.php?title=Max_Guitar_Processor,_Part_4</id>
		<title>Max Guitar Processor, Part 4</title>
		<link rel="alternate" type="text/html" href="http://cycling74.com/wiki/index.php?title=Max_Guitar_Processor,_Part_4"/>
				<updated>2013-02-06T23:26:10Z</updated>
		
		<summary type="html">&lt;p&gt;Gtaylor@rtqe.net: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;At this point, we have a pretty useful guitar processing &amp;quot;rack&amp;quot;, but it could use a little spice. This spice will come from two additional processors: a looping delay unit, and a basic reverb system. Also, to help keep the output useful, we will drop a limiter on the back end of the entire rig.&lt;br /&gt;
&lt;br /&gt;
[http://1cyjknyddcx62agyb002-web-assets.s3.amazonaws.com/GtrProc-4.maxpat.zip Download the patch used in this tutorial].&lt;br /&gt;
&lt;br /&gt;
===Tutorials in this series:===&lt;br /&gt;
&lt;br /&gt;
* [[Max_Guitar_Processor,_Part_1|Part 1]]&lt;br /&gt;
* [[Max_Guitar_Processor,_Part_2|Part 2]]&lt;br /&gt;
* [[Max_Guitar_Processor,_Part_3|Part 3]]&lt;br /&gt;
* [[Max_Guitar_Processor,_Part_4|Part 4]]&lt;br /&gt;
* [[Max_Guitar_Processor,_Part_5|Part 5]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Looping Delay==&lt;br /&gt;
&lt;br /&gt;
The first processor we will add is an alternative version of the delay line – one that provides tap tempo, looping and sound-on-sound functionality. Unlike our previous delay module, this one will not provide modulation (for flanging and pitch shifting effects); rather it will be focused on capturing a loop, and allowing overdubs of additional sounds.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;img&amp;gt;http://1cyjknyddcx62agyb002-web-assets.s3.amazonaws.com/4-Tap_TempoB.jpg&amp;lt;/img&amp;gt;&lt;br /&gt;
&lt;br /&gt;
As with any delay line, the most important setting is the delay time. We use a standard floating-point number box for entry, but it is probably most convenient to use the &amp;quot;tap tempo&amp;quot; function that is implemented. By clicking on the tap tempo button four times, you generate a delay time that will match your taps.&lt;br /&gt;
&lt;br /&gt;
The tap tempo function is provided by the taptempo abstraction at the top level of the patch. It counts four incoming bang messages, determines the three intervals between the taps, takes the average and uses that for the tempo calculation. Since it is assumed that we are tapping quarter notes, but want to use a four bar measure, the result is multiplied by four to give us a delay time value. This is an area where you might want to modify the function to meet your needs – if you really want to have the delay run at the rate you tapped, you can remove the [* 4] object at the end of the processing chain.&lt;br /&gt;
&lt;br /&gt;
The basic delay design, as found in the loop_handler subpatcher, is very similar to the layout of the modulating delay. The few tweaks provided are there to support the looping functions. First, when the &amp;quot;Freeze&amp;quot; button is &amp;quot;on&amp;quot;, the feedback is switched to 100% feedback. This gives us a standard looping function. The feedback loop has a lowpass filter in it, which will change the audio in the loop if it is not fully open. The &amp;quot;Input Active&amp;quot; button is very important – it determines if the input signal is sent into the delay path. If it is off, the only output of the delay line is whatever is currently playing – if the delay is &amp;quot;frozen&amp;quot;, you will hear the loop, while with freeze off you will only hear the remaining contents of the loop line feedback. What is cool about this is that, when you freeze the delay line, you can still overlay audio parts onto the loop – giving you sound-on-sound overdubbing.&lt;br /&gt;
&lt;br /&gt;
I've also implemented a click track that cycles at the same speed as the delay time. This way, if you want to work up some one-bar loops, you can hear the timing (in quarter note click) even before you begin recording. Most of these concepts are classic delay techniques, but this sort of looping processor is exactly why many people first get into Max/MSP. Even if you aren't into guitar processing per se, you may find this looping delay system can jump-start your Max experiments.&lt;br /&gt;
&lt;br /&gt;
==Reverb==&lt;br /&gt;
&lt;br /&gt;
What would an effects processing rig be without a reverb? As is typical for any processing rack, I've installed a reverb as the last effect in the system – this way, we will get consistant reverb from both our looped and our live guitar lines. To provide reverb, I've gone to a third-party external object: Nathan Wolek's &amp;lt;strong&amp;gt;gverb~&amp;lt;/strong&amp;gt;. I happen to like the sound of it well enough, and I've wrapped it up in another abstraction so I can replace it in the future (if I decide to do that).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;img&amp;gt;http://1cyjknyddcx62agyb002-web-assets.s3.amazonaws.com/4-Reverb_HandlerB.jpg&amp;lt;/img&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you look into the subpatcher reverb_handler, you'll see that I expose the reverb time control to the top-level patch, but I also provide a reverb mix control that uses the pan2 abstraction found in Max's examples folder. This gives me a decent equal power pan – but why would I need to pan? In fact, I don't; but I can use them as equal power mixers as well. By using only one output of the panner, and reverse panning the live sound, I can get a decent mixing function will little effort. This may not be the most efficient processing stream, but it sure was easy to implement!&lt;br /&gt;
&lt;br /&gt;
===And a Limiter at the end…===&lt;br /&gt;
&lt;br /&gt;
Finally, to make sure everything stays under control, I've added a limiter to the end of the processing chain.  I'm using the &amp;lt;strong&amp;gt;omx.peaklim~&amp;lt;/strong&amp;gt; object, which implements a good quality limiter. The parameters for this object are a little weird, so after some experimenting, I found a set that worked for me. These are loadbang'd into the object during startup, and never change. I also reconfigured the output section of the Presentation Mode to make everything fit a little better, but the functionality should all be familiar from previous weeks' articles.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;img&amp;gt;http://1cyjknyddcx62agyb002-web-assets.s3.amazonaws.com/4-Limiter_HandlerB.jpg&amp;lt;/img&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Conclusion==&lt;br /&gt;
&lt;br /&gt;
This is the conclusion of new module additions, but far from the conclusion of this series. For my money, some of the most important information will be found in our next article, where we will cover preset management ('cuz I don't want to be mousing too much on-stage) and MIDI parameter controls (using my FCB-1010 foot controller). Get familiar with our new modules, and prepare for a big finale with our next Guitar Processing entry!&lt;br /&gt;
&lt;br /&gt;
[[Max_Guitar_Processor,_Part_5|Click here to see the next tutorial]]&lt;/div&gt;</summary>
		<author><name>Gtaylor@rtqe.net</name></author>	</entry>

	<entry>
		<id>http://cycling74.com/wiki/index.php?title=Max_Guitar_Processor,_Part_3</id>
		<title>Max Guitar Processor, Part 3</title>
		<link rel="alternate" type="text/html" href="http://cycling74.com/wiki/index.php?title=Max_Guitar_Processor,_Part_3"/>
				<updated>2013-02-06T23:24:59Z</updated>
		
		<summary type="html">&lt;p&gt;Gtaylor@rtqe.net: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;In the last article, we added some basic tonal effects: distortion/overdrive and EQ/filtering. This time, we will expand our virtual effects rack to include both a phase shifter and a full-featured modulating digital delay. As we add these effects, you will begin to see why a DIY effects system can trump any commercial product.&lt;br /&gt;
&lt;br /&gt;
[http://1cyjknyddcx62agyb002-web-assets.s3.amazonaws.com/GtrProc-3.maxpat.zip Download the patch used in this tutorial].&lt;br /&gt;
&lt;br /&gt;
===Tutorials in this series:===&lt;br /&gt;
&lt;br /&gt;
* [[Max_Guitar_Processor,_Part_1|Part 1]]&lt;br /&gt;
* [[Max_Guitar_Processor,_Part_2|Part 2]]&lt;br /&gt;
* [[Max_Guitar_Processor,_Part_3|Part 3]]&lt;br /&gt;
* [[Max_Guitar_Processor,_Part_4|Part 4]]&lt;br /&gt;
* [[Max_Guitar_Processor,_Part_5|Part 5]]&lt;br /&gt;
&lt;br /&gt;
==Adding a phase shifter==&lt;br /&gt;
&lt;br /&gt;
The first module I’ve added is a phase shifter. It’s a full-featured implementation, featuring a variable number of phase shift stages and a frequency spread to provide a more complicated sound. Since this is obviously a well-considered piece of work, I surely had to steal from someplace, right? Of course! Luckily, I have access to some of the Pluggo source patches, and I’ve always liked this particular phase shifter’s sound. So I opened up the patch and copied the whole thing! By placing it in a subpatcher (phasor_handler), I keep it out of my hair at the top level. About all that I added to the patch is some scaling of the inputs to help keep the control ranges sensible.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;img&amp;gt;http://1cyjknyddcx62agyb002-web-assets.s3.amazonaws.com/3-Phasor_HandlerB.jpg&amp;lt;/img&amp;gt;&lt;br /&gt;
&lt;br /&gt;
One of the interesting aspects of this patch is the use of the phaseshift~ object to provide the effect. Normally, a phase shift is almost imperceptible, but when the frequency is moving a classic phase shift sound is created. Stacking a few of these on top of each other (with the serial application of the onestage subpatcher) allows us to vary the depth of the effect by adding (or subtracting) phase shifting stages.&lt;br /&gt;
&lt;br /&gt;
==The modulating delay==&lt;br /&gt;
&lt;br /&gt;
The next module is a digital delay, complete with modulation, feedback (with filtering) and stereo enhancement. This is also the place where we go from mono processing to stereo, allowing each output to have a different (but related) delay time. The key to this is the “RHS Factor”, which determines the Right Hand Side’s delay time relative to the left side. Modest difference (like .98) will provide subtle depth, while more radical settings (like .5 or 1.5) will give rhythmic ping-pong echoes.&lt;br /&gt;
&lt;br /&gt;
If we switch to the Patching Mode and open the delay_handler subpatcher, we see that most of the work is being done by a pair of tapin~/tapout~ objects and some scaling functions. Creating the modulation – which allows this module to perform flanging, chorusing and vibrato effects – is accomplished by varying the delay time. We use a cycle~ object to drive the change; but you need to note that the delay time is consistently maintained as a signal routing, rather than an event routing. This causes the delay time to change without interruption, giving us smooth delay time transitions that can be used to our advantage.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;img&amp;gt;http://1cyjknyddcx62agyb002-web-assets.s3.amazonaws.com/3-Delay_HandlerB.jpg&amp;lt;/img&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Dealing with the details==&lt;br /&gt;
&lt;br /&gt;
As you can see in the patching view, we’ve continued our patching patterns by creating a master patch for each effect module, with controls maintained at the top-level patch. If you switch to the Presentation Mode, you will see that we’ve also maintained another pattern: using knobs (the dial object) for controls that are best set by ear, and number boxes for controls that may need precise settings. For most people, a screen full of number boxes is confusing and intimidating – and this becomes worse when you are using a patch or program onstage. By limiting the use of number boxes to those controls that will specifically need them, you can reduce the amount of stress experienced when working with a patch.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;img&amp;gt;http://1cyjknyddcx62agyb002-web-assets.s3.amazonaws.com/3-Patch_LayoutB.jpg&amp;lt;/img&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Since the phase shifter and delay modules take up one full “rack space” in Presentation Mode, we also want to put another level meter at the end of the rack. However, since we now have split the sound into stereo, we need to use two meters instead. This gives us a quick visual to make sure that neither the phase shifter nor the delay unit settings are causing output distortion.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;img&amp;gt;http://1cyjknyddcx62agyb002-web-assets.s3.amazonaws.com/GTR-3-1.jpg&amp;lt;/img&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Conclusion==&lt;br /&gt;
&lt;br /&gt;
At this point, we’ve created a credible guitar processor with the most common effects in place. In our next article, we will dive into less familiar territory by taking on looping and reverb. See you then!&lt;br /&gt;
&lt;br /&gt;
[[Max_Guitar_Processor,_Part_4|Click here to see the next tutorial]]&lt;/div&gt;</summary>
		<author><name>Gtaylor@rtqe.net</name></author>	</entry>

	<entry>
		<id>http://cycling74.com/wiki/index.php?title=Max_Guitar_Processor,_Part_1</id>
		<title>Max Guitar Processor, Part 1</title>
		<link rel="alternate" type="text/html" href="http://cycling74.com/wiki/index.php?title=Max_Guitar_Processor,_Part_1"/>
				<updated>2013-02-06T23:24:25Z</updated>
		
		<summary type="html">&lt;p&gt;Gtaylor@rtqe.net: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;In this series of tutorials, I will be building a Max-based guitar processing &amp;quot;rig&amp;quot;, and will give you the opportunity to look over my shoulder as I design and implement this system.&lt;br /&gt;
&lt;br /&gt;
'''''Note:''''' ''You may also be interested in an earlier article which appears on the Cycling '74 website by Andrew Benson and Ben Bracken titled [http://cycling74.com/2008/03/12/expand-your-guitar-vol-1/ Expand Your Guitar], which covers the basics of connecting a guitar to a Max-based processing system, includes a few guitar-oriented effects patches.''&lt;br /&gt;
&lt;br /&gt;
[http://1cyjknyddcx62agyb002-web-assets.s3.amazonaws.com/GtrProc-1.maxpat.zip Download the patch]&lt;br /&gt;
&lt;br /&gt;
===Tutorials in this series===&lt;br /&gt;
&lt;br /&gt;
* [[Max_Guitar_Processor,_Part_1|Part 1]]&lt;br /&gt;
* [[Max_Guitar_Processor,_Part_2|Part 2]]&lt;br /&gt;
* [[Max_Guitar_Processor,_Part_3|Part 3]]&lt;br /&gt;
* [[Max_Guitar_Processor,_Part_4|Part 4]]&lt;br /&gt;
* [[Max_Guitar_Processor,_Part_5|Part 5]]&lt;br /&gt;
&lt;br /&gt;
==Designing the System==&lt;br /&gt;
The first thing I did was to plan the processing chain that I would create. I wanted a rather typical guitar rig, with the addition of a looping delay line. I decided on the following functional graph:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;img&amp;gt;http://1cyjknyddcx62agyb002-web-assets.s3.amazonaws.com/1-RigDesign.jpg&amp;lt;/img&amp;gt;&lt;br /&gt;
&lt;br /&gt;
I also made a few decisions about general program functionality. Since this will be a stand-alone program/patch, I wouldn't worry about limiting system usage; therefore I wouldn't wrap subpatches inside of &amp;lt;strong&amp;gt;poly~&amp;lt;/strong&amp;gt; objects (to reduce their CPU load when unused). Also, I decided to take full advantage of the Max 5 Presentation Mode layout, allowing me to code in a convenient way and worry about the performance layout in a separate step.&lt;br /&gt;
&lt;br /&gt;
Since I am a dyed-in-the-wool tweaker, I wanted to structure the code in such a way that I could manipulate it easily - even during live performance. This means that I needed to create an easily-to-follow patch that was well-labeled, and I needed to encapsulate at a level conducive to on-the-fly changes.&lt;br /&gt;
&lt;br /&gt;
Finally, in order to build this quickly, I decided to beg, borrow or steal as much of the programming as possible without resorting to the use of VST plug-ins (which would reduce tweak-ability). Throughout these articles, you will see me reuse older code, appropriate from other applications and use third-party objects whenever necessary. I also take full advantage of some design patterns I've developed that allow for quick coding of more complex patch routings.&lt;br /&gt;
&lt;br /&gt;
==Input and Gain Handling==&lt;br /&gt;
&lt;br /&gt;
Since this is a stand-alone patch, we need to control our own input and output. Let's start by creating an input section. If you open the patch [http://1cyjknyddcx62agyb002-web-assets.s3.amazonaws.com/GtrProc-1.maxpat.zip GtrProc-1.maxpat], you will see that I have discrete patch segments that correspond to the individual functions described in my processing graph. Place the patch into Presentation Mode, and you will see that these segments jump into a &amp;quot;rack style&amp;quot; package that is easy to follow during performance.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;img&amp;gt;http://1cyjknyddcx62agyb002-web-assets.s3.amazonaws.com/1-RackLayout.jpg&amp;lt;/img&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Move back into Patching Mode, and look at the top-left section of the patch. It is labeled &amp;quot;Input&amp;quot;, and includes several controls connected to an abstraction named &amp;quot;input_handler&amp;quot;. Double-click on the input_handler subpatcher to see its contents.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;img&amp;gt;http://1cyjknyddcx62agyb002-web-assets.s3.amazonaws.com/1-InputHandler.png&amp;lt;/img&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This subpatch is pretty simple: it contains a number of &amp;lt;strong&amp;gt;adstatus&amp;lt;/strong&amp;gt; objects that allow my controls to display and alter the audio settings used at runtime. The function is similar to using the DSP Status window, but exposes only those items I considered important for realtime performance. Since I don't use the &amp;lt;strong&amp;gt;adstatus&amp;lt;/strong&amp;gt; object very often, I don't know the functional arguments by heart. While I could have used the documentation to learn about the object, I decided to steal the functions from the help patch instead!&lt;br /&gt;
&lt;br /&gt;
By viewing the help patch, I can learn about the function of an object. However, all help patches are also functional Max patches. In this case, I was able to unlock the &amp;lt;strong&amp;gt;adstatus.maxhelp&amp;lt;/strong&amp;gt; patch, copy the functional objects that I needed, then paste them into my subpatcher. By connecting a few inlets and outlets, I'd created the small and efficient input setup handler that I needed.&lt;br /&gt;
&lt;br /&gt;
In addition to setting the DSP Settings, I also want to control gain at this point. This is especially important with an instrument-driven patch, since different input hardware will provide vastly different levels. In my case, I may be using an IK Multimedia StealthPlug, a mixer with an audio interface, or even a direct connection into my Mac's audio input - so I want good control of my front-end gain. I did this by adding a &amp;lt;strong&amp;gt;*~&amp;lt;/strong&amp;gt; object to the input section, then routed the input into this control. By using a scale control, I'm able to change the normal range of the gain knob (0-127) into a range that goes from 0.0 (silent) to 2.0 (double-volume).&lt;br /&gt;
&lt;br /&gt;
==Compression==&lt;br /&gt;
&lt;br /&gt;
The next stage of the patch is a compressor. Since compression can have a very significant effect on the sound of the instrument, I wanted detailed control over its parameters. Therefore, I am using number boxes (rather than knobs) to control the values; this gives me precise control over the compressor's operation without having to guess at a knob's output value.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;img&amp;gt;http://1cyjknyddcx62agyb002-web-assets.s3.amazonaws.com/1-KompressorB.jpg&amp;lt;/img&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Again, this section is mostly a set of controls connected to an abstraction named &amp;quot;comp_handler&amp;quot;. Double-click on this subpatcher to view its contents. This is a very simple subpatch; I've just borrowed the komp subpatcher (found in examples/effects/kompressor/lib of the Max folder) without change. I set a one parameter (lookahead) directly with a &amp;lt;strong&amp;gt;loadbang&amp;lt;/strong&amp;gt;, but mostly expose the functions directly to the main patcher. Since this subpatcher is so simple, why didn't I just use komp directly in my main patch?&lt;br /&gt;
&lt;br /&gt;
In the future, I may want to develop my own compressor system, or I may choose to implement the omx-based compressor included with MSP. I may even break down and use a VST compressor. In any of these cases, I would want to change the compressor &amp;quot;engine&amp;quot; without having to disturb my main patcher. By placing the compressor in a subpatch, I can change the underlying compression engine without ever having to change the top-level patch or the user interface.&lt;br /&gt;
&lt;br /&gt;
This is a &amp;quot;high detail&amp;quot; compressor, giving me the kind of control I want for a flexible rig. If you aren't that familiar with compression, though, it may seem a little intimidating. Here are a few settings that I've found useful with this processor:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;img&amp;gt;http://1cyjknyddcx62agyb002-web-assets.s3.amazonaws.com/1-table.jpg&amp;lt;/img&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;em&amp;gt; (Sidebar)&amp;lt;/em&amp;gt; In each of the processing areas, you will see a small grey panel - it doesn't seem to do anything. However, when you switch into Presentation Mode, you should see these panels expand to become the background of the individual processing sections. This is an example of using the Presentation Mode's ability to change an object's geometry to keep my patching view clean, but give me an attractive user interface.&lt;br /&gt;
&lt;br /&gt;
==Output Staging==&lt;br /&gt;
&lt;br /&gt;
The final processing section for this tutorial controls the output. This section will be familiar to any Max/MSP programmer - it's the basis for audio output in almost any audio patch. The output of the compressor is sent to the two faders, which provide left/right volume control. The signal is then routed to an &amp;lt;strong&amp;gt;EZDAC~&amp;lt;/strong&amp;gt;, which is also our DSP on/off control. If you have your guitar (or other instrument) plugged into the computer, you can check the settings on the input module, turn on the DSP, turn up the volume and hear your instrument through the patch.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;img&amp;gt;http://1cyjknyddcx62agyb002-web-assets.s3.amazonaws.com/1-OutputStuff.png&amp;lt;/img&amp;gt;&lt;br /&gt;
&lt;br /&gt;
However, it's not always convenient to test with an actual instrument. For example, some of this patch was done while I was waiting in an airport. The last thing the PSA wants to see is for me to pull out a guitar and start wailing. What I've done is to include a &amp;quot;test fixture&amp;quot; - some standard audio generating code - that I can use to test the patch as it is being built. You will notice that this section (labeled &amp;quot;test fixture&amp;quot;) gives me the opportunity to load and play a file or to generate noise. This is a small bit of code I've copied from another patch of mine - I use it as a test fixture for almost every audio patch I write.&lt;br /&gt;
&lt;br /&gt;
The output of this fixture is routed to a &amp;lt;strong&amp;gt;send~&amp;lt;/strong&amp;gt; object labeled &amp;quot;test&amp;quot;. This audio is received in the input section, at the same point that my patch would see an instrument from the audio input. This way, I can test patches without having an instrument plugged in, helping me to be productive when the guitar isn't easily available.&lt;br /&gt;
&lt;br /&gt;
==Conclusion==&lt;br /&gt;
&lt;br /&gt;
We've created the basic I/O blocks for our performance patch. In the next article, we will expand it by adding a good-sounding distortion/overdrive system and a highly controllable filter/EQ. In the meantime, work with this basic patch, learn to understand the routing between the objects and explore the use of the compressor. Until next time - have fun!&lt;br /&gt;
&lt;br /&gt;
[[Max_Guitar_Processor,_Part_2|Click here to see the next tutorial]]&lt;/div&gt;</summary>
		<author><name>Gtaylor@rtqe.net</name></author>	</entry>

	<entry>
		<id>http://cycling74.com/wiki/index.php?title=Max_Guitar_Processor,_Part_2</id>
		<title>Max Guitar Processor, Part 2</title>
		<link rel="alternate" type="text/html" href="http://cycling74.com/wiki/index.php?title=Max_Guitar_Processor,_Part_2"/>
				<updated>2013-02-06T23:23:35Z</updated>
		
		<summary type="html">&lt;p&gt;Gtaylor@rtqe.net: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;In the last article, we did a lot of setup - we got input/output handling in place, and added a compressor to the processing chain as an example of an “effect module”. In this article, we will continue adding effects, including a dual overdrive module and a three-stage EQ/Filter module. With these additions we will further explore Max 5’s user interface options, as well as taking a look at some of the “tweaks” that make Max/MSP functions a little more guitar-faithful.&lt;br /&gt;
&lt;br /&gt;
[http://1cyjknyddcx62agyb002-web-assets.s3.amazonaws.com/GtrProc-2.maxpat.zip Download the patch used in this tutorial].&lt;br /&gt;
&lt;br /&gt;
===Tutorials in this series:===&lt;br /&gt;
&lt;br /&gt;
* [[Max_Guitar_Processor,_Part_1|Part 1]]&lt;br /&gt;
* [[Max_Guitar_Processor,_Part_2|Part 2]]&lt;br /&gt;
* [[Max_Guitar_Processor,_Part_3|Part 3]]&lt;br /&gt;
* [[Max_Guitar_Processor,_Part_4|Part 4]]&lt;br /&gt;
* [[Max_Guitar_Processor,_Part_5|Part 5]]&lt;br /&gt;
&lt;br /&gt;
==Adding an Overdrive Section==&lt;br /&gt;
&lt;br /&gt;
First up is an overdrive processor.  I’ve found that the way to get the most variety with this sort of processor is to have two &amp;lt;strong&amp;gt;overdrive~&amp;lt;/strong&amp;gt; objects in series with a lowpass filter between them; the result is a controllable distortion/overdrive capable of some crazy variations. I have, again, encapsulated the overdrive functions in a subpatcher (in this case, called &amp;lt;strong&amp;gt;od_handler&amp;lt;/strong&amp;gt;), which implements the dual &amp;lt;strong&amp;gt;overdrive~&amp;lt;/strong&amp;gt; setup, as well as a &amp;lt;strong&amp;gt;selector~&amp;lt;/strong&amp;gt; that provides the bypass functionality.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;img&amp;gt;http://1cyjknyddcx62agyb002-web-assets.s3.amazonaws.com/OD_HandlerB.jpg&amp;lt;/img&amp;gt;&lt;br /&gt;
&lt;br /&gt;
I’ve also added a level adjustment that allows us to tame the output levels post-overdrive~. This can be very handy, since some of the more extreme overdrive settings can cause high levels (both real and perceived). I’ve also connected a &amp;lt;strong&amp;gt;meter~&amp;lt;/strong&amp;gt; object to the output of the subpatcher, giving me a way to eyeball the output of the compressor-overdrive combination.&lt;br /&gt;
&lt;br /&gt;
==Adding an EQ/Filter==&lt;br /&gt;
&lt;br /&gt;
Next up is the creation of a EQ/Filter modules.  This is going to use the &amp;lt;strong&amp;gt;cascade~&amp;lt;/strong&amp;gt; filter, which is a version of a biquad filter that takes lists of coefficients to create a complex filter curve. In order to control it with simplified controls, we will use a function of the &amp;lt;strong&amp;gt;filtergraph~&amp;lt;/strong&amp;gt; object that converts frequency/level combinations into biquad-type coefficients.&lt;br /&gt;
&lt;br /&gt;
By now, you should be able to see the design pattern in use: I create a subpatcher with the “guts” of the effect module, then attach controls for all of the variable parameters. Open the “filter_handler” subpatcher to examine the DSP funtions used. Most of this subpatcher converts the incoming values into useful frequency and level values, then sending them into &amp;lt;strong&amp;gt;filtergraph~&amp;lt;/strong&amp;gt; objects. I could have just as easily used &amp;lt;strong&amp;gt;filtercoeff~&amp;lt;/strong&amp;gt; objects, but using the &amp;lt;strong&amp;gt;filtergraph~&amp;lt;/strong&amp;gt; lets me see the individual filter settings, helping me verify that the individual filter parameters are being set correctly. The coefficient outputs of the &amp;lt;strong&amp;gt;filtergraph~&amp;lt;/strong&amp;gt; objects are “pak’d” into a list of 15 floating point values (five for each filter), then prepended with the cascade message. This informs connected filter objects that more than one coefficient set will be used to create a complex filter.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;img&amp;gt;http://1cyjknyddcx62agyb002-web-assets.s3.amazonaws.com/Filter_HandlerB.jpg&amp;lt;/img&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This list is now sent to a &amp;lt;strong&amp;gt;cascade~&amp;lt;/strong&amp;gt; object, which implements the equivalent of serial biquad filters that implement the cascaded filter settings. This could just as easily be implemented as several &amp;lt;strong&amp;gt;biquad~&amp;lt;/strong&amp;gt; objects, but using the single &amp;lt;strong&amp;gt;cascade~&amp;lt;/strong&amp;gt; object allows us to keep the signal count down.&lt;br /&gt;
&lt;br /&gt;
An important addition to this subpatcher is filter clearing. Biquad filters are based on delay lines that can occasionally get overloaded. In these cases, the filter is “blown”, and will not produce any output. The easiest way to fix a blown filter is to send it a clear message, but the downside is that it resets all of the filter coefficients, but doesn’t update any of the user interface elements that control the filter. So, in this case, when we receive a message in the “clear filters” inlet, it not only sends a clear message to the cascade object, but also sends a bang to receivers of the “fil_clear” send object.&lt;br /&gt;
&lt;br /&gt;
There is only one receiver of fil_clear: a receive object embedded in the subpatcher called “filter_clearer”. This simply resets all of the user interface elements to default values, providing visual feedback of the filter’s newly cleared state. It is important to implement a function like this whenever you are working with MSP filters, since blowing a filter is a common problem when experimenting with extreme filter settings.&lt;br /&gt;
&lt;br /&gt;
==In Review==&lt;br /&gt;
&lt;br /&gt;
Put the patch into Presentation Mode, and you will see that I’ve reordered the modules to maintain the row-column orientation of the signal flow. I’ve also added level meters at the end of each row. This is something that I’ve learned to do for performance patches - to place meters in strategic places, helping me to see “where” something is wrong when something goes wrong. As this patch develops, we will place a meter at the end of each row, combining useful debugging information with a cool, flashy display.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;img&amp;gt;http://1cyjknyddcx62agyb002-web-assets.s3.amazonaws.com/Screen-1.jpg&amp;lt;/img&amp;gt;&lt;br /&gt;
&lt;br /&gt;
I also decided to make the visual EQ/Filter display very large in Performance Mode. This helps me see the result of subtle changes, and gives a better visual indication in the heat of battle. If you want to create and add modules of your own, you might want to make this part of the patch a little smaller - but be careful, since the EQ module can have a pretty drastic effect on your sound, and you will want as much control as possible.&lt;br /&gt;
&lt;br /&gt;
With the addition of the overdrive and EQ/Filter units, we have created tools to sculpt the sound of the guitar. Next, we will add a few more “effect-y” modules, including a smooth phaser and a modulating delay line. Until then, have fun with our new modules, and try to make some of your own using some of the techniques we’ve developed.&lt;br /&gt;
&lt;br /&gt;
[[Max_Guitar_Processor,_Part_3|Click here to see the next tutorial]]&lt;/div&gt;</summary>
		<author><name>Gtaylor@rtqe.net</name></author>	</entry>

	<entry>
		<id>http://cycling74.com/wiki/index.php?title=Max_Guitar_Processor,_Part_2</id>
		<title>Max Guitar Processor, Part 2</title>
		<link rel="alternate" type="text/html" href="http://cycling74.com/wiki/index.php?title=Max_Guitar_Processor,_Part_2"/>
				<updated>2013-02-06T23:22:42Z</updated>
		
		<summary type="html">&lt;p&gt;Gtaylor@rtqe.net: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;In the last article, we did a lot of setup - we got input/output handling in place, and added a compressor to the processing chain as an example of an “effect module”. In this article, we will continue adding effects, including a dual overdrive module and a three-stage EQ/Filter module. With these additions we will further explore Max 5’s user interface options, as well as taking a look at some of the “tweaks” that make Max/MSP functions a little more guitar-faithful.&lt;br /&gt;
&lt;br /&gt;
[http://1cyjknyddcx62agyb002-web-assets.s3.amazonaws.com/GtrProc-2.maxpat.zip Download the patch used in this tutorial].&lt;br /&gt;
&lt;br /&gt;
===Tutorials in this series:===&lt;br /&gt;
&lt;br /&gt;
* [[Max_Guitar_Processor,_Part_1|Part 1]]&lt;br /&gt;
* [[Max_Guitar_Processor,_Part_2|Part 2]]&lt;br /&gt;
* [[Max_Guitar_Processor,_Part_3|Part 3]]&lt;br /&gt;
* [[Max_Guitar_Processor,_Part_4|Part 4]]&lt;br /&gt;
* [[Max_Guitar_Processor,_Part_5|Part 5]]&lt;br /&gt;
&lt;br /&gt;
==Adding an Overdrive Section==&lt;br /&gt;
&lt;br /&gt;
First up is an overdrive processor.  I’ve found that the way to get the most variety with this sort of processor is to have two &amp;lt;strong&amp;gt;overdrive~&amp;lt;/strong&amp;gt; objects in series with a lowpass filter between them; the result is a controllable distortion/overdrive capable of some crazy variations. I have, again, encapsulated the overdrive functions in a subpatcher (in this case, called &amp;lt;strong&amp;gt;od_handler&amp;lt;/strong&amp;gt;), which implements the dual &amp;lt;strong&amp;gt;overdrive~&amp;lt;/strong&amp;gt; setup, as well as a &amp;lt;strong&amp;gt;selector~&amp;lt;/strong&amp;gt; that provides the bypass functionality.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;img&amp;gt;http://1cyjknyddcx62agyb002-web-assets.s3.amazonaws.com/OD_HandlerB.jpg&amp;lt;/img&amp;gt;&lt;br /&gt;
&lt;br /&gt;
I’ve also added a level adjustment that allows us to tame the output levels post-overdrive~. This can be very handy, since some of the more extreme overdrive settings can cause high levels (both real and perceived). I’ve also connected a &amp;lt;strong&amp;gt;meter~&amp;lt;/strong&amp;gt; object to the output of the subpatcher, giving me a way to eyeball the output of the compressor-overdrive combination.&lt;br /&gt;
&lt;br /&gt;
==Adding an EQ/Filter==&lt;br /&gt;
&lt;br /&gt;
Next up is the creation of a EQ/Filter modules.  This is going to use the &amp;lt;strong&amp;gt;cascade~&amp;lt;/strong&amp;gt; filter, which is a version of a biquad filter that takes lists of coefficients to create a complex filter curve. In order to control it with simplified controls, we will use a function of the &amp;lt;strong&amp;gt;filtergraph~&amp;lt;/strong&amp;gt; object that converts frequency/level combinations into biquad-type coefficients.&lt;br /&gt;
&lt;br /&gt;
By now, you should be able to see the design pattern in use: I create a subpatcher with the “guts” of the effect module, then attach controls for all of the variable parameters. Open the “filter_handler” subpatcher to examine the DSP funtions used. Most of this subpatcher converts the incoming values into useful frequency and level values, then sending them into &amp;lt;strong&amp;gt;filtergraph~&amp;lt;/strong&amp;gt; objects. I could have just as easily used &amp;lt;strong&amp;gt;filtercoeff~&amp;lt;/strong&amp;gt; objects, but using the &amp;lt;strong&amp;gt;filtergraph~&amp;lt;/strong&amp;gt; lets me see the individual filter settings, helping me verify that the individual filter parameters are being set correctly. The coefficient outputs of the &amp;lt;strong&amp;gt;filtergraph~&amp;lt;/strong&amp;gt; objects are “pak’d” into a list of 15 floating point values (five for each filter), then prepended with the cascade message. This informs connected filter objects that more than one coefficient set will be used to create a complex filter.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;img&amp;gt;http://1cyjknyddcx62agyb002-web-assets.s3.amazonaws.com/Filter_HandlerB.jpg&amp;lt;/img&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This list is now sent to a &amp;lt;strong&amp;gt;cascade~&amp;lt;/strong&amp;gt; object, which implements the equivalent of serial biquad filters that implement the cascaded filter settings. This could just as easily be implemented as several &amp;lt;strong&amp;gt;biquad~&amp;lt;/strong&amp;gt; objects, but using the single &amp;lt;strong&amp;gt;cascade~&amp;lt;/strong&amp;gt; object allows us to keep the signal count down.&lt;br /&gt;
&lt;br /&gt;
An important addition to this subpatcher is filter clearing. Biquad filters are based on delay lines that can occasionally get overloaded. In these cases, the filter is “blown”, and will not produce any output. The easiest way to fix a blown filter is to send it a clear message, but the downside is that it resets all of the filter coefficients, but doesn’t update any of the user interface elements that control the filter. So, in this case, when we receive a message in the “clear filters” inlet, it not only sends a clear message to the cascade object, but also sends a bang to receivers of the “fil_clear” send object.&lt;br /&gt;
&lt;br /&gt;
There is only one receiver of fil_clear: a receive object embedded in the subpatcher called “filter_clearer”. This simply resets all of the user interface elements to default values, providing visual feedback of the filter’s newly cleared state. It is important to implement a function like this whenever you are working with MSP filters, since blowing a filter is a common problem when experimenting with extreme filter settings.&lt;br /&gt;
&lt;br /&gt;
==In Review==&lt;br /&gt;
&lt;br /&gt;
Put the patch into Presentation Mode, and you will see that I’ve reordered the modules to maintain the row-column orientation of the signal flow. I’ve also added level meters at the end of each row. This is something that I’ve learned to do for performance patches - to place meters in strategic places, helping me to see “where” something is wrong when something goes wrong. As this patch develops, we will place a meter at the end of each row, combining useful debugging information with a cool, flashy display.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;img&amp;gt;http://1cyjknyddcx62agyb002-web-assets.s3.amazonaws.com/Screen-1.jpg&amp;lt;/img&amp;gt;&lt;br /&gt;
&lt;br /&gt;
I also decided to make the visual EQ/Filter display very large in Performance Mode. This helps me see the result of subtle changes, and gives a better visual indication in the heat of battle. If you want to create and add modules of your own, you might want to make this part of the patch a little smaller - but be careful, since the EQ module can have a pretty drastic effect on your sound, and you will want as much control as possible.&lt;br /&gt;
&lt;br /&gt;
With the addition of the overdrive and EQ/Filter units, we have created tools to sculpt the sound of the guitar. Next, we will add a few more “effect-y” modules, including a smooth phaser and a modulating delay line. Until then, have fun with our new modules, and try to make some of your own using some of the techniques we’ve developed.&lt;br /&gt;
&lt;br /&gt;
* [[Max_Guitar_Processor,_Part_3|Next tutorial]]&lt;/div&gt;</summary>
		<author><name>Gtaylor@rtqe.net</name></author>	</entry>

	<entry>
		<id>http://cycling74.com/wiki/index.php?title=Tutorials:_A_Max_Guitar_Processor</id>
		<title>Tutorials: A Max Guitar Processor</title>
		<link rel="alternate" type="text/html" href="http://cycling74.com/wiki/index.php?title=Tutorials:_A_Max_Guitar_Processor"/>
				<updated>2013-02-06T21:13:38Z</updated>
		
		<summary type="html">&lt;p&gt;Gtaylor@rtqe.net: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Take a look over [http://cycling74.com/author/ddgcycling74com/ Darwin Grosse's] shoulder as he builds a Max-based guitar processing patch that includes modules for compression, gain/overdrive, filtering/EQ, a phasor, a modulating digital delay, looping, reverb, and MIDI control.&lt;br /&gt;
&lt;br /&gt;
* [[Max_Guitar_Processor,_Part_1|Max_Guitar_Processor, Part 1]]&lt;br /&gt;
* [[Max_Guitar_Processor,_Part_2|Max_Guitar_Processor, Part 2]]&lt;br /&gt;
* [[Max_Guitar_Processor,_Part_3|Max_Guitar_Processor, Part 3]]&lt;br /&gt;
* [[Max_Guitar_Processor,_Part_4|Max_Guitar_Processor, Part 4]]&lt;br /&gt;
* [[Max_Guitar_Processor,_Part_5|Max_Guitar_Processor, Part 5]]&lt;br /&gt;
&lt;br /&gt;
[[Category:MaxTopics]]&lt;/div&gt;</summary>
		<author><name>Gtaylor@rtqe.net</name></author>	</entry>

	<entry>
		<id>http://cycling74.com/wiki/index.php?title=Tutorials:_A_Max_Guitar_Processor</id>
		<title>Tutorials: A Max Guitar Processor</title>
		<link rel="alternate" type="text/html" href="http://cycling74.com/wiki/index.php?title=Tutorials:_A_Max_Guitar_Processor"/>
				<updated>2013-02-06T21:13:09Z</updated>
		
		<summary type="html">&lt;p&gt;Gtaylor@rtqe.net: Created page with &amp;quot;Have a look over [http://cycling74.com/author/ddgcycling74com/ Darwin Grosse's] shoulder as he builds a Max-based guitar processing patch that includes modules for compression...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Have a look over [http://cycling74.com/author/ddgcycling74com/ Darwin Grosse's] shoulder as he builds a Max-based guitar processing patch that includes modules for compression, gain/overdrive, filtering/EQ, a phasor, a modulating digital delay, looping, reverb, and MIDI control.&lt;br /&gt;
&lt;br /&gt;
* [[Max_Guitar_Processor,_Part_1|Max_Guitar_Processor, Part 1]]&lt;br /&gt;
* [[Max_Guitar_Processor,_Part_2|Max_Guitar_Processor, Part 2]]&lt;br /&gt;
* [[Max_Guitar_Processor,_Part_3|Max_Guitar_Processor, Part 3]]&lt;br /&gt;
* [[Max_Guitar_Processor,_Part_4|Max_Guitar_Processor, Part 4]]&lt;br /&gt;
* [[Max_Guitar_Processor,_Part_5|Max_Guitar_Processor, Part 5]]&lt;br /&gt;
&lt;br /&gt;
[[Category:MaxTopics]]&lt;/div&gt;</summary>
		<author><name>Gtaylor@rtqe.net</name></author>	</entry>

	<entry>
		<id>http://cycling74.com/wiki/index.php?title=Max_Guitar_Processor,_Part_5</id>
		<title>Max Guitar Processor, Part 5</title>
		<link rel="alternate" type="text/html" href="http://cycling74.com/wiki/index.php?title=Max_Guitar_Processor,_Part_5"/>
				<updated>2013-02-06T19:44:04Z</updated>
		
		<summary type="html">&lt;p&gt;Gtaylor@rtqe.net: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;In this, the final episode of our guitar processing extravaganza, we are going to step away from making effects and focus on performance support. For a system as complicated as this, performance support means two things: patch storage and realtime control. Thus, we will learn to create a preset system and manipulate the various on-screen controls with an inexpensive MIDI footpedal system.&lt;br /&gt;
&lt;br /&gt;
[http://1cyjknyddcx62agyb002-web-assets.s3.amazonaws.com/GtrProc-5.maxpat.zip Download the patch used in this tutorial].&lt;br /&gt;
&lt;br /&gt;
===Tutorials in this series:===&lt;br /&gt;
&lt;br /&gt;
* [[Max_Guitar_Processor,_Part_1|Part 1]]&lt;br /&gt;
* [[Max_Guitar_Processor,_Part_2|Part 2]]&lt;br /&gt;
* [[Max_Guitar_Processor,_Part_3|Part 3]]&lt;br /&gt;
* [[Max_Guitar_Processor,_Part_4|Part 4]]&lt;br /&gt;
* [[Max_Guitar_Processor,_Part_5|Part 5]]&lt;br /&gt;
&lt;br /&gt;
==Preset Handling==&lt;br /&gt;
&lt;br /&gt;
The &amp;quot;pattr&amp;quot; objects manage the basics of preset handling for complex patches. This subsystem revolves around an object called pattr, which maintains the state of a control and allows it to be saved or remotely controlled. In our patch, we won't use the &amp;lt;strong&amp;gt;pattr&amp;lt;/strong&amp;gt; object directly; rather, we will use the &amp;lt;strong&amp;gt;autopattr&amp;lt;/strong&amp;gt; object (which creates a virtual pattr for all named objects) and the &amp;lt;strong&amp;gt;pattrstorage&amp;lt;/strong&amp;gt; object (which provides for preset storage and remote dispatching).&lt;br /&gt;
&lt;br /&gt;
In order to make &amp;lt;strong&amp;gt;autopattr&amp;lt;/strong&amp;gt; work, we need to name all of the controls that we want maintained by the pattr system and we also must make sure that controls we want left &amp;quot;untouched&amp;quot; are unnamed. If you select a control and bring up the Object Inspector, you will see that I've named all of the appropriate controls, using a naming convention that identifies the module and control function for each UI element.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;img&amp;gt;http://1cyjknyddcx62agyb002-web-assets.s3.amazonaws.com/5-InspectorB.jpg&amp;lt;/img&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In addition to naming all of the controls (so they can be seen by &amp;lt;strong&amp;gt;autopattr&amp;lt;/strong&amp;gt;), I've also added a &amp;lt;strong&amp;gt;textedit&amp;lt;/strong&amp;gt; object that will be used as a preset name. This &amp;quot;no-nothing&amp;quot; field isn't connected to anything, but it is named – therefore acting as a place to put our patch name. Gotta have a patch name…&lt;br /&gt;
&lt;br /&gt;
Once the &amp;lt;strong&amp;gt;autopattr&amp;lt;/strong&amp;gt; object is in place, we also need to handle the selection and storage of preset data.  That is what the &amp;lt;strong&amp;gt;pattrstorage&amp;lt;/strong&amp;gt; object does. We can use a &amp;lt;strong&amp;gt;number box&amp;lt;/strong&amp;gt; (in this case, with an up/down control) to select patch slots, and create messages that will store the current settings as a preset. We also need to add controls for saving and restoring the contents to a file. With remarkably little patching, we've created a complete device preset system.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;img&amp;gt;http://1cyjknyddcx62agyb002-web-assets.s3.amazonaws.com/5-MIDI_HandlerB.jpg&amp;lt;/img&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==MIDI Control==&lt;br /&gt;
&lt;br /&gt;
Another important aspect to a usable live guitar rig is MIDI control – specifically, control from a MIDI pedal board. I happen to have a Behringer FCB1010 MIDI Foot Controller, and I've integrated its use into this custom patch. I've created a simple set of functions to create a list of MIDI inputs and to select a set of control functions, then manage the MIDI input within the subpatcher called midi_handler.&lt;br /&gt;
&lt;br /&gt;
Incoming MIDI information is parsed (using the midiparse object), with program changes used to set the current preset slot. In addition, I use the program change command to act as a tap tempo button, since I have set the FCB1010 to produce the appropriate messages.&lt;br /&gt;
&lt;br /&gt;
The most important section of this patch, however, is the routing of MIDI control messages. I have a subpatch that compares incoming MIDI CC messages with our selected controller numbers, and only outputs valid control messages. This is then sent to a gate object, which routes the value to the correct message box (and, in some cases, a scale object that scales the values). These message boxes prepend the pattr name of a control to the value, then send this set back to pattrstorage.&lt;br /&gt;
&lt;br /&gt;
The result is an automatic update to the control, based on pattrstorage's message handling! This is a little known way of controlling pattr'd controls; we use pattrstorage as a &amp;quot;dispatcher&amp;quot; of messages, and let it update the control (and the current patch setting).&lt;br /&gt;
&lt;br /&gt;
One thing to watch out for, though, is that these changes overwrite the current setting in the pattrstorage preset slot. So, if you load a preset file, change a setting with the foot pedal, then save the preset file, your changes will become the new setting for that control. It's a good idea to always review your current patch when working with pattrstorage, and to separate preset creation from live performance!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;img&amp;gt;http://1cyjknyddcx62agyb002-web-assets.s3.amazonaws.com/gtr5-fullimage.jpg&amp;lt;/img&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Conclusion==&lt;br /&gt;
&lt;br /&gt;
I hope that this series have been inspirational to you. The design and execution of the final patch is particular to my performance needs, but should be easy enough to modify into a system that will work for you. I've included a file (mypresets.xml) with a few of the preset I use with this rig – you may want to start your customization by making presets of your own. But best result would be for you to take this patch, rip it apart, and create your dream guitar processor!&lt;br /&gt;
&lt;br /&gt;
Thanks for following the series, and feel free to [mailto:ddg@cycling74.com email me] with any questions or comments.&lt;/div&gt;</summary>
		<author><name>Gtaylor@rtqe.net</name></author>	</entry>

	<entry>
		<id>http://cycling74.com/wiki/index.php?title=Max_Guitar_Processor,_Part_5</id>
		<title>Max Guitar Processor, Part 5</title>
		<link rel="alternate" type="text/html" href="http://cycling74.com/wiki/index.php?title=Max_Guitar_Processor,_Part_5"/>
				<updated>2013-02-06T19:43:22Z</updated>
		
		<summary type="html">&lt;p&gt;Gtaylor@rtqe.net: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;In this, the final episode of our guitar processing extravaganza, we are going to step away from making effects and focus on performance support. For a system as complicated as this, performance support means two things: patch storage and realtime control. Thus, we will learn to create a preset system and manipulate the various on-screen controls with an inexpensive MIDI footpedal system.&lt;br /&gt;
&lt;br /&gt;
[http://1cyjknyddcx62agyb002-web-assets.s3.amazonaws.com/GtrProc-5.maxpat.zip Download the patch used in this tutorial].&lt;br /&gt;
&lt;br /&gt;
===Tutorials in this series:===&lt;br /&gt;
&lt;br /&gt;
* [[Max_Guitar_Processor,_Part_1|Part 1]]&lt;br /&gt;
* [[Max_Guitar_Processor,_Part_2|Part 2]]&lt;br /&gt;
* [[Max_Guitar_Processor,_Part_3|Part 3]]&lt;br /&gt;
* [[Max_Guitar_Processor,_Part_4|Part 4]]&lt;br /&gt;
* [[Max_Guitar_Processor,_Part_5|Part 5]]&lt;br /&gt;
&lt;br /&gt;
==Preset Handling==&lt;br /&gt;
&lt;br /&gt;
The &amp;quot;pattr&amp;quot; objects manage the basics of preset handling for complex patches. This subsystem revolves around an object called pattr, which maintains the state of a control and allows it to be saved or remotely controlled. In our patch, we won't use the &amp;lt;strong&amp;gt;pattr&amp;lt;/strong&amp;gt; object directly; rather, we will use the &amp;lt;strong&amp;gt;autopattr&amp;lt;/strong&amp;gt; object (which creates a virtual pattr for all named objects) and the &amp;lt;strong&amp;gt;pattrstorage&amp;lt;/strong&amp;gt; object (which provides for preset storage and remote dispatching).&lt;br /&gt;
&lt;br /&gt;
In order to make &amp;lt;strong&amp;gt;autopattr&amp;lt;/strong&amp;gt; work, we need to name all of the controls that we want maintained by the pattr system and we also must make sure that controls we want left &amp;quot;untouched&amp;quot; are unnamed. If you select a control and bring up the Object Inspector, you will see that I've named all of the appropriate controls, using a naming convention that identifies the module and control function for each UI element.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;img&amp;gt;http://1cyjknyddcx62agyb002-web-assets.s3.amazonaws.com/5-InspectorB.jpg&amp;lt;/img&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In addition to naming all of the controls (so they can be seen by &amp;lt;strong&amp;gt;autopattr&amp;lt;/strong&amp;gt;), I've also added a &amp;lt;strong&amp;gt;textedit&amp;lt;/strong&amp;gt; object that will be used as a preset name. This &amp;quot;no-nothing&amp;quot; field isn't connected to anything, but it is named – therefore acting as a place to put our patch name. Gotta have a patch name…&lt;br /&gt;
&lt;br /&gt;
Once the &amp;lt;strong&amp;gt;autopattr&amp;lt;/strong&amp;gt; object is in place, we also need to handle the selection and storage of preset data.  That is what the &amp;lt;strong&amp;gt;pattrstorage&amp;lt;/strong&amp;gt; object does. We can use a &amp;lt;strong&amp;gt;number box&amp;lt;/strong&amp;gt; (in this case, with an up/down control) to select patch slots, and create messages that will store the current settings as a preset. We also need to add controls for saving and restoring the contents to a file. With remarkably little patching, we've created a complete device preset system.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;img&amp;gt;http://1cyjknyddcx62agyb002-web-assets.s3.amazonaws.com/5-MIDI_HandlerB.jpg&amp;lt;/img&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==MIDI Control==&lt;br /&gt;
&lt;br /&gt;
Another important aspect to a usable live guitar rig is MIDI control – specifically, control from a MIDI pedal board. I happen to have a Behringer FCB1010 MIDI Foot Controller, and I've integrated its use into this custom patch. I've created a simple set of functions to create a list of MIDI inputs and to select a set of control functions, then manage the MIDI input within the subpatcher called midi_handler.&lt;br /&gt;
&lt;br /&gt;
Incoming MIDI information is parsed (using the midiparse object), with program changes used to set the current preset slot. In addition, I use the program change command to act as a tap tempo button, since I have set the FCB1010 to produce the appropriate messages.&lt;br /&gt;
&lt;br /&gt;
The most important section of this patch, however, is the routing of MIDI control messages. I have a subpatch that compares incoming MIDI CC messages with our selected controller numbers, and only outputs valid control messages. This is then sent to a gate object, which routes the value to the correct message box (and, in some cases, a scale object that scales the values). These message boxes prepend the pattr name of a control to the value, then send this set back to pattrstorage.&lt;br /&gt;
&lt;br /&gt;
The result is an automatic update to the control, based on pattrstorage's message handling! This is a little known way of controlling pattr'd controls; we use pattrstorage as a &amp;quot;dispatcher&amp;quot; of messages, and let it update the control (and the current patch setting).&lt;br /&gt;
&lt;br /&gt;
One thing to watch out for, though, is that these changes overwrite the current setting in the pattrstorage preset slot. So, if you load a preset file, change a setting with the foot pedal, then save the preset file, your changes will become the new setting for that control. It's a good idea to always review your current patch when working with pattrstorage, and to separate preset creation from live performance!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;img&amp;gt;http://1cyjknyddcx62agyb002-web-assets.s3.amazonaws.com/gtr5-fullimage.jpg&amp;lt;/img&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Conclusion==&lt;br /&gt;
&lt;br /&gt;
I hope that this series have been inspirational to you. The design and execution of the final patch is particular to my performance needs, but should be easy enough to modify into a system that will work for you. I've included a file (mypresets.xml) with a few of the preset I use with this rig – you may want to start your customization by making presets of your own. But best result would be for you to take this patch, rip it apart, and create your dream guitar processor!&lt;br /&gt;
&lt;br /&gt;
Thanks for following the series, and feel free to [mailto:ddg@cycling74.com email me] with any questions or comments: &amp;lt;a&lt;/div&gt;</summary>
		<author><name>Gtaylor@rtqe.net</name></author>	</entry>

	<entry>
		<id>http://cycling74.com/wiki/index.php?title=Max_Guitar_Processor,_Part_1</id>
		<title>Max Guitar Processor, Part 1</title>
		<link rel="alternate" type="text/html" href="http://cycling74.com/wiki/index.php?title=Max_Guitar_Processor,_Part_1"/>
				<updated>2013-02-06T19:39:58Z</updated>
		
		<summary type="html">&lt;p&gt;Gtaylor@rtqe.net: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;In this series of tutorials, I will be building a Max-based guitar processing &amp;quot;rig&amp;quot;, and will give you the opportunity to look over my shoulder as I design and implement this system.&lt;br /&gt;
&lt;br /&gt;
'''''Note:''''' ''You may also be interested in an earlier article which appears on the Cycling '74 website by Andrew Benson and Ben Bracken titled [http://cycling74.com/2008/03/12/expand-your-guitar-vol-1/ Expand Your Guitar], which covers the basics of connecting a guitar to a Max-based processing system, includes a few guitar-oriented effects patches.''&lt;br /&gt;
&lt;br /&gt;
[http://1cyjknyddcx62agyb002-web-assets.s3.amazonaws.com/GtrProc-1.maxpat.zip Download the patch]&lt;br /&gt;
&lt;br /&gt;
===Tutorials in this series===&lt;br /&gt;
&lt;br /&gt;
* [[Max_Guitar_Processor,_Part_1|Part 1]]&lt;br /&gt;
* [[Max_Guitar_Processor,_Part_2|Part 2]]&lt;br /&gt;
* [[Max_Guitar_Processor,_Part_3|Part 3]]&lt;br /&gt;
* [[Max_Guitar_Processor,_Part_4|Part 4]]&lt;br /&gt;
* [[Max_Guitar_Processor,_Part_5|Part 5]]&lt;br /&gt;
&lt;br /&gt;
==Designing the System==&lt;br /&gt;
The first thing I did was to plan the processing chain that I would create. I wanted a rather typical guitar rig, with the addition of a looping delay line. I decided on the following functional graph:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;img&amp;gt;http://1cyjknyddcx62agyb002-web-assets.s3.amazonaws.com/1-RigDesign.jpg&amp;lt;/img&amp;gt;&lt;br /&gt;
&lt;br /&gt;
I also made a few decisions about general program functionality. Since this will be a stand-alone program/patch, I wouldn't worry about limiting system usage; therefore I wouldn't wrap subpatches inside of &amp;lt;strong&amp;gt;poly~&amp;lt;/strong&amp;gt; objects (to reduce their CPU load when unused). Also, I decided to take full advantage of the Max 5 Presentation Mode layout, allowing me to code in a convenient way and worry about the performance layout in a separate step.&lt;br /&gt;
&lt;br /&gt;
Since I am a dyed-in-the-wool tweaker, I wanted to structure the code in such a way that I could manipulate it easily - even during live performance. This means that I needed to create an easily-to-follow patch that was well-labeled, and I needed to encapsulate at a level conducive to on-the-fly changes.&lt;br /&gt;
&lt;br /&gt;
Finally, in order to build this quickly, I decided to beg, borrow or steal as much of the programming as possible without resorting to the use of VST plug-ins (which would reduce tweak-ability). Throughout these articles, you will see me reuse older code, appropriate from other applications and use third-party objects whenever necessary. I also take full advantage of some design patterns I've developed that allow for quick coding of more complex patch routings.&lt;br /&gt;
&lt;br /&gt;
==Input and Gain Handling==&lt;br /&gt;
&lt;br /&gt;
Since this is a stand-alone patch, we need to control our own input and output. Let's start by creating an input section. If you open the patch [http://1cyjknyddcx62agyb002-web-assets.s3.amazonaws.com/GtrProc-1.maxpat.zip GtrProc-1.maxpat], you will see that I have discrete patch segments that correspond to the individual functions described in my processing graph. Place the patch into Presentation Mode, and you will see that these segments jump into a &amp;quot;rack style&amp;quot; package that is easy to follow during performance.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;img&amp;gt;http://1cyjknyddcx62agyb002-web-assets.s3.amazonaws.com/1-RackLayout.jpg&amp;lt;/img&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Move back into Patching Mode, and look at the top-left section of the patch. It is labeled &amp;quot;Input&amp;quot;, and includes several controls connected to an abstraction named &amp;quot;input_handler&amp;quot;. Double-click on the input_handler subpatcher to see its contents.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;img&amp;gt;http://1cyjknyddcx62agyb002-web-assets.s3.amazonaws.com/1-InputHandler.png&amp;lt;/img&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This subpatch is pretty simple: it contains a number of &amp;lt;strong&amp;gt;adstatus&amp;lt;/strong&amp;gt; objects that allow my controls to display and alter the audio settings used at runtime. The function is similar to using the DSP Status window, but exposes only those items I considered important for realtime performance. Since I don't use the &amp;lt;strong&amp;gt;adstatus&amp;lt;/strong&amp;gt; object very often, I don't know the functional arguments by heart. While I could have used the documentation to learn about the object, I decided to steal the functions from the help patch instead!&lt;br /&gt;
&lt;br /&gt;
By viewing the help patch, I can learn about the function of an object. However, all help patches are also functional Max patches. In this case, I was able to unlock the &amp;lt;strong&amp;gt;adstatus.maxhelp&amp;lt;/strong&amp;gt; patch, copy the functional objects that I needed, then paste them into my subpatcher. By connecting a few inlets and outlets, I'd created the small and efficient input setup handler that I needed.&lt;br /&gt;
&lt;br /&gt;
In addition to setting the DSP Settings, I also want to control gain at this point. This is especially important with an instrument-driven patch, since different input hardware will provide vastly different levels. In my case, I may be using an IK Multimedia StealthPlug, a mixer with an audio interface, or even a direct connection into my Mac's audio input - so I want good control of my front-end gain. I did this by adding a &amp;lt;strong&amp;gt;*~&amp;lt;/strong&amp;gt; object to the input section, then routed the input into this control. By using a scale control, I'm able to change the normal range of the gain knob (0-127) into a range that goes from 0.0 (silent) to 2.0 (double-volume).&lt;br /&gt;
&lt;br /&gt;
==Compression==&lt;br /&gt;
&lt;br /&gt;
The next stage of the patch is a compressor. Since compression can have a very significant effect on the sound of the instrument, I wanted detailed control over its parameters. Therefore, I am using number boxes (rather than knobs) to control the values; this gives me precise control over the compressor's operation without having to guess at a knob's output value.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;img&amp;gt;http://1cyjknyddcx62agyb002-web-assets.s3.amazonaws.com/1-KompressorB.jpg&amp;lt;/img&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Again, this section is mostly a set of controls connected to an abstraction named &amp;quot;comp_handler&amp;quot;. Double-click on this subpatcher to view its contents. This is a very simple subpatch; I've just borrowed the komp subpatcher (found in examples/effects/kompressor/lib of the Max folder) without change. I set a one parameter (lookahead) directly with a &amp;lt;strong&amp;gt;loadbang&amp;lt;/strong&amp;gt;, but mostly expose the functions directly to the main patcher. Since this subpatcher is so simple, why didn't I just use komp directly in my main patch?&lt;br /&gt;
&lt;br /&gt;
In the future, I may want to develop my own compressor system, or I may choose to implement the omx-based compressor included with MSP. I may even break down and use a VST compressor. In any of these cases, I would want to change the compressor &amp;quot;engine&amp;quot; without having to disturb my main patcher. By placing the compressor in a subpatch, I can change the underlying compression engine without ever having to change the top-level patch or the user interface.&lt;br /&gt;
&lt;br /&gt;
This is a &amp;quot;high detail&amp;quot; compressor, giving me the kind of control I want for a flexible rig. If you aren't that familiar with compression, though, it may seem a little intimidating. Here are a few settings that I've found useful with this processor:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;img&amp;gt;http://1cyjknyddcx62agyb002-web-assets.s3.amazonaws.com/1-table.jpg&amp;lt;/img&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;em&amp;gt; (Sidebar)&amp;lt;/em&amp;gt; In each of the processing areas, you will see a small grey panel - it doesn't seem to do anything. However, when you switch into Presentation Mode, you should see these panels expand to become the background of the individual processing sections. This is an example of using the Presentation Mode's ability to change an object's geometry to keep my patching view clean, but give me an attractive user interface.&lt;br /&gt;
&lt;br /&gt;
==Output Staging==&lt;br /&gt;
&lt;br /&gt;
The final processing section for this tutorial controls the output. This section will be familiar to any Max/MSP programmer - it's the basis for audio output in almost any audio patch. The output of the compressor is sent to the two faders, which provide left/right volume control. The signal is then routed to an &amp;lt;strong&amp;gt;EZDAC~&amp;lt;/strong&amp;gt;, which is also our DSP on/off control. If you have your guitar (or other instrument) plugged into the computer, you can check the settings on the input module, turn on the DSP, turn up the volume and hear your instrument through the patch.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;img&amp;gt;http://1cyjknyddcx62agyb002-web-assets.s3.amazonaws.com/1-OutputStuff.png&amp;lt;/img&amp;gt;&lt;br /&gt;
&lt;br /&gt;
However, it's not always convenient to test with an actual instrument. For example, some of this patch was done while I was waiting in an airport. The last thing the PSA wants to see is for me to pull out a guitar and start wailing. What I've done is to include a &amp;quot;test fixture&amp;quot; - some standard audio generating code - that I can use to test the patch as it is being built. You will notice that this section (labeled &amp;quot;test fixture&amp;quot;) gives me the opportunity to load and play a file or to generate noise. This is a small bit of code I've copied from another patch of mine - I use it as a test fixture for almost every audio patch I write.&lt;br /&gt;
&lt;br /&gt;
The output of this fixture is routed to a &amp;lt;strong&amp;gt;send~&amp;lt;/strong&amp;gt; object labeled &amp;quot;test&amp;quot;. This audio is received in the input section, at the same point that my patch would see an instrument from the audio input. This way, I can test patches without having an instrument plugged in, helping me to be productive when the guitar isn't easily available.&lt;br /&gt;
&lt;br /&gt;
==Conclusion==&lt;br /&gt;
&lt;br /&gt;
We've created the basic I/O blocks for our performance patch. In the next article, we will expand it by adding a good-sounding distortion/overdrive system and a highly controllable filter/EQ. In the meantime, work with this basic patch, learn to understand the routing between the objects and explore the use of the compressor. Until next time - have fun!&lt;/div&gt;</summary>
		<author><name>Gtaylor@rtqe.net</name></author>	</entry>

	<entry>
		<id>http://cycling74.com/wiki/index.php?title=Max_Guitar_Processor,_Part_2</id>
		<title>Max Guitar Processor, Part 2</title>
		<link rel="alternate" type="text/html" href="http://cycling74.com/wiki/index.php?title=Max_Guitar_Processor,_Part_2"/>
				<updated>2013-02-06T19:39:27Z</updated>
		
		<summary type="html">&lt;p&gt;Gtaylor@rtqe.net: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;In the last article, we did a lot of setup - we got input/output handling in place, and added a compressor to the processing chain as an example of an “effect module”. In this article, we will continue adding effects, including a dual overdrive module and a three-stage EQ/Filter module. With these additions we will further explore Max 5’s user interface options, as well as taking a look at some of the “tweaks” that make Max/MSP functions a little more guitar-faithful.&lt;br /&gt;
&lt;br /&gt;
[http://1cyjknyddcx62agyb002-web-assets.s3.amazonaws.com/GtrProc-2.maxpat.zip Download the patch used in this tutorial].&lt;br /&gt;
&lt;br /&gt;
===Tutorials in this series:===&lt;br /&gt;
&lt;br /&gt;
* [[Max_Guitar_Processor,_Part_1|Part 1]]&lt;br /&gt;
* [[Max_Guitar_Processor,_Part_2|Part 2]]&lt;br /&gt;
* [[Max_Guitar_Processor,_Part_3|Part 3]]&lt;br /&gt;
* [[Max_Guitar_Processor,_Part_4|Part 4]]&lt;br /&gt;
* [[Max_Guitar_Processor,_Part_5|Part 5]]&lt;br /&gt;
&lt;br /&gt;
==Adding an Overdrive Section==&lt;br /&gt;
&lt;br /&gt;
First up is an overdrive processor.  I’ve found that the way to get the most variety with this sort of processor is to have two &amp;lt;strong&amp;gt;overdrive~&amp;lt;/strong&amp;gt; objects in series with a lowpass filter between them; the result is a controllable distortion/overdrive capable of some crazy variations. I have, again, encapsulated the overdrive functions in a subpatcher (in this case, called &amp;lt;strong&amp;gt;od_handler&amp;lt;/strong&amp;gt;), which implements the dual &amp;lt;strong&amp;gt;overdrive~&amp;lt;/strong&amp;gt; setup, as well as a &amp;lt;strong&amp;gt;selector~&amp;lt;/strong&amp;gt; that provides the bypass functionality.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;img&amp;gt;http://1cyjknyddcx62agyb002-web-assets.s3.amazonaws.com/OD_HandlerB.jpg&amp;lt;/img&amp;gt;&lt;br /&gt;
&lt;br /&gt;
I’ve also added a level adjustment that allows us to tame the output levels post-overdrive~. This can be very handy, since some of the more extreme overdrive settings can cause high levels (both real and perceived). I’ve also connected a &amp;lt;strong&amp;gt;meter~&amp;lt;/strong&amp;gt; object to the output of the subpatcher, giving me a way to eyeball the output of the compressor-overdrive combination.&lt;br /&gt;
&lt;br /&gt;
==Adding an EQ/Filter==&lt;br /&gt;
&lt;br /&gt;
Next up is the creation of a EQ/Filter modules.  This is going to use the &amp;lt;strong&amp;gt;cascade~&amp;lt;/strong&amp;gt; filter, which is a version of a biquad filter that takes lists of coefficients to create a complex filter curve. In order to control it with simplified controls, we will use a function of the &amp;lt;strong&amp;gt;filtergraph~&amp;lt;/strong&amp;gt; object that converts frequency/level combinations into biquad-type coefficients.&lt;br /&gt;
&lt;br /&gt;
By now, you should be able to see the design pattern in use: I create a subpatcher with the “guts” of the effect module, then attach controls for all of the variable parameters. Open the “filter_handler” subpatcher to examine the DSP funtions used. Most of this subpatcher converts the incoming values into useful frequency and level values, then sending them into &amp;lt;strong&amp;gt;filtergraph~&amp;lt;/strong&amp;gt; objects. I could have just as easily used &amp;lt;strong&amp;gt;filtercoeff~&amp;lt;/strong&amp;gt; objects, but using the &amp;lt;strong&amp;gt;filtergraph~&amp;lt;/strong&amp;gt; lets me see the individual filter settings, helping me verify that the individual filter parameters are being set correctly. The coefficient outputs of the &amp;lt;strong&amp;gt;filtergraph~&amp;lt;/strong&amp;gt; objects are “pak’d” into a list of 15 floating point values (five for each filter), then prepended with the cascade message. This informs connected filter objects that more than one coefficient set will be used to create a complex filter.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;img&amp;gt;http://1cyjknyddcx62agyb002-web-assets.s3.amazonaws.com/Filter_HandlerB.jpg&amp;lt;/img&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This list is now sent to a &amp;lt;strong&amp;gt;cascade~&amp;lt;/strong&amp;gt; object, which implements the equivalent of serial biquad filters that implement the cascaded filter settings. This could just as easily be implemented as several &amp;lt;strong&amp;gt;biquad~&amp;lt;/strong&amp;gt; objects, but using the single &amp;lt;strong&amp;gt;cascade~&amp;lt;/strong&amp;gt; object allows us to keep the signal count down.&lt;br /&gt;
&lt;br /&gt;
An important addition to this subpatcher is filter clearing. Biquad filters are based on delay lines that can occasionally get overloaded. In these cases, the filter is “blown”, and will not produce any output. The easiest way to fix a blown filter is to send it a clear message, but the downside is that it resets all of the filter coefficients, but doesn’t update any of the user interface elements that control the filter. So, in this case, when we receive a message in the “clear filters” inlet, it not only sends a clear message to the cascade object, but also sends a bang to receivers of the “fil_clear” send object.&lt;br /&gt;
&lt;br /&gt;
There is only one receiver of fil_clear: a receive object embedded in the subpatcher called “filter_clearer”. This simply resets all of the user interface elements to default values, providing visual feedback of the filter’s newly cleared state. It is important to implement a function like this whenever you are working with MSP filters, since blowing a filter is a common problem when experimenting with extreme filter settings.&lt;br /&gt;
&lt;br /&gt;
==In Review==&lt;br /&gt;
&lt;br /&gt;
Put the patch into Presentation Mode, and you will see that I’ve reordered the modules to maintain the row-column orientation of the signal flow. I’ve also added level meters at the end of each row. This is something that I’ve learned to do for performance patches - to place meters in strategic places, helping me to see “where” something is wrong when something goes wrong. As this patch develops, we will place a meter at the end of each row, combining useful debugging information with a cool, flashy display.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;img&amp;gt;http://1cyjknyddcx62agyb002-web-assets.s3.amazonaws.com/Screen-1.jpg&amp;lt;/img&amp;gt;&lt;br /&gt;
&lt;br /&gt;
I also decided to make the visual EQ/Filter display very large in Performance Mode. This helps me see the result of subtle changes, and gives a better visual indication in the heat of battle. If you want to create and add modules of your own, you might want to make this part of the patch a little smaller - but be careful, since the EQ module can have a pretty drastic effect on your sound, and you will want as much control as possible.&lt;br /&gt;
&lt;br /&gt;
With the addition of the overdrive and EQ/Filter units, we have created tools to sculpt the sound of the guitar. Next, we will add a few more “effect-y” modules, including a smooth phaser and a modulating delay line. Until then, have fun with our new modules, and try to make some of your own using some of the techniques we’ve developed.&lt;/div&gt;</summary>
		<author><name>Gtaylor@rtqe.net</name></author>	</entry>

	<entry>
		<id>http://cycling74.com/wiki/index.php?title=Max_Guitar_Processor,_Part_3</id>
		<title>Max Guitar Processor, Part 3</title>
		<link rel="alternate" type="text/html" href="http://cycling74.com/wiki/index.php?title=Max_Guitar_Processor,_Part_3"/>
				<updated>2013-02-06T19:39:05Z</updated>
		
		<summary type="html">&lt;p&gt;Gtaylor@rtqe.net: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;In the last article, we added some basic tonal effects: distortion/overdrive and EQ/filtering. This time, we will expand our virtual effects rack to include both a phase shifter and a full-featured modulating digital delay. As we add these effects, you will begin to see why a DIY effects system can trump any commercial product.&lt;br /&gt;
&lt;br /&gt;
[http://1cyjknyddcx62agyb002-web-assets.s3.amazonaws.com/GtrProc-3.maxpat.zip Download the patch used in this tutorial].&lt;br /&gt;
&lt;br /&gt;
===Tutorials in this series:===&lt;br /&gt;
&lt;br /&gt;
* [[Max_Guitar_Processor,_Part_1|Part 1]]&lt;br /&gt;
* [[Max_Guitar_Processor,_Part_2|Part 2]]&lt;br /&gt;
* [[Max_Guitar_Processor,_Part_3|Part 3]]&lt;br /&gt;
* [[Max_Guitar_Processor,_Part_4|Part 4]]&lt;br /&gt;
* [[Max_Guitar_Processor,_Part_5|Part 5]]&lt;br /&gt;
&lt;br /&gt;
==Adding a phase shifter==&lt;br /&gt;
&lt;br /&gt;
The first module I’ve added is a phase shifter. It’s a full-featured implementation, featuring a variable number of phase shift stages and a frequency spread to provide a more complicated sound. Since this is obviously a well-considered piece of work, I surely had to steal from someplace, right? Of course! Luckily, I have access to some of the Pluggo source patches, and I’ve always liked this particular phase shifter’s sound. So I opened up the patch and copied the whole thing! By placing it in a subpatcher (phasor_handler), I keep it out of my hair at the top level. About all that I added to the patch is some scaling of the inputs to help keep the control ranges sensible.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;img&amp;gt;http://1cyjknyddcx62agyb002-web-assets.s3.amazonaws.com/3-Phasor_HandlerB.jpg&amp;lt;/img&amp;gt;&lt;br /&gt;
&lt;br /&gt;
One of the interesting aspects of this patch is the use of the phaseshift~ object to provide the effect. Normally, a phase shift is almost imperceptible, but when the frequency is moving a classic phase shift sound is created. Stacking a few of these on top of each other (with the serial application of the onestage subpatcher) allows us to vary the depth of the effect by adding (or subtracting) phase shifting stages.&lt;br /&gt;
&lt;br /&gt;
==The modulating delay==&lt;br /&gt;
&lt;br /&gt;
The next module is a digital delay, complete with modulation, feedback (with filtering) and stereo enhancement. This is also the place where we go from mono processing to stereo, allowing each output to have a different (but related) delay time. The key to this is the “RHS Factor”, which determines the Right Hand Side’s delay time relative to the left side. Modest difference (like .98) will provide subtle depth, while more radical settings (like .5 or 1.5) will give rhythmic ping-pong echoes.&lt;br /&gt;
&lt;br /&gt;
If we switch to the Patching Mode and open the delay_handler subpatcher, we see that most of the work is being done by a pair of tapin~/tapout~ objects and some scaling functions. Creating the modulation – which allows this module to perform flanging, chorusing and vibrato effects – is accomplished by varying the delay time. We use a cycle~ object to drive the change; but you need to note that the delay time is consistently maintained as a signal routing, rather than an event routing. This causes the delay time to change without interruption, giving us smooth delay time transitions that can be used to our advantage.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;img&amp;gt;http://1cyjknyddcx62agyb002-web-assets.s3.amazonaws.com/3-Delay_HandlerB.jpg&amp;lt;/img&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Dealing with the details==&lt;br /&gt;
&lt;br /&gt;
As you can see in the patching view, we’ve continued our patching patterns by creating a master patch for each effect module, with controls maintained at the top-level patch. If you switch to the Presentation Mode, you will see that we’ve also maintained another pattern: using knobs (the dial object) for controls that are best set by ear, and number boxes for controls that may need precise settings. For most people, a screen full of number boxes is confusing and intimidating – and this becomes worse when you are using a patch or program onstage. By limiting the use of number boxes to those controls that will specifically need them, you can reduce the amount of stress experienced when working with a patch.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;img&amp;gt;http://1cyjknyddcx62agyb002-web-assets.s3.amazonaws.com/3-Patch_LayoutB.jpg&amp;lt;/img&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Since the phase shifter and delay modules take up one full “rack space” in Presentation Mode, we also want to put another level meter at the end of the rack. However, since we now have split the sound into stereo, we need to use two meters instead. This gives us a quick visual to make sure that neither the phase shifter nor the delay unit settings are causing output distortion.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;img&amp;gt;http://1cyjknyddcx62agyb002-web-assets.s3.amazonaws.com/GTR-3-1.jpg&amp;lt;/img&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Conclusion==&lt;br /&gt;
&lt;br /&gt;
At this point, we’ve created a credible guitar processor with the most common effects in place. In our next article, we will dive into less familiar territory by taking on looping and reverb. See you then!&lt;/div&gt;</summary>
		<author><name>Gtaylor@rtqe.net</name></author>	</entry>

	<entry>
		<id>http://cycling74.com/wiki/index.php?title=Max_Guitar_Processor,_Part_4</id>
		<title>Max Guitar Processor, Part 4</title>
		<link rel="alternate" type="text/html" href="http://cycling74.com/wiki/index.php?title=Max_Guitar_Processor,_Part_4"/>
				<updated>2013-02-06T19:38:36Z</updated>
		
		<summary type="html">&lt;p&gt;Gtaylor@rtqe.net: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;At this point, we have a pretty useful guitar processing &amp;quot;rack&amp;quot;, but it could use a little spice. This spice will come from two additional processors: a looping delay unit, and a basic reverb system. Also, to help keep the output useful, we will drop a limiter on the back end of the entire rig.&lt;br /&gt;
&lt;br /&gt;
[http://1cyjknyddcx62agyb002-web-assets.s3.amazonaws.com/GtrProc-4.maxpat.zip Download the patch used in this tutorial].&lt;br /&gt;
&lt;br /&gt;
===Tutorials in this series:===&lt;br /&gt;
&lt;br /&gt;
* [[Max_Guitar_Processor,_Part_1|Part 1]]&lt;br /&gt;
* [[Max_Guitar_Processor,_Part_2|Part 2]]&lt;br /&gt;
* [[Max_Guitar_Processor,_Part_3|Part 3]]&lt;br /&gt;
* [[Max_Guitar_Processor,_Part_4|Part 4]]&lt;br /&gt;
* [[Max_Guitar_Processor,_Part_5|Part 5]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Looping Delay==&lt;br /&gt;
&lt;br /&gt;
The first processor we will add is an alternative version of the delay line – one that provides tap tempo, looping and sound-on-sound functionality. Unlike our previous delay module, this one will not provide modulation (for flanging and pitch shifting effects); rather it will be focused on capturing a loop, and allowing overdubs of additional sounds.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;img&amp;gt;http://1cyjknyddcx62agyb002-web-assets.s3.amazonaws.com/4-Tap_TempoB.jpg&amp;lt;/img&amp;gt;&lt;br /&gt;
&lt;br /&gt;
As with any delay line, the most important setting is the delay time. We use a standard floating-point number box for entry, but it is probably most convenient to use the &amp;quot;tap tempo&amp;quot; function that is implemented. By clicking on the tap tempo button four times, you generate a delay time that will match your taps.&lt;br /&gt;
&lt;br /&gt;
The tap tempo function is provided by the taptempo abstraction at the top level of the patch. It counts four incoming bang messages, determines the three intervals between the taps, takes the average and uses that for the tempo calculation. Since it is assumed that we are tapping quarter notes, but want to use a four bar measure, the result is multiplied by four to give us a delay time value. This is an area where you might want to modify the function to meet your needs – if you really want to have the delay run at the rate you tapped, you can remove the [* 4] object at the end of the processing chain.&lt;br /&gt;
&lt;br /&gt;
The basic delay design, as found in the loop_handler subpatcher, is very similar to the layout of the modulating delay. The few tweaks provided are there to support the looping functions. First, when the &amp;quot;Freeze&amp;quot; button is &amp;quot;on&amp;quot;, the feedback is switched to 100% feedback. This gives us a standard looping function. The feedback loop has a lowpass filter in it, which will change the audio in the loop if it is not fully open. The &amp;quot;Input Active&amp;quot; button is very important – it determines if the input signal is sent into the delay path. If it is off, the only output of the delay line is whatever is currently playing – if the delay is &amp;quot;frozen&amp;quot;, you will hear the loop, while with freeze off you will only hear the remaining contents of the loop line feedback. What is cool about this is that, when you freeze the delay line, you can still overlay audio parts onto the loop – giving you sound-on-sound overdubbing.&lt;br /&gt;
&lt;br /&gt;
I've also implemented a click track that cycles at the same speed as the delay time. This way, if you want to work up some one-bar loops, you can hear the timing (in quarter note click) even before you begin recording. Most of these concepts are classic delay techniques, but this sort of looping processor is exactly why many people first get into Max/MSP. Even if you aren't into guitar processing per se, you may find this looping delay system can jump-start your Max experiments.&lt;br /&gt;
&lt;br /&gt;
==Reverb==&lt;br /&gt;
&lt;br /&gt;
What would an effects processing rig be without a reverb? As is typical for any processing rack, I've installed a reverb as the last effect in the system – this way, we will get consistant reverb from both our looped and our live guitar lines. To provide reverb, I've gone to a third-party external object: Nathan Wolek's &amp;lt;strong&amp;gt;gverb~&amp;lt;/strong&amp;gt;. I happen to like the sound of it well enough, and I've wrapped it up in another abstraction so I can replace it in the future (if I decide to do that).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;img&amp;gt;http://1cyjknyddcx62agyb002-web-assets.s3.amazonaws.com/4-Reverb_HandlerB.jpg&amp;lt;/img&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you look into the subpatcher reverb_handler, you'll see that I expose the reverb time control to the top-level patch, but I also provide a reverb mix control that uses the pan2 abstraction found in Max's examples folder. This gives me a decent equal power pan – but why would I need to pan? In fact, I don't; but I can use them as equal power mixers as well. By using only one output of the panner, and reverse panning the live sound, I can get a decent mixing function will little effort. This may not be the most efficient processing stream, but it sure was easy to implement!&lt;br /&gt;
&lt;br /&gt;
===And a Limiter at the end…===&lt;br /&gt;
&lt;br /&gt;
Finally, to make sure everything stays under control, I've added a limiter to the end of the processing chain.  I'm using the &amp;lt;strong&amp;gt;omx.peaklim~&amp;lt;/strong&amp;gt; object, which implements a good quality limiter. The parameters for this object are a little weird, so after some experimenting, I found a set that worked for me. These are loadbang'd into the object during startup, and never change. I also reconfigured the output section of the Presentation Mode to make everything fit a little better, but the functionality should all be familiar from previous weeks' articles.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;img&amp;gt;http://1cyjknyddcx62agyb002-web-assets.s3.amazonaws.com/4-Limiter_HandlerB.jpg&amp;lt;/img&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Conclusion==&lt;br /&gt;
&lt;br /&gt;
This is the conclusion of new module additions, but far from the conclusion of this series. For my money, some of the most important information will be found in our next article, where we will cover preset management ('cuz I don't want to be mousing too much on-stage) and MIDI parameter controls (using my FCB-1010 foot controller). Get familiar with our new modules, and prepare for a big finale with our next Guitar Processing entry!&lt;/div&gt;</summary>
		<author><name>Gtaylor@rtqe.net</name></author>	</entry>

	<entry>
		<id>http://cycling74.com/wiki/index.php?title=Max_Guitar_Processor,_Part_5</id>
		<title>Max Guitar Processor, Part 5</title>
		<link rel="alternate" type="text/html" href="http://cycling74.com/wiki/index.php?title=Max_Guitar_Processor,_Part_5"/>
				<updated>2013-02-06T19:38:11Z</updated>
		
		<summary type="html">&lt;p&gt;Gtaylor@rtqe.net: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;In this, the final episode of our guitar processing extravaganza, we are going to step away from making effects and focus on performance support. For a system as complicated as this, performance support means two things: patch storage and realtime control. Thus, we will learn to create a preset system and manipulate the various on-screen controls with an inexpensive MIDI footpedal system.&lt;br /&gt;
&lt;br /&gt;
[http://1cyjknyddcx62agyb002-web-assets.s3.amazonaws.com/GtrProc-5.maxpat.zip Download the patch used in this tutorial].&lt;br /&gt;
&lt;br /&gt;
===Tutorials in this series:===&lt;br /&gt;
&lt;br /&gt;
* [[Max_Guitar_Processor,_Part_1|Part 1]]&lt;br /&gt;
* [[Max_Guitar_Processor,_Part_2|Part 2]]&lt;br /&gt;
* [[Max_Guitar_Processor,_Part_3|Part 3]]&lt;br /&gt;
* [[Max_Guitar_Processor,_Part_4|Part 4]]&lt;br /&gt;
* [[Max_Guitar_Processor,_Part_5|Part 5]]&lt;br /&gt;
&lt;br /&gt;
==Preset Handling==&lt;br /&gt;
&lt;br /&gt;
The &amp;quot;pattr&amp;quot; objects manage the basics of preset handling for complex patches. This subsystem revolves around an object called pattr, which maintains the state of a control and allows it to be saved or remotely controlled. In our patch, we won't use the &amp;lt;strong&amp;gt;pattr&amp;lt;/strong&amp;gt; object directly; rather, we will use the &amp;lt;strong&amp;gt;autopattr&amp;lt;/strong&amp;gt; object (which creates a virtual pattr for all named objects) and the &amp;lt;strong&amp;gt;pattrstorage&amp;lt;/strong&amp;gt; object (which provides for preset storage and remote dispatching).&lt;br /&gt;
&lt;br /&gt;
In order to make &amp;lt;strong&amp;gt;autopattr&amp;lt;/strong&amp;gt; work, we need to name all of the controls that we want maintained by the pattr system and we also must make sure that controls we want left &amp;quot;untouched&amp;quot; are unnamed. If you select a control and bring up the Object Inspector, you will see that I've named all of the appropriate controls, using a naming convention that identifies the module and control function for each UI element.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;img&amp;gt;http://1cyjknyddcx62agyb002-web-assets.s3.amazonaws.com/5-InspectorB.jpg&amp;lt;/img&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In addition to naming all of the controls (so they can be seen by &amp;lt;strong&amp;gt;autopattr&amp;lt;/strong&amp;gt;), I've also added a &amp;lt;strong&amp;gt;textedit&amp;lt;/strong&amp;gt; object that will be used as a preset name. This &amp;quot;no-nothing&amp;quot; field isn't connected to anything, but it is named – therefore acting as a place to put our patch name. Gotta have a patch name…&lt;br /&gt;
&lt;br /&gt;
Once the &amp;lt;strong&amp;gt;autopattr&amp;lt;/strong&amp;gt; object is in place, we also need to handle the selection and storage of preset data.  That is what the &amp;lt;strong&amp;gt;pattrstorage&amp;lt;/strong&amp;gt; object does. We can use a &amp;lt;strong&amp;gt;number box&amp;lt;/strong&amp;gt; (in this case, with an up/down control) to select patch slots, and create messages that will store the current settings as a preset. We also need to add controls for saving and restoring the contents to a file. With remarkably little patching, we've created a complete device preset system.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;img&amp;gt;http://1cyjknyddcx62agyb002-web-assets.s3.amazonaws.com/5-MIDI_HandlerB.jpg&amp;lt;/img&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==MIDI Control==&lt;br /&gt;
&lt;br /&gt;
Another important aspect to a usable live guitar rig is MIDI control – specifically, control from a MIDI pedal board. I happen to have a Behringer FCB1010 MIDI Foot Controller, and I've integrated its use into this custom patch. I've created a simple set of functions to create a list of MIDI inputs and to select a set of control functions, then manage the MIDI input within the subpatcher called midi_handler.&lt;br /&gt;
&lt;br /&gt;
Incoming MIDI information is parsed (using the midiparse object), with program changes used to set the current preset slot. In addition, I use the program change command to act as a tap tempo button, since I have set the FCB1010 to produce the appropriate messages.&lt;br /&gt;
&lt;br /&gt;
The most important section of this patch, however, is the routing of MIDI control messages. I have a subpatch that compares incoming MIDI CC messages with our selected controller numbers, and only outputs valid control messages. This is then sent to a gate object, which routes the value to the correct message box (and, in some cases, a scale object that scales the values). These message boxes prepend the pattr name of a control to the value, then send this set back to pattrstorage.&lt;br /&gt;
&lt;br /&gt;
The result is an automatic update to the control, based on pattrstorage's message handling! This is a little known way of controlling pattr'd controls; we use pattrstorage as a &amp;quot;dispatcher&amp;quot; of messages, and let it update the control (and the current patch setting).&lt;br /&gt;
&lt;br /&gt;
One thing to watch out for, though, is that these changes overwrite the current setting in the pattrstorage preset slot. So, if you load a preset file, change a setting with the foot pedal, then save the preset file, your changes will become the new setting for that control. It's a good idea to always review your current patch when working with pattrstorage, and to separate preset creation from live performance!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;img&amp;gt;http://1cyjknyddcx62agyb002-web-assets.s3.amazonaws.com/gtr5-fullimage.jpg&amp;lt;/img&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Conclusion==&lt;br /&gt;
&lt;br /&gt;
I hope that this series have been inspirational to you. The design and execution of the final patch is particular to my performance needs, but should be easy enough to modify into a system that will work for you. I've included a file (mypresets.xml) with a few of the preset I use with this rig – you may want to start your customization by making presets of your own. But best result would be for you to take this patch, rip it apart, and create your dream guitar processor!&lt;br /&gt;
&lt;br /&gt;
Thanks for following the series, and feel free to email me with any questions or comments: &amp;lt;a href=&amp;quot;mailto:ddg@cycling74.com&amp;quot;&amp;gt;ddg@cycling74.com&amp;lt;/a&amp;gt;.  Hope to hear from you soon!&amp;lt;/div&amp;gt;&lt;/div&gt;</summary>
		<author><name>Gtaylor@rtqe.net</name></author>	</entry>

	<entry>
		<id>http://cycling74.com/wiki/index.php?title=Max_Guitar_Processor,_Part_5</id>
		<title>Max Guitar Processor, Part 5</title>
		<link rel="alternate" type="text/html" href="http://cycling74.com/wiki/index.php?title=Max_Guitar_Processor,_Part_5"/>
				<updated>2013-02-06T18:42:04Z</updated>
		
		<summary type="html">&lt;p&gt;Gtaylor@rtqe.net: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;In this, the final episode of our guitar processing extravaganza, we are going to step away from making effects and focus on performance support. For a system as complicated as this, performance support means two things: patch storage and realtime control. Thus, we will learn to create a preset system and manipulate the various on-screen controls with an inexpensive MIDI footpedal system.&lt;br /&gt;
&lt;br /&gt;
[http://1cyjknyddcx62agyb002-web-assets.s3.amazonaws.com/GtrProc-5.maxpat.zip Download the patch used in this tutorial].&lt;br /&gt;
&lt;br /&gt;
===Tutorials in this series:===&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;http://cycling74.com/2008/07/28/max-5-guitar-processor-part-1/&amp;quot;&amp;gt;Part 1&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;http://cycling74.com/2008/09/03/max-5-guitar-processor-part-2/&amp;quot;&amp;gt;Part 2&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;http://cycling74.com/2008/11/25/max-5-guitar-processor-part-3/&amp;quot;&amp;gt;Part 3&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;http://cycling74.com/2009/01/27/max-5-guitar-processor-part-4/&amp;quot;&amp;gt;Part 4&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;http://cycling74.com/2009/01/29/max-5-guitar-processor-part-5/&amp;quot;&amp;gt;Part 5&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
==Preset Handling==&lt;br /&gt;
&lt;br /&gt;
The &amp;quot;pattr&amp;quot; objects manage the basics of preset handling for complex patches. This subsystem revolves around an object called pattr, which maintains the state of a control and allows it to be saved or remotely controlled. In our patch, we won't use the &amp;lt;strong&amp;gt;pattr&amp;lt;/strong&amp;gt; object directly; rather, we will use the &amp;lt;strong&amp;gt;autopattr&amp;lt;/strong&amp;gt; object (which creates a virtual pattr for all named objects) and the &amp;lt;strong&amp;gt;pattrstorage&amp;lt;/strong&amp;gt; object (which provides for preset storage and remote dispatching).&lt;br /&gt;
&lt;br /&gt;
In order to make &amp;lt;strong&amp;gt;autopattr&amp;lt;/strong&amp;gt; work, we need to name all of the controls that we want maintained by the pattr system and we also must make sure that controls we want left &amp;quot;untouched&amp;quot; are unnamed. If you select a control and bring up the Object Inspector, you will see that I've named all of the appropriate controls, using a naming convention that identifies the module and control function for each UI element.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;img&amp;gt;http://1cyjknyddcx62agyb002-web-assets.s3.amazonaws.com/5-InspectorB.jpg&amp;lt;/img&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In addition to naming all of the controls (so they can be seen by &amp;lt;strong&amp;gt;autopattr&amp;lt;/strong&amp;gt;), I've also added a &amp;lt;strong&amp;gt;textedit&amp;lt;/strong&amp;gt; object that will be used as a preset name. This &amp;quot;no-nothing&amp;quot; field isn't connected to anything, but it is named – therefore acting as a place to put our patch name. Gotta have a patch name…&lt;br /&gt;
&lt;br /&gt;
Once the &amp;lt;strong&amp;gt;autopattr&amp;lt;/strong&amp;gt; object is in place, we also need to handle the selection and storage of preset data.  That is what the &amp;lt;strong&amp;gt;pattrstorage&amp;lt;/strong&amp;gt; object does. We can use a &amp;lt;strong&amp;gt;number box&amp;lt;/strong&amp;gt; (in this case, with an up/down control) to select patch slots, and create messages that will store the current settings as a preset. We also need to add controls for saving and restoring the contents to a file. With remarkably little patching, we've created a complete device preset system.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;img&amp;gt;http://1cyjknyddcx62agyb002-web-assets.s3.amazonaws.com/5-MIDI_HandlerB.jpg&amp;lt;/img&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==MIDI Control==&lt;br /&gt;
&lt;br /&gt;
Another important aspect to a usable live guitar rig is MIDI control – specifically, control from a MIDI pedal board. I happen to have a Behringer FCB1010 MIDI Foot Controller, and I've integrated its use into this custom patch. I've created a simple set of functions to create a list of MIDI inputs and to select a set of control functions, then manage the MIDI input within the subpatcher called midi_handler.&lt;br /&gt;
&lt;br /&gt;
Incoming MIDI information is parsed (using the midiparse object), with program changes used to set the current preset slot. In addition, I use the program change command to act as a tap tempo button, since I have set the FCB1010 to produce the appropriate messages.&lt;br /&gt;
&lt;br /&gt;
The most important section of this patch, however, is the routing of MIDI control messages. I have a subpatch that compares incoming MIDI CC messages with our selected controller numbers, and only outputs valid control messages. This is then sent to a gate object, which routes the value to the correct message box (and, in some cases, a scale object that scales the values). These message boxes prepend the pattr name of a control to the value, then send this set back to pattrstorage.&lt;br /&gt;
&lt;br /&gt;
The result is an automatic update to the control, based on pattrstorage's message handling! This is a little known way of controlling pattr'd controls; we use pattrstorage as a &amp;quot;dispatcher&amp;quot; of messages, and let it update the control (and the current patch setting).&lt;br /&gt;
&lt;br /&gt;
One thing to watch out for, though, is that these changes overwrite the current setting in the pattrstorage preset slot. So, if you load a preset file, change a setting with the foot pedal, then save the preset file, your changes will become the new setting for that control. It's a good idea to always review your current patch when working with pattrstorage, and to separate preset creation from live performance!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;img&amp;gt;http://1cyjknyddcx62agyb002-web-assets.s3.amazonaws.com/gtr5-fullimage.jpg&amp;lt;/img&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Conclusion==&lt;br /&gt;
&lt;br /&gt;
I hope that this series have been inspirational to you. The design and execution of the final patch is particular to my performance needs, but should be easy enough to modify into a system that will work for you. I've included a file (mypresets.xml) with a few of the preset I use with this rig – you may want to start your customization by making presets of your own. But best result would be for you to take this patch, rip it apart, and create your dream guitar processor!&lt;br /&gt;
&lt;br /&gt;
Thanks for following the series, and feel free to email me with any questions or comments: &amp;lt;a href=&amp;quot;mailto:ddg@cycling74.com&amp;quot;&amp;gt;ddg@cycling74.com&amp;lt;/a&amp;gt;.  Hope to hear from you soon!&amp;lt;/div&amp;gt;&lt;/div&gt;</summary>
		<author><name>Gtaylor@rtqe.net</name></author>	</entry>

	<entry>
		<id>http://cycling74.com/wiki/index.php?title=Max_Guitar_Processor,_Part_5</id>
		<title>Max Guitar Processor, Part 5</title>
		<link rel="alternate" type="text/html" href="http://cycling74.com/wiki/index.php?title=Max_Guitar_Processor,_Part_5"/>
				<updated>2013-02-06T18:41:05Z</updated>
		
		<summary type="html">&lt;p&gt;Gtaylor@rtqe.net: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;In this, the final episode of our guitar processing extravaganza, we are going to step away from making effects and focus on performance support. For a system as complicated as this, performance support means two things: patch storage and realtime control. Thus, we will learn to create a preset system and manipulate the various on-screen controls with an inexpensive MIDI footpedal system.&lt;br /&gt;
&lt;br /&gt;
[http://1cyjknyddcx62agyb002-web-assets.s3.amazonaws.com/GtrProc-5.maxpat.zip Download the patch used in this tutorial].&lt;br /&gt;
&lt;br /&gt;
===Tutorials in this series:===&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;http://cycling74.com/2008/07/28/max-5-guitar-processor-part-1/&amp;quot;&amp;gt;Part 1&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;http://cycling74.com/2008/09/03/max-5-guitar-processor-part-2/&amp;quot;&amp;gt;Part 2&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;http://cycling74.com/2008/11/25/max-5-guitar-processor-part-3/&amp;quot;&amp;gt;Part 3&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;http://cycling74.com/2009/01/27/max-5-guitar-processor-part-4/&amp;quot;&amp;gt;Part 4&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;http://cycling74.com/2009/01/29/max-5-guitar-processor-part-5/&amp;quot;&amp;gt;Part 5&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
==Preset Handling==&lt;br /&gt;
&lt;br /&gt;
The &amp;quot;pattr&amp;quot; objects manage the basics of preset handling for complex patches. This subsystem revolves around an object called pattr, which maintains the state of a control and allows it to be saved or remotely controlled. In our patch, we won't use the &amp;lt;strong&amp;gt;pattr&amp;lt;/strong&amp;gt; object directly; rather, we will use the &amp;lt;strong&amp;gt;autopattr&amp;lt;/strong&amp;gt; object (which creates a virtual pattr for all named objects) and the &amp;lt;strong&amp;gt;pattrstorage&amp;lt;/strong&amp;gt; object (which provides for preset storage and remote dispatching).&lt;br /&gt;
&lt;br /&gt;
In order to make &amp;lt;strong&amp;gt;autopattr&amp;lt;/strong&amp;gt; work, we need to name all of the controls that we want maintained by the pattr system and we also must make sure that controls we want left &amp;quot;untouched&amp;quot; are unnamed. If you select a control and bring up the Object Inspector, you will see that I've named all of the appropriate controls, using a naming convention that identifies the module and control function for each UI element.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;img&amp;gt;http://1cyjknyddcx62agyb002-web-assets.s3.amazonaws.com/5-InspectorB.jpg&amp;lt;/img&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In addition to naming all of the controls (so they can be seen by &amp;lt;strong&amp;gt;autopattr&amp;lt;/strong&amp;gt;), I've also added a &amp;lt;strong&amp;gt;textedit&amp;lt;/strong&amp;gt; object that will be used as a preset name. This &amp;quot;no-nothing&amp;quot; field isn't connected to anything, but it is named – therefore acting as a place to put our patch name. Gotta have a patch name…&lt;br /&gt;
&lt;br /&gt;
Once the &amp;lt;strong&amp;gt;autopattr&amp;lt;/strong&amp;gt; object is in place, we also need to handle the selection and storage of preset data.  That is what the &amp;lt;strong&amp;gt;pattrstorage&amp;lt;/strong&amp;gt; object does. We can use a &amp;lt;strong&amp;gt;number box&amp;lt;/strong&amp;gt; (in this case, with an up/down control) to select patch slots, and create messages that will store the current settings as a preset. We also need to add controls for saving and restoring the contents to a file. With remarkably little patching, we've created a complete device preset system.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;img&amp;gt;http://1cyjknyddcx62agyb002-web-assets.s3.amazonaws.com/5-MIDI_HandlerB&amp;lt;/img&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==MIDI Control==&lt;br /&gt;
&lt;br /&gt;
Another important aspect to a usable live guitar rig is MIDI control – specifically, control from a MIDI pedal board. I happen to have a Behringer FCB1010 MIDI Foot Controller, and I've integrated its use into this custom patch. I've created a simple set of functions to create a list of MIDI inputs and to select a set of control functions, then manage the MIDI input within the subpatcher called midi_handler.&lt;br /&gt;
&lt;br /&gt;
Incoming MIDI information is parsed (using the midiparse object), with program changes used to set the current preset slot. In addition, I use the program change command to act as a tap tempo button, since I have set the FCB1010 to produce the appropriate messages.&lt;br /&gt;
&lt;br /&gt;
The most important section of this patch, however, is the routing of MIDI control messages. I have a subpatch that compares incoming MIDI CC messages with our selected controller numbers, and only outputs valid control messages. This is then sent to a gate object, which routes the value to the correct message box (and, in some cases, a scale object that scales the values). These message boxes prepend the pattr name of a control to the value, then send this set back to pattrstorage.&lt;br /&gt;
&lt;br /&gt;
The result is an automatic update to the control, based on pattrstorage's message handling! This is a little known way of controlling pattr'd controls; we use pattrstorage as a &amp;quot;dispatcher&amp;quot; of messages, and let it update the control (and the current patch setting).&lt;br /&gt;
&lt;br /&gt;
One thing to watch out for, though, is that these changes overwrite the current setting in the pattrstorage preset slot. So, if you load a preset file, change a setting with the foot pedal, then save the preset file, your changes will become the new setting for that control. It's a good idea to always review your current patch when working with pattrstorage, and to separate preset creation from live performance!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;img&amp;gt;http://1cyjknyddcx62agyb002-web-assets.s3.amazonaws.com/gtr5-fullimage.jpg&amp;lt;/img&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Conclusion==&lt;br /&gt;
&lt;br /&gt;
I hope that this series have been inspirational to you. The design and execution of the final patch is particular to my performance needs, but should be easy enough to modify into a system that will work for you. I've included a file (mypresets.xml) with a few of the preset I use with this rig – you may want to start your customization by making presets of your own. But best result would be for you to take this patch, rip it apart, and create your dream guitar processor!&lt;br /&gt;
&lt;br /&gt;
Thanks for following the series, and feel free to email me with any questions or comments: &amp;lt;a href=&amp;quot;mailto:ddg@cycling74.com&amp;quot;&amp;gt;ddg@cycling74.com&amp;lt;/a&amp;gt;.  Hope to hear from you soon!&amp;lt;/div&amp;gt;&lt;/div&gt;</summary>
		<author><name>Gtaylor@rtqe.net</name></author>	</entry>

	<entry>
		<id>http://cycling74.com/wiki/index.php?title=Max_Guitar_Processor,_Part_4</id>
		<title>Max Guitar Processor, Part 4</title>
		<link rel="alternate" type="text/html" href="http://cycling74.com/wiki/index.php?title=Max_Guitar_Processor,_Part_4"/>
				<updated>2013-02-06T18:24:27Z</updated>
		
		<summary type="html">&lt;p&gt;Gtaylor@rtqe.net: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;At this point, we have a pretty useful guitar processing &amp;quot;rack&amp;quot;, but it could use a little spice. This spice will come from two additional processors: a looping delay unit, and a basic reverb system. Also, to help keep the output useful, we will drop a limiter on the back end of the entire rig.&lt;br /&gt;
&lt;br /&gt;
[http://1cyjknyddcx62agyb002-web-assets.s3.amazonaws.com/GtrProc-4.maxpat.zip Download the patch used in this tutorial].&lt;br /&gt;
&lt;br /&gt;
===Tutorials in this series:===&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;http://cycling74.com/2008/07/28/max-5-guitar-processor-part-1/&amp;quot;&amp;gt;Part 1&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;http://cycling74.com/2008/09/03/max-5-guitar-processor-part-2/&amp;quot;&amp;gt;Part 2&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;http://cycling74.com/2008/11/25/max-5-guitar-processor-part-3/&amp;quot;&amp;gt;Part 3&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;http://cycling74.com/2009/01/27/max-5-guitar-processor-part-4/&amp;quot;&amp;gt;Part 4&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;http://cycling74.com/2009/01/29/max-5-guitar-processor-part-5/&amp;quot;&amp;gt;Part 5&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Looping Delay==&lt;br /&gt;
&lt;br /&gt;
The first processor we will add is an alternative version of the delay line – one that provides tap tempo, looping and sound-on-sound functionality. Unlike our previous delay module, this one will not provide modulation (for flanging and pitch shifting effects); rather it will be focused on capturing a loop, and allowing overdubs of additional sounds.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;img&amp;gt;http://1cyjknyddcx62agyb002-web-assets.s3.amazonaws.com/4-Tap_TempoB.jpg&amp;lt;/img&amp;gt;&lt;br /&gt;
&lt;br /&gt;
As with any delay line, the most important setting is the delay time. We use a standard floating-point number box for entry, but it is probably most convenient to use the &amp;quot;tap tempo&amp;quot; function that is implemented. By clicking on the tap tempo button four times, you generate a delay time that will match your taps.&lt;br /&gt;
&lt;br /&gt;
The tap tempo function is provided by the taptempo abstraction at the top level of the patch. It counts four incoming bang messages, determines the three intervals between the taps, takes the average and uses that for the tempo calculation. Since it is assumed that we are tapping quarter notes, but want to use a four bar measure, the result is multiplied by four to give us a delay time value. This is an area where you might want to modify the function to meet your needs – if you really want to have the delay run at the rate you tapped, you can remove the [* 4] object at the end of the processing chain.&lt;br /&gt;
&lt;br /&gt;
The basic delay design, as found in the loop_handler subpatcher, is very similar to the layout of the modulating delay. The few tweaks provided are there to support the looping functions. First, when the &amp;quot;Freeze&amp;quot; button is &amp;quot;on&amp;quot;, the feedback is switched to 100% feedback. This gives us a standard looping function. The feedback loop has a lowpass filter in it, which will change the audio in the loop if it is not fully open. The &amp;quot;Input Active&amp;quot; button is very important – it determines if the input signal is sent into the delay path. If it is off, the only output of the delay line is whatever is currently playing – if the delay is &amp;quot;frozen&amp;quot;, you will hear the loop, while with freeze off you will only hear the remaining contents of the loop line feedback. What is cool about this is that, when you freeze the delay line, you can still overlay audio parts onto the loop – giving you sound-on-sound overdubbing.&lt;br /&gt;
&lt;br /&gt;
I've also implemented a click track that cycles at the same speed as the delay time. This way, if you want to work up some one-bar loops, you can hear the timing (in quarter note click) even before you begin recording. Most of these concepts are classic delay techniques, but this sort of looping processor is exactly why many people first get into Max/MSP. Even if you aren't into guitar processing per se, you may find this looping delay system can jump-start your Max experiments.&lt;br /&gt;
&lt;br /&gt;
==Reverb==&lt;br /&gt;
&lt;br /&gt;
What would an effects processing rig be without a reverb? As is typical for any processing rack, I've installed a reverb as the last effect in the system – this way, we will get consistant reverb from both our looped and our live guitar lines. To provide reverb, I've gone to a third-party external object: Nathan Wolek's &amp;lt;strong&amp;gt;gverb~&amp;lt;/strong&amp;gt;. I happen to like the sound of it well enough, and I've wrapped it up in another abstraction so I can replace it in the future (if I decide to do that).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;img&amp;gt;http://1cyjknyddcx62agyb002-web-assets.s3.amazonaws.com/4-Reverb_HandlerB.jpg&amp;lt;/img&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you look into the subpatcher reverb_handler, you'll see that I expose the reverb time control to the top-level patch, but I also provide a reverb mix control that uses the pan2 abstraction found in Max's examples folder. This gives me a decent equal power pan – but why would I need to pan? In fact, I don't; but I can use them as equal power mixers as well. By using only one output of the panner, and reverse panning the live sound, I can get a decent mixing function will little effort. This may not be the most efficient processing stream, but it sure was easy to implement!&lt;br /&gt;
&lt;br /&gt;
===And a Limiter at the end…===&lt;br /&gt;
&lt;br /&gt;
Finally, to make sure everything stays under control, I've added a limiter to the end of the processing chain.  I'm using the &amp;lt;strong&amp;gt;omx.peaklim~&amp;lt;/strong&amp;gt; object, which implements a good quality limiter. The parameters for this object are a little weird, so after some experimenting, I found a set that worked for me. These are loadbang'd into the object during startup, and never change. I also reconfigured the output section of the Presentation Mode to make everything fit a little better, but the functionality should all be familiar from previous weeks' articles.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;img&amp;gt;http://1cyjknyddcx62agyb002-web-assets.s3.amazonaws.com/4-Limiter_HandlerB.jpg&amp;lt;/img&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Conclusion==&lt;br /&gt;
&lt;br /&gt;
This is the conclusion of new module additions, but far from the conclusion of this series. For my money, some of the most important information will be found in our next article, where we will cover preset management ('cuz I don't want to be mousing too much on-stage) and MIDI parameter controls (using my FCB-1010 foot controller). Get familiar with our new modules, and prepare for a big finale with our next Guitar Processing entry!&lt;/div&gt;</summary>
		<author><name>Gtaylor@rtqe.net</name></author>	</entry>

	<entry>
		<id>http://cycling74.com/wiki/index.php?title=Max_Guitar_Processor,_Part_3</id>
		<title>Max Guitar Processor, Part 3</title>
		<link rel="alternate" type="text/html" href="http://cycling74.com/wiki/index.php?title=Max_Guitar_Processor,_Part_3"/>
				<updated>2013-02-06T17:56:18Z</updated>
		
		<summary type="html">&lt;p&gt;Gtaylor@rtqe.net: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;In the last article, we added some basic tonal effects: distortion/overdrive and EQ/filtering. This time, we will expand our virtual effects rack to include both a phase shifter and a full-featured modulating digital delay. As we add these effects, you will begin to see why a DIY effects system can trump any commercial product.&lt;br /&gt;
&lt;br /&gt;
[http://1cyjknyddcx62agyb002-web-assets.s3.amazonaws.com/GtrProc-3.maxpat.zip Download the patch used in this tutorial].&lt;br /&gt;
&lt;br /&gt;
===Tutorials in this series:===&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;http://cycling74.com/2008/07/28/max-5-guitar-processor-part-1/&amp;quot;&amp;gt;Part 1&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;http://cycling74.com/2008/09/03/max-5-guitar-processor-part-2/&amp;quot;&amp;gt;Part 2&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;http://cycling74.com/2008/11/25/max-5-guitar-processor-part-3/&amp;quot;&amp;gt;Part 3&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;http://cycling74.com/2009/01/27/max-5-guitar-processor-part-4/&amp;quot;&amp;gt;Part 4&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;http://cycling74.com/2009/01/29/max-5-guitar-processor-part-5/&amp;quot;&amp;gt;Part 5&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
==Adding a phase shifter==&lt;br /&gt;
&lt;br /&gt;
The first module I’ve added is a phase shifter. It’s a full-featured implementation, featuring a variable number of phase shift stages and a frequency spread to provide a more complicated sound. Since this is obviously a well-considered piece of work, I surely had to steal from someplace, right? Of course! Luckily, I have access to some of the Pluggo source patches, and I’ve always liked this particular phase shifter’s sound. So I opened up the patch and copied the whole thing! By placing it in a subpatcher (phasor_handler), I keep it out of my hair at the top level. About all that I added to the patch is some scaling of the inputs to help keep the control ranges sensible.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;img&amp;gt;http://1cyjknyddcx62agyb002-web-assets.s3.amazonaws.com/3-Phasor_HandlerB.jpg&amp;lt;/img&amp;gt;&lt;br /&gt;
&lt;br /&gt;
One of the interesting aspects of this patch is the use of the phaseshift~ object to provide the effect. Normally, a phase shift is almost imperceptible, but when the frequency is moving a classic phase shift sound is created. Stacking a few of these on top of each other (with the serial application of the onestage subpatcher) allows us to vary the depth of the effect by adding (or subtracting) phase shifting stages.&lt;br /&gt;
&lt;br /&gt;
==The modulating delay==&lt;br /&gt;
&lt;br /&gt;
The next module is a digital delay, complete with modulation, feedback (with filtering) and stereo enhancement. This is also the place where we go from mono processing to stereo, allowing each output to have a different (but related) delay time. The key to this is the “RHS Factor”, which determines the Right Hand Side’s delay time relative to the left side. Modest difference (like .98) will provide subtle depth, while more radical settings (like .5 or 1.5) will give rhythmic ping-pong echoes.&lt;br /&gt;
&lt;br /&gt;
If we switch to the Patching Mode and open the delay_handler subpatcher, we see that most of the work is being done by a pair of tapin~/tapout~ objects and some scaling functions. Creating the modulation – which allows this module to perform flanging, chorusing and vibrato effects – is accomplished by varying the delay time. We use a cycle~ object to drive the change; but you need to note that the delay time is consistently maintained as a signal routing, rather than an event routing. This causes the delay time to change without interruption, giving us smooth delay time transitions that can be used to our advantage.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;img&amp;gt;http://1cyjknyddcx62agyb002-web-assets.s3.amazonaws.com/3-Delay_HandlerB.jpg&amp;lt;/img&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Dealing with the details==&lt;br /&gt;
&lt;br /&gt;
As you can see in the patching view, we’ve continued our patching patterns by creating a master patch for each effect module, with controls maintained at the top-level patch. If you switch to the Presentation Mode, you will see that we’ve also maintained another pattern: using knobs (the dial object) for controls that are best set by ear, and number boxes for controls that may need precise settings. For most people, a screen full of number boxes is confusing and intimidating – and this becomes worse when you are using a patch or program onstage. By limiting the use of number boxes to those controls that will specifically need them, you can reduce the amount of stress experienced when working with a patch.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;img&amp;gt;http://1cyjknyddcx62agyb002-web-assets.s3.amazonaws.com/3-Patch_LayoutB.jpg&amp;lt;/img&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Since the phase shifter and delay modules take up one full “rack space” in Presentation Mode, we also want to put another level meter at the end of the rack. However, since we now have split the sound into stereo, we need to use two meters instead. This gives us a quick visual to make sure that neither the phase shifter nor the delay unit settings are causing output distortion.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;img&amp;gt;http://1cyjknyddcx62agyb002-web-assets.s3.amazonaws.com/GTR-3-1.jpg&amp;lt;/img&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Conclusion==&lt;br /&gt;
&lt;br /&gt;
At this point, we’ve created a credible guitar processor with the most common effects in place. In our next article, we will dive into less familiar territory by taking on looping and reverb. See you then!&lt;/div&gt;</summary>
		<author><name>Gtaylor@rtqe.net</name></author>	</entry>

	<entry>
		<id>http://cycling74.com/wiki/index.php?title=Max_Guitar_Processor,_Part_2</id>
		<title>Max Guitar Processor, Part 2</title>
		<link rel="alternate" type="text/html" href="http://cycling74.com/wiki/index.php?title=Max_Guitar_Processor,_Part_2"/>
				<updated>2013-02-06T17:45:56Z</updated>
		
		<summary type="html">&lt;p&gt;Gtaylor@rtqe.net: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;In the last article, we did a lot of setup - we got input/output handling in place, and added a compressor to the processing chain as an example of an “effect module”. In this article, we will continue adding effects, including a dual overdrive module and a three-stage EQ/Filter module. With these additions we will further explore Max 5’s user interface options, as well as taking a look at some of the “tweaks” that make Max/MSP functions a little more guitar-faithful.&lt;br /&gt;
&lt;br /&gt;
[http://1cyjknyddcx62agyb002-web-assets.s3.amazonaws.com/GtrProc-2.maxpat.zip Download the patch used in this tutorial].&lt;br /&gt;
&lt;br /&gt;
===Tutorials in this series:===&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;http://cycling74.com/2008/07/28/max-5-guitar-processor-part-1/&amp;quot;&amp;gt;Part 1&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;http://cycling74.com/2008/09/03/max-5-guitar-processor-part-2/&amp;quot;&amp;gt;Part 2&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;http://cycling74.com/2008/11/25/max-5-guitar-processor-part-3/&amp;quot;&amp;gt;Part 3&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;http://cycling74.com/2009/01/27/max-5-guitar-processor-part-4/&amp;quot;&amp;gt;Part 4&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;http://cycling74.com/2009/01/29/max-5-guitar-processor-part-5/&amp;quot;&amp;gt;Part 5&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
==Adding an Overdrive Section==&lt;br /&gt;
&lt;br /&gt;
First up is an overdrive processor.  I’ve found that the way to get the most variety with this sort of processor is to have two &amp;lt;strong&amp;gt;overdrive~&amp;lt;/strong&amp;gt; objects in series with a lowpass filter between them; the result is a controllable distortion/overdrive capable of some crazy variations. I have, again, encapsulated the overdrive functions in a subpatcher (in this case, called &amp;lt;strong&amp;gt;od_handler&amp;lt;/strong&amp;gt;), which implements the dual &amp;lt;strong&amp;gt;overdrive~&amp;lt;/strong&amp;gt; setup, as well as a &amp;lt;strong&amp;gt;selector~&amp;lt;/strong&amp;gt; that provides the bypass functionality.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;img&amp;gt;http://1cyjknyddcx62agyb002-web-assets.s3.amazonaws.com/OD_HandlerB.jpg&amp;lt;/img&amp;gt;&lt;br /&gt;
&lt;br /&gt;
I’ve also added a level adjustment that allows us to tame the output levels post-overdrive~. This can be very handy, since some of the more extreme overdrive settings can cause high levels (both real and perceived). I’ve also connected a &amp;lt;strong&amp;gt;meter~&amp;lt;/strong&amp;gt; object to the output of the subpatcher, giving me a way to eyeball the output of the compressor-overdrive combination.&lt;br /&gt;
&lt;br /&gt;
==Adding an EQ/Filter==&lt;br /&gt;
&lt;br /&gt;
Next up is the creation of a EQ/Filter modules.  This is going to use the &amp;lt;strong&amp;gt;cascade~&amp;lt;/strong&amp;gt; filter, which is a version of a biquad filter that takes lists of coefficients to create a complex filter curve. In order to control it with simplified controls, we will use a function of the &amp;lt;strong&amp;gt;filtergraph~&amp;lt;/strong&amp;gt; object that converts frequency/level combinations into biquad-type coefficients.&lt;br /&gt;
&lt;br /&gt;
By now, you should be able to see the design pattern in use: I create a subpatcher with the “guts” of the effect module, then attach controls for all of the variable parameters. Open the “filter_handler” subpatcher to examine the DSP funtions used. Most of this subpatcher converts the incoming values into useful frequency and level values, then sending them into &amp;lt;strong&amp;gt;filtergraph~&amp;lt;/strong&amp;gt; objects. I could have just as easily used &amp;lt;strong&amp;gt;filtercoeff~&amp;lt;/strong&amp;gt; objects, but using the &amp;lt;strong&amp;gt;filtergraph~&amp;lt;/strong&amp;gt; lets me see the individual filter settings, helping me verify that the individual filter parameters are being set correctly. The coefficient outputs of the &amp;lt;strong&amp;gt;filtergraph~&amp;lt;/strong&amp;gt; objects are “pak’d” into a list of 15 floating point values (five for each filter), then prepended with the cascade message. This informs connected filter objects that more than one coefficient set will be used to create a complex filter.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;img&amp;gt;http://1cyjknyddcx62agyb002-web-assets.s3.amazonaws.com/Filter_HandlerB.jpg&amp;lt;/img&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This list is now sent to a &amp;lt;strong&amp;gt;cascade~&amp;lt;/strong&amp;gt; object, which implements the equivalent of serial biquad filters that implement the cascaded filter settings. This could just as easily be implemented as several &amp;lt;strong&amp;gt;biquad~&amp;lt;/strong&amp;gt; objects, but using the single &amp;lt;strong&amp;gt;cascade~&amp;lt;/strong&amp;gt; object allows us to keep the signal count down.&lt;br /&gt;
&lt;br /&gt;
An important addition to this subpatcher is filter clearing. Biquad filters are based on delay lines that can occasionally get overloaded. In these cases, the filter is “blown”, and will not produce any output. The easiest way to fix a blown filter is to send it a clear message, but the downside is that it resets all of the filter coefficients, but doesn’t update any of the user interface elements that control the filter. So, in this case, when we receive a message in the “clear filters” inlet, it not only sends a clear message to the cascade object, but also sends a bang to receivers of the “fil_clear” send object.&lt;br /&gt;
&lt;br /&gt;
There is only one receiver of fil_clear: a receive object embedded in the subpatcher called “filter_clearer”. This simply resets all of the user interface elements to default values, providing visual feedback of the filter’s newly cleared state. It is important to implement a function like this whenever you are working with MSP filters, since blowing a filter is a common problem when experimenting with extreme filter settings.&lt;br /&gt;
&lt;br /&gt;
==In Review==&lt;br /&gt;
&lt;br /&gt;
Put the patch into Presentation Mode, and you will see that I’ve reordered the modules to maintain the row-column orientation of the signal flow. I’ve also added level meters at the end of each row. This is something that I’ve learned to do for performance patches - to place meters in strategic places, helping me to see “where” something is wrong when something goes wrong. As this patch develops, we will place a meter at the end of each row, combining useful debugging information with a cool, flashy display.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;img&amp;gt;http://1cyjknyddcx62agyb002-web-assets.s3.amazonaws.com/Screen-1.jpg&amp;lt;/img&amp;gt;&lt;br /&gt;
&lt;br /&gt;
I also decided to make the visual EQ/Filter display very large in Performance Mode. This helps me see the result of subtle changes, and gives a better visual indication in the heat of battle. If you want to create and add modules of your own, you might want to make this part of the patch a little smaller - but be careful, since the EQ module can have a pretty drastic effect on your sound, and you will want as much control as possible.&lt;br /&gt;
&lt;br /&gt;
With the addition of the overdrive and EQ/Filter units, we have created tools to sculpt the sound of the guitar. Next, we will add a few more “effect-y” modules, including a smooth phaser and a modulating delay line. Until then, have fun with our new modules, and try to make some of your own using some of the techniques we’ve developed.&lt;/div&gt;</summary>
		<author><name>Gtaylor@rtqe.net</name></author>	</entry>

	<entry>
		<id>http://cycling74.com/wiki/index.php?title=Max_Guitar_Processor,_Part_1</id>
		<title>Max Guitar Processor, Part 1</title>
		<link rel="alternate" type="text/html" href="http://cycling74.com/wiki/index.php?title=Max_Guitar_Processor,_Part_1"/>
				<updated>2013-02-06T17:30:41Z</updated>
		
		<summary type="html">&lt;p&gt;Gtaylor@rtqe.net: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;In this series of tutorials, I will be building a Max-based guitar processing &amp;quot;rig&amp;quot;, and will give you the opportunity to look over my shoulder as I design and implement this system.&lt;br /&gt;
&lt;br /&gt;
'''''Note:''''' ''You may also be interested in an earlier article which appears on the Cycling '74 website by Andrew Benson and Ben Bracken titled [http://cycling74.com/2008/03/12/expand-your-guitar-vol-1/ Expand Your Guitar], which covers the basics of connecting a guitar to a Max-based processing system, includes a few guitar-oriented effects patches.''&lt;br /&gt;
&lt;br /&gt;
[http://1cyjknyddcx62agyb002-web-assets.s3.amazonaws.com/GtrProc-1.maxpat.zip Download the patch]&lt;br /&gt;
&lt;br /&gt;
===Tutorials in this series===&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;http://cycling74.com/2008/07/28/max-5-guitar-processor-part-1/&amp;quot;&amp;gt;Part 1&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;http://cycling74.com/2008/09/03/max-5-guitar-processor-part-2/&amp;quot;&amp;gt;Part 2&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;http://cycling74.com/2008/11/25/max-5-guitar-processor-part-3/&amp;quot;&amp;gt;Part 3&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;http://cycling74.com/2009/01/27/max-5-guitar-processor-part-4/&amp;quot;&amp;gt;Part 4&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;http://cycling74.com/2009/01/29/max-5-guitar-processor-part-5/&amp;quot;&amp;gt;Part 5&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
==Designing the System==&lt;br /&gt;
The first thing I did was to plan the processing chain that I would create. I wanted a rather typical guitar rig, with the addition of a looping delay line. I decided on the following functional graph:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;img&amp;gt;http://1cyjknyddcx62agyb002-web-assets.s3.amazonaws.com/1-RigDesign.jpg&amp;lt;/img&amp;gt;&lt;br /&gt;
&lt;br /&gt;
I also made a few decisions about general program functionality. Since this will be a stand-alone program/patch, I wouldn't worry about limiting system usage; therefore I wouldn't wrap subpatches inside of &amp;lt;strong&amp;gt;poly~&amp;lt;/strong&amp;gt; objects (to reduce their CPU load when unused). Also, I decided to take full advantage of the Max 5 Presentation Mode layout, allowing me to code in a convenient way and worry about the performance layout in a separate step.&lt;br /&gt;
&lt;br /&gt;
Since I am a dyed-in-the-wool tweaker, I wanted to structure the code in such a way that I could manipulate it easily - even during live performance. This means that I needed to create an easily-to-follow patch that was well-labeled, and I needed to encapsulate at a level conducive to on-the-fly changes.&lt;br /&gt;
&lt;br /&gt;
Finally, in order to build this quickly, I decided to beg, borrow or steal as much of the programming as possible without resorting to the use of VST plug-ins (which would reduce tweak-ability). Throughout these articles, you will see me reuse older code, appropriate from other applications and use third-party objects whenever necessary. I also take full advantage of some design patterns I've developed that allow for quick coding of more complex patch routings.&lt;br /&gt;
&lt;br /&gt;
==Input and Gain Handling==&lt;br /&gt;
&lt;br /&gt;
Since this is a stand-alone patch, we need to control our own input and output. Let's start by creating an input section. If you open the patch [http://1cyjknyddcx62agyb002-web-assets.s3.amazonaws.com/GtrProc-1.maxpat.zip GtrProc-1.maxpat], you will see that I have discrete patch segments that correspond to the individual functions described in my processing graph. Place the patch into Presentation Mode, and you will see that these segments jump into a &amp;quot;rack style&amp;quot; package that is easy to follow during performance.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;img&amp;gt;http://1cyjknyddcx62agyb002-web-assets.s3.amazonaws.com/1-RackLayout.jpg&amp;lt;/img&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Move back into Patching Mode, and look at the top-left section of the patch. It is labeled &amp;quot;Input&amp;quot;, and includes several controls connected to an abstraction named &amp;quot;input_handler&amp;quot;. Double-click on the input_handler subpatcher to see its contents.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;img&amp;gt;http://1cyjknyddcx62agyb002-web-assets.s3.amazonaws.com/1-InputHandler.png&amp;lt;/img&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This subpatch is pretty simple: it contains a number of &amp;lt;strong&amp;gt;adstatus&amp;lt;/strong&amp;gt; objects that allow my controls to display and alter the audio settings used at runtime. The function is similar to using the DSP Status window, but exposes only those items I considered important for realtime performance. Since I don't use the &amp;lt;strong&amp;gt;adstatus&amp;lt;/strong&amp;gt; object very often, I don't know the functional arguments by heart. While I could have used the documentation to learn about the object, I decided to steal the functions from the help patch instead!&lt;br /&gt;
&lt;br /&gt;
By viewing the help patch, I can learn about the function of an object. However, all help patches are also functional Max patches. In this case, I was able to unlock the &amp;lt;strong&amp;gt;adstatus.maxhelp&amp;lt;/strong&amp;gt; patch, copy the functional objects that I needed, then paste them into my subpatcher. By connecting a few inlets and outlets, I'd created the small and efficient input setup handler that I needed.&lt;br /&gt;
&lt;br /&gt;
In addition to setting the DSP Settings, I also want to control gain at this point. This is especially important with an instrument-driven patch, since different input hardware will provide vastly different levels. In my case, I may be using an IK Multimedia StealthPlug, a mixer with an audio interface, or even a direct connection into my Mac's audio input - so I want good control of my front-end gain. I did this by adding a &amp;lt;strong&amp;gt;*~&amp;lt;/strong&amp;gt; object to the input section, then routed the input into this control. By using a scale control, I'm able to change the normal range of the gain knob (0-127) into a range that goes from 0.0 (silent) to 2.0 (double-volume).&lt;br /&gt;
&lt;br /&gt;
==Compression==&lt;br /&gt;
&lt;br /&gt;
The next stage of the patch is a compressor. Since compression can have a very significant effect on the sound of the instrument, I wanted detailed control over its parameters. Therefore, I am using number boxes (rather than knobs) to control the values; this gives me precise control over the compressor's operation without having to guess at a knob's output value.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;img&amp;gt;http://1cyjknyddcx62agyb002-web-assets.s3.amazonaws.com/1-KompressorB.jpg&amp;lt;/img&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Again, this section is mostly a set of controls connected to an abstraction named &amp;quot;comp_handler&amp;quot;. Double-click on this subpatcher to view its contents. This is a very simple subpatch; I've just borrowed the komp subpatcher (found in examples/effects/kompressor/lib of the Max folder) without change. I set a one parameter (lookahead) directly with a &amp;lt;strong&amp;gt;loadbang&amp;lt;/strong&amp;gt;, but mostly expose the functions directly to the main patcher. Since this subpatcher is so simple, why didn't I just use komp directly in my main patch?&lt;br /&gt;
&lt;br /&gt;
In the future, I may want to develop my own compressor system, or I may choose to implement the omx-based compressor included with MSP. I may even break down and use a VST compressor. In any of these cases, I would want to change the compressor &amp;quot;engine&amp;quot; without having to disturb my main patcher. By placing the compressor in a subpatch, I can change the underlying compression engine without ever having to change the top-level patch or the user interface.&lt;br /&gt;
&lt;br /&gt;
This is a &amp;quot;high detail&amp;quot; compressor, giving me the kind of control I want for a flexible rig. If you aren't that familiar with compression, though, it may seem a little intimidating. Here are a few settings that I've found useful with this processor:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;img&amp;gt;http://1cyjknyddcx62agyb002-web-assets.s3.amazonaws.com/1-table.jpg&amp;lt;/img&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;em&amp;gt; (Sidebar)&amp;lt;/em&amp;gt; In each of the processing areas, you will see a small grey panel - it doesn't seem to do anything. However, when you switch into Presentation Mode, you should see these panels expand to become the background of the individual processing sections. This is an example of using the Presentation Mode's ability to change an object's geometry to keep my patching view clean, but give me an attractive user interface.&lt;br /&gt;
&lt;br /&gt;
==Output Staging==&lt;br /&gt;
&lt;br /&gt;
The final processing section for this tutorial controls the output. This section will be familiar to any Max/MSP programmer - it's the basis for audio output in almost any audio patch. The output of the compressor is sent to the two faders, which provide left/right volume control. The signal is then routed to an &amp;lt;strong&amp;gt;EZDAC~&amp;lt;/strong&amp;gt;, which is also our DSP on/off control. If you have your guitar (or other instrument) plugged into the computer, you can check the settings on the input module, turn on the DSP, turn up the volume and hear your instrument through the patch.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;img&amp;gt;http://1cyjknyddcx62agyb002-web-assets.s3.amazonaws.com/1-OutputStuff.png&amp;lt;/img&amp;gt;&lt;br /&gt;
&lt;br /&gt;
However, it's not always convenient to test with an actual instrument. For example, some of this patch was done while I was waiting in an airport. The last thing the PSA wants to see is for me to pull out a guitar and start wailing. What I've done is to include a &amp;quot;test fixture&amp;quot; - some standard audio generating code - that I can use to test the patch as it is being built. You will notice that this section (labeled &amp;quot;test fixture&amp;quot;) gives me the opportunity to load and play a file or to generate noise. This is a small bit of code I've copied from another patch of mine - I use it as a test fixture for almost every audio patch I write.&lt;br /&gt;
&lt;br /&gt;
The output of this fixture is routed to a &amp;lt;strong&amp;gt;send~&amp;lt;/strong&amp;gt; object labeled &amp;quot;test&amp;quot;. This audio is received in the input section, at the same point that my patch would see an instrument from the audio input. This way, I can test patches without having an instrument plugged in, helping me to be productive when the guitar isn't easily available.&lt;br /&gt;
&lt;br /&gt;
==Conclusion==&lt;br /&gt;
&lt;br /&gt;
We've created the basic I/O blocks for our performance patch. In the next article, we will expand it by adding a good-sounding distortion/overdrive system and a highly controllable filter/EQ. In the meantime, work with this basic patch, learn to understand the routing between the objects and explore the use of the compressor. Until next time - have fun!&lt;/div&gt;</summary>
		<author><name>Gtaylor@rtqe.net</name></author>	</entry>

	<entry>
		<id>http://cycling74.com/wiki/index.php?title=Max_Guitar_Processor,_Part_5</id>
		<title>Max Guitar Processor, Part 5</title>
		<link rel="alternate" type="text/html" href="http://cycling74.com/wiki/index.php?title=Max_Guitar_Processor,_Part_5"/>
				<updated>2013-02-06T03:33:57Z</updated>
		
		<summary type="html">&lt;p&gt;Gtaylor@rtqe.net: Created page with &amp;quot;In this, the final episode of our guitar processing extravaganza, we are going to step away from making effects and focus on performance support. For a system as complicated a...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;In this, the final episode of our guitar processing extravaganza, we are going to step away from making effects and focus on performance support. For a system as complicated as this, performance support means two things: patch storage and realtime control. Thus, we will learn to create a preset system and manipulate the various on-screen controls with an inexpensive MIDI footpedal system.&lt;br /&gt;
&lt;br /&gt;
[http://1cyjknyddcx62agyb002-web-assets.s3.amazonaws.com/GtrProc-5.maxpat.zip Download the patch used in this tutorial].&lt;br /&gt;
&lt;br /&gt;
===Tutorials in this series:===&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;http://cycling74.com/2008/07/28/max-5-guitar-processor-part-1/&amp;quot;&amp;gt;Part 1&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;http://cycling74.com/2008/09/03/max-5-guitar-processor-part-2/&amp;quot;&amp;gt;Part 2&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;http://cycling74.com/2008/11/25/max-5-guitar-processor-part-3/&amp;quot;&amp;gt;Part 3&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;http://cycling74.com/2009/01/27/max-5-guitar-processor-part-4/&amp;quot;&amp;gt;Part 4&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;http://cycling74.com/2009/01/29/max-5-guitar-processor-part-5/&amp;quot;&amp;gt;Part 5&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
==Preset Handling==&lt;br /&gt;
&lt;br /&gt;
The &amp;quot;pattr&amp;quot; objects manage the basics of preset handling for complex patches. This subsystem revolves around an object called pattr, which maintains the state of a control and allows it to be saved or remotely controlled. In our patch, we won't use the &amp;lt;strong&amp;gt;pattr&amp;lt;/strong&amp;gt; object directly; rather, we will use the &amp;lt;strong&amp;gt;autopattr&amp;lt;/strong&amp;gt; object (which creates a virtual pattr for all named objects) and the &amp;lt;strong&amp;gt;pattrstorage&amp;lt;/strong&amp;gt; object (which provides for preset storage and remote dispatching).&lt;br /&gt;
&lt;br /&gt;
In order to make &amp;lt;strong&amp;gt;autopattr&amp;lt;/strong&amp;gt; work, we need to name all of the controls that we want maintained by the pattr system and we also must make sure that controls we want left &amp;quot;untouched&amp;quot; are unnamed. If you select a control and bring up the Object Inspector, you will see that I've named all of the appropriate controls, using a naming convention that identifies the module and control function for each UI element.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;img&amp;gt;http://1cyjknyddcx62agyb002-web-assets.s3.amazonaws.com/gtr5-scriptname.png&amp;lt;/img&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In addition to naming all of the controls (so they can be seen by &amp;lt;strong&amp;gt;autopattr&amp;lt;/strong&amp;gt;), I've also added a &amp;lt;strong&amp;gt;textedit&amp;lt;/strong&amp;gt; object that will be used as a preset name. This &amp;quot;no-nothing&amp;quot; field isn't connected to anything, but it is named – therefore acting as a place to put our patch name. Gotta have a patch name…&lt;br /&gt;
&lt;br /&gt;
Once the &amp;lt;strong&amp;gt;autopattr&amp;lt;/strong&amp;gt; object is in place, we also need to handle the selection and storage of preset data.  That is what the &amp;lt;strong&amp;gt;pattrstorage&amp;lt;/strong&amp;gt; object does. We can use a &amp;lt;strong&amp;gt;number box&amp;lt;/strong&amp;gt; (in this case, with an up/down control) to select patch slots, and create messages that will store the current settings as a preset. We also need to add controls for saving and restoring the contents to a file. With remarkably little patching, we've created a complete device preset system.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;img&amp;gt;http://1cyjknyddcx62agyb002-web-assets.s3.amazonaws.com/gtr5-midipatch.png&amp;lt;/img&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==MIDI Control==&lt;br /&gt;
&lt;br /&gt;
Another important aspect to a usable live guitar rig is MIDI control – specifically, control from a MIDI pedal board. I happen to have a Behringer FCB1010 MIDI Foot Controller, and I've integrated its use into this custom patch. I've created a simple set of functions to create a list of MIDI inputs and to select a set of control functions, then manage the MIDI input within the subpatcher called midi_handler.&lt;br /&gt;
&lt;br /&gt;
Incoming MIDI information is parsed (using the midiparse object), with program changes used to set the current preset slot. In addition, I use the program change command to act as a tap tempo button, since I have set the FCB1010 to produce the appropriate messages.&lt;br /&gt;
&lt;br /&gt;
The most important section of this patch, however, is the routing of MIDI control messages. I have a subpatch that compares incoming MIDI CC messages with our selected controller numbers, and only outputs valid control messages. This is then sent to a gate object, which routes the value to the correct message box (and, in some cases, a scale object that scales the values). These message boxes prepend the pattr name of a control to the value, then send this set back to pattrstorage.&lt;br /&gt;
&lt;br /&gt;
The result is an automatic update to the control, based on pattrstorage's message handling! This is a little known way of controlling pattr'd controls; we use pattrstorage as a &amp;quot;dispatcher&amp;quot; of messages, and let it update the control (and the current patch setting).&lt;br /&gt;
&lt;br /&gt;
One thing to watch out for, though, is that these changes overwrite the current setting in the pattrstorage preset slot. So, if you load a preset file, change a setting with the foot pedal, then save the preset file, your changes will become the new setting for that control. It's a good idea to always review your current patch when working with pattrstorage, and to separate preset creation from live performance!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;img&amp;gt;http://1cyjknyddcx62agyb002-web-assets.s3.amazonaws.com/gtr5-fullimage.jpg&amp;lt;/img&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Conclusion==&lt;br /&gt;
&lt;br /&gt;
I hope that this series have been inspirational to you. The design and execution of the final patch is particular to my performance needs, but should be easy enough to modify into a system that will work for you. I've included a file (mypresets.xml) with a few of the preset I use with this rig – you may want to start your customization by making presets of your own. But best result would be for you to take this patch, rip it apart, and create your dream guitar processor!&lt;br /&gt;
&lt;br /&gt;
Thanks for following the series, and feel free to email me with any questions or comments: &amp;lt;a href=&amp;quot;mailto:ddg@cycling74.com&amp;quot;&amp;gt;ddg@cycling74.com&amp;lt;/a&amp;gt;.  Hope to hear from you soon!&amp;lt;/div&amp;gt;&lt;/div&gt;</summary>
		<author><name>Gtaylor@rtqe.net</name></author>	</entry>

	<entry>
		<id>http://cycling74.com/wiki/index.php?title=Max_Guitar_Processor,_Part_4</id>
		<title>Max Guitar Processor, Part 4</title>
		<link rel="alternate" type="text/html" href="http://cycling74.com/wiki/index.php?title=Max_Guitar_Processor,_Part_4"/>
				<updated>2013-02-06T03:27:49Z</updated>
		
		<summary type="html">&lt;p&gt;Gtaylor@rtqe.net: Created page with &amp;quot;At this point, we have a pretty useful guitar processing &amp;quot;rack&amp;quot;, but it could use a little spice. This spice will come from two additional processors: a looping delay unit, an...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;At this point, we have a pretty useful guitar processing &amp;quot;rack&amp;quot;, but it could use a little spice. This spice will come from two additional processors: a looping delay unit, and a basic reverb system. Also, to help keep the output useful, we will drop a limiter on the back end of the entire rig.&lt;br /&gt;
&lt;br /&gt;
[http://1cyjknyddcx62agyb002-web-assets.s3.amazonaws.com/GtrProc-4.maxpat.zip Download the patch used in this tutorial].&lt;br /&gt;
&lt;br /&gt;
===Tutorials in this series:===&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;http://cycling74.com/2008/07/28/max-5-guitar-processor-part-1/&amp;quot;&amp;gt;Part 1&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;http://cycling74.com/2008/09/03/max-5-guitar-processor-part-2/&amp;quot;&amp;gt;Part 2&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;http://cycling74.com/2008/11/25/max-5-guitar-processor-part-3/&amp;quot;&amp;gt;Part 3&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;http://cycling74.com/2009/01/27/max-5-guitar-processor-part-4/&amp;quot;&amp;gt;Part 4&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;http://cycling74.com/2009/01/29/max-5-guitar-processor-part-5/&amp;quot;&amp;gt;Part 5&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Looping Delay==&lt;br /&gt;
&lt;br /&gt;
The first processor we will add is an alternative version of the delay line – one that provides tap tempo, looping and sound-on-sound functionality. Unlike our previous delay module, this one will not provide modulation (for flanging and pitch shifting effects); rather it will be focused on capturing a loop, and allowing overdubs of additional sounds.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;img&amp;gt;http://1cyjknyddcx62agyb002-web-assets.s3.amazonaws.com/GP3img-taptempo.png&amp;lt;/img&amp;gt;&lt;br /&gt;
&lt;br /&gt;
As with any delay line, the most important setting is the delay time. We use a standard floating-point number box for entry, but it is probably most convenient to use the &amp;quot;tap tempo&amp;quot; function that is implemented. By clicking on the tap tempo button four times, you generate a delay time that will match your taps.&lt;br /&gt;
&lt;br /&gt;
The tap tempo function is provided by the taptempo abstraction at the top level of the patch. It counts four incoming bang messages, determines the three intervals between the taps, takes the average and uses that for the tempo calculation. Since it is assumed that we are tapping quarter notes, but want to use a four bar measure, the result is multiplied by four to give us a delay time value. This is an area where you might want to modify the function to meet your needs – if you really want to have the delay run at the rate you tapped, you can remove the [* 4] object at the end of the processing chain.&lt;br /&gt;
&lt;br /&gt;
The basic delay design, as found in the loop_handler subpatcher, is very similar to the layout of the modulating delay. The few tweaks provided are there to support the looping functions. First, when the &amp;quot;Freeze&amp;quot; button is &amp;quot;on&amp;quot;, the feedback is switched to 100% feedback. This gives us a standard looping function. The feedback loop has a lowpass filter in it, which will change the audio in the loop if it is not fully open. The &amp;quot;Input Active&amp;quot; button is very important – it determines if the input signal is sent into the delay path. If it is off, the only output of the delay line is whatever is currently playing – if the delay is &amp;quot;frozen&amp;quot;, you will hear the loop, while with freeze off you will only hear the remaining contents of the loop line feedback. What is cool about this is that, when you freeze the delay line, you can still overlay audio parts onto the loop – giving you sound-on-sound overdubbing.&lt;br /&gt;
&lt;br /&gt;
I've also implemented a click track that cycles at the same speed as the delay time. This way, if you want to work up some one-bar loops, you can hear the timing (in quarter note click) even before you begin recording. Most of these concepts are classic delay techniques, but this sort of looping processor is exactly why many people first get into Max/MSP. Even if you aren't into guitar processing per se, you may find this looping delay system can jump-start your Max experiments.&lt;br /&gt;
&lt;br /&gt;
==Reverb==&lt;br /&gt;
&lt;br /&gt;
What would an effects processing rig be without a reverb? As is typical for any processing rack, I've installed a reverb as the last effect in the system – this way, we will get consistant reverb from both our looped and our live guitar lines. To provide reverb, I've gone to a third-party external object: Nathan Wolek's &amp;lt;strong&amp;gt;gverb~&amp;lt;/strong&amp;gt;. I happen to like the sound of it well enough, and I've wrapped it up in another abstraction so I can replace it in the future (if I decide to do that).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;img&amp;gt;http://1cyjknyddcx62agyb002-web-assets.s3.amazonaws.com/GP3img-reverb.png&amp;lt;/img&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you look into the subpatcher reverb_handler, you'll see that I expose the reverb time control to the top-level patch, but I also provide a reverb mix control that uses the pan2 abstraction found in Max's examples folder. This gives me a decent equal power pan – but why would I need to pan? In fact, I don't; but I can use them as equal power mixers as well. By using only one output of the panner, and reverse panning the live sound, I can get a decent mixing function will little effort. This may not be the most efficient processing stream, but it sure was easy to implement!&lt;br /&gt;
&lt;br /&gt;
===And a Limiter at the end…===&lt;br /&gt;
&lt;br /&gt;
Finally, to make sure everything stays under control, I've added a limiter to the end of the processing chain.  I'm using the &amp;lt;strong&amp;gt;omx.peaklim~&amp;lt;/strong&amp;gt; object, which implements a good quality limiter. The parameters for this object are a little weird, so after some experimenting, I found a set that worked for me. These are loadbang'd into the object during startup, and never change. I also reconfigured the output section of the Presentation Mode to make everything fit a little better, but the functionality should all be familiar from previous weeks' articles.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;img&amp;gt;http://1cyjknyddcx62agyb002-web-assets.s3.amazonaws.com/GP3img-limiter.png&amp;lt;/img&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Conclusion==&lt;br /&gt;
&lt;br /&gt;
This is the conclusion of new module additions, but far from the conclusion of this series. For my money, some of the most important information will be found in our next article, where we will cover preset management ('cuz I don't want to be mousing too much on-stage) and MIDI parameter controls (using my FCB-1010 foot controller). Get familiar with our new modules, and prepare for a big finale with our next Guitar Processing entry!&lt;/div&gt;</summary>
		<author><name>Gtaylor@rtqe.net</name></author>	</entry>

	<entry>
		<id>http://cycling74.com/wiki/index.php?title=Max_Guitar_Processor,_Part_3</id>
		<title>Max Guitar Processor, Part 3</title>
		<link rel="alternate" type="text/html" href="http://cycling74.com/wiki/index.php?title=Max_Guitar_Processor,_Part_3"/>
				<updated>2013-02-06T03:22:58Z</updated>
		
		<summary type="html">&lt;p&gt;Gtaylor@rtqe.net: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;In the last article, we added some basic tonal effects: distortion/overdrive and EQ/filtering. This time, we will expand our virtual effects rack to include both a phase shifter and a full-featured modulating digital delay. As we add these effects, you will begin to see why a DIY effects system can trump any commercial product.&lt;br /&gt;
&lt;br /&gt;
[http://1cyjknyddcx62agyb002-web-assets.s3.amazonaws.com/GtrProc-3.maxpat.zip Download the patch used in this tutorial].&lt;br /&gt;
&lt;br /&gt;
===Tutorials in this series:===&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;http://cycling74.com/2008/07/28/max-5-guitar-processor-part-1/&amp;quot;&amp;gt;Part 1&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;http://cycling74.com/2008/09/03/max-5-guitar-processor-part-2/&amp;quot;&amp;gt;Part 2&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;http://cycling74.com/2008/11/25/max-5-guitar-processor-part-3/&amp;quot;&amp;gt;Part 3&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;http://cycling74.com/2009/01/27/max-5-guitar-processor-part-4/&amp;quot;&amp;gt;Part 4&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;http://cycling74.com/2009/01/29/max-5-guitar-processor-part-5/&amp;quot;&amp;gt;Part 5&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
==Adding a phase shifter==&lt;br /&gt;
&lt;br /&gt;
The first module I’ve added is a phase shifter. It’s a full-featured implementation, featuring a variable number of phase shift stages and a frequency spread to provide a more complicated sound. Since this is obviously a well-considered piece of work, I surely had to steal from someplace, right? Of course! Luckily, I have access to some of the Pluggo source patches, and I’ve always liked this particular phase shifter’s sound. So I opened up the patch and copied the whole thing! By placing it in a subpatcher (phasor_handler), I keep it out of my hair at the top level. About all that I added to the patch is some scaling of the inputs to help keep the control ranges sensible.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;img&amp;gt;http://1cyjknyddcx62agyb002-web-assets.s3.amazonaws.com/GTR-3-3.png&amp;lt;/img&amp;gt;&lt;br /&gt;
&lt;br /&gt;
One of the interesting aspects of this patch is the use of the phaseshift~ object to provide the effect. Normally, a phase shift is almost imperceptible, but when the frequency is moving a classic phase shift sound is created. Stacking a few of these on top of each other (with the serial application of the onestage subpatcher) allows us to vary the depth of the effect by adding (or subtracting) phase shifting stages.&lt;br /&gt;
&lt;br /&gt;
==The modulating delay==&lt;br /&gt;
&lt;br /&gt;
The next module is a digital delay, complete with modulation, feedback (with filtering) and stereo enhancement. This is also the place where we go from mono processing to stereo, allowing each output to have a different (but related) delay time. The key to this is the “RHS Factor”, which determines the Right Hand Side’s delay time relative to the left side. Modest difference (like .98) will provide subtle depth, while more radical settings (like .5 or 1.5) will give rhythmic ping-pong echoes.&lt;br /&gt;
&lt;br /&gt;
If we switch to the Patching Mode and open the delay_handler subpatcher, we see that most of the work is being done by a pair of tapin~/tapout~ objects and some scaling functions. Creating the modulation – which allows this module to perform flanging, chorusing and vibrato effects – is accomplished by varying the delay time. We use a cycle~ object to drive the change; but you need to note that the delay time is consistently maintained as a signal routing, rather than an event routing. This causes the delay time to change without interruption, giving us smooth delay time transitions that can be used to our advantage.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;img&amp;gt;http://1cyjknyddcx62agyb002-web-assets.s3.amazonaws.com/GTR-3-4.png&amp;lt;/img&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Dealing with the details==&lt;br /&gt;
&lt;br /&gt;
As you can see in the patching view, we’ve continued our patching patterns by creating a master patch for each effect module, with controls maintained at the top-level patch. If you switch to the Presentation Mode, you will see that we’ve also maintained another pattern: using knobs (the dial object) for controls that are best set by ear, and number boxes for controls that may need precise settings. For most people, a screen full of number boxes is confusing and intimidating – and this becomes worse when you are using a patch or program onstage. By limiting the use of number boxes to those controls that will specifically need them, you can reduce the amount of stress experienced when working with a patch.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;img&amp;gt;http://1cyjknyddcx62agyb002-web-assets.s3.amazonaws.com/GTR-3-2.png&amp;lt;/img&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Since the phase shifter and delay modules take up one full “rack space” in Presentation Mode, we also want to put another level meter at the end of the rack. However, since we now have split the sound into stereo, we need to use two meters instead. This gives us a quick visual to make sure that neither the phase shifter nor the delay unit settings are causing output distortion.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;img&amp;gt;http://1cyjknyddcx62agyb002-web-assets.s3.amazonaws.com/GTR-3-1sm.jpg&amp;lt;/img&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;img&amp;gt;http://1cyjknyddcx62agyb002-web-assets.s3.amazonaws.com/GTR-3-1.jpg&amp;lt;/img&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Conclusion==&lt;br /&gt;
&lt;br /&gt;
At this point, we’ve created a credible guitar processor with the most common effects in place. In our next article, we will dive into less familiar territory by taking on looping and reverb. See you then!&lt;/div&gt;</summary>
		<author><name>Gtaylor@rtqe.net</name></author>	</entry>

	<entry>
		<id>http://cycling74.com/wiki/index.php?title=Max_Guitar_Processor,_Part_3</id>
		<title>Max Guitar Processor, Part 3</title>
		<link rel="alternate" type="text/html" href="http://cycling74.com/wiki/index.php?title=Max_Guitar_Processor,_Part_3"/>
				<updated>2013-02-06T03:20:38Z</updated>
		
		<summary type="html">&lt;p&gt;Gtaylor@rtqe.net: Created page with &amp;quot;In the last article, we added some basic tonal effects: distortion/overdrive and EQ/filtering. This time, we will expand our virtual effects rack to include both a phase shift...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;In the last article, we added some basic tonal effects: distortion/overdrive and EQ/filtering. This time, we will expand our virtual effects rack to include both a phase shifter and a full-featured modulating digital delay. As we add these effects, you will begin to see why a DIY effects system can trump any commercial product.&lt;br /&gt;
&lt;br /&gt;
[http://1cyjknyddcx62agyb002-web-assets.s3.amazonaws.com/GtrProc-3.maxpat.zip Download the patch used in this tutorial].&lt;br /&gt;
&lt;br /&gt;
===Tutorials in this series:===&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;http://cycling74.com/2008/07/28/max-5-guitar-processor-part-1/&amp;quot;&amp;gt;Part 1&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;http://cycling74.com/2008/09/03/max-5-guitar-processor-part-2/&amp;quot;&amp;gt;Part 2&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;http://cycling74.com/2008/11/25/max-5-guitar-processor-part-3/&amp;quot;&amp;gt;Part 3&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;http://cycling74.com/2009/01/27/max-5-guitar-processor-part-4/&amp;quot;&amp;gt;Part 4&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;http://cycling74.com/2009/01/29/max-5-guitar-processor-part-5/&amp;quot;&amp;gt;Part 5&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
==Adding a phase shifter==&lt;br /&gt;
&lt;br /&gt;
The first module I’ve added is a phase shifter. It’s a full-featured implementation, featuring a variable number of phase shift stages and a frequency spread to provide a more complicated sound. Since this is obviously a well-considered piece of work, I surely had to steal from someplace, right? Of course! Luckily, I have access to some of the Pluggo source patches, and I’ve always liked this particular phase shifter’s sound. So I opened up the patch and copied the whole thing! By placing it in a subpatcher (phasor_handler), I keep it out of my hair at the top level. About all that I added to the patch is some scaling of the inputs to help keep the control ranges sensible.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;img&amp;gt;http://1cyjknyddcx62agyb002-web-assets.s3.amazonaws.com/GTR-3-3.png&amp;lt;/img&amp;gt;&lt;br /&gt;
&lt;br /&gt;
One of the interesting aspects of this patch is the use of the phaseshift~ object to provide the effect. Normally, a phase shift is almost imperceptible, but when the frequency is moving a classic phase shift sound is created. Stacking a few of these on top of each other (with the serial application of the onestage subpatcher) allows us to vary the depth of the effect by adding (or subtracting) phase shifting stages.&lt;br /&gt;
&lt;br /&gt;
==The modulating delay==&lt;br /&gt;
&lt;br /&gt;
The next module is a digital delay, complete with modulation, feedback (with filtering) and stereo enhancement. This is also the place where we go from mono processing to stereo, allowing each output to have a different (but related) delay time. The key to this is the “RHS Factor”, which determines the Right Hand Side’s delay time relative to the left side. Modest difference (like .98) will provide subtle depth, while more radical settings (like .5 or 1.5) will give rhythmic ping-pong echoes.&lt;br /&gt;
&lt;br /&gt;
If we switch to the Patching Mode and open the delay_handler subpatcher, we see that most of the work is being done by a pair of tapin~/tapout~ objects and some scaling functions. Creating the modulation – which allows this module to perform flanging, chorusing and vibrato effects – is accomplished by varying the delay time. We use a cycle~ object to drive the change; but you need to note that the delay time is consistently maintained as a signal routing, rather than an event routing. This causes the delay time to change without interruption, giving us smooth delay time transitions that can be used to our advantage.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;img&amp;gt;http://1cyjknyddcx62agyb002-web-assets.s3.amazonaws.com/GTR-3-4.png&amp;lt;/img&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Dealing with the details==&lt;br /&gt;
&lt;br /&gt;
As you can see in the patching view, we’ve continued our patching patterns by creating a master patch for each effect module, with controls maintained at the top-level patch. If you switch to the Presentation Mode, you will see that we’ve also maintained another pattern: using knobs (the dial object) for controls that are best set by ear, and number boxes for controls that may need precise settings. For most people, a screen full of number boxes is confusing and intimidating – and this becomes worse when you are using a patch or program onstage. By limiting the use of number boxes to those controls that will specifically need them, you can reduce the amount of stress experienced when working with a patch.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;img&amp;gt;http://1cyjknyddcx62agyb002-web-assets.s3.amazonaws.com/GTR-3-2.jpg&amp;lt;/img&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Since the phase shifter and delay modules take up one full “rack space” in Presentation Mode, we also want to put another level meter at the end of the rack. However, since we now have split the sound into stereo, we need to use two meters instead. This gives us a quick visual to make sure that neither the phase shifter nor the delay unit settings are causing output distortion.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;img&amp;gt;http://1cyjknyddcx62agyb002-web-assets.s3.amazonaws.com/GTR-3-1sm.jpg&amp;lt;/img&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;img&amp;gt;http://1cyjknyddcx62agyb002-web-assets.s3.amazonaws.com/GTR-3-1.jpg&amp;lt;/img&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Conclusion==&lt;br /&gt;
&lt;br /&gt;
At this point, we’ve created a credible guitar processor with the most common effects in place. In our next article, we will dive into less familiar territory by taking on looping and reverb. See you then!&lt;/div&gt;</summary>
		<author><name>Gtaylor@rtqe.net</name></author>	</entry>

	<entry>
		<id>http://cycling74.com/wiki/index.php?title=Max_Guitar_Processor,_Part_2</id>
		<title>Max Guitar Processor, Part 2</title>
		<link rel="alternate" type="text/html" href="http://cycling74.com/wiki/index.php?title=Max_Guitar_Processor,_Part_2"/>
				<updated>2013-02-06T03:13:06Z</updated>
		
		<summary type="html">&lt;p&gt;Gtaylor@rtqe.net: Created page with &amp;quot;In the last article, we did a lot of setup - we got input/output handling in place, and added a compressor to the processing chain as an example of an “effect module”. In ...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;In the last article, we did a lot of setup - we got input/output handling in place, and added a compressor to the processing chain as an example of an “effect module”. In this article, we will continue adding effects, including a dual overdrive module and a three-stage EQ/Filter module. With these additions we will further explore Max 5’s user interface options, as well as taking a look at some of the “tweaks” that make Max/MSP functions a little more guitar-faithful.&lt;br /&gt;
&lt;br /&gt;
[http://1cyjknyddcx62agyb002-web-assets.s3.amazonaws.com/GtrProc-2.maxpat.zip Download the patch used in this tutorial].&lt;br /&gt;
&lt;br /&gt;
===Tutorials in this series:===&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;http://cycling74.com/2008/07/28/max-5-guitar-processor-part-1/&amp;quot;&amp;gt;Part 1&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;http://cycling74.com/2008/09/03/max-5-guitar-processor-part-2/&amp;quot;&amp;gt;Part 2&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;http://cycling74.com/2008/11/25/max-5-guitar-processor-part-3/&amp;quot;&amp;gt;Part 3&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;http://cycling74.com/2009/01/27/max-5-guitar-processor-part-4/&amp;quot;&amp;gt;Part 4&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;http://cycling74.com/2009/01/29/max-5-guitar-processor-part-5/&amp;quot;&amp;gt;Part 5&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
==Adding an Overdrive Section==&lt;br /&gt;
&lt;br /&gt;
First up is an overdrive processor.  I’ve found that the way to get the most variety with this sort of processor is to have two &amp;lt;strong&amp;gt;overdrive~&amp;lt;/strong&amp;gt; objects in series with a lowpass filter between them; the result is a controllable distortion/overdrive capable of some crazy variations. I have, again, encapsulated the overdrive functions in a subpatcher (in this case, called &amp;lt;strong&amp;gt;od_handler&amp;lt;/strong&amp;gt;), which implements the dual &amp;lt;strong&amp;gt;overdrive~&amp;lt;/strong&amp;gt; setup, as well as a &amp;lt;strong&amp;gt;selector~&amp;lt;/strong&amp;gt; that provides the bypass functionality.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;img&amp;gt;http://1cyjknyddcx62agyb002-web-assets.s3.amazonaws.com/OD_Handler.png&amp;lt;/img&amp;gt;&lt;br /&gt;
&lt;br /&gt;
I’ve also added a level adjustment that allows us to tame the output levels post-overdrive~. This can be very handy, since some of the more extreme overdrive settings can cause high levels (both real and perceived). I’ve also connected a &amp;lt;strong&amp;gt;meter~&amp;lt;/strong&amp;gt; object to the output of the subpatcher, giving me a way to eyeball the output of the compressor-overdrive combination.&lt;br /&gt;
&lt;br /&gt;
==Adding an EQ/Filter==&lt;br /&gt;
&lt;br /&gt;
Next up is the creation of a EQ/Filter modules.  This is going to use the &amp;lt;strong&amp;gt;cascade~&amp;lt;/strong&amp;gt; filter, which is a version of a biquad filter that takes lists of coefficients to create a complex filter curve. In order to control it with simplified controls, we will use a function of the &amp;lt;strong&amp;gt;filtergraph~&amp;lt;/strong&amp;gt; object that converts frequency/level combinations into biquad-type coefficients.&lt;br /&gt;
&lt;br /&gt;
By now, you should be able to see the design pattern in use: I create a subpatcher with the “guts” of the effect module, then attach controls for all of the variable parameters. Open the “filter_handler” subpatcher to examine the DSP funtions used. Most of this subpatcher converts the incoming values into useful frequency and level values, then sending them into &amp;lt;strong&amp;gt;filtergraph~&amp;lt;/strong&amp;gt; objects. I could have just as easily used &amp;lt;strong&amp;gt;filtercoeff~&amp;lt;/strong&amp;gt; objects, but using the &amp;lt;strong&amp;gt;filtergraph~&amp;lt;/strong&amp;gt; lets me see the individual filter settings, helping me verify that the individual filter parameters are being set correctly. The coefficient outputs of the &amp;lt;strong&amp;gt;filtergraph~&amp;lt;/strong&amp;gt; objects are “pak’d” into a list of 15 floating point values (five for each filter), then prepended with the cascade message. This informs connected filter objects that more than one coefficient set will be used to create a complex filter.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;img&amp;gt;http://1cyjknyddcx62agyb002-web-assets.s3.amazonaws.com/Filter_Handler.png&amp;lt;/img&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This list is now sent to a &amp;lt;strong&amp;gt;cascade~&amp;lt;/strong&amp;gt; object, which implements the equivalent of serial biquad filters that implement the cascaded filter settings. This could just as easily be implemented as several &amp;lt;strong&amp;gt;biquad~&amp;lt;/strong&amp;gt; objects, but using the single &amp;lt;strong&amp;gt;cascade~&amp;lt;/strong&amp;gt; object allows us to keep the signal count down.&lt;br /&gt;
&lt;br /&gt;
An important addition to this subpatcher is filter clearing. Biquad filters are based on delay lines that can occasionally get overloaded. In these cases, the filter is “blown”, and will not produce any output. The easiest way to fix a blown filter is to send it a clear message, but the downside is that it resets all of the filter coefficients, but doesn’t update any of the user interface elements that control the filter. So, in this case, when we receive a message in the “clear filters” inlet, it not only sends a clear message to the cascade object, but also sends a bang to receivers of the “fil_clear” send object.&lt;br /&gt;
&lt;br /&gt;
There is only one receiver of fil_clear: a receive object embedded in the subpatcher called “filter_clearer”. This simply resets all of the user interface elements to default values, providing visual feedback of the filter’s newly cleared state. It is important to implement a function like this whenever you are working with MSP filters, since blowing a filter is a common problem when experimenting with extreme filter settings.&lt;br /&gt;
&lt;br /&gt;
==In Review==&lt;br /&gt;
&lt;br /&gt;
Put the patch into Presentation Mode, and you will see that I’ve reordered the modules to maintain the row-column orientation of the signal flow. I’ve also added level meters at the end of each row. This is something that I’ve learned to do for performance patches - to place meters in strategic places, helping me to see “where” something is wrong when something goes wrong. As this patch develops, we will place a meter at the end of each row, combining useful debugging information with a cool, flashy display.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;img&amp;gt;http://1cyjknyddcx62agyb002-web-assets.s3.amazonaws.com/Screen-1.jpg&amp;lt;/img&amp;gt;&lt;br /&gt;
&lt;br /&gt;
I also decided to make the visual EQ/Filter display very large in Performance Mode. This helps me see the result of subtle changes, and gives a better visual indication in the heat of battle. If you want to create and add modules of your own, you might want to make this part of the patch a little smaller - but be careful, since the EQ module can have a pretty drastic effect on your sound, and you will want as much control as possible.&lt;br /&gt;
&lt;br /&gt;
With the addition of the overdrive and EQ/Filter units, we have created tools to sculpt the sound of the guitar. Next, we will add a few more “effect-y” modules, including a smooth phaser and a modulating delay line. Until then, have fun with our new modules, and try to make some of your own using some of the techniques we’ve developed.&lt;/div&gt;</summary>
		<author><name>Gtaylor@rtqe.net</name></author>	</entry>

	<entry>
		<id>http://cycling74.com/wiki/index.php?title=Max_Guitar_Processor,_Part_1</id>
		<title>Max Guitar Processor, Part 1</title>
		<link rel="alternate" type="text/html" href="http://cycling74.com/wiki/index.php?title=Max_Guitar_Processor,_Part_1"/>
				<updated>2013-02-06T02:57:16Z</updated>
		
		<summary type="html">&lt;p&gt;Gtaylor@rtqe.net: Created page with &amp;quot;In this series of tutorials, I will be building a Max-based guitar processing &amp;quot;rig&amp;quot;, and will give you the opportunity to look over my shoulder as I design and implement this ...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;In this series of tutorials, I will be building a Max-based guitar processing &amp;quot;rig&amp;quot;, and will give you the opportunity to look over my shoulder as I design and implement this system.&lt;br /&gt;
&lt;br /&gt;
'''''Note:''''' ''You may also be interested in an earlier article which appears on the Cycling '74 website by Andrew Benson and Ben Bracken titled [http://cycling74.com/2008/03/12/expand-your-guitar-vol-1/ Expand Your Guitar], which covers the basics of connecting a guitar to a Max-based processing system, includes a few guitar-oriented effects patches.''&lt;br /&gt;
&lt;br /&gt;
[http://1cyjknyddcx62agyb002-web-assets.s3.amazonaws.com/GtrProc-1.maxpat.zip Download the patch]&lt;br /&gt;
&lt;br /&gt;
===Tutorials in this series===&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;http://cycling74.com/2008/07/28/max-5-guitar-processor-part-1/&amp;quot;&amp;gt;Part 1&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;http://cycling74.com/2008/09/03/max-5-guitar-processor-part-2/&amp;quot;&amp;gt;Part 2&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;http://cycling74.com/2008/11/25/max-5-guitar-processor-part-3/&amp;quot;&amp;gt;Part 3&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;http://cycling74.com/2009/01/27/max-5-guitar-processor-part-4/&amp;quot;&amp;gt;Part 4&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;http://cycling74.com/2009/01/29/max-5-guitar-processor-part-5/&amp;quot;&amp;gt;Part 5&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
==Designing the System==&lt;br /&gt;
The first thing I did was to plan the processing chain that I would create. I wanted a rather typical guitar rig, with the addition of a looping delay line. I decided on the following functional graph:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;img&amp;gt;http://1cyjknyddcx62agyb002-web-assets.s3.amazonaws.com/1-RigDesign.jpg&amp;lt;/img&amp;gt;&lt;br /&gt;
&lt;br /&gt;
I also made a few decisions about general program functionality. Since this will be a stand-alone program/patch, I wouldn't worry about limiting system usage; therefore I wouldn't wrap subpatches inside of &amp;lt;strong&amp;gt;poly~&amp;lt;/strong&amp;gt; objects (to reduce their CPU load when unused). Also, I decided to take full advantage of the Max 5 Presentation Mode layout, allowing me to code in a convenient way and worry about the performance layout in a separate step.&lt;br /&gt;
&lt;br /&gt;
Since I am a dyed-in-the-wool tweaker, I wanted to structure the code in such a way that I could manipulate it easily - even during live performance. This means that I needed to create an easily-to-follow patch that was well-labeled, and I needed to encapsulate at a level conducive to on-the-fly changes.&lt;br /&gt;
&lt;br /&gt;
Finally, in order to build this quickly, I decided to beg, borrow or steal as much of the programming as possible without resorting to the use of VST plug-ins (which would reduce tweak-ability). Throughout these articles, you will see me reuse older code, appropriate from other applications and use third-party objects whenever necessary. I also take full advantage of some design patterns I've developed that allow for quick coding of more complex patch routings.&lt;br /&gt;
&lt;br /&gt;
==Input and Gain Handling==&lt;br /&gt;
&lt;br /&gt;
Since this is a stand-alone patch, we need to control our own input and output. Let's start by creating an input section. If you open the patch [http://1cyjknyddcx62agyb002-web-assets.s3.amazonaws.com/GtrProc-1.maxpat.zip GtrProc-1.maxpat], you will see that I have discrete patch segments that correspond to the individual functions described in my processing graph. Place the patch into Presentation Mode, and you will see that these segments jump into a &amp;quot;rack style&amp;quot; package that is easy to follow during performance.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;img&amp;gt;http://1cyjknyddcx62agyb002-web-assets.s3.amazonaws.com/1-RackLayout.jpg&amp;lt;/img&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Move back into Patching Mode, and look at the top-left section of the patch. It is labeled &amp;quot;Input&amp;quot;, and includes several controls connected to an abstraction named &amp;quot;input_handler&amp;quot;. Double-click on the input_handler subpatcher to see its contents.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;img&amp;gt;http://1cyjknyddcx62agyb002-web-assets.s3.amazonaws.com/1-InputHandler.png&amp;lt;/img&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This subpatch is pretty simple: it contains a number of &amp;lt;strong&amp;gt;adstatus&amp;lt;/strong&amp;gt; objects that allow my controls to display and alter the audio settings used at runtime. The function is similar to using the DSP Status window, but exposes only those items I considered important for realtime performance. Since I don't use the &amp;lt;strong&amp;gt;adstatus&amp;lt;/strong&amp;gt; object very often, I don't know the functional arguments by heart. While I could have used the documentation to learn about the object, I decided to steal the functions from the help patch instead!&lt;br /&gt;
&lt;br /&gt;
By viewing the help patch, I can learn about the function of an object. However, all help patches are also functional Max patches. In this case, I was able to unlock the &amp;lt;strong&amp;gt;adstatus.maxhelp&amp;lt;/strong&amp;gt; patch, copy the functional objects that I needed, then paste them into my subpatcher. By connecting a few inlets and outlets, I'd created the small and efficient input setup handler that I needed.&lt;br /&gt;
&lt;br /&gt;
In addition to setting the DSP Settings, I also want to control gain at this point. This is especially important with an instrument-driven patch, since different input hardware will provide vastly different levels. In my case, I may be using an IK Multimedia StealthPlug, a mixer with an audio interface, or even a direct connection into my Mac's audio input - so I want good control of my front-end gain. I did this by adding a &amp;lt;strong&amp;gt;*~&amp;lt;/strong&amp;gt; object to the input section, then routed the input into this control. By using a scale control, I'm able to change the normal range of the gain knob (0-127) into a range that goes from 0.0 (silent) to 2.0 (double-volume).&lt;br /&gt;
&lt;br /&gt;
==Compression==&lt;br /&gt;
&lt;br /&gt;
The next stage of the patch is a compressor. Since compression can have a very significant effect on the sound of the instrument, I wanted detailed control over its parameters. Therefore, I am using number boxes (rather than knobs) to control the values; this gives me precise control over the compressor's operation without having to guess at a knob's output value.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;img&amp;gt;http://1cyjknyddcx62agyb002-web-assets.s3.amazonaws.com/1-Kompressor.png&amp;lt;/img&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Again, this section is mostly a set of controls connected to an abstraction named &amp;quot;comp_handler&amp;quot;. Double-click on this subpatcher to view its contents. This is a very simple subpatch; I've just borrowed the komp subpatcher (found in examples/effects/kompressor/lib of the Max folder) without change. I set a one parameter (lookahead) directly with a &amp;lt;strong&amp;gt;loadbang&amp;lt;/strong&amp;gt;, but mostly expose the functions directly to the main patcher. Since this subpatcher is so simple, why didn't I just use komp directly in my main patch?&lt;br /&gt;
&lt;br /&gt;
In the future, I may want to develop my own compressor system, or I may choose to implement the omx-based compressor included with MSP. I may even break down and use a VST compressor. In any of these cases, I would want to change the compressor &amp;quot;engine&amp;quot; without having to disturb my main patcher. By placing the compressor in a subpatch, I can change the underlying compression engine without ever having to change the top-level patch or the user interface.&lt;br /&gt;
&lt;br /&gt;
This is a &amp;quot;high detail&amp;quot; compressor, giving me the kind of control I want for a flexible rig. If you aren't that familiar with compression, though, it may seem a little intimidating. Here are a few settings that I've found useful with this processor:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;img&amp;gt;http://1cyjknyddcx62agyb002-web-assets.s3.amazonaws.com/1-table.jpg&amp;lt;/img&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;em&amp;gt; (Sidebar)&amp;lt;/em&amp;gt; In each of the processing areas, you will see a small grey panel - it doesn't seem to do anything. However, when you switch into Presentation Mode, you should see these panels expand to become the background of the individual processing sections. This is an example of using the Presentation Mode's ability to change an object's geometry to keep my patching view clean, but give me an attractive user interface.&lt;br /&gt;
&lt;br /&gt;
==Output Staging==&lt;br /&gt;
&lt;br /&gt;
The final processing section for this tutorial controls the output. This section will be familiar to any Max/MSP programmer - it's the basis for audio output in almost any audio patch. The output of the compressor is sent to the two faders, which provide left/right volume control. The signal is then routed to an &amp;lt;strong&amp;gt;EZDAC~&amp;lt;/strong&amp;gt;, which is also our DSP on/off control. If you have your guitar (or other instrument) plugged into the computer, you can check the settings on the input module, turn on the DSP, turn up the volume and hear your instrument through the patch.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;img&amp;gt;http://1cyjknyddcx62agyb002-web-assets.s3.amazonaws.com/1-OutputStuff.png&amp;lt;/img&amp;gt;&lt;br /&gt;
&lt;br /&gt;
However, it's not always convenient to test with an actual instrument. For example, some of this patch was done while I was waiting in an airport. The last thing the PSA wants to see is for me to pull out a guitar and start wailing. What I've done is to include a &amp;quot;test fixture&amp;quot; - some standard audio generating code - that I can use to test the patch as it is being built. You will notice that this section (labeled &amp;quot;test fixture&amp;quot;) gives me the opportunity to load and play a file or to generate noise. This is a small bit of code I've copied from another patch of mine - I use it as a test fixture for almost every audio patch I write.&lt;br /&gt;
&lt;br /&gt;
The output of this fixture is routed to a &amp;lt;strong&amp;gt;send~&amp;lt;/strong&amp;gt; object labeled &amp;quot;test&amp;quot;. This audio is received in the input section, at the same point that my patch would see an instrument from the audio input. This way, I can test patches without having an instrument plugged in, helping me to be productive when the guitar isn't easily available.&lt;br /&gt;
&lt;br /&gt;
==Conclusion==&lt;br /&gt;
&lt;br /&gt;
We've created the basic I/O blocks for our performance patch. In the next article, we will expand it by adding a good-sounding distortion/overdrive system and a highly controllable filter/EQ. In the meantime, work with this basic patch, learn to understand the routing between the objects and explore the use of the compressor. Until next time - have fun!&lt;/div&gt;</summary>
		<author><name>Gtaylor@rtqe.net</name></author>	</entry>

	<entry>
		<id>http://cycling74.com/wiki/index.php?title=Mgraphics_Patch-A-Day</id>
		<title>Mgraphics Patch-A-Day</title>
		<link rel="alternate" type="text/html" href="http://cycling74.com/wiki/index.php?title=Mgraphics_Patch-A-Day"/>
				<updated>2012-12-05T21:54:25Z</updated>
		
		<summary type="html">&lt;p&gt;Gtaylor@rtqe.net: /* Day 1 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;These postings originally appeared on the Cycling '74 forum as [http://cycling74.com/forums/topic.php?id=36044 JSUI-MGraphics patch-a-day].&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
I'm going to produce and post one new JSUI patch that uses the new MGraphics system every day for a month. I'm currently working on MGraphics documentation, and thought that people would like a jump-start on this as part of learning this new drawing system.&lt;br /&gt;
&lt;br /&gt;
The MGraphics system is based on the same coding engine used for C-based coding, so it is high-performance and ultra-capable. I hope that you enjoy these patches.&lt;br /&gt;
&lt;br /&gt;
As my colleague Andrew Pask would say: &amp;quot;Happy Patching!&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Darwin D. Grosse (ddg@cycling74.com)&lt;br /&gt;
&lt;br /&gt;
==Day 1==&lt;br /&gt;
&lt;br /&gt;
BasicStrokes shows how to set up the Mgraphics system and do basic line drawing - called ''paths'' drawn with ''strokes''. This is about the simplest useful patch I could come up with, but it hopefully helps you see how easy it is to create a basic UI.&lt;br /&gt;
&lt;br /&gt;
Enjoy!&lt;br /&gt;
&lt;br /&gt;
[//1cyjknyddcx62agyb002-web-assets/ddg_mgraphics1/1101BasicStrokes.zip Download the patch]&lt;br /&gt;
&lt;br /&gt;
==Day 2==&lt;br /&gt;
&lt;br /&gt;
BezStrokes is a bit different: it uses the Bezier curve drawing function to create a simple loop from the top, toward the bottom, then back up to the top. I also use &amp;quot;relative coordinate&amp;quot; mode, and have to calculate the aspect ratio in order to fill the display area. Relative coordinates can be easier to work with for arbitrary object sizes, but you have somewhat less control over the actual draw positions.&lt;br /&gt;
&lt;br /&gt;
Enjoy!&lt;br /&gt;
&lt;br /&gt;
[http://1cyjknyddcx62agyb002-web-assets/ddg_mgraphics1/1102BezStrokes.zip Download the patch]&lt;br /&gt;
&lt;br /&gt;
==Day 3==&lt;br /&gt;
&lt;br /&gt;
This is a simple example of drawing circles within the JSUI space, but uses ''relative coordinate'' mode so that it automatically scales properly. It also determines the aspect ratio in the '''paint()''' routine so that it will scale properly in both patching and presentation mode.&lt;br /&gt;
&lt;br /&gt;
This isn't &amp;quot;art&amp;quot;, but it is something that is a great foundation for shape drawing work.&lt;br /&gt;
&lt;br /&gt;
Enjoy!&lt;br /&gt;
&lt;br /&gt;
[http://1cyjknyddcx62agyb002-web-assets/ddg_mgraphics1/1103CircFill.zip Download the patch]&lt;br /&gt;
&lt;br /&gt;
==Day 4==&lt;br /&gt;
&lt;br /&gt;
This shows some basic uses of the pattern generation functions within Mgraphics. The creation of the pattern (pattern_create_linear and pattern_create_radial) builds a gradient for use during shape fills. In these originating calls, you define the ''influence'' points - the points on a plane that describe the location of gradient startup. If these points are close together, the edge between segments will be tightly defined; if the points are farther apart, the edge will be more of a gradient.&lt;br /&gt;
&lt;br /&gt;
Once you define the two points, you have to give each a color (using the add_color_stop_rgba function, which needs an index - either 0 or 1 - followed by an rgba color set) and tell the next drawing routine to use this pattern for drawing. The next time you do a '''fill()''' or '''stroke()''' call, the routine will use the pattern rather than a single color.&lt;br /&gt;
&lt;br /&gt;
So, in this case, I create a black background (using a rectangle), build up a color, then have a ball displayed/drawn using a background color. You'll notice that the moving ball shows an unchanging background, since the pattern is defined by absolute location rather than relative (to the object) location. Thus, we perform the sleight-of-hand that makes it look like we have a &amp;quot;porthole&amp;quot; into the background, when in fact we are simply drawing the shape using a pattern.&lt;br /&gt;
&lt;br /&gt;
Enjoy!&lt;br /&gt;
&lt;br /&gt;
[http://1cyjknyddcx62agyb002-web-assets/ddg_mgraphics1/1104Patterns.zip Download the patch]&lt;br /&gt;
&lt;br /&gt;
==Day 5==&lt;br /&gt;
&lt;br /&gt;
I wanted to do something that showed management of line width. I started playing with something, and it ended up like this. I'm not sure that it is that useful for learning line width handling, but it does make a cool little op-art display.&lt;br /&gt;
&lt;br /&gt;
Enjoy!&lt;br /&gt;
&lt;br /&gt;
[http://1cyjknyddcx62agyb002-web-assets/ddg_mgraphics1/1105StraightLiner.zip Download the patch]&lt;br /&gt;
&lt;br /&gt;
==Day 6==&lt;br /&gt;
&lt;br /&gt;
I wanted to do something with the mouse, with timers and in non-relative mode. So this is what you get: a cool little drawer that does some cool animation on the tail of the draw. Later this week I'll be doing a patch with a little easier means for persistent drawing, but for the moment you can have a little fun with this.&lt;br /&gt;
&lt;br /&gt;
One fun part of this is to see what happens when Mgraphics tries to draw really short, but really wide, lines. You get funky little stars because minute (1- or 2-pixel) lengths cause significant changes in the drawing function.&lt;br /&gt;
&lt;br /&gt;
Enjoy!&lt;br /&gt;
&lt;br /&gt;
[http://1cyjknyddcx62agyb002-web-assets/ddg_mgraphics1/1106PuffDraw.zip Download the patch]&lt;br /&gt;
&lt;br /&gt;
==Day 7==&lt;br /&gt;
&lt;br /&gt;
Time to write some text. Since I don't have anything particular to say for myself, I'll let the fonts speak for themselves.&lt;br /&gt;
&lt;br /&gt;
Doing a lot of text printing can be a bit of a processing hog. You can see this by increasing the number of fonts to some Really Large Number. Or change the metro to run really fast. These drawn text lines will start to drag on the system...&lt;br /&gt;
&lt;br /&gt;
But this is a cool introduction to text drawing, and how you can be a little creative with whatever you have on your system.&lt;br /&gt;
&lt;br /&gt;
[http://1cyjknyddcx62agyb002-web-assets/ddg_mgraphics1/1107FontMess.zip Download the patch]&lt;br /&gt;
&lt;br /&gt;
==Day 8==&lt;br /&gt;
&lt;br /&gt;
Fun with fonts, again - this time with a little rotation. Can you really make a flower that says &amp;quot;I am a flower&amp;quot;? Easy enough with Max.&lt;br /&gt;
&lt;br /&gt;
You'll notice in this Javascript that we call '''identity_matrix()''' after each rotation. That's because the rotate function rotates the drawing area, and therefore needs to be reset after each path fill. Another option would be to rotate by the same amount for each iteration, but that would require a lot more thinking than simply resetting each time.&lt;br /&gt;
&lt;br /&gt;
Enjoy!&lt;br /&gt;
&lt;br /&gt;
[http://1cyjknyddcx62agyb002-web-assets/ddg_mgraphics1/1108FontFlowers.zip Download the patch]&lt;br /&gt;
&lt;br /&gt;
==Day 9==&lt;br /&gt;
&lt;br /&gt;
Sometimes, when you are working with relative coordinates, you have to do a little monkey work in order to deal with transformations (translation, rotation and scaling). In this case, we draw our spiral at the top-left, then let the translation functions to their thing.&lt;br /&gt;
&lt;br /&gt;
If nothing else, it helps us communicate with Dr. Mesmer.&lt;br /&gt;
&lt;br /&gt;
Enjoy!&lt;br /&gt;
&lt;br /&gt;
[http://1cyjknyddcx62agyb002-web-assets/ddg_mgraphics1/1109Spiral.zip Download the patch]&lt;br /&gt;
&lt;br /&gt;
==Day 10==&lt;br /&gt;
&lt;br /&gt;
Up to now, all of our drawing has occurred in the '''paint()''' method, which is called every time that the component needs to refresh itself. This is fine in many cases, but troubling in some cases:&lt;br /&gt;
&lt;br /&gt;
* If the paint method contains some generative function, you cannot know when the visual is going to be recalculated.&lt;br /&gt;
&lt;br /&gt;
* If your drawing function does *a lot* of stuff, you can find performance starting to suffer.&lt;br /&gt;
&lt;br /&gt;
So what to do? This sketch shows how to draw to an alternative MGraphics instance, save that visual as an Image object, then use that image to redraw the component during a refresh. The performance is very high (in this case, drawing 1000 semi-transparent rectangles) because the drawing is only done when you ask the drawing to be redone.&lt;br /&gt;
&lt;br /&gt;
Very important stuff here. Thanks to JKC for the help with this!&lt;br /&gt;
&lt;br /&gt;
Enjoy!&lt;br /&gt;
&lt;br /&gt;
[http://1cyjknyddcx62agyb002-web-assets/ddg_mgraphics1/1110SurfaceWork.zip Download the patch]&lt;br /&gt;
&lt;br /&gt;
==Day 11==&lt;br /&gt;
&lt;br /&gt;
When you create a surface for drawing (using the separate MGraphics instance we saw last time), you don't have to make an opaque surface - it can be alpha channel reduced, allowing us to make semi-transparent figures that can be reused. In this case, I make a Big Red Square, scale the user space when drawing it, then draw a blue circle over the top. Everything is half-alpha'd, so you get a little see-thru no matter what happens.&lt;br /&gt;
&lt;br /&gt;
Enjoy!&lt;br /&gt;
&lt;br /&gt;
[http://1cyjknyddcx62agyb002-web-assets/ddg_mgraphics1/1111SurfaceTwister.zip Download the patch]&lt;br /&gt;
&lt;br /&gt;
==Day 12==&lt;br /&gt;
&lt;br /&gt;
You'll notice by the name of the patch and javascript that this is a rubber stamping of a single image. But when you watch it run, you'll see that it is not a rubber stamp - it's a scaled, rotated and transformed version of the same star, warped and manipulated on the display area.&lt;br /&gt;
&lt;br /&gt;
When you look at the code, you'll see what's happening - sorta. Some of the actions of the &amp;quot;stamp&amp;quot; are not obvious when you see the code. We are going to be exploring this over the next few days.&lt;br /&gt;
&lt;br /&gt;
In the meantime, enjoy!&lt;br /&gt;
&lt;br /&gt;
[http://1cyjknyddcx62agyb002-web-assets/ddg_mgraphics1/1112RubberStamper.zip Download the patch]&lt;br /&gt;
&lt;br /&gt;
==Day 13==&lt;br /&gt;
&lt;br /&gt;
In this patch, we are going to investigate what happens when we use the translate function to change the drawing location within Mgraphics. You select different menu options to see what happens when you shift the location around. The last menu entry uses the translate function to draw the oscillator in the middle of the box.&lt;br /&gt;
&lt;br /&gt;
When you use the translate function, you are moving ''user space'' around. After drawing/rendering is complete, the drawing is clipped to the display area. So, translate calls in a positive direction move the origin (0,0) to the right and down, while translate calls in a negative direction move the origin up and to the left.&lt;br /&gt;
&lt;br /&gt;
Working with '''translate()''' provides a lot of functionality in placing and altering our draw routines.&lt;br /&gt;
&lt;br /&gt;
Enjoy!&lt;br /&gt;
&lt;br /&gt;
[http://1cyjknyddcx62agyb002-web-assets/ddg_mgraphics1/1113TranslateTester.zip Download the patch]&lt;br /&gt;
&lt;br /&gt;
==Day 14==&lt;br /&gt;
&lt;br /&gt;
This is an investigation of the scale function. It actually acts the way that you'd expect, but the ability to change both X and Y scaling separately gives you some interesting ways to warp your display. In this example, I use the same box and image, but I also included a line of text so you can see how text paths react to the effort.&lt;br /&gt;
&lt;br /&gt;
Enjoy!&lt;br /&gt;
&lt;br /&gt;
[http://1cyjknyddcx62agyb002-web-assets/ddg_mgraphics1/1114ScaleTester.zip Download the patch]&lt;br /&gt;
&lt;br /&gt;
==Day 15==&lt;br /&gt;
&lt;br /&gt;
Just like the translate and scale functions, we also need to play with the rotate function. However, unlike the previous investigations, this one shows a bit of funky action. Select the last menu item and adjust the number box. The rectangle and the text rotate cleanly, but the image has some issues...&lt;br /&gt;
&lt;br /&gt;
Therein lies a limitation of the rotation function - image drawing doesn't really survive the rotation process like you'd hope...&lt;br /&gt;
&lt;br /&gt;
Enjoy!&lt;br /&gt;
&lt;br /&gt;
[http://1cyjknyddcx62agyb002-web-assets/ddg_mgraphics1/1115RotateTester.zip Download the patch]&lt;br /&gt;
&lt;br /&gt;
==Day 16==&lt;br /&gt;
&lt;br /&gt;
Taking a break from the function exploration, I made a little patch that uses the '''rel_line_to''' function to build a bit of piping. There's a bit of extra logic to make sure that we aren't going out of bounds, using the '''get_current_point''' function.&lt;br /&gt;
&lt;br /&gt;
Enjoy!&lt;br /&gt;
&lt;br /&gt;
[http://1cyjknyddcx62agyb002-web-assets/ddg_mgraphics1/1116RelativeMaze.zip Download the patch]&lt;br /&gt;
&lt;br /&gt;
==Day 17==&lt;br /&gt;
&lt;br /&gt;
One of the problems with the previous example is that we only get one line width for all segments, and only one color (which we didn't even bother to set). You could change these in the main loop, but you'd be disappointed; since the '''stroke()''' is not called until after the loop has drawn all the segments, only the last call will be used for the '''stroke()''' function.&lt;br /&gt;
&lt;br /&gt;
In this updated version, we set the colors and locations (and call stroke) at each iteration. However, we also need to save the last position just before the stroke call. Once stroke is called, the path is lost - and therefore, the ''current location'' is 0,0. So we find the current location just before the '''stroke()''', use that for the next iteration, and are rewarded with the ability to change the line width and color for each segment.&lt;br /&gt;
&lt;br /&gt;
Enjoy!&lt;br /&gt;
&lt;br /&gt;
[http://1cyjknyddcx62agyb002-web-assets/ddg_mgraphics1/1117DifferentPipes.zip Download the patch]&lt;br /&gt;
&lt;br /&gt;
==Day 18==&lt;br /&gt;
&lt;br /&gt;
Back to playing with transformative function - in this case the most arbitrary of all: the '''transform()''' function. The transform function takes six arguments, for which I've given the labels xx, xy, yx, yy, x0 and y0. (Note: These are taken from deep within the Max Mgraphics code, but you'll see how they relate to the real world in a second...)&lt;br /&gt;
&lt;br /&gt;
All of the '''rotate()''', '''translate()''' and '''scale()''' functions can be built into a single transformation using these size values. The xx and yy values control the x and y scaling. The xy and yx values are the basis of the '''rotate()''' function. The x0 and y0 values are offsets as provided by the '''translate()''' function. But you can see that presenting this information in a matrix format gives you the ability to play with arbitrary scaling and movement options that would be difficult to do with the normal functions.&lt;br /&gt;
&lt;br /&gt;
It is also important to note the effect of a transform matrix on the lines that are drawn. If you change the line width to 10 or more inside the code, then do more extensive transforms, the line size is directly affected.&lt;br /&gt;
&lt;br /&gt;
A great place to learn more about the transform function is to look at the Cairo tutorial about transforms, found at [http://cairographics.org/tutorial/#L1transforms http://cairographics.org/tutorial/#L1transforms]&lt;br /&gt;
&lt;br /&gt;
Hopefully, this little tester can help you get on top of the transform function and the transformation matrix. Enjoy!&lt;br /&gt;
&lt;br /&gt;
[http://1cyjknyddcx62agyb002-web-assets/ddg_mgraphics1/1118TransformTester.zip Download the patch]&lt;br /&gt;
&lt;br /&gt;
==Day 19==&lt;br /&gt;
&lt;br /&gt;
What's the use of knowing about the '''transform()''' function without actually having any fun with it? This patch uses the XY and YX segments of the transform to give a seasick, psuedo-3D movement to the drawn rectangles. Pretty basic, but also pretty interesting.&lt;br /&gt;
&lt;br /&gt;
I make a special note of drawing outside the visible area, and letting the transform expose part of the drawn space that you otherwise wouldn't see. If you are doing crazy animations, remember to draw out stuff that may not initially be visible, but will show up after transformation, translation or rotation.&lt;br /&gt;
&lt;br /&gt;
Enjoy!&lt;br /&gt;
&lt;br /&gt;
[http://1cyjknyddcx62agyb002-web-assets/ddg_mgraphics1/1119DrunkenRect.zip Download the patch]&lt;br /&gt;
&lt;br /&gt;
==Day 20==&lt;br /&gt;
&lt;br /&gt;
So digging into cairographics site, I ran across some information about dealing with the distortion of a warped transform matrix. In this example, I use the '''save()''' and '''restore()''' functions to reset the transformation before the '''stroke()''' call is made, thereby making the lines work better.&lt;br /&gt;
&lt;br /&gt;
With the toggle box in the patch unchecked, it works identically to yesterday's patch. If you turn on the toggle, though, the drawing routine is changed so that '''stroke()''' is not called until we restore the transform to its normal state.&lt;br /&gt;
&lt;br /&gt;
The '''save()''' and '''restore()''' functions are perfect for this sort of application: a situation where you alter the environment considerably, but don't want to pay a penalty in graphic output quality. I hope this makes sense, but the (somewhat subtle) visible end result should speak for itself.&lt;br /&gt;
&lt;br /&gt;
Enjoy!&lt;br /&gt;
&lt;br /&gt;
[http://1cyjknyddcx62agyb002-web-assets/ddg_mgraphics1/1120CleanerWarp.zip Download the patch]&lt;br /&gt;
&lt;br /&gt;
==Day 21==&lt;br /&gt;
&lt;br /&gt;
This is an example of saving a path and reusing it for alternate versions of the path. The &amp;quot;red&amp;quot; part of the display is what I originally draw, while the black (and warped) images are based on reusing the saved path with a variety of rotations, translations and scalings.&lt;br /&gt;
&lt;br /&gt;
I just also happen to really like this display...&lt;br /&gt;
&lt;br /&gt;
Enjoy!&lt;br /&gt;
&lt;br /&gt;
[http://1cyjknyddcx62agyb002-web-assets/ddg_mgraphics1/1121LonelyBug.zip Download the patch]&lt;br /&gt;
==Day 22==&lt;br /&gt;
&lt;br /&gt;
By request, here is an example of using images with acceptable rotation. In order to do it, you have to actually create an image background for a surface, then use that as a rectangle fill. A little convoluted, but it allows you to use images in a warped environment. Handy stuff...&lt;br /&gt;
&lt;br /&gt;
Enjoy!&lt;br /&gt;
&lt;br /&gt;
[http://1cyjknyddcx62agyb002-web-assets/ddg_mgraphics1/1122ImageRotate.zip Download the patch]&lt;br /&gt;
&lt;br /&gt;
==Day 23==&lt;br /&gt;
&lt;br /&gt;
Continuing the exploration of images, in this one we use the set_source_rgba to determine the alpha (transparancy) that will be used for drawing the image to the display area. This allows use to custom fade the output. Again, notice that we also have to translate the location (rather than just '''move_to()''') in order to get the display to position correctly, and that we '''save()''' and '''restore()''' to return to the normal display layout.&lt;br /&gt;
&lt;br /&gt;
Enjoy!&lt;br /&gt;
&lt;br /&gt;
[http://1cyjknyddcx62agyb002-web-assets/ddg_mgraphics1/1123ImageFade.zip Download the patch]&lt;br /&gt;
==Day 24==&lt;br /&gt;
&lt;br /&gt;
This is a simple one, leaving me some time to eat turkey and watch The World Champion Green Bay Packer do whatever they are going to do. Yeah, I'm one of those pathetic knucklehead football fans...&lt;br /&gt;
&lt;br /&gt;
I'm in the process of putting together a sprite-equivalent; in order to do so, I needed to find out how transparancy is handled. The good news: if you have an image with built-in transparancy, it just works. In this example, I created a really simple &amp;quot;O&amp;quot; with a transparent middle and built a simple overlay automation. Sure enough - the transparancy is maintained through the image_surface_draw call.&lt;br /&gt;
&lt;br /&gt;
Enjoy!&lt;br /&gt;
&lt;br /&gt;
[http://1cyjknyddcx62agyb002-web-assets/ddg_mgraphics1/1124TransDraw.zip Download the patch]&lt;br /&gt;
==Day 25==&lt;br /&gt;
&lt;br /&gt;
After a little turkey coma and basking in a Packers win, I decided to open the door to the push and pop routines. Basically, the '''push_group()''' routine pushes a drawing activity onto the drawing stack, and '''pop_group()''' pulls it off - creating a pattern-surface as a result. This can be dropped into an image and used over and over.&lt;br /&gt;
&lt;br /&gt;
In this case, you see that when the system calls the '''paint()''' routine, it will reuse the existing image, but if I bang the JSUI object, it will recreate a new image. This is the sort of thing that you will have to do if you choose to reuse a display.&lt;br /&gt;
&lt;br /&gt;
Enjoy!&lt;br /&gt;
&lt;br /&gt;
[http://1cyjknyddcx62agyb002-web-assets/ddg_mgraphics1/1125PushAndPop.zip Download the patch]&lt;br /&gt;
&lt;br /&gt;
==Day 26==&lt;br /&gt;
&lt;br /&gt;
Back home from the Wisconsin trip, and time to put the kids to work. &amp;quot;Here's Photoshop. Please make me a spaceship...&amp;quot;&lt;br /&gt;
&lt;br /&gt;
This is a very simple implementation of a layered sprite system. It has a GenericSprite object, and a use-specific ship object that augments the GenericSprite with a move function. The result is that bangs move the ship back-and-forth among some trees, properly layered within the other sprites.&lt;br /&gt;
&lt;br /&gt;
Nothing too Mgraphics-specific here, but useful for seeing how to perform some basic sprite-like operations within the JSUI/MGraphics system.&lt;br /&gt;
&lt;br /&gt;
Enjoy!&lt;br /&gt;
&lt;br /&gt;
[http://1cyjknyddcx62agyb002-web-assets/ddg_mgraphics1/1126SpriteObj.zip Download the patch]&lt;br /&gt;
&lt;br /&gt;
==Day 27==&lt;br /&gt;
&lt;br /&gt;
Just like working with path and image drawing, you can also transform the user space for pattern creation. Rather than stretching this out over several examples, I just created a simple &amp;quot;Pattern Transform Explorer&amp;quot; for you to see how each of the functions works with a simple linear pattern creation.&lt;br /&gt;
&lt;br /&gt;
Enjoy!&lt;br /&gt;
&lt;br /&gt;
[http://1cyjknyddcx62agyb002-web-assets/ddg_mgraphics1/1127PattXForm.zip Download the patch]&lt;br /&gt;
&lt;br /&gt;
==Day 28==&lt;br /&gt;
&lt;br /&gt;
Sometimes it is more convenient to do your drawing with another program, then use JSUI to do the display. The problem is that scaling can get to be sort of grainy. Not the case if you use the SVG file format for the drawing - and use the '''svg_render()''' function to render it into the current user space.&lt;br /&gt;
&lt;br /&gt;
This patch includes a little SVG I created in Illustrator; I use it within JSUI to create a cool little animation with almost no code.&lt;br /&gt;
&lt;br /&gt;
Enjoy!&lt;br /&gt;
&lt;br /&gt;
[http://1cyjknyddcx62agyb002-web-assets/ddg_mgraphics1/1128UseSVG.zip Download the patch]&lt;br /&gt;
&lt;br /&gt;
==Day 29==&lt;br /&gt;
&lt;br /&gt;
Using the '''transform()''', '''translate()''', '''rotate()''' and '''scale()''' functions give us the ability to do some complex graphical drawing that would otherwise require altogether too much math to consider. In this one, we use these function to create a tilted three-planet orbit display on a pretty blue background.&lt;br /&gt;
&lt;br /&gt;
Oh, and we also pipe the output to a Jitter matrix! In order to do this, we use the '''push_group()''' '''and pop_group()''' functions to create a working area for the drawing, produce an image from the result, then display the output in both the JSUI drawing area and output it as a matrix. The translation (from Mgraphics to Jitter matrix) isn't perfect, but it gives us the ability to do a lot with the result.&lt;br /&gt;
&lt;br /&gt;
Enjoy!&lt;br /&gt;
&lt;br /&gt;
[http://1cyjknyddcx62agyb002-web-assets/ddg_mgraphics1/1129ToJitter.zip Download the patch]&lt;br /&gt;
&lt;br /&gt;
==Day 30==&lt;br /&gt;
&lt;br /&gt;
Alas, we hit the end of the road. In this ditty, we do a bit of javascript coding to perform a word-wrap on my heartfelt goodbye. Change the font or the font size and the text should wrap accordingly. This uses the '''text_measure()''' function to get the width of a string, then back-pedal if we've gone too far.&lt;br /&gt;
&lt;br /&gt;
Not the most elegant wordwrap function ever written, but you get the idea.&lt;br /&gt;
&lt;br /&gt;
I hope you've enjoyed the series, and find the Mgraphics system to your liking!&lt;br /&gt;
&lt;br /&gt;
[http://1cyjknyddcx62agyb002-web-assets/ddg_mgraphics1/1130VerySpecialMessage.zip Download the patch]&lt;br /&gt;
&lt;br /&gt;
[[Category:Max And Mgraphics]]&lt;/div&gt;</summary>
		<author><name>Gtaylor@rtqe.net</name></author>	</entry>

	<entry>
		<id>http://cycling74.com/wiki/index.php?title=Main_Page</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="http://cycling74.com/wiki/index.php?title=Main_Page"/>
				<updated>2012-11-22T16:39:40Z</updated>
		
		<summary type="html">&lt;p&gt;Gtaylor@rtqe.net: /* People and Places */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
[[Category:Courses]]&lt;br /&gt;
&lt;br /&gt;
Welcome to the Cycling '74 Wiki - a place where we will be working alongside you to shape and maintain a repository of useful information about Max, MSP, and Jitter. As a quick look around will suggest, it’s in process - pages and sections are appearing/under development, and being expanded. Since this Wiki is a work in progress, your help is going to be essential in terms of defining both the content and form for the Wiki. So consider this a call to action – what is it about Max, MSP or Jitter that you value and know about? The [[Editing_QuickStart|Editing QuickStart]]  page will help you get started. Those who come after you will thank you as we thank you now. Onward! &lt;br /&gt;
&lt;br /&gt;
== All About Max ==&lt;br /&gt;
Learn more about Max, MSP and Jitter.&lt;br /&gt;
&amp;lt;categorytree mode=pages hideroot=on&amp;gt;Max&amp;lt;/categorytree&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Max and Technology ==&lt;br /&gt;
Using specific technologies within the Max environment&lt;br /&gt;
&amp;lt;categorytree mode=pages hideroot=on&amp;gt;MaxAnd&amp;lt;/categorytree&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Max Interfaces ==&lt;br /&gt;
Using Max with the rest of the world&lt;br /&gt;
&amp;lt;categorytree mode=pages hideroot=on&amp;gt;MaxWith&amp;lt;/categorytree&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Topics and Techniques ==&lt;br /&gt;
Learning Max-specific techniques and strategies&lt;br /&gt;
&amp;lt;categorytree mode=pages hideroot=on&amp;gt;MaxTopics&amp;lt;/categorytree&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== People and Places ==&lt;br /&gt;
Max in the real world - workshops/courses, events, and resources&lt;br /&gt;
&amp;lt;categorytree mode=pages hideroot=on&amp;gt;PeoplePlaces&amp;lt;/categorytree&amp;gt;&lt;br /&gt;
[//cycling74.com/schools-that-teach-max/ Schools that teach Max]&lt;br /&gt;
&lt;br /&gt;
== Do you want to write an article? ==&lt;br /&gt;
Here is some information that can help.&lt;br /&gt;
&lt;br /&gt;
*[[Editing QuickStart]]&lt;br /&gt;
*[[Using Categories On This Site]]&lt;br /&gt;
*[//meta.wikimedia.org/wiki/Help:Contents#For_editors The MediaWiki Editor's Guide]&lt;br /&gt;
*[//meta.wikimedia.org/wiki/Help:Contents The MediaWiki User's Guide]&lt;/div&gt;</summary>
		<author><name>Gtaylor@rtqe.net</name></author>	</entry>

	<entry>
		<id>http://cycling74.com/wiki/index.php?title=Main_Page</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="http://cycling74.com/wiki/index.php?title=Main_Page"/>
				<updated>2012-11-22T15:23:10Z</updated>
		
		<summary type="html">&lt;p&gt;Gtaylor@rtqe.net: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
[[Category:Courses]]&lt;br /&gt;
&lt;br /&gt;
Welcome to the Cycling '74 Wiki - a place where we will be working alongside you to shape and maintain a repository of useful information about Max, MSP, and Jitter. As a quick look around will suggest, it’s in process - pages and sections are appearing/under development, and being expanded. Since this Wiki is a work in progress, your help is going to be essential in terms of defining both the content and form for the Wiki. So consider this a call to action – what is it about Max, MSP or Jitter that you value and know about? The [[Editing_QuickStart|Editing QuickStart]]  page will help you get started. Those who come after you will thank you as we thank you now. Onward! &lt;br /&gt;
&lt;br /&gt;
== All About Max ==&lt;br /&gt;
Learn more about Max, MSP and Jitter.&lt;br /&gt;
&amp;lt;categorytree mode=pages hideroot=on&amp;gt;Max&amp;lt;/categorytree&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Max and Technology ==&lt;br /&gt;
Using specific technologies within the Max environment&lt;br /&gt;
&amp;lt;categorytree mode=pages hideroot=on&amp;gt;MaxAnd&amp;lt;/categorytree&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Max Interfaces ==&lt;br /&gt;
Using Max with the rest of the world&lt;br /&gt;
&amp;lt;categorytree mode=pages hideroot=on&amp;gt;MaxWith&amp;lt;/categorytree&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Topics and Techniques ==&lt;br /&gt;
Learning Max-specific techniques and strategies&lt;br /&gt;
&amp;lt;categorytree mode=pages hideroot=on&amp;gt;MaxTopics&amp;lt;/categorytree&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== People and Places ==&lt;br /&gt;
Max in the real world - workshops/courses, events, and resources&lt;br /&gt;
&amp;lt;categorytree mode=pages hideroot=on&amp;gt;PeoplePlaces&amp;lt;/categorytree&amp;gt;&lt;br /&gt;
*[//cycling74.com/schools-that-teach-max/ Schools that teach Max]&lt;br /&gt;
&lt;br /&gt;
== Do you want to write an article? ==&lt;br /&gt;
Here is some information that can help.&lt;br /&gt;
&lt;br /&gt;
*[[Editing QuickStart]]&lt;br /&gt;
*[[Using Categories On This Site]]&lt;br /&gt;
*[//meta.wikimedia.org/wiki/Help:Contents#For_editors The MediaWiki Editor's Guide]&lt;br /&gt;
*[//meta.wikimedia.org/wiki/Help:Contents The MediaWiki User's Guide]&lt;/div&gt;</summary>
		<author><name>Gtaylor@rtqe.net</name></author>	</entry>

	<entry>
		<id>http://cycling74.com/wiki/index.php?title=Main_Page</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="http://cycling74.com/wiki/index.php?title=Main_Page"/>
				<updated>2012-11-22T15:21:16Z</updated>
		
		<summary type="html">&lt;p&gt;Gtaylor@rtqe.net: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
[[Category:Courses]]&lt;br /&gt;
&lt;br /&gt;
Welcome to the Cycling '74 Wiki - a place where we will be working alongside you to shape and maintain a repository of useful information about Max, MSP, and Jitter. As a quick look around will suggest, it’s in process - pages and sections are appearing/under development, and being expanded. Since this Wiki is a work in progress, your help is going to be essential in terms of defining both the content and form for the Wiki. So consider this a call to action – what is it about Max, MSP or Jitter that you value and know about? The Editing QuickStart page will help you get started. Those who come after you will thank you as we thank you now. Onward! &lt;br /&gt;
&lt;br /&gt;
== All About Max ==&lt;br /&gt;
Learn more about Max, MSP and Jitter.&lt;br /&gt;
&amp;lt;categorytree mode=pages hideroot=on&amp;gt;Max&amp;lt;/categorytree&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Max and Technology ==&lt;br /&gt;
Using specific technologies within the Max environment&lt;br /&gt;
&amp;lt;categorytree mode=pages hideroot=on&amp;gt;MaxAnd&amp;lt;/categorytree&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Max Interfaces ==&lt;br /&gt;
Using Max with the rest of the world&lt;br /&gt;
&amp;lt;categorytree mode=pages hideroot=on&amp;gt;MaxWith&amp;lt;/categorytree&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Topics and Techniques ==&lt;br /&gt;
Learning Max-specific techniques and strategies&lt;br /&gt;
&amp;lt;categorytree mode=pages hideroot=on&amp;gt;MaxTopics&amp;lt;/categorytree&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== People and Places ==&lt;br /&gt;
Max in the real world - workshops/courses, events, and resources&lt;br /&gt;
&amp;lt;categorytree mode=pages hideroot=on&amp;gt;PeoplePlaces&amp;lt;/categorytree&amp;gt;&lt;br /&gt;
*[//cycling74.com/schools-that-teach-max/ Schools that teach Max]&lt;br /&gt;
&lt;br /&gt;
== Do you want to write an article? ==&lt;br /&gt;
Here is some information that can help.&lt;br /&gt;
&lt;br /&gt;
*[[Editing QuickStart]]&lt;br /&gt;
*[[Using Categories On This Site]]&lt;br /&gt;
*[//meta.wikimedia.org/wiki/Help:Contents#For_editors The MediaWiki Editor's Guide]&lt;br /&gt;
*[//meta.wikimedia.org/wiki/Help:Contents The MediaWiki User's Guide]&lt;/div&gt;</summary>
		<author><name>Gtaylor@rtqe.net</name></author>	</entry>

	</feed>