<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	>

<channel>
	<title>Cycling 74</title>
	<atom:link href="http://cycling74.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://cycling74.com</link>
	<description>Tools for Media</description>
	<pubDate>Thu, 11 Mar 2010 17:28:00 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.7.1</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Project 53: Visual Performance System</title>
		<link>http://cycling74.com/2010/03/10/project53-visual-performance-system/</link>
		<comments>http://cycling74.com/2010/03/10/project53-visual-performance-system/#comments</comments>
		<pubDate>Wed, 10 Mar 2010 19:10:45 +0000</pubDate>
		<dc:creator>c74</dc:creator>
		
		<category><![CDATA[projects]]></category>

		<category><![CDATA[music]]></category>

		<category><![CDATA[performance]]></category>

		<category><![CDATA[video]]></category>

		<guid isPermaLink="false">http://cycling74.com/?p=4497</guid>
		<description><![CDATA[Author: Blair Neal
Project Date: Ongoing (since 2007)
Troy, New York, USA

A large video performance patch incorporating over 30 video filters, quad-warping and other goodies (a major overhaul was due to Andrew Benson&#8217;s video processing system articles). It has been continuously evolving over the course of my thesis work at RPI as a visual improviser, and is [...]]]></description>
			<content:encoded><![CDATA[<h2>Author: Blair Neal</h2>
<h3>Project Date: Ongoing (since 2007)</h3>
<p class="location">Troy, New York, USA</p>
<p class="image"><img src="http://1cyjknyddcx62agyb002-web-assets.s3.amazonaws.com/projects/project53.png" alt="project" /></p>
<p class="project">A large video performance patch incorporating over 30 video filters, quad-warping and other goodies (a major overhaul was due to Andrew Benson&#8217;s video processing system articles). It has been continuously evolving over the course of my thesis work at RPI as a visual improviser, and is controlled by five different MIDI controllers. The project does not have an official page yet, but there are many examples of my performances on my vimeo page.</p>
<h4><a href="http://www.vimeo.com/laserpilot" target="_blank">Learn More About This Project</a></h4></p>
]]></content:encoded>
			<wfw:commentRss>http://cycling74.com/2010/03/10/project53-visual-performance-system/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Project 52: Tectonic - Earthquakes Generate Music in Realtime</title>
		<link>http://cycling74.com/2010/03/10/project52-tectonic-earthquakes-generate-music-in-realtime/</link>
		<comments>http://cycling74.com/2010/03/10/project52-tectonic-earthquakes-generate-music-in-realtime/#comments</comments>
		<pubDate>Wed, 10 Mar 2010 19:03:34 +0000</pubDate>
		<dc:creator>c74</dc:creator>
		
		<category><![CDATA[projects]]></category>

		<category><![CDATA[earthquake]]></category>

		<category><![CDATA[generative]]></category>

		<category><![CDATA[google-earth]]></category>

		<category><![CDATA[installation]]></category>

		<category><![CDATA[reactive]]></category>

		<category><![CDATA[sound design]]></category>

		<guid isPermaLink="false">http://cycling74.com/?p=4493</guid>
		<description><![CDATA[Author: Micah Frank
Project Date: March 2010
Brooklyn, NY

Tectonic is a sound sculpture created in real time by earthquakes as they occur across the globe. A tightly integrated system between Max/MSP, Google Earth and Ableton Live processes a stream of real-time data that is translated into synthesis and sample playback parameters.

]]></description>
			<content:encoded><![CDATA[<h2>Author: Micah Frank</h2>
<h3>Project Date: March 2010</h3>
<p class="location">Brooklyn, NY</p>
<p class="image"><img src="http://1cyjknyddcx62agyb002-web-assets.s3.amazonaws.com/projects/project52.jpg" alt="project" /></p>
<p class="project">Tectonic is a sound sculpture created in real time by earthquakes as they occur across the globe. A tightly integrated system between Max/MSP, Google Earth and Ableton Live processes a stream of real-time data that is translated into synthesis and sample playback parameters.</p>
<p><object width="560" height="340"><param name="movie" value="http://www.youtube.com/v/-2s9viZ-0KM&#038;hl=en_US&#038;fs=1&#038;"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/-2s9viZ-0KM&#038;hl=en_US&#038;fs=1&#038;" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="560" height="340"></embed></object></p>
]]></content:encoded>
			<wfw:commentRss>http://cycling74.com/2010/03/10/project52-tectonic-earthquakes-generate-music-in-realtime/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Demystifying Expressions in Jitter</title>
		<link>http://cycling74.com/2010/03/08/demystifying-expressions-in-jitter/</link>
		<comments>http://cycling74.com/2010/03/08/demystifying-expressions-in-jitter/#comments</comments>
		<pubDate>Mon, 08 Mar 2010 22:07:52 +0000</pubDate>
		<dc:creator>Andrew Benson</dc:creator>
		
		<category><![CDATA[articles]]></category>

		<category><![CDATA[tutorials]]></category>

		<category><![CDATA[Add new tag]]></category>

		<category><![CDATA[home]]></category>

		<category><![CDATA[jitter]]></category>

		<category><![CDATA[video]]></category>

		<guid isPermaLink="false">http://cycling74.com/?p=4468</guid>
		<description><![CDATA[
One of the most feared and respected objects in the Jitter collection, jit.expr arrived on the scene as part of Jitter 1.5.  In some circles, there is a belief that harnessing its power will bring you great powers and enable you to achieve untold wonders.

The fact is, jit.expr is a really amazing tool, but [...]]]></description>
			<content:encoded><![CDATA[<div class="introtext"><img src="http://1cyjknyddcx62agyb002-web-assets.s3.amazonaws.com/ab_jitexpr/intro.jpg" width="150" height="88" align="left" />
<p>One of the most feared and respected objects in the Jitter collection, <strong>jit.expr</strong> arrived on the scene as part of Jitter 1.5.  In some circles, there is a belief that harnessing its power will bring you great powers and enable you to achieve untold wonders.</div>
<p><span id="more-4468"></span>
<div class="story_body">The fact is, <strong>jit.expr</strong> is a really amazing tool, but unfortunately many users are intimidated by the syntax, which includes a lot of square brackets, parentheses, and special variables.  While these sorts of things are common for programmers, they can seem very esoteric and strange to many Max users.  Many avid readers of the <a href="http://cycling74.com/2008/10/28/jitter-recipes-book-3/" target="_blank">Jitter Recipes</a> got stuck when <strong>jit.expr</strong> was used to generate the quads in the TinyVideo and Shatter recipes.  Upon getting familiar with the expressions, however, it will become an extremely handy tool that makes seemingly difficult and complicated tasks much simpler.  Through this article, I hope to demystify this elusive object and help you to achieve the wonders that you are dreaming of.  We&#8217;ll start by covering the basic elements of <strong>jit.expr</strong> expressions and then use these to create some basic geometry and image masks.</p>
<p>
<a href="http://cycling74.com/download/articles/tutorials/ab_jitexpr.zip">Download the patches</a> used in this tutorial.
</p>
<h2>Getting Past the Empty Matrix</h2>
<p>
The <strong>jit.expr</strong> object doesn&#8217;t do much out of the box.  In order for it to output anything more than black pixels, you&#8217;ll have to give it an expression to work with, using the &#8216;expr&#8217; attribute. The expressions work in a similar fashion to <strong>jit.op</strong> where you are performing some arithmetic on each cell of the incoming matrix.  If you&#8217;d like to just pass through the input from the first inlet of the object, you can type &#8216;@expr in[0]&#8216;.  The in[0] variable stands for the pixel value from the first inlet.  The second inlet would be in[1], and if you have more inlets, they are numbered sequentially (in[2],in[3],etc.).  If you&#8217;d like to add two <strong>jit.matrix</strong> inputs together (similar to jit.op @op +), you can use &#8216;@expr in[0]+in[1]&#8216;.  Still with me?  This is where it starts getting fun.
</p>
<p>
In addition to accessing specific inputs, the &#8216;in&#8217; variable also allows you to access a specific plane of the incoming matrix in your expression by using &#8216;.p&#8217;.  For example, if you use &#8216;@expr in[0].p[0]&#8216;, that gives you the first plane of the first input.  To get the second plane, you could write &#8216;@expr in[0].p[1]&#8216; or &#8216;@expr in[1].p[2]&#8216; to get the third plane of the right input matrix.  So, if we use &#8216;@expr in[0].p[1]*in[1].p[2]+in[1].p[0]&#8216; we would be multiplying the second plane of the first inlet with the third plane of the second inlet, and then adding the first plane of the second inlet.  That was quite a mouthful, but hopefully you get the point.  This can be really useful when you have an expression that requires multiple variables, and can take the place of using <strong>jit.unpack</strong>/<strong>pack</strong> in some cases. </p>
<p>
	On a related note, you can also create a unique expression for each plane of the output matrix by simply passing a list of expressions to the &#8216;expr&#8217; attribute.  Each expression is passed in as a symbol, so it is often beneficial to put quotes around your expressions, especially if it includes spaces.  For the most simple case, we could type &#8216;@expr in[0].p[0] in[0].p[1] in[0].p[2]&#8216;, which will just pass the appropriate planes from the first inlet.  It&#8217;s a lot of typing for something so simple, but we&#8217;ll be making a lot of use of this feature later, so keep it in mind.  It&#8217;s especially useful when generating geometry, since you will often need to use different equations for the x,y, and z values.
</p>
<h2>Making Numbers</h2>
<p>
When generating geometry or image masks, you will often need to generate a whole matrix full of values based on an equation.  For the simple cases, you could probably use an object like <strong>jit.gencoord</strong> to generate unique values for each cell of your matrix.  One of the great features of <strong>jit.expr</strong> is the ability to generate cell values by working with the norm[],snorm[],cell[], and dim[] variables.  Which one you use will depend on what you are trying to accomplish.
</p>
<p>
These variables each require you to specify which dimension you would like to generate values across (horizontal=0,vertical=1,etc.) between the square brackets.  The dim[] variable simply passes the size of your matrix across the specified dimension.  This will be the same for all of the cells of the matrix, and is useful for situations where you would like to adjust values in proportion to the size of the incoming matrix.
</p>
<p><img src="http://1cyjknyddcx62agyb002-web-assets.s3.amazonaws.com/ab_jitexpr/variablesSM.jpg" width="600" height="168" /></p>
<h5>
<a href="http://1cyjknyddcx62agyb002-web-assets.s3.amazonaws.com/ab_jitexpr/variables.jpg" target="_blank">Click here for a full-sized version</a> of the screen shot.<br />
</h5>
<p>
The simplest of the other three variables is cell[].  This variable generates integer coordinates across the specified dimension.  So, if we have &#8216;@expr cell[0] cell[1]&#8216;, the first plane of the matrix would have values {0.,1.,2.,3.,…} across the horizontal dimension (starting on the left) and the second plane would have values {0.,1.,2.,3.,…} across the vertical dimension (starting from the top).  While this might not be so useful as an actual output value, it makes certain things like modulo (%) expressions a lot easier to write when you are working with integers.
</p>
<p>
<em>Note:  You may have noticed the decimal point in all those values.  This is to remind you that <strong>jit.expr</strong> uses floating-point arithmetic internally, and will convert to whatever data type you are using upon output.</em>
</p>
<p>
Now that we know how to use cell[], norm[] is pretty simple.  This handy variable outputs values between 0. and 1. across the specified dimension.  Writing &#8216;@expr norm[0]&#8216; will generate the numbers {0.,…,1.} across the horizontal dimension, starting on the left.  This also creates a nice horizontal linear gradient.  This expression is the equivalent of &#8216;@expr cell[0]/dim[0]&#8216; but requires much less typing. Our final variable, snorm[] is very similar to norm[], but with the numbers stretched out to cover values between -1. and 1.  This is especially useful when generating vertex values for OpenGL geometry.
</p>
<h2>Making Masks</h2>
<p>
	In working with imagery, it is often necessary to do things like generating an oval mask for an image, or other shapes that allow you to escape the oppression of rectangles.  Now that we&#8217;ve gone through how to use the built-in variables and put together simple expressions, we&#8217;ll use them to create a few different simple mask shapes.  To start, let&#8217;s try creating a simple oval mask.
</p>
<p>
	Now, in order to create an oval mask shape, we&#8217;ll need a way to generate values that radiate out from the center of the matrix, rather than just generating linear values.  To do this, we can use the hypot() function built into <strong>jit.expr</strong>, which calculates the length of the hypotenuse of a right triangle, often used as a distance equation for two points.  If we use @expr hypot(snorm[0]\,snorm[1]), we&#8217;ll get values that increase as they get further from the center.  Remember that snorm[] creates values between -1. and 1. so the center cell will be 0.  So, we&#8217;re getting close, but we have the opposite of what we really want (although an inverted oval mask can be pretty useful too).  To invert the values, all we have to do is alter our expression slightly: @expr 1.-hypot(snorm[0]\,snorm[1]).  Now we have a nice radial gradient.  Now, you might notice the &#8220;\&#8221; in that expression.  That&#8217;s there because Max likes to interpret commas in a special way, and we need to include the comma as part of the expression.  The backslash prevents the comma from getting eaten up by Max.  Suppose we would rather have a hard-edged mask instead of a soft gradient.  We could easily add a threshold value by altering our expression again: @expr (1.-hypot(snorm[0]\,snorm[1]))>in[1]. This little extra portion sets the output value to 1. if our expression result is greater than the value at the second inlet.  The parentheses are there to enforce the appropriate order of operations.
</p>
<p>
We could now take this a step further and create other mask shapes based on simple geometry functions.  The first one we will look at is using sin() to generate another gradient shape.  If we use &#8217;sin(norm[0]*TWOPI)&#8217; we will get a full-phase sine wave across the horizontal dimension.  In this expression, we are using &#8220;TWOPI&#8221;, which is one of the built-in constants (2.*PI) for <strong>jit.expr</strong>, provided for our convenience.  There is also PI,HALFPI, etc. Multiplying the &#8220;norm[0]&#8221; by an input value will change the frequency of the sine-wave, which can be useful for creating repeated shapes.  We could then take this expression further by multiplying a horizontal sine gradient by a vertical sine gradient.  Now, if we are using this to generate imagery or masks, the negative values aren&#8217;t going to do us much good.  To invert the negative values, we can use the abs() operator (absolute value) on the result.  Now we have a nice repeating lump gradient pattern.
</p>
<p>
By now you are probably noticing that these expressions can get pretty long and complicated with just a little tweaking.  An important thing to remember is that <strong>jit.expr</strong> is an object like any other object, and there is no rule that you have to do all of your math within a single expression.  In fact you will probably find situations where you need multiple <strong>jit.expr</strong> or <strong>jit.op</strong> objects to accomplish what you need.
</p>
<h2>The Shape of Data</h2>
<p>
As you are experimenting with <strong>jit.expr</strong>, you will probably want to have some sort of visual feedback to get a better sense of what is going on.  For simple cases, <strong>jit.cellblock</strong> is a great solution, since it allows you to peek at the number values of the output matrix.  You can also visualize your <strong>jit.expr</strong> output using a <strong>jit.window</strong> which will represent the values as color intensities.  Often times this gives the most intuitive feedback.  Another way that <strong>jit.expr</strong> really shines though is in generating 3D geometry that can be visualized using <strong>jit.gl.mesh</strong>.  Without going into too much detail, <strong>jit.gl.mesh</strong> allows you to create different sorts of 3D forms by passing in a Jitter Matrix.  The matrix is then translated in different ways depending on the chosen &#8220;draw_mode&#8221;. By experimenting with different modes, you can visualize your <strong>jit.expr</strong> expressions in different ways.  And once you get comfortable with the different modes, you can start creating expressions specific to the draw_mode you would like to use.  Remember that <strong>jit.gl.mesh</strong> expects a 3 plane (x,y,z), float32 matrix for the vertex input, so you will need to think about how you would like to generate positions for each of the coordinates.  If you would like to apply a texture to your 3D shapes, you will also need to generate texture coordinates for each cell (2 plane float32, 2nd inlet).
</p>
<p><img src="http://1cyjknyddcx62agyb002-web-assets.s3.amazonaws.com/ab_jitexpr/3DshapesSM.png" width="600" height="204" /></p>
<h5>
<a href="http://1cyjknyddcx62agyb002-web-assets.s3.amazonaws.com/ab_jitexpr/3Dshapes.png" target="_blank">Click here for a full-sized version</a> of the screen shot.<br />
</h5>
<p>
	A very simple thing, which is very useful in real life, is to create a simple textured plane (similar to <strong>jit.gl.videoplane</strong>).  To do this we can use a 5 plane float32 matrix, and use the following list of expressions in <strong>jit.expr</strong>: snorm[0] -snorm[1] 0. norm[0] norm[1].  If we break it down, we are just creating a simple grid for the x and y values by using snorm[].  You may have noticed that we left the third expression as &#8220;0.&#8221;  Since we are creating a flat plane, we can just zero out the z values.  For texture coordinates, <strong>jit.gl.mesh</strong> expects values between 0 and 1., so we are just generating a grid of coordinates using norm[].  Simple, right.  Now, I&#8217;ll leave it up to you to imagine different sorts of equations that might provide more exciting results.  You might need to brush up on your trigonometry, or if you are like me, fake it.  I&#8217;m including a patch called simple-shapes that demonstrates a couple of simple and potentially useful shapes using the tri_grid draw_mode.
</p>
<h2>Express Yourself</h2>
<p>
I hope this is enough of a boost to get you started writing your own expressions with <strong>jit.expr</strong>.  In future articles, we&#8217;ll look at some of the more advanced features of <strong>jit.expr</strong> and ways to combine it with other Jitter objects to create unusual and wonderful results.  With a little practice and study, you too can learn to tame this mysterious animal.</p>
]]></content:encoded>
			<wfw:commentRss>http://cycling74.com/2010/03/08/demystifying-expressions-in-jitter/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Project 51: Bass Drum, Sax &amp; Laptop Patch</title>
		<link>http://cycling74.com/2010/03/05/project51-bass-drum-sax-laptop-patch/</link>
		<comments>http://cycling74.com/2010/03/05/project51-bass-drum-sax-laptop-patch/#comments</comments>
		<pubDate>Fri, 05 Mar 2010 17:40:34 +0000</pubDate>
		<dc:creator>c74</dc:creator>
		
		<category><![CDATA[projects]]></category>

		<category><![CDATA[audio]]></category>

		<category><![CDATA[bass drum]]></category>

		<category><![CDATA[improvisation]]></category>

		<category><![CDATA[performance]]></category>

		<category><![CDATA[saxophone]]></category>

		<guid isPermaLink="false">http://cycling74.com/?p=4450</guid>
		<description><![CDATA[Author: Jon Weinel
Project Date: 2010
Keele, Staffordshire, UK

Extensive stand alone patch provides live audio effects to manipulate the sound of a bass drum and saxophone (or any two instruments), and triggers additional short rhythmic sounds, to create a more psychedelic performance.  The patch produces automation envelopes which can be assigned to any effect parameter in [...]]]></description>
			<content:encoded><![CDATA[<h2>Author: Jon Weinel</h2>
<h3>Project Date: 2010</h3>
<p class="location">Keele, Staffordshire, UK</p>
<p class="image"><img src="http://1cyjknyddcx62agyb002-web-assets.s3.amazonaws.com/projects/project51.jpg" alt="project" /></p>
<p class="project">Extensive stand alone patch provides live audio effects to manipulate the sound of a bass drum and saxophone (or any two instruments), and triggers additional short rhythmic sounds, to create a more psychedelic performance.  The patch produces automation envelopes which can be assigned to any effect parameter in the patch, allowing the performers to concentrate on playing their instruments and exploring the interaction with the shifting effects.</p>
<h4><a href="http://www.jonweinel.com/" target="_blank">Learn More About This Project</a></h4></p>
]]></content:encoded>
			<wfw:commentRss>http://cycling74.com/2010/03/05/project51-bass-drum-sax-laptop-patch/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Project 50: Mutations</title>
		<link>http://cycling74.com/2010/03/05/project50-mutations/</link>
		<comments>http://cycling74.com/2010/03/05/project50-mutations/#comments</comments>
		<pubDate>Fri, 05 Mar 2010 17:36:42 +0000</pubDate>
		<dc:creator>c74</dc:creator>
		
		<category><![CDATA[projects]]></category>

		<category><![CDATA[audio]]></category>

		<category><![CDATA[disklavier]]></category>

		<category><![CDATA[electroacoustic]]></category>

		<category><![CDATA[performance]]></category>

		<category><![CDATA[piano]]></category>

		<guid isPermaLink="false">http://cycling74.com/?p=4446</guid>
		<description><![CDATA[Author: Jon Weinel and Robert Ratcliffe
Project Date: 2009-2010
Keele, Staffordshire, UK

&#8216;Mutations&#8217; is a composition by composer Robert Ratcliffe which manipulates scored piano material to create mutations, which are then performed with a Disklavier.  This real-time live performance patch designed by Jon Weinel enables Mutations to be performed live, incorporating the original piano performance extracts and [...]]]></description>
			<content:encoded><![CDATA[<h2>Author: Jon Weinel and Robert Ratcliffe</h2>
<h3>Project Date: 2009-2010</h3>
<p class="location">Keele, Staffordshire, UK</p>
<p class="image"><img src="http://1cyjknyddcx62agyb002-web-assets.s3.amazonaws.com/projects/project50.jpg" alt="project" /></p>
<p class="project">&#8216;Mutations&#8217; is a composition by composer Robert Ratcliffe which manipulates scored piano material to create mutations, which are then performed with a Disklavier.  This real-time live performance patch designed by Jon Weinel enables Mutations to be performed live, incorporating the original piano performance extracts and the mutated disklavier material.</p>
<h4><a href="http://www.jonweinel.com/" target="_blank">Learn More About This Project</a></h4></p>
]]></content:encoded>
			<wfw:commentRss>http://cycling74.com/2010/03/05/project50-mutations/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Project 49: Atomizer Live Patch</title>
		<link>http://cycling74.com/2010/03/05/project49-atomizer-live-patch/</link>
		<comments>http://cycling74.com/2010/03/05/project49-atomizer-live-patch/#comments</comments>
		<pubDate>Fri, 05 Mar 2010 17:29:25 +0000</pubDate>
		<dc:creator>c74</dc:creator>
		
		<category><![CDATA[projects]]></category>

		<category><![CDATA[audio]]></category>

		<category><![CDATA[electroacoustic]]></category>

		<category><![CDATA[performance]]></category>

		<category><![CDATA[real-time]]></category>

		<guid isPermaLink="false">http://cycling74.com/?p=4442</guid>
		<description><![CDATA[Author: Jon Weinel
Project Date: 2009
Keele, Staffordshire, UK

This is a live performance patch collecting several instruments for creating short fractured sounds juxtaposed with drones and predefined material.  It is geared for use with a Korg NanoKontrol and Novation Nocturn in a Rewire configuration with Renoise, but can also be used with other MIDI controllers either [...]]]></description>
			<content:encoded><![CDATA[<h2>Author: Jon Weinel</h2>
<h3>Project Date: 2009</h3>
<p class="location">Keele, Staffordshire, UK</p>
<p class="image"><img src="http://1cyjknyddcx62agyb002-web-assets.s3.amazonaws.com/projects/project49.jpg" alt="project" /></p>
<p class="project">This is a live performance patch collecting several instruments for creating short fractured sounds juxtaposed with drones and predefined material.  It is geared for use with a Korg NanoKontrol and Novation Nocturn in a Rewire configuration with Renoise, but can also be used with other MIDI controllers either independantly or Rewired to another program.</p>
<h4><a href="http://www.jonweinel.com/" target="_blank">Learn More About This Project</a></h4></p>
]]></content:encoded>
			<wfw:commentRss>http://cycling74.com/2010/03/05/project49-atomizer-live-patch/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Project 48: Quake Delirium</title>
		<link>http://cycling74.com/2010/03/03/project48-quake-delirium/</link>
		<comments>http://cycling74.com/2010/03/03/project48-quake-delirium/#comments</comments>
		<pubDate>Wed, 03 Mar 2010 19:08:02 +0000</pubDate>
		<dc:creator>c74</dc:creator>
		
		<category><![CDATA[projects]]></category>

		<category><![CDATA[audio]]></category>

		<category><![CDATA[psychedelic]]></category>

		<category><![CDATA[video game]]></category>

		<guid isPermaLink="false">http://cycling74.com/?p=4426</guid>
		<description><![CDATA[Author: Jon Weinel
Project Date: Feb 2010
Keele, Staffordshire, UK

This patch affects graphical effects of the game Quake toward a more delirious aesthetic.  It works by sending automated keystrokes from the patch to the game, receiving logfile information from the game and enabling the production of a matching soundtrack which can be played back within the [...]]]></description>
			<content:encoded><![CDATA[<h2>Author: Jon Weinel</h2>
<h3>Project Date: Feb 2010</h3>
<p class="location">Keele, Staffordshire, UK</p>
<p class="image"><img src="http://1cyjknyddcx62agyb002-web-assets.s3.amazonaws.com/projects/project48.jpg" alt="project" /></p>
<p class="project">This patch affects graphical effects of the game Quake toward a more delirious aesthetic.  It works by sending automated keystrokes from the patch to the game, receiving logfile information from the game and enabling the production of a matching soundtrack which can be played back within the patch.</p>
<h4><a href="http://www.jonweinel.com/" target="_blank">Learn More About This Project</a></h4></p>
]]></content:encoded>
			<wfw:commentRss>http://cycling74.com/2010/03/03/project48-quake-delirium/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Project 47: Venom</title>
		<link>http://cycling74.com/2010/03/01/project47-venom/</link>
		<comments>http://cycling74.com/2010/03/01/project47-venom/#comments</comments>
		<pubDate>Mon, 01 Mar 2010 18:00:30 +0000</pubDate>
		<dc:creator>c74</dc:creator>
		
		<category><![CDATA[projects]]></category>

		<category><![CDATA[controller]]></category>

		<category><![CDATA[lemur]]></category>

		<category><![CDATA[lighting]]></category>

		<category><![CDATA[performance]]></category>

		<category><![CDATA[video]]></category>

		<guid isPermaLink="false">http://cycling74.com/?p=4416</guid>
		<description><![CDATA[Author: Brandon Epperson
Project Date: 2/26/2010
new york, ny usa

Media server and interaction software with show control for shows, events, and venues.
Learn More About This Project
]]></description>
			<content:encoded><![CDATA[<h2>Author: Brandon Epperson</h2>
<h3>Project Date: 2/26/2010</h3>
<p class="location">new york, ny usa</p>
<p class="image"><img src="http://1cyjknyddcx62agyb002-web-assets.s3.amazonaws.com/projects/project47.jpg" alt="project" /></p>
<p class="project">Media server and interaction software with show control for shows, events, and venues.</p>
<h4><a href="http://toxicvenom.com" target="_blank">Learn More About This Project</a></h4></p>
]]></content:encoded>
			<wfw:commentRss>http://cycling74.com/2010/03/01/project47-venom/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Sound On Sound Reviews Max for Live</title>
		<link>http://cycling74.com/2010/02/23/sound-on-sound-reviews-max-for-live/</link>
		<comments>http://cycling74.com/2010/02/23/sound-on-sound-reviews-max-for-live/#comments</comments>
		<pubDate>Tue, 23 Feb 2010 23:21:21 +0000</pubDate>
		<dc:creator>Lilli Wessling Hart</dc:creator>
		
		<category><![CDATA[articles]]></category>

		<category><![CDATA[review]]></category>

		<category><![CDATA[home]]></category>

		<category><![CDATA[max-for-live]]></category>

		<guid isPermaLink="false">http://cycling74.com/?p=4399</guid>
		<description><![CDATA[
In this review, Nick Rothwell explains Max for Live in terms of what the addition of Max offers to Live users. He also shares his perspective on what Live offers to Max users, something that is less commonly discussed.
]]></description>
			<content:encoded><![CDATA[<div class="introtext">
<a href="http://www.soundonsound.com/sos/feb10/articles/maxforlive.htm" target="blank"><img src="http://cycling74.com/download/images_press/SOS_logo.jpg" class="intro" align="left" /></a><a href="http://www.soundonsound.com/sos/feb10/articles/maxforlive.htm" target="blank">In this review</a>, Nick Rothwell explains <a href="http://www.ableton.com/maxforlive" target="blank">Max for Live</a> in terms of what the addition of Max offers to Live users. He also shares his perspective on what Live offers to Max users, something that is less commonly discussed.</div>
]]></content:encoded>
			<wfw:commentRss>http://cycling74.com/2010/02/23/sound-on-sound-reviews-max-for-live/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Project 46: [utforma]</title>
		<link>http://cycling74.com/2010/02/22/project46-utforma/</link>
		<comments>http://cycling74.com/2010/02/22/project46-utforma/#comments</comments>
		<pubDate>Mon, 22 Feb 2010 17:41:04 +0000</pubDate>
		<dc:creator>c74</dc:creator>
		
		<category><![CDATA[projects]]></category>

		<category><![CDATA[manipulation]]></category>

		<category><![CDATA[music]]></category>

		<category><![CDATA[sound design]]></category>

		<guid isPermaLink="false">http://cycling74.com/?p=4395</guid>
		<description><![CDATA[Author: lewis g. edwards
Project Date: 19th february 2010
manchester, uk

standalone, six channel audio manipulator, for hardware synths, audio inserts, and anything else that can carry a signal. used to create and design new sounds to expand and bring a new life to music and sound.
Learn More About This Project
]]></description>
			<content:encoded><![CDATA[<h2>Author: lewis g. edwards</h2>
<h3>Project Date: 19th february 2010</h3>
<p class="location">manchester, uk</p>
<p class="image"><img src="http://1cyjknyddcx62agyb002-web-assets.s3.amazonaws.com/projects/project46.png" alt="project" /></p>
<p class="project">standalone, six channel audio manipulator, for hardware synths, audio inserts, and anything else that can carry a signal. used to create and design new sounds to expand and bring a new life to music and sound.</p>
<h4><a href="http://www.smokingbunny.co.uk" target="_blank">Learn More About This Project</a></h4></p>
]]></content:encoded>
			<wfw:commentRss>http://cycling74.com/2010/02/22/project46-utforma/feed/</wfw:commentRss>
		</item>
		<item>
		<title>LFO Tutorial 6 (Live if you want it)</title>
		<link>http://cycling74.com/2010/02/19/lfo-tutorial-6-live-if-you-want-it/</link>
		<comments>http://cycling74.com/2010/02/19/lfo-tutorial-6-live-if-you-want-it/#comments</comments>
		<pubDate>Fri, 19 Feb 2010 21:35:12 +0000</pubDate>
		<dc:creator>Gregory Taylor</dc:creator>
		
		<category><![CDATA[articles]]></category>

		<category><![CDATA[tutorials]]></category>

		<category><![CDATA[home]]></category>

		<category><![CDATA[LFO]]></category>

		<category><![CDATA[max-for-live]]></category>

		<guid isPermaLink="false">http://cycling74.com/?p=4368</guid>
		<description><![CDATA[Since a lot of people are interested in what the process of porting a Max patch for use in Max for Live looks like, I thought I’d take this tutorial as an opportunity to go over the steps I used to take my waveplayah patch and to convert it to a Max for Live device [...]]]></description>
			<content:encoded><![CDATA[<div class="introtext"><img src="http://1cyjknyddcx62agyb002-web-assets.s3.amazonaws.com/gt_LFO_6/gt_LFO_6_intro.jpg" alt="" width="150" height="100" align="left" />Since a lot of people are interested in what the process of porting a Max patch for use in Max for Live looks like, I thought I’d take this tutorial as an opportunity to go over the steps I used to take my <strong>waveplayah</strong> patch and to convert it to a Max for Live device <strong>waveplayah.amxd</strong>.</div>
<p><span id="more-4368"></span></p>
<div class="story_body">
<p>
In my last LFO tutorial, I took the basic LFO module I’ve been working with in the previous tutorials, added some new extensions, and created a nice little patch called the <strong>waveplayah</strong> that used a summed set of the LFO modules to drive the playback of the contents of a <strong>buffer~</strong>. A good deal of my thinking about and creating it overlapped with the arrival of Max for Live – it’s where I got the idea for the different modulation styles I talked about <a href="http://cycling74.com/2010/02/05/lfo-tutorial-5-lfo-child-slight-return/">in our last tutorial</a>, after all.
</p>
<p><a href="http://cycling74.com/download/articles/tutorials/gt_LFO_6.zip">Download the patches</a> used in this tutorial.</p>
<h4>Other LFO tutorials:</h4>
<ul>
<li><a href="http://cycling74.com/2008/07/15/lfo-tutorial-1-the-zen-of-the-silent-patch/">LFO Tutorial 1: The Zen of the Silent Patch</a></li>
<li><a href="http://cycling74.com/2008/08/19/lfo-tutorial-2-making-some-noise/">LFO Tutorial 2: Making Some Noise</a></li>
<li><a href="http://cycling74.com/2008/10/28/lfo-tutorial-3-extending-our-generators/">LFO Tutorial 3: Extending Our Generators</a></li>
<li><a href="http://cycling74.com/2009/06/19/lfo-tutorial-4-building-complexity/">LFO Tutorial 4: Building Complexity</a></li>
<li><a href="http://cycling74.com/2010/02/05/lfo-tutorial-5-lfo-child-slight-return/">LFO Tutorial 5</a></li>
<li><a href="http://cycling74.com/2010/02/19/lfo-tutorial-6-live-if-you-want-it/">LFO Tutorial 6</a></li>
</ul>
<p>Although every instance of porting a Max patch for use as a Max for Live device varies a little bit, here’s what the basic procedure looks like:</p>
<ul>
<li>Decide what kind of Live device your patch will become (Instrument, Audio effect, etc.) and make the necessary I/O substitutions to work in the Live environment.</li>
<li>Replace any UI objects that represent parameters with their Max for Live counterparts (<strong>dial</strong> &gt; <strong>live.dial</strong>, etc.) or set anything else that doesn&#8217;t have a counterpart up to function in the Live environment.</li>
<li>Enable all device parameters and set their initial states.</li>
<li>Go through and set up the modulation types you wish to use for each UI object so you can use clip automation.</li>
<li>Use Max&#8217;s Presentation Mode to set up your user interface within the standard rack space area, and save your patch so that it opens in Presentation mode.</li>
<li>If you’re planning to share your device with anyone, you’ll need to check to see if there are any Max objects or abstractions of files that you’ve used in your device that other users may not have. If there are, you&#8217;ll have to include them in your device, freeze your device to collect everything together, and save the result.</li>
</ul>
<h2>Moving day</h2>
<p>
The first part of the patch to device conversion is simple copying and pasting. You’ll need to think of what kind of Max for Live device the patch you’re porting is going to be – an audio device, a MIDI instrument, or a MIDI effect device. Since our patch is going to become a Max for Live audio device, we start as we always do when creating Max for Live audio devices – by clicking on the Max Audio Effect icon in the Live browser and dragging it into the Effects rack on a Live track to create the familiar and popular starter patch, then clicking on the edit button in the device’s toolbar to launch the Max editor. We really don’t need anything else in the audio device starter patch except for the <strong>plugout~</strong> object, so select and remove everything else, then move the lonely <strong>plugout~</strong> object to the side for now.
</p>
<p>
Next, we’ll open the <em>waveplayah.maxpat</em> file from inside the Max editor as well. Choose <strong>Select All</strong> from the Edit menu, and then choose <strong>Copy</strong> to copy the contents of the patch to the clipboard. Go to the audio device starter patch and choose <strong>Paste</strong> from the Edit menu to copy the contents of the Max patch into the Live audio device patch. Before you forget, name and save your patch as <strong>waveplayah</strong>. Now, let’s get down to business.
</p>
<h2>First things first</h2>
<p>
The first and most obvious thing about converting a Max patch for use with Max for Live has to do with making the changes that will help the Max patch function most easily in the Live environment. That’s really composed of three different things:
</p>
<ul>
<li>A Max for Live device handles its input and output in ways that are specific to working in the Live environment; audio input and output are handled using the <strong>plugin~</strong> and <strong>plugout~</strong> objects.</li>
</ul>
<p>
Since the <strong>waveplayah</strong> patch loads a waveform into a buffer, we don’t really care about the audio input. This patch doesn’t need a <strong>plugin~</strong> object at all, but we do need a way to load an audio file into our buffer. In this case, I’m going to keep it really simple and use a technique in the original patch that uses a <strong>button</strong> object to load an audio patch.
</p>
<p>
For output, we’ll use the <strong>plugout~</strong> object from the audio device starter patch in place of the <strong>ezdac~</strong> object in the original patch. And since we’re working in Max for Live, we also don’t need the <strong>transport</strong> object any more. When we use Max objects that support ITM (such as the <strong>phasor~</strong> objects in our patch), the Live transport automatically becomes the transport that the patch uses. So we can remove the <strong>transport</strong> object, too.
</p>
<ul>
<li>The namespace in Max is <em>global</em>. That means that any time I have a named object such as a table or a <strong>buffer~</strong> or a <strong>coll</strong> object, any reference I make to that named object <em>anywhere</em> will refer to an object with that name.</li>
</ul>
<p>
In the Max world, that’s a nice advantage and not that big of a deal, but when we deal with Max for Live, things can get complicated. In the case of the <strong>waveplayah</strong> patch, the <strong>wave~</strong> object plays back the file loaded into the buffer named <em>source</em> (since the <strong>wave~</strong> object includes the name of the buffer as an argument). That means that any <strong>wave~</strong> object in any Max for Live audio effect device that makes reference to a buffer named <em>source</em> will refer to that buffer. That could get awkward when you use the <strong>waveplayah</strong> device in more than one audio track in a Live session.
</p>
<p>
Happily, there’s a very simple change I can make to sort this out. In Max, whenever the name of a <strong>buffer~</strong> or <strong>table</strong> or <strong>coll</strong> object begins with three dashes (&#8212;), the named object will be used <em>only within that specific device</em>. So in my <strong>waveplayah</strong> patch, all I really need to do is to change the name of the buffer I’m using from <em>source</em> to <em>&#8212;source</em>, and then make sure that the <strong>wave~</strong> object references that new buffer name as an argument.
</p>
<ul>
<li>In order to make the best use of the things like creating presets and automating parameters in the Live environment, we should make use of the  new Max for Live UI objects, which are already MIDI-friendly and can set and save initial states (which the Live application needs).</li>
</ul>
<p>
That’s really the part of the patch porting that takes most of the time, and I’ll describe that process in detail below.
</p>
<h2>Cleaning and sorting and organizing</h2>
<p>
The next task involves going through our patch and replacing every single Max user interface object with the Max for Live object that is its equivalent – every <strong>slider</strong> should be replaced by a <strong>live.slider</strong> object, and so on. We’re doing this because the Max for Live user interface objects have some special attributes that make assigning MIDI controllers and automating parameters much easier.
</p>
<p>
When converting large Max patches to Max for Live devices, I like to do this by adding a single Max for Live object to my patch, copying it to the clipboard, selecting every object I want to replace with that one and then choosing <strong>Paste Replace</strong> from the Edit menu (and then going through and filling in menus or tabs as needed). Your mileage may vary!
</p>
<p>
<em>Technical detail: Although we aren’t doing it in this patch, you should keep in mind that the <strong>live.numbox</strong> object can be used to replace both floating point and integer number boxes in Max for Live. Since the Live application only works with integer values in the range 0 – 255, you should always replace integer number boxes with <strong>live.numbox</strong> objects whose Type attribute is set to Float and whose Unit Style attribute is set to Int.</em>
</p>
<p>
There are a few <strong>rslider</strong> objects in my patch, and those objects don’t have a Max for Live equivalent. Since the range slider values can be set using the two <strong>number box</strong> objects to the left of each range slider, I decided that I didn’t need to worry about them and could leave them as is. Similarly, I really don’t care about the <strong>button</strong> objects I’m using to load audio or reset center and range values, either. But I did decide to replace the <strong>*~</strong>/<strong>number box</strong> stuff I was using to control output volume with a <strong>live.gain~</strong> object.
</p>
<p>
Now that I’ve got all of my user interface objects swapped over to Max for Live objects, it’s time to do some housekeeping that’ll make our experience using the new device easier. Here’s what we need to do:
</p>
<ul>
<li>Unlike regular Max objects, Max for Live user interface objects can set and save an initial state (Yes, that’s right – the number of <strong>loadbang</strong> object objects in your patch just plummeted). We’ll need to add that to everything.</li>
</ul>
<p>
When you unlocked the original <strong>waveplayah</strong> Max patch, you probably noticed that a pair of objects - a <strong>loadbang</strong> object and a <strong>trigger</strong> (<strong>t</strong>) object - and a bunch of previously invisible patch cords suddenly appeared (If you’re wondering how that trick is done, you can Option-click (Macintosh) or Alt-click (Macintosh) and drag to select the objects and patch cords you want to hide or reveal and choose <strong>Hide on Lock</strong> from the Object menu. Any selected patch cords or objects will now be invisible when the Patcher window is locked. In the days before Max 5, that was how we initialized values in a patch). You can select the <strong>loadbang</strong> and <strong>trigger</strong> objects and just delete them. We’ve got a much nicer way to handle that now.
</p>
<ul>
<li>We’ll want to set up our UI objects so that they’ll work with Live’s parameter automation. That’ll mean setting up recognizable parameter names for our UI object and enabling modulation modes.</li>
</ul>
<p>
These tasks can be a little time-consuming in a patch that includes a lot of user interface objects, but Max for Live includes a new feature that makes the whole process a lot simpler – the Parameters window. The Parameters window provides you with a listing of all the relevant data about all the UI objects in your device in one place where you can view and edit them.
</p>
<p>
To view the Parameters window, choose <strong>Parameters</strong> from the View menu.
</p>
<p>
You’ll see a nice long list that includes every single Max for Live UI object in your patch. It will look a little scary at first, since every UI object is listed as something like <em>live.slider[4]</em> or <em>live.numbox[14]</em>, but we’ll fix that in a minute.
</p>
<p>
The smart thing to do is to go through and give all the UI objects easily identifiable names so we can identify them if we want to automate a device parameter. But how do we know what’s what? Simple – click on the blue dot in the leftmost column in the Parameters window and watch your user patch – you’ll see the UI object turn a nice lime green.
</p>
<p><img src="http://1cyjknyddcx62agyb002-web-assets.s3.amazonaws.com/gt_LFO_6/image1.png" alt="" width="600" height="280" /></p>
<p>
To give the UI object a name (e.g. phase_1), double-click in the Name column in the Parameters window and type in a name. Then click in the Link checkbox to the left of the Name column to link this name to the Long Name attribute of the object (which is what Max for Live uses to identify parameter names for automation). Using the Parameters window, you can just go down the list and rename everything all at once.
</p>
<p>
You’ll also want to set each entry in the Parameters window to enable saving an initial value by clicking in the checkbox in the parameters column labeled “I” (initial value), and then double-click in the Initial Value column and type in a value (for menu items, use an integer and remember that the first menu item is 0). When you save and close your patch, all of your UI objects will be set to the initial values you type in.
</p>
<p>
Finally, you’ll want to set a modulation Range value for each parameter (the modulation ranges were what I described <a href="http://cycling74.com/2010/02/05/lfo-tutorial-5-lfo-child-slight-return/#ranges">here</a>, in case you’d like to refresh your memory). The Bipolar mode works well for nearly everything. In situations where you’re adding modes for things like <strong>toggle</strong> objects, you should choose Absolute.
</p>
<p>
Again, the great thing about using the Parameters window is that you do all the housekeeping in one place. Now that things are named and enabled, the only thing left to do is to arrange your interface.
</p>
<h2>Good interface design 101 – learning by doing</h2>
<p>
The next thing we’ll need to do is to create the user interface for our device – to take all the parameters in the Max patch and arrange them within the Live audio rack space. Max 5 comes equipped with the tools to make this process easy – the Presentation Mode. When using the Presentation Mode, you select only those portions of your Max patch you make up the user interface and arrange them as you want without affecting the layout of the original patch.
</p>
<p>
To create the audio effect’s UI, all we have to do is to select those parts of the patch we want to have visible – number boxes, sliders, menus and labels - and choose <strong>Add to Presentation</strong> from the Object menu. When we do that, every item we’ve selected will display a pink Presentation mode halo. When we click on the Presentation mode icon in the Max patcher window toolbar, everything but the objects we’ve added to the Presentation layer will vanish, letting us arrange the UI objects for our effect in a way that is pleasing and makes sense. This is often the step in creating any Max patch that takes the most time and fine-tuning, but hey - it&#8217;s <em>your</em> interface, so take a little time to get it looking just the way you want.
</p>
<p>
While working on porting the <strong>waveplayah</strong> patch, I decided that it would be nice to have some kind of visual indication of what the waveform driving the <strong>wave~</strong> object in my device looked like, so I made one small addition to the original <strong>waveplayah</strong> patch– a bit of patching that samples the waveform output and uses a <strong>multislider</strong> object with its Slider Style attribute set to Reverse Point Scroll to draw a nice moving graph.
</p>
<p><img src="http://1cyjknyddcx62agyb002-web-assets.s3.amazonaws.com/gt_LFO_6/image2.png" width="452" height="472" /></p>
<p>
Once the design is formalized, we’ll need to set the patch so that the Presentation layer is displayed by default. To do that, choose <strong>Patcher Inspector</strong> from the View menu and click in the checkbox marked Open in Presentation. When you save and close the patch, you’ll see your layout displayed in the effects rack (If you re-open your patch to edit it, you’ll need to click on the Presentation layer icon in the toolbar in order to display the rest of your patch).
</p>
<h2>The big freeze</h2>
<p>
If you want to share any Max for Live device you create with anyone else, you’ll want to freeze your device. Freezing is a way of preparing a device for distribution to other people by including all the files your device needs to work. That includes things like third-party Max external objects, subpatchers, audio files, image files, and Javascript code.
</p>
<p>
<em>Note: If your device uses third-party objects that only run on Windows or Apple platforms, you can only share devices on that platform.</em>
</p>
<p>
Max will analyze your patch to locate any files it needs – these files are called dependencies – and then combine these files with your device when you freeze it. Whenever you open a Max for Live device that’s frozen, the files inside that device will be used even if someone else using the device happens to have files with the same name on their system.
</p>
<p>
In the case of the <strong>waveplayah</strong> patch, this part of the job is simple - there aren’t <em>any</em> third party Max externals in my patch, I’m not using <em>any</em> abstractions that I’ve created for use elsewhere else, and I’m not using messages to add files (such as loading sound files or wavetables using the <strong>loadbang</strong> object) in my patch.
</p>
<p>
That’s not always the case, however – you might have forgotten what you put into your own patch at some point in the past, or you might be working with a patch that someone else made. So I still make it a practice to always to check for things I might need to include in my device as a matter of course.
</p>
<p>
With your patch open for editing, choose <strong>Dependencies</strong> from the View menu to display the dependencies window. In the case of the <strong>waveplayah</strong> patch, the window is reassuringly blank.
</p>
<p>
But suppose that my patch contained an abstraction I’d made previously (for those of you who are beginners, an abstraction is a Max patch that you can create and save and use in the same way you’d use a Max object in another patch. For more on this, see <a href="http://www.cycling74.com/docs/max5/tutorials/max-tut/basicchapter15.html">Max Tutorial 15</a>). No one else but me would have that abstraction, and any audio device I made that used it would be broken for anyone I gave it to.
</p>
<p>
For example, let’s suppose that I have an abstraction called <em>gt_bundle</em> in my patch. If my patch includes that abstraction, here’s what we’d see in the dependencies window:
</p>
<p><img src="http://1cyjknyddcx62agyb002-web-assets.s3.amazonaws.com/gt_LFO_6/image3.png" width="600" height="183" /></p>
<p>
You’ll see that it’s listed as a patcher file. This means that when I freeze my audio device, the patcher file will be included. In any case where the Dependencies window shows me a file and lists its type as <strong>Missing</strong>, the file or objects would need to be manually included in the dependencies list (see the <a href="http://www.cycling74.com/docs/max5/vignettes/core/live_sharing.html">Sharing Devices vignette</a> for more on this).
</p>
<p>
But the <strong>waveplayah</strong> file doesn’t have any problems at all, so we’re ready to freeze the device. To freeze the device, click on the Freeze icon in the Patcher Window toolbar.
</p>
<p>
That’s it. The next time you save your devices, any dependencies you have in your file will be included.
</p>
<h2>My work here is done</h2>
<p>
That’s the basic procedure for converting a Max patch to a Max for Live device. For your enjoyment, I’ve included an already-ported version of the <strong>waveplayah</strong> patch for your edification. But don&#8217;t be lazy - it would still be a good idea to try converting the patch and creating your own user interface yourself for practice. After that, there are a whole lot more cool Max patches floating around than there are Max for Live devices, so you know enough to start finding things that interest you in the Max forum and on the web and converting them for your own use.
</p>
<p>
In the next tutorial, we’ll discuss life in the “tweak loop” – that cycle of living with and improving your devices with things like presets, drag-and-drop interfaces, and the judicious application of color.
</p>
</div>
]]></content:encoded>
			<wfw:commentRss>http://cycling74.com/2010/02/19/lfo-tutorial-6-live-if-you-want-it/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Project 45: Antiphon</title>
		<link>http://cycling74.com/2010/02/19/project45-antiphon/</link>
		<comments>http://cycling74.com/2010/02/19/project45-antiphon/#comments</comments>
		<pubDate>Fri, 19 Feb 2010 17:54:58 +0000</pubDate>
		<dc:creator>c74</dc:creator>
		
		<category><![CDATA[projects]]></category>

		<category><![CDATA[audio]]></category>

		<category><![CDATA[installation]]></category>

		<category><![CDATA[interactive]]></category>

		<category><![CDATA[RTcmix]]></category>

		<guid isPermaLink="false">http://cycling74.com/?p=4363</guid>
		<description><![CDATA[Author: Akihiko Matsumoto
Project Date: 2009
Tokyo

Interactive algorithmic music with Max/MSP/Jitter and laserpointer.
Learn More About This Project
]]></description>
			<content:encoded><![CDATA[<h2>Author: Akihiko Matsumoto</h2>
<h3>Project Date: 2009</h3>
<p class="location">Tokyo</p>
<p class="image"><img src="http://1cyjknyddcx62agyb002-web-assets.s3.amazonaws.com/projects/project45.png" alt="project" /></p>
<p class="project">Interactive algorithmic music with Max/MSP/Jitter and laserpointer.</p>
<h4><a href="http://homepage.mac.com/sinx_music/works/antiphon.html" target="_blank">Learn More About This Project</a></h4></p>
]]></content:encoded>
			<wfw:commentRss>http://cycling74.com/2010/02/19/project45-antiphon/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Project 44: TouchControl - Wireless Control for Ableton Live &amp; M4L</title>
		<link>http://cycling74.com/2010/02/17/project44touchcontrol-wireless-control-for-ableton-live-m4l/</link>
		<comments>http://cycling74.com/2010/02/17/project44touchcontrol-wireless-control-for-ableton-live-m4l/#comments</comments>
		<pubDate>Wed, 17 Feb 2010 17:12:34 +0000</pubDate>
		<dc:creator>c74</dc:creator>
		
		<category><![CDATA[projects]]></category>

		<category><![CDATA[ableton]]></category>

		<category><![CDATA[controller]]></category>

		<category><![CDATA[ipad]]></category>

		<category><![CDATA[iphone]]></category>

		<category><![CDATA[ipod]]></category>

		<category><![CDATA[max-for-live]]></category>

		<category><![CDATA[performance]]></category>

		<guid isPermaLink="false">http://cycling74.com/?p=4355</guid>
		<description><![CDATA[Author: Christian Blomert
Project Date: 5. 2. 2010
Berlin, Germany

TouchControl combines the advantages of Max 4 Live and TouchOSC to create an automapping control interface for Ableton Live that runs on iPhone / iPod Touch. Including Clip-Launcher with named clips / playing status. Device Controls, Mixer and more.
Learn More About This Project
]]></description>
			<content:encoded><![CDATA[<h2>Author: Christian Blomert</h2>
<h3>Project Date: 5. 2. 2010</h3>
<p class="location">Berlin, Germany</p>
<p class="image"><img src="http://1cyjknyddcx62agyb002-web-assets.s3.amazonaws.com/projects/project44.png" alt="project" /></p>
<p class="project">TouchControl combines the advantages of Max 4 Live and TouchOSC to create an automapping control interface for Ableton Live that runs on iPhone / iPod Touch. Including Clip-Launcher with named clips / playing status. Device Controls, Mixer and more.</p>
<h4><a href="http://www.maxforlive.com/library/device.php?id=208" target="_blank">Learn More About This Project</a></h4></p>
]]></content:encoded>
			<wfw:commentRss>http://cycling74.com/2010/02/17/project44touchcontrol-wireless-control-for-ableton-live-m4l/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Software Release: Max 5.1.3</title>
		<link>http://cycling74.com/2010/02/10/software-release-max-513/</link>
		<comments>http://cycling74.com/2010/02/10/software-release-max-513/#comments</comments>
		<pubDate>Wed, 10 Feb 2010 23:02:10 +0000</pubDate>
		<dc:creator>Lilli Wessling Hart</dc:creator>
		
		<category><![CDATA[articles]]></category>

		<category><![CDATA[company]]></category>

		<guid isPermaLink="false">http://cycling74.com/?p=4336</guid>
		<description><![CDATA[

Max 5.1.3 was released on 9 February 2010.

- Read the release notes
- Download Max 5.1.3


]]></description>
			<content:encoded><![CDATA[<div id="table_dl">
<img src="http://1cyjknyddcx62agyb002-web-assets.s3.amazonaws.com/posts/workshop-mfl.jpg" class="intro" / align="left">
<p>Max 5.1.3 was released on 9 February 2010.</p>
<ul>
<li>- <a href="http://cycling74.s3.amazonaws.com/support/version_5_1_3.html">Read the release notes</a></li>
<li>- <a href="http://cycling74.com/downloads">Download Max 5.1.3</a></li>
</ul>
</div>
]]></content:encoded>
			<wfw:commentRss>http://cycling74.com/2010/02/10/software-release-max-513/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Project 43: c74 / iPhone app</title>
		<link>http://cycling74.com/2010/02/09/project43-c74-iphone-app/</link>
		<comments>http://cycling74.com/2010/02/09/project43-c74-iphone-app/#comments</comments>
		<pubDate>Tue, 09 Feb 2010 23:49:45 +0000</pubDate>
		<dc:creator>c74</dc:creator>
		
		<category><![CDATA[projects]]></category>

		<category><![CDATA[application]]></category>

		<category><![CDATA[interactive]]></category>

		<category><![CDATA[iphone]]></category>

		<category><![CDATA[ipod]]></category>

		<guid isPermaLink="false">http://cycling74.com/?p=4314</guid>
		<description><![CDATA[Author: Leo van der Veen
Project Date: februari 2010
netherlands

c74 is an iPhone app that let’s you connect your device with Cycling ’74’s Max/MSP 5 and create custom layouts which can be operated directly from your iPhone. Especially interesting is that custom interfaces are built straight from within Max.
Learn More About This Project
]]></description>
			<content:encoded><![CDATA[<h2>Author: Leo van der Veen</h2>
<h3>Project Date: februari 2010</h3>
<p class="location">netherlands</p>
<p class="image"><img src="http://1cyjknyddcx62agyb002-web-assets.s3.amazonaws.com/projects/project43.png" alt="project" /></p>
<p class="project">c74 is an iPhone app that let’s you connect your device with Cycling ’74’s Max/MSP 5 and create custom layouts which can be operated directly from your iPhone. Especially interesting is that custom interfaces are built straight from within Max.</p>
<h4><a href="http://www.nr74.org/c74.html" target="_blank">Learn More About This Project</a></h4></p>
]]></content:encoded>
			<wfw:commentRss>http://cycling74.com/2010/02/09/project43-c74-iphone-app/feed/</wfw:commentRss>
		</item>
		<item>
		<title>LFO Tutorial 5 (LFO Child Slight Return)</title>
		<link>http://cycling74.com/2010/02/05/lfo-tutorial-5-lfo-child-slight-return/</link>
		<comments>http://cycling74.com/2010/02/05/lfo-tutorial-5-lfo-child-slight-return/#comments</comments>
		<pubDate>Fri, 05 Feb 2010 19:21:03 +0000</pubDate>
		<dc:creator>Gregory Taylor</dc:creator>
		
		<category><![CDATA[articles]]></category>

		<category><![CDATA[tutorials]]></category>

		<category><![CDATA[audio]]></category>

		<category><![CDATA[home]]></category>

		<category><![CDATA[LFO]]></category>

		<category><![CDATA[oscillator]]></category>

		<guid isPermaLink="false">http://cycling74.com/?p=4282</guid>
		<description><![CDATA[

A while back, I wrote a series of four tutorials based around the idea of how you could generate and organize variety in Max patches. I wrote them first and foremost because that idea of generating and organizing variety by some means other than random numbers or noise sources has been an interest of mine [...]]]></description>
			<content:encoded><![CDATA[<div class="introtext">
<img src="http://1cyjknyddcx62agyb002-web-assets.s3.amazonaws.com/gt_LFO_5/gt_LFO_5_intro.jpg" class="intro" align="left" />
<p>A while back, I wrote a <a href="http://cycling74.com/2009/06/19/lfo-tutorial-4-building-complexity/">series of four tutorials</a> based around the idea of how you could generate and organize variety in Max patches. I wrote them first and foremost because that idea of generating and organizing variety by some means other than random numbers or noise sources has been an interest of mine for a long time. </div>
<p><span id="more-4282"></span>
<div class="story_body">I thought it might be useful to show some examples of how one could make use of these basic techniques not just for generating raw material, but also for ways to transfer explicit control of a Max patch in live performance from the operator to some automated process (think of it as outsourcing) in ways that were less jarring than I often hear in live performance.</p>
<p><a href="http://cycling74.com/download/articles/tutorials/gt_LFO_5.zip">Download the patches</a> used in this tutorial.</p>
<h4>Other LFO tutorials:</h4>
<ul>
<li><a href="http://cycling74.com/2008/07/15/lfo-tutorial-1-the-zen-of-the-silent-patch/">LFO Tutorial 1: The Zen of the Silent Patch</a></li>
<li><a href="http://cycling74.com/2008/08/19/lfo-tutorial-2-making-some-noise/">LFO Tutorial 2: Making Some Noise</a></li>
<li><a href="http://cycling74.com/2008/10/28/lfo-tutorial-3-extending-our-generators/">LFO Tutorial 3: Extending Our Generators</a></li>
<li><a href="http://cycling74.com/2009/06/19/lfo-tutorial-4-building-complexity/">LFO Tutorial 4: Building Complexity</a></li>
<li><a href="http://cycling74.com/2010/02/05/lfo-tutorial-5-lfo-child-slight-return/">LFO Tutorial 5</a></li>
<li><a href="http://cycling74.com/2010/02/19/lfo-tutorial-6-live-if-you-want-it/">LFO Tutorial 6</a></li>
</ul>
<p>
I guess people liked the tutorials, which is always flattering. The email that followed was a mix of praise (which I always enjoy), responses that ran the gamut from requests about what to write about next to full-on patch grovels, and even some complaints that I was “doing obvious stuff” (I sure hope that these ideas appear to be obvious, in retrospect – that’s how I know an idea is a good one). In the final tutorial, I’d made the specific decision not to provide any kind of prejudicial example of specific implementation, figuring that no one would be in a better position to imagine what might be done next than readers themselves.
</p>
<p>
For this tutorial, I’ve tried to address a variety of suggestions and feedback and to extend the ideas covered in parts one, two, three, and four of my humble set of LFO tutorials. This tutorial contains three parts:
</p>
<ol start="1">
<li>I’ve taken the basic LFO module I’ve used in the tutorials and extended it in some new and useful directions.</li>
<li>Based on my experiences working on development for Max for Live, I’ve added some interesting variants on how to transfer control from a user-defined parameter to an LFO-driven process based on the Live application’s “Modulation Modes.”</li>
<li>I’ve combined these changes and demonstrated one possible, if humble, future – creating a set of summed LFOs that drive the playback of the content of a <strong>buffer~</strong>.</li>
</ol>
<h2>Workin’ the waveform</h2>
<p>
Throughout the <a href="http://cycling74.com/2009/06/19/lfo-tutorial-4-building-complexity/">previous tutorials</a>, I&#8217;ve been working with a simple single LFO module that included the ability to slave the LFO output to the Max transport, provided a number of different output waveforms, and also allowed for scaling the output waveform within the -1.0 - 1.0 waveform output range. That waveform is then sampled using the <strong>snapshot~</strong> object and the output was used to control other parameters. Here’s what it looked like:
</p>
<p><img src="http://1cyjknyddcx62agyb002-web-assets.s3.amazonaws.com/gt_LFO_5/image1.png" /></p>
<p>
This tutorial uses a new variant of that basic single oscillator LFO with some added features. For the sake of functionality and readability, I’ve created subpatches that contain those new changes. Let’s look at those new features:
</p>
<p>
In our original LFO patch, the speed of the <strong>phasor~</strong> object that generated waveforms was set using ITM-based note value settings to determine the rate. While that works just fine, I thought that I’d rather have a choice about whether or not to derive the speed of the <strong>phasor~</strong> using Max 5 note values or to specify the <strong>phasor~</strong> rate as a floating-point number that describes a frequency. The obvious reason for that is simple – I might someday want to use another LFO (or summed network of LFOs) to modulate the <strong>phasor~</strong> rate. I realized that I could also consider the values stored in the <strong>umenu</strong> as representing a kind of synchronized sequence of frequencies that I could step through using some process (a <strong>counter</strong>? The contents of a <strong>coll</strong> object?). So it seemed like a good idea to build some flexibility into the LFO module here. I also realized in the course of patching that it’d be useful to know how the current tempo values represented by the ITM note values mapped to frequency in order to switch between time-synced to free <strong>phasor~</strong> rates. So my new subpatch also includes some logic that will automatically set the frequency of the “free” oscillator to match the current value of the note value and the tempo I’m working with.
</p>
<p>
Let’s look at the inside of the subpatch.
</p>
<p><img src="http://1cyjknyddcx62agyb002-web-assets.s3.amazonaws.com/gt_LFO_5/image2.png" /></p>
<p>
The bulk of the patch is exactly what you’d expect: some logic to select whether you want note values or numerical frequencies using the <strong>selector~</strong> object as a switch (and that second argument to the object sets the default behavior). But I’ve added another useful feature in the center of the patch – the <strong>translate</strong> object that automatically converts the current note value into an equivalent frequency value in Hertz. There’s some trigger-based logic added to the inlets to make sure that the calculation will be triggered whenever a new note value is chosen, and also to make sure that the frequency value is sent to the second <strong>phasor~</strong> object before switching to it (think of the zl reg object as the symbol equivalent of a Max int or float object that stores a value and will output the most recently stored value when a bang is received in the left inlet), but the translate object is right in the heart of things. If you spend much time working with the new musical time features of Max 5, this object will become one of your best friends. It takes two arguments – one to specify the kind of value you want to translate and a second argument to specify what kind of values you want to end up with. In this case, we’re translating note values (notevalues) to frequency (hz).
</p>
<p>
Choosing between manual frequency values or note values is certainly useful, but there’s another reason for wanting to derive the frequency value that corresponds to a given note value. Although I’ve not done it in this patch, you could use that value to derive a subdivision of frequency for generating tuplets well outside of the triplets and dotted notes and intervals described by standard Max 5 note values. If you’re interested in doing it, I’ve already done most of the heavy lifting and will leave the rest as an entertaining and potentially useful “exercise for the reader.”
</p>
<p>
Here’s your question: what would be the easiest way to specify <strong>phasor~</strong> outputs that would give me tuplets that weren’t duples or triples? It’s not rocket science, but I’ve got other fish to fry, at any um… rate.
</p>
<p>
Although the <strong>wave_select</strong> subpatcher might look similar to the one we used in our last LFO tutorial, I’ve added a few things - things I use in my own practice, and some bits and pieces that began their lives as reader requests. Here’s the inside of the new and improved subpatcher.
</p>
<p><img src="http://1cyjknyddcx62agyb002-web-assets.s3.amazonaws.com/gt_LFO_5/image3sm.png" /></p>
<p>
The first change is something simple that I can’t believe I didn’t add in the first place:  the ability to set the phase of the output waveform. This isn’t at all difficult – we’re using a <strong>rate~</strong> object already to provide a time multiplier to work LFO frequencies that are longer than a dotted whole note, it’s a simple matter to send a floating point value in the range 0.0 – 1.0 to the left inlet of the <strong>rate~</strong> object. This lets us sum multiple versions of the same waveform that differ only in their phases, and create interesting effects by being able to place the start point of an oscillator’s output. It’s something I use all the time.
</p>
<p>
The second addition was a reader request for a negative-going ramp. To be honest, I didn’t add it because I tend to simply invert a positive going ramp waveform when I need one (Extra credit: is there a situation you can think of where this might be an important feature to have?). So I thought I’d add the new waveform as a way to point out a lovely feature of the <strong>triangle~</strong> oscillator – its ability to use a signal input to change phase offset of the peak value. In effect, this lets us derive a standard ramp signal (the kind of output we see from the <strong>phasor~</strong> object), a triangular waveform, and a reverse ramp signal merely by modifying the phase offset.
</p>
<p>
It may have occurred to you at this point that you could modify this patch so that there’s only one <strong>triangle~</strong> oscillator object that takes an input value between zero and one to produce a variety of waveforms along the “positive-ramp to triangle to negative ramp” continuum. A fair number of savvy Max programmers use this feature to create oscillators with morphing waveforms, in fact. I’ll leave this as yet another interesting project for your edification. For this subpatch I’ve instantiated the <strong>triangle~</strong> object three times, each with an argument that gives me a <strong>phasor~</strong>-style positive-going ramp (0.), a negative-going ramp (1.0) and a triangle wave output (.5).
</p>
<p>
Using square wave output in an LFO provides some interesting effects (it allows you to create ostinati, and the sudden jumps in mixed waveforms can be really useful), I thought it’d be useful to have a square wave output with a variable duty cycle that would allow me to relative amount of time at which the square wave output was high or low.
</p>
<p>
Finally, After I had the variable duty-cycle square-wave working properly, I realized that there was something else I would like to have. As nice as the square wave output is, the “jump” when it’s summed with existing waveforms is always a fixed amount. I was thinking that it would be nice to be able to use a sample and hold technique to provide random jumps at ITM rates rather than the set vertical offset, so I added a <strong>noise~</strong> source and the Max <strong>sah~</strong> object to sample the noise output to provide that non-deterministic vertical offset.
</p>
<h2>There’s more to modal modulation than Miles Davis</h2>
<p>
In the <a href="http://cycling74.com/2009/06/19/lfo-tutorial-4-building-complexity/">fourth tutorial</a>, I spent a lot of time talking about what the relationship between a modulating LFO and a parameter would be, and tried to suggest some interesting ways in which you could using value scaling and value ranges to gradually turn control of a give parameter over to the LFO in a way that seemed smooth.
</p>
<p>
As you might imagine, a number of us here at Cycling ’74 have been pretty intimately involved with working with the new version of Ableton Live as we prepare for the release of Max for Live. One side effect of this frenzied activity for me personally has been encountering the ways in which the Live application thinks about modulating a parameter. Although they certainly have one method for modulating parameters that matches my personal approach, Live 8 recognizes a number of what they refer to as “Modulation Modes.” In brief, here’s what they are and how they work:
</p>
<p><a name="ranges"></a></p>
<ul>
<li>Unipolar: the parameter is modulated between the minimum range value and its current value</li>
<li>Bipolar: the full modulation range of a parameter is equal to twice the distance between the current value and nearest boundary of the parameter’s range (upper or lower). If the parameter is exactly halfway between the lower and upper range boundaries, the modulation range is equal to the total parameter range.</li>
<li>Additive:  The modulation range from the current value is equal to plus or minus ½ of the total range of the parameter with values being truncated if they fall outside of the parameter range.</li>
<li>Absolute: The absolute mode requires that you specify a modulation range value, and uses the current value as either the upper or lower bound of the modulation range. If the current value is less than half of the full parameter range, the modulation assumes a lower range of the current value minus the modulation range. If the current value is greater than half of the full parameter range, the modulation assumes the upper range is current value and the lower range is equal to the current value minus the modulation range value.</li>
</ul>
<p>
Working with these modes in Live suggested that I generally use what Live calls “bipolar” modulation (it’s what the previous tutorial did when controlling the amount of modulation added to an LFO, in fact), but that there are some interesting features to doing that in other ways. So I sat down and decided to try to create a Max patch that would implement these modes of modulation. In part, I thought it would be useful to actually see all four modes operating next to each other at the same time to get a better sense of how they worked with various parameter changes. After some quality Max time, I emerged from my studio weary and singed, but holding aloft the modulation modes patch you see here.
</p>
<p><img src="http://1cyjknyddcx62agyb002-web-assets.s3.amazonaws.com/gt_LFO_5/image4sm.png" /></p>
<p>
It uses the same value and range controls you saw in the previous LFO tutorials, but applies those inputs to four subpatches that implement each of the four modulation modes (feel free to open the subpatches up and poke around in them, of course), and then displays the new output ranges using 0-127 range slider (<strong>rslider</strong>) objects and applies the output range to a simple sampled sine wave for demonstration purposes.
</p>
<p>
This demonstration patch requires audio input to help you visualize the changes associated with each mode, and I initially kept the 0-127 range I used in the last tutorials. But when it came to adding the modulation modes to my patch, I realized that I could modify the patch just a little bit and make things easier to use. First, I really didn’t need to watch the output modes, so there wasn’t really any reason to be working with audio inputs, so I could remove that logic from the subpatch. After a little thought, I realized that I already had the patch functionality necessarily to scale the waveform output – the numerical outputs for the wavescale subpatch from a couple of tutorials back. All I needed to do was to modify the output of my modulation mode patch to output numbers in the range -1.0 – 1.0 instead of 0-127, and then connect the outlet of the subpatch that calculated modulation modes and I was all set. A nice bonus here was that my output was still in the signal domain – none of the waveform sampling we worked with in the last tutorial. So I sat down and removed some outlets, added a couple of scale objects to transform data ranges from 0-127 to -1.0 – 1.0, and I was ready to go.
</p>
<p>
Here’s the handy new LFO module with all the new added features and the modulation modes built right in, ready for use as a waveform or ready to be sampled for some other means:
</p>
<p><img src="http://1cyjknyddcx62agyb002-web-assets.s3.amazonaws.com/gt_LFO_5/image5.png" /></p>
<p>
The careful reader will notice that I’d added some subpatches here that allow me to reset range slider (<strong>rslider</strong>) objects with the click of a button. I’m very partial to this technique – particularly for the ability to return to initial state in live situations. In I generally like to add the UI elements to the Presentation Mode and then make the buttons really tiny and position them at the position associated with a variable or locate them near to the UI I want to reset.
</p>
<p><img src="http://1cyjknyddcx62agyb002-web-assets.s3.amazonaws.com/gt_LFO_5/image6.png" /></p>
<h2>Putting the new LFO to work</h2>
<p>
You’ll notice that I used the phrase “generating and organizing variety” at the very beginning of this tutorial to describe my interest as a Max programmer and performer. The phrase has two parts, and I’ve arguably only dealt with half the question. I purposely left that the business organizing variety (i.e. making noise) as an exercise for my readers last time out. This time, I thought I’d finish off this tutorial by taking the LFO module we’ve just made and put it to work doing something interesting, or at least audible.
</p>
<p>
The humble Max <strong>wave~</strong> object lets you use the contents of a Max <strong>buffer~</strong> object with which it is associated with by name as a wavetable. All you need to do is to use a <strong>phasor~</strong> object to drive the rate at which the wavetable is read.
</p>
<p><img src="http://1cyjknyddcx62agyb002-web-assets.s3.amazonaws.com/gt_LFO_5/image7.png" /></p>
<p>
At low speeds, you can get something like regular buffer playback, and higher speeds will yield waveforms (that usually don’t have anything to do with the pitch or the original audio sample, of course. In these cases, the contents of the buffer translate to timbre rather than the sample at normal playback rates).
</p>
<p>
But we’re talking about Max patches here  - the <strong>wave~</strong> object accepts a signal input that is uses to read through the wavetable. There’s no particular reason that the signal input needs to be a single <strong>phasor~</strong> object, or even that the input needs to proceed in a stately manner from 0. to 1.0 as the <strong>phasor~</strong> object does. Consider the little LFO object I’ve just put together as an input source for a <strong>wave~</strong> object.
</p>
<p>
There might be a couple of things to consider when using the LFO to drive the <strong>wave~</strong> object for playback:
</p>
<p>
The LFO outputs signal values in the range -1.0 – 1.0, whereas the <strong>phasor~</strong> object produces output in a narrower range of 0. – 1.0. What happens when the <strong>wave~</strong> object gets a negative value between -1.0 and 0, as it would for one-half of the period of a sine wave? (Feel free to try it and see what happens).
</p>
<p>
If the <strong>phasor~</strong> object’s output doesn’t start at 0. and end at 1.0, will we get complete playback of the sample? What if the sample goes from 1.0 to 0. or changes direction?
</p>
<p>
Square wave output won’t be particularly useful, since that kind of output won’t do much interesting in terms of audio playback – the horizontal portion of the square wave output will just output a steady value associated with a particular portion of the waveform. However, what do you think might happen if we were to mix square wave output with another kind of waveform (a ramp or triangle, for example)?
</p>
<p>
These questions suggest some interesting things we can take advantage of. We can modify or constrain the range the <strong>phasor~</strong> object whose input the <strong>wave~</strong> object uses for playback to produce interesting playback patterns – patterns that are locked to the current tempo of the Max transport, in fact. And we can combine the output of several synced LFOs to produce all kinds of interesting nonlinear playback.
</p>
<p>
The <strong>waveplayah</strong> patch is an attempt to do just that. Simply put, it takes a trio of the LFO modules we created earlier in the tutorial, sums their output, adds some playback logic that we can use to add a little interest to the proceedings, and lets us produce various kinds of nonlinear playback.
</p>
<p>
The amount of logic we need to add to create the <strong>waveplayah</strong> patch beyond simply duplicating the LFO module three times over is pretty simple. One thing we do need to keep in mind is that since we’re summing waveforms, the summed output range of the waveform will now potentially be in the range -3.0 – 3.0. We can fix that easily by multiplying the output waveform by .33 using the <strong>*~</strong> object.
</p>
<p>
And since our summed output range doesn’t match the expected 0. – 1.0 range of a <strong>phasor~</strong>, we have some interesting opportunities to modify the way that our summed and synchronized waveform drives the <strong>wave~</strong> object. The <strong>waveplayah</strong> patch has a subpatch called <strong>playback_mode</strong> that lets us map our LFO output in one of several ways. Here’s an example of how the <strong>playback_mode</strong> subpatch works.
</p>
<p><img src="http://1cyjknyddcx62agyb002-web-assets.s3.amazonaws.com/gt_LFO_5/image8.png" /></p>
<p>
The first example uses signal multiplication and signal scaling to move the entire waveform so that it falls into the 0. – 1.0 range. The Max <strong>clip~</strong> object is used for the same thing we did when we needed to create square wave output – arguments to the <strong>clip~</strong> object set the low and high ranges for the output; anything that falls above or below that output range is simply clipped at the lower or upper range (We’ll leave it to you to imagine or discover what that sounds like). Finally, we’re using the Max <strong>pong~</strong> object in the subpatch to provide us with two new playback options – folding and wrapping. The <strong>pong~</strong> object can do both things – its first argument sets the mode of signal treatment (0 for wrapping, 1 for folding) and the second and third arguments set the lower and upper ranges below or above which the signal folding or wrapping will happen. The playback_mode subpatch provides all those options by using a <strong>gate~</strong> object together with a <strong>menu</strong> object whose index number (with 1 added to that number so that we don’t have a 0 value – that would turn the gate off) sets which mode to use in playback.
</p>
<p>
<em>Technical note: If you take a look at the inside of the <strong>playback_mode</strong> subpatch, you’ll notice, too that the first choice (scale) also includes a gate to turn the output of the <strong>*~</strong> and <strong>+~</strong> objects off. We’re doing that because the  output of these two objects is always “on” and will be added to the other output waveforms if we don’t.<br />
</em>
</p>
<p>
I’m kind of stunned by the range of kinds of output this little patch will produce, and hope you enjoy playing with it. There are some obvious improvements you might want to make, such as adding objects to the Presentation Layer to create your own UI for the playback unit, or pattrizing your patch to allow for quick preset loading. Or you just might want to spend a few days getting acquainted.
</p>
<p>
Next time out, I’ll show you how to turn the <strong>waveplayah</strong> patch into a Max for Live audio effect device (and, more generally, how to port a Max patch for use in Max for Live).
</p>
</div>
]]></content:encoded>
			<wfw:commentRss>http://cycling74.com/2010/02/05/lfo-tutorial-5-lfo-child-slight-return/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Project 42: EAMIR</title>
		<link>http://cycling74.com/2010/01/27/project42-eamir/</link>
		<comments>http://cycling74.com/2010/01/27/project42-eamir/#comments</comments>
		<pubDate>Wed, 27 Jan 2010 00:12:29 +0000</pubDate>
		<dc:creator>c74</dc:creator>
		
		<category><![CDATA[projects]]></category>

		<category><![CDATA[algorithm]]></category>

		<category><![CDATA[controller]]></category>

		<category><![CDATA[educational]]></category>

		<category><![CDATA[instruments]]></category>

		<category><![CDATA[interactive]]></category>

		<guid isPermaLink="false">http://cycling74.com/?p=4217</guid>
		<description><![CDATA[Author: V.J. Manzo
Project Date: 2007
New Jersey, USA

EAMIR (Electro-Acoustic Musically Interactive Room) is a collection of interactive music systems that allow individuals, including those with mild and profound disabilities, to create a unique musical expression without the physical and technical limitations found in the study of traditional acoustic instruments (e.g. – violin, guitar, etc.) while allowing [...]]]></description>
			<content:encoded><![CDATA[<h2>Author: V.J. Manzo</h2>
<h3>Project Date: 2007</h3>
<p class="location">New Jersey, USA</p>
<p class="image"><img src="http://1cyjknyddcx62agyb002-web-assets.s3.amazonaws.com/projects/project42.png" alt="project" /></p>
<p class="project">EAMIR (Electro-Acoustic Musically Interactive Room) is a collection of interactive music systems that allow individuals, including those with mild and profound disabilities, to create a unique musical expression without the physical and technical limitations found in the study of traditional acoustic instruments (e.g. – violin, guitar, etc.) while allowing individuals with some musical training to help shape the performance in terms of dynamics, tempo, tonality, etc.</p>
<h4><a href="http://www.eamir.org" target="_blank">Learn More About This Project</a></h4></p>
]]></content:encoded>
			<wfw:commentRss>http://cycling74.com/2010/01/27/project42-eamir/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Project 41: The Modal Object Library</title>
		<link>http://cycling74.com/2010/01/27/project41-the-modal-object-library/</link>
		<comments>http://cycling74.com/2010/01/27/project41-the-modal-object-library/#comments</comments>
		<pubDate>Wed, 27 Jan 2010 00:09:42 +0000</pubDate>
		<dc:creator>c74</dc:creator>
		
		<category><![CDATA[projects]]></category>

		<category><![CDATA[chord]]></category>

		<category><![CDATA[chromatic]]></category>

		<category><![CDATA[harmony]]></category>

		<category><![CDATA[mode]]></category>

		<category><![CDATA[scale]]></category>

		<category><![CDATA[theory]]></category>

		<guid isPermaLink="false">http://cycling74.com/?p=4213</guid>
		<description><![CDATA[Author: V.J. Manzo
Project Date: 2006
New Jersey, USA

The Modal Object Library is a collection of objects to control and define modality in Max/MSP. Users interested in tonal tertian harmony, scales, modes, and chords and diatonic/chromatic relationships and theory would enjoy this library.
Learn More About This Project
]]></description>
			<content:encoded><![CDATA[<h2>Author: V.J. Manzo</h2>
<h3>Project Date: 2006</h3>
<p class="location">New Jersey, USA</p>
<p class="image"><img src="http://1cyjknyddcx62agyb002-web-assets.s3.amazonaws.com/projects/project41.jpg" alt="project" /></p>
<p class="project">The Modal Object Library is a collection of objects to control and define modality in Max/MSP. Users interested in tonal tertian harmony, scales, modes, and chords and diatonic/chromatic relationships and theory would enjoy this library.</p>
<h4><a href="http://www.vjmanzo.com/mol" target="_blank">Learn More About This Project</a></h4></p>
]]></content:encoded>
			<wfw:commentRss>http://cycling74.com/2010/01/27/project41-the-modal-object-library/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Project 40: subcycle labs multi-touch performance engine</title>
		<link>http://cycling74.com/2010/01/27/project40-subcycle-labs-multi-touch-performance-engine/</link>
		<comments>http://cycling74.com/2010/01/27/project40-subcycle-labs-multi-touch-performance-engine/#comments</comments>
		<pubDate>Wed, 27 Jan 2010 00:02:55 +0000</pubDate>
		<dc:creator>c74</dc:creator>
		
		<category><![CDATA[projects]]></category>

		<category><![CDATA[fm synthesis]]></category>

		<category><![CDATA[interactive]]></category>

		<category><![CDATA[interface]]></category>

		<category><![CDATA[multi-touch]]></category>

		<category><![CDATA[spatialization]]></category>

		<guid isPermaLink="false">http://cycling74.com/?p=4207</guid>
		<description><![CDATA[Author: Christian Bannister
Project Date: ongoing
Portland, OR, USA

This is part of a series of sketches exploring the potential to bridge the gap between sound visualization and musical instrument. With multi-touch interaction it is possible to manipulate multiple characteristics of a sound—visually, and simultaneously. This shift has the potential of bringing the experience of synthesizer as music [...]]]></description>
			<content:encoded><![CDATA[<h2>Author: Christian Bannister</h2>
<h3>Project Date: ongoing</h3>
<p class="location">Portland, OR, USA</p>
<p class="image"><img src="http://1cyjknyddcx62agyb002-web-assets.s3.amazonaws.com/projects/project40.jpg" alt="project" /></p>
<p class="project">This is part of a series of sketches exploring the potential to bridge the gap between sound visualization and musical instrument. With multi-touch interaction it is possible to manipulate multiple characteristics of a sound—visually, and simultaneously. This shift has the potential of bringing the experience of synthesizer as music instrument to a whole new place. This approach allows the performer to have a more tactile and immediate experience of the synthesizer and also creates a visual reference for the audience.<br />
<br />
In the performance of electronic music it is fairly common that the audience is alienated from the process and performance of the musician. This project hopes to create a common visual language and experience for the electronic musician and the audience by enhancing the perception of sound and music on both sides.</p>
<h4><a href="http://www.subcycle.org" target="_blank">Learn More About This Project</a> and<a href="http://vimeo.com/8853339" target="_blank"> Watch the Video</a></h4></p>
]]></content:encoded>
			<wfw:commentRss>http://cycling74.com/2010/01/27/project40-subcycle-labs-multi-touch-performance-engine/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Project 39: imaginArt</title>
		<link>http://cycling74.com/2010/01/26/project36-imaginart/</link>
		<comments>http://cycling74.com/2010/01/26/project36-imaginart/#comments</comments>
		<pubDate>Tue, 26 Jan 2010 12:19:04 +0000</pubDate>
		<dc:creator>c74</dc:creator>
		
		<category><![CDATA[projects]]></category>

		<category><![CDATA[audio]]></category>

		<category><![CDATA[performance]]></category>

		<category><![CDATA[real-time]]></category>

		<category><![CDATA[video]]></category>

		<guid isPermaLink="false">http://cycling74.com/?p=4153</guid>
		<description><![CDATA[Authors: Gloria Gorchs, David Morella, Marco Domenichetti
Project Date: 2009
Barcelona, Spain

A return trip into an illustrated album. A journey that begins when you dive into the pages of a book and and become a fictional character that the author has imagined.
Learn More About This Project
]]></description>
			<content:encoded><![CDATA[<h2>Authors: Gloria Gorchs, David Morella, Marco Domenichetti</h2>
<h3>Project Date: 2009</h3>
<p class="location">Barcelona, Spain</p>
<p class="image"><img src="http://1cyjknyddcx62agyb002-web-assets.s3.amazonaws.com/projects/project36.png" alt="project" /></p>
<p class="project">A return trip into an illustrated album. A journey that begins when you dive into the pages of a book and and become a fictional character that the author has imagined.</p>
<h4><a href="http://vimeo.com/8215254" target="_blank">Learn More About This Project</a></h4></p>
]]></content:encoded>
			<wfw:commentRss>http://cycling74.com/2010/01/26/project36-imaginart/feed/</wfw:commentRss>
		</item>
		<item>
		<title>EM Reviews Max for Live</title>
		<link>http://cycling74.com/2010/01/25/em-reviews-max-for-live/</link>
		<comments>http://cycling74.com/2010/01/25/em-reviews-max-for-live/#comments</comments>
		<pubDate>Mon, 25 Jan 2010 19:11:06 +0000</pubDate>
		<dc:creator>Lilli Wessling Hart</dc:creator>
		
		<category><![CDATA[articles]]></category>

		<category><![CDATA[review]]></category>

		<category><![CDATA[ableton]]></category>

		<category><![CDATA[max-for-live]]></category>

		<guid isPermaLink="false">http://cycling74.com/?p=4184</guid>
		<description><![CDATA[
In this article, Jim Aikin reviews the new add-on product to Live, developed by Ableton and Cycling &#8216;74, with a detailed account of his experience. In you are new to Max for Live, this is a helpful introduction before downloading the demo and trying it out yourself.
]]></description>
			<content:encoded><![CDATA[<div class="introtext">
<a href="http://emusician.com/software/ableton-cycling-max-live-0210/index.html" target="blank"><img src="http://cycling74.com/download/images_press/EM_logo.jpg" class="intro" align="left" /></a><a href="http://emusician.com/software/ableton-cycling-max-live-0210/index.html" target="blank">In this article</a>, Jim Aikin reviews the new <a href="http://www.ableton.com/maxforlive" target="blank">add-on product to Live</a>, developed by Ableton and Cycling &#8216;74, with a detailed account of his experience. In you are new to Max for Live, this is a helpful introduction before <a href="http://cycling74.com/downloads/">downloading the demo</a> and trying it out yourself.</div>
]]></content:encoded>
			<wfw:commentRss>http://cycling74.com/2010/01/25/em-reviews-max-for-live/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Project 38: A.J.R ou rembobiner un Autre jour</title>
		<link>http://cycling74.com/2010/01/25/project38-ajr-ou-rembobiner-un-autre-jour/</link>
		<comments>http://cycling74.com/2010/01/25/project38-ajr-ou-rembobiner-un-autre-jour/#comments</comments>
		<pubDate>Mon, 25 Jan 2010 17:42:18 +0000</pubDate>
		<dc:creator>c74</dc:creator>
		
		<category><![CDATA[projects]]></category>

		<category><![CDATA[featured]]></category>

		<category><![CDATA[installation]]></category>

		<guid isPermaLink="false">http://cycling74.com/?p=4179</guid>
		<description><![CDATA[Author: Collectif NUZ
Project Date: September 2009 - February 2011
France / Notre dame de londres

A space of 80 m 2 configure a dial of pie-chart clockcutout, which represents familiar places like the apartment, the street…

This space contains a history with multiple choices or the spectactor will have the possibility of endorsing various characters. Parameters of a [...]]]></description>
			<content:encoded><![CDATA[<h2>Author: Collectif NUZ</h2>
<h3>Project Date: September 2009 - February 2011</h3>
<p class="location">France / Notre dame de londres</p>
<p class="image"><img src="http://1cyjknyddcx62agyb002-web-assets.s3.amazonaws.com/projects/project38.jpg" alt="project" /></p>
<p class="project">A space of 80 m 2 configure a dial of pie-chart clockcutout, which represents familiar places like the apartment, the street…<br />
<br />
This space contains a history with multiple choices or the spectactor will have the possibility of endorsing various characters. Parameters of a gesture (action on an object or displacement: as the duration of the input in the apartment) will act on the narrative combination which will follow. Here each gesture counts and tells a little oneself (real spectator) and a little other (fictitious character).</p>
<h4><a href="http://www.collectifnuz.com" target="_blank">Learn More About This Project</a></h4></p>
]]></content:encoded>
			<wfw:commentRss>http://cycling74.com/2010/01/25/project38-ajr-ou-rembobiner-un-autre-jour/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Project 37: Winduino II</title>
		<link>http://cycling74.com/2010/01/21/project37-winduino-ii/</link>
		<comments>http://cycling74.com/2010/01/21/project37-winduino-ii/#comments</comments>
		<pubDate>Thu, 21 Jan 2010 17:23:37 +0000</pubDate>
		<dc:creator>c74</dc:creator>
		
		<category><![CDATA[projects]]></category>

		<category><![CDATA[hardware]]></category>

		<category><![CDATA[instrument]]></category>

		<category><![CDATA[max-for-live]]></category>

		<guid isPermaLink="false">http://cycling74.com/?p=4165</guid>
		<description><![CDATA[Author: Jason Warriner
Project Date: 2010

The Winduino II is a wireless, digital version of an Aeolian harp that can be listened to on its own or used as accompaniment for other instruments. Still based around the Adruino BT Bluetooth board. The Winduino II software uses the recently released Max for Live software to add the unparalleled [...]]]></description>
			<content:encoded><![CDATA[<h2>Author: Jason Warriner</h2>
<h3>Project Date: 2010</h3>
<p class="image"><img src="http://1cyjknyddcx62agyb002-web-assets.s3.amazonaws.com/projects/project37.jpg" alt="project" /></p>
<p class="project">The Winduino II is a wireless, digital version of an Aeolian harp that can be listened to on its own or used as accompaniment for other instruments. Still based around the Adruino BT Bluetooth board. The Winduino II software uses the recently released Max for Live software to add the unparalleled convenience, flexibility and stability of Live and Max/MSP in one piece of software. Now the Winduino II can generate any sound a user can come up with by processing the midi generated by Max/MSP directly in Live. </p>
<h4><a href="http://fascinationworkshop.net/prototypes/winduino-ii/" target="_blank">Learn More About This Project</a></h4></p>
]]></content:encoded>
			<wfw:commentRss>http://cycling74.com/2010/01/21/project37-winduino-ii/feed/</wfw:commentRss>
		</item>
		<item>
		<title>An Interview with Stretta</title>
		<link>http://cycling74.com/2010/01/20/an-interview-with-stretta/</link>
		<comments>http://cycling74.com/2010/01/20/an-interview-with-stretta/#comments</comments>
		<pubDate>Wed, 20 Jan 2010 22:30:11 +0000</pubDate>
		<dc:creator>Marsha Vdovin</dc:creator>
		
		<category><![CDATA[articles]]></category>

		<category><![CDATA[interview]]></category>

		<category><![CDATA[controller]]></category>

		<category><![CDATA[hardware]]></category>

		<category><![CDATA[max-for-live]]></category>

		<category><![CDATA[monome]]></category>

		<guid isPermaLink="false">http://cycling74.com/?p=4157</guid>
		<description><![CDATA[Matthew Davidson aka Stretta is a talented guy. He’s an accomplished graphic artist and video producer/editor but we talked to him about his music.  Stretta’s music is lush, modest and dreamy in the tradition of Brian Eno but it definitely has character of its own.  Stretta comes from a tradition of modular synthesis that led him to discover <a href="http://www.cycling74.com/products/maxmspjitter/" target="_blank">Max/MSP</a>.]]></description>
			<content:encoded><![CDATA[<div class="introtext">
<img src="http://1cyjknyddcx62agyb002-web-assets.s3.amazonaws.com/interviews/matthew_davidson/interview_md.jpg" align="left" class="intro"  />
<p>
Matthew Davidson aka Stretta is a talented guy. He’s an accomplished graphic artist and video producer/editor but we talked to him about his music.  Stretta’s music is lush, modest and dreamy in the tradition of Brian Eno but it definitely has character of its own.  Stretta comes from a tradition of modular synthesis that led him to discover <a href="http://www.cycling74.com/products/maxmspjitter/" target="_blank">Max/MSP</a>.
</p>
</div>
<p><span id="more-4157"></span></p>
<div class="story_body">
<p><em><strong>Tell me a little about your background.</strong></em></p>
<p>
I grew up in Iowa, and in 1988 I was trying to figure out what college to go to. I applied to one school, and found myself out on the East Coast, at Berklee College of Music. While I was at Berklee, one of my professors introduced me to Max. That was 1992. I&#8217;ve been using Max ever since.
</p>
<p>
I was interested in music and technology, so growing up in Iowa — pre-internet—all the information I had access to was books and magazines. It&#8217;s not at all like the hot and cold running information that we have on tap these days, where you can be anywhere in the world and learn about any subject very quickly.
</p>
<p>
As an example, I recently developed an interest in photography. This is a subject I knew nothing about. With the internet, and the instant turnaround of digital photography, being able to see other people&#8217;s work, inspect the meta data, I was able to learn a great deal in a short amount of time. Today, taking up any new interest like electronic music is far easier than when I started, I can tell you that much.
</p>
<p><em><strong>Digital photography opened up so much for me. I was able to do it without spending money, which was incredible. People were able to see my work all over the world, without me spending money.</strong></em></p>
<p>
Right. The spending money thing is analogous to what life was like before digital recording. A reel of tape costs money, so when you&#8217;re rolling, when you&#8217;ve hit the record button, there&#8217;s money at stake. That was the same thing with photography, you&#8217;re burning film. Now it doesn&#8217;t cost anything to drop the shutter, and now it doesn&#8217;t cost anything to play with digital audio. This accelerates the learning process.
</p>
<p><object width="560" height="340"><param name="movie" value="http://www.youtube.com/v/ax7AbXoMgnk&#038;hl=en_US&#038;fs=1&#038;"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/ax7AbXoMgnk&#038;hl=en_US&#038;fs=1&#038;" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="560" height="340"></embed></object></p>
<p><em><strong>I loved your <a href="http://www.stretta.com/~matthew/about/timeline.swf">Way-Geeky Time Line</a>.</strong></em></p>
<p>
[Laughs.] You&#8217;ve done your research. Looking back, I realized that computers helped me express myself, so it was the correlation of operating systems or computers and what was happening in my life was significant. My first computer at home that I had access to was an Apple Lisa. The first time I used it, it was like touching the future. It was like someone got in a time machine, kidnapped a computer, then brought it back to the current day. I&#8217;d never experienced anything like that before.
</p>
<p>
I guess you could apply the oft-used term &#8220;paradigm shift.&#8221; I hate to use that word, but I can&#8217;t really think of anything better to describe what it was like going from computers with a green phosphorous screen to a black-and-white bitmap display where you click on objects and open them up. It&#8217;s not hyperbole to say that that changed my life.
</p>
<p>
I only had that machine for three months, then it was replaced by a 128K Macintosh. I was definitely one of the very early Mac users, and I&#8217;ve been fortunate in my choice of careers and work, as I&#8217;ve never had to use a Windows machine. Even in the dark days of the &#8217;90s.
</p>
<p><em><strong>Did you take to Max right away?</strong></em></p>
<p>
I remember the night I was exposed to Max. Afterwards, I stood outside Berklee and put my head back and looked up at the sky, imagining how far this thing went. I recognized it and I knew it was one of those things I could spend years playing with, and never really see the end of the potential.
</p>
<p>
I&#8217;m very fortunate to watch Max evolve, sprouting audio, making all these technological leaps, and then the leap to OS X. It continues to be more capable, while retaining its essential core.
</p>
<p>
My favorite toy growing up was Legos, and I see a commonality. People I talk to who are into modular synthesizers, or into Max, there&#8217;s this commonality of &#8220;Did you play with Legos when you grew up?&#8221; &#8220;Yeah.&#8221; So it&#8217;s like that. It&#8217;s like Legos for music.
</p>
<p>
I like that granularity of control. It sits in this weird space, between commercial music applications and programming languages. Max is somewhere in between these two things. It allows you to create and customize your environment without programming and compiling.
</p>
<p>
I&#8217;m not a programmer—there is something about procedural languages, text-based, linear thinking that I don&#8217;t get along with. Max is non-linear, it moves in all directions, it&#8217;s real time. If you&#8217;re a guitarist, you understand how guitar pedals and patch cords work. You plug this into this and this other thing. I think this is a metaphor that is compatible with musicians.
</p>
<p>
If you understand these things, then understanding Max comes intuitively. When your creations evolve, and they tend to get more complex, you look back at it and you think, &#8220;How did I even understand this to begin with?&#8221; Because it looks really complicated. But then you break it down into smaller parts, and you can see how everything works.
</p>
<p><em><strong>So, is Max your primary music-making tool?</strong></em></p>
<p>
No. I would be surprised to hear anyone say that it is, simply because we live in this age where we have so many amazing tools available to musicians. There has never been a better time, from a technological standpoint, to be a musician. So while there are people who can dedicate themselves monk-like to a particular tool—Charles Cohen comes to mind. He&#8217;s been using a Buchla Music Easel for forty years. That&#8217;s his thing, and he knows it inside out. I admire that.  We need people like that to be able to dedicate themselves to an instrument, but I don&#8217;t have that kind of dedication.
</p>
<p><em><strong>Have you gone the Jitter road? Have you combined your photography with Max?</strong></em></p>
<p>
[Laughs.] No. Like I said, Max is one of those things that you could spend the rest of your life dedicating yourself to the possibilities, and not exhaust them all. Based on my interest in video, and photography, I am definitely interested in in Jitter, but I haven&#8217;t come close to exhausting all the ideas I have for audio and MIDI within Max yet.
</p>
<p>
I think if someone came to me and said, &#8220;You know, we want you to do a live performance, and we want there to be video,&#8221; yeah, [laughs] I would fast-track my Jitter education.
</p>
<p>
Also, I don&#8217;t think there’re enough video-y applications for the <a href="http://monome.org/" target="_blank">Monome</a>. The Monome is very audio-centric right now and there isn&#8217;t any good reason for that. The Monome, in conjunction with Jitter, would be very powerful.
</p>
<p><img src="http://1cyjknyddcx62agyb002-web-assets.s3.amazonaws.com/interviews/matthew_davidson/monome.jpg" align="left" class="intro" /></p>
<p><em><strong>What is it about the <a href="http://monome.org/" target="_blank">Monome</a> that draws you to it?</strong></em></p>
<p>
Probably it was all the years of Max prior to it. You spend all this time with Max, and then you think to yourself, &#8220;Gosh, I really wish I had a controller to go along with this, to provide input and feedback.&#8221; People would come out with controllers, and they would be overly specific, or they wouldn&#8217;t do the thing that you wanted to do.
</p>
<p>
Then you started seeing people building their own controllers. Do-it-yourself kits became available, like the iCube, where you could hook up sensors and other analog sources and it would provide a MIDI output. That was a good move forward.
</p>
<p>
But when I saw the Monome, I just thought, &#8220;Oh, of course. I know exactly what I would do with that.&#8221; I think that&#8217;s partly why Max has been the default language of choice for Monome developers. They&#8217;re very well suited for each other. There are no labels of any sort, there&#8217;s no pre-determined, prescribed usage to the Monome. It is exactly what you&#8217;re looking for if you&#8217;d done anything in Max at all in the past.
</p>
<p><em><strong>How did the Max 5 change affect you?</strong></em></p>
<p>
I was using Max 4 up until about two or three months ago. I knew about Max 5, I knew what was going on with the environment, and I thought it was a very necessary, gutsy move for the company. And from what I could tell, at least two solid years of engineering, while adding no new features or capabilities to the software, redoing the user interface from the ground up, with a completely new framework. That&#8217;s the right way to do things.
</p>
<p>
If they were a larger company, they would find a way to screw it up. &#8220;You want to do what? For how long? That&#8217;s ridiculous.&#8221; But the change from Max 4 to Max 5 is as significant as the change OS 9 to OS X.
</p>
<p>
I was talking to Nick Rothwell as recently as September, telling him that I think it&#8217;s time for me to move into Max 5. He said, “Well, once you start using Max 5, you&#8217;re never going to go back.” Intellectually I believed him, but deep down, I was like, “Yeah, well we&#8217;ll just see about that”— because it is a big change. And oh, he was right. [laughs] I have a Max 5 license on one computer and a Max 4 license on another computer. I can&#8217;t bring myself to use Max 4 anymore.
</p>
<p>
I took to it in a fairly short amount of time. I think the main change, in terms of capabilities for Max 5, is being able to think in metric units. You can think in terms of 16th notes and 8th notes, and you don&#8217;t have to worry about milliseconds, or converting this to samples. That makes everything a lot easier. The idea of a global transport, and having access to metrical units is a really big deal for me. That was huge.
</p>
<p><em><strong>What&#8217;s your favorite object?</strong></em></p>
<p>
The Coll object.
</p>
<p><em><strong>And why is that?</strong></em></p>
<p>
I use it in every single patch. It&#8217;s familiar, like an old friend. I know it, and I know how to use it. I&#8217;m constantly learning new things about it. I think if you&#8217;re doing anything that manipulates or stores little bits of data, you have to get comfortable with the Coll object.
</p>
<p>
It seems to be pretty fast. I don&#8217;t have any problem extracting data in a timely fashion from it. If you have a Coll object and a Metro, you have the entire basis of a whole variety of step sequencers with a timed beat. You can do all sorts of magic with just those two things.
</p>
<p>
I don&#8217;t think it&#8217;s very sexy if you look at it. The object that I really liked before the Coll object was Table. It was more limited and approachable than Coll, but it had a graphical interface. You had two-dimensional data that you could manipulate directly with the mouse. But the Coll object is a lot more flexible. With the Monome, the face of the Coll object is now tangible.
</p>
<p>
Often, I&#8217;ll peek inside patches of other developers to see how they do things. Sometimes, they&#8217;re doing some sort of complex mathematical abstraction, which is satisfying from an intellectual point of view, but I&#8217;m more likely to simply dump the values I want into a data object like Coll. It kind of feels like cheating, but it gets the job done.
</p>
<p><em><strong>Have you been working in Max for Live?</strong></em></p>
<p>
Yeah. Most of the work I&#8217;ve been doing recently has been in <a href="http://cycling74.com/products/maxforlive/" target="_blank">Max for Live</a>.
</p>
<p>
I think if Max by itself had a weak point, it would be that it doesn&#8217;t have a decent time line. A time line is one of those features that represents infinite mission creep. Ultimately, what you want is a full-featured DAW. So, putting Max inside a mature DAW is the best solution here.
</p>
<p>
Prior to Max for Live, most of the things I made were only of interest only to me, due to the dependencies involved. In the beginning, the dependencies were racks of hardware. At Berklee, I had codified what I learned about harmony into software, but to make it do anything you had to use external synthesizers and sound generators. Nothing ever made it out of the lab.
</p>
<p>
Later, you could use soft synths, but that still involved a lot of setup. You had to load the virtual instruments and effects, perform complicated routings, and deal with sync issues. It wasn&#8217;t really plug-and-play. I couldn&#8217;t take this, and then give it to someone else, and have it be as useful for them.
</p>
<p>
Now with Max for Live, suddenly the things that I make are portable to other people. I can make these little tools, these little performance things that take real time input, and then outputs something that&#8217;s musically interesting.
</p>
<p>
That also has ramifications for live performance. I did a recent video using Max 5. It involved a software harmonizer, effects, recording multiple tracks into a DAW, and complex MIDI routings, and that&#8217;s like, four different applications, all combined. It took a good hour or so to set this one performance piece up. So, it&#8217;s not easy for me to reproduce that performance again, let alone string together a set of pieces to perform. Now, with Max for Live, you can put all these combinations of elements together, all of your soft synths, all your routing, all your effects in this one environment, and save it. Then you can recall it. I can&#8217;t tell you what a huge thing that is.
</p>
<p>
Max for Live also addresses the issue of a DAW trying to be all things to all people&#8230;
</p>
<p><em><strong>But they try to be.</strong></em></p>
<p>
Well, they try to be, and then that&#8217;s where the user interface breaks down. The application sprouts these weird appendages, and after two years of that and you end up with something that becomes incomprehensible and un-maintainable. Especially if you&#8217;re not willing to take the time to go in and refine the user interface, or piss off your existing user base by throwing out old, crusty features that a small percentage of your user base relies on. But if you jettisoned that code, then you could bring your DAW forward, develop faster and make your code more reliable.
</p>
<p>
So what Max for Live does for Live users is it allows people to create this customized environment to do the things that they need to do, without bringing the entire DAW down.
</p>
<p>
So you can see how Max and Live need each other. Max gets a fully featured timeline, and <a href="http://www.ableton.com/" target="_blank">Live</a> gets a mature environment for user customization.
</p>
<p><em><strong>So, you’re giving away your Max for Live ‘Monome suite’?</strong></em></p>
<p>
It&#8217;s free for anyone to download. I&#8217;m beta testing a new release right now that adds support for multiple Monomes. So if you have multiple Monomes, you can have one that&#8217;s switching between these applications, and another one that&#8217;s switching between another set of applications.
</p>
<p>
I&#8217;m replacing all the user interface objects with Live objects, and that enables parameters to be stored and automated. I just sent out a beta of that yesterday, and I&#8217;ll hopefully be getting some bug reports and actually making that an official release in the near future.
</p>
<p><em><strong>So, what is Stretta?</strong></em></p>
<p>
Stretta began as a vanity record label. I bought the domain back around 1996. It became clear to me that people weren&#8217;t buying music, so the idea of a record label really didn&#8217;t make sense anymore. Simultaneously, I was noticing the importance of personal branding on the internet because there are so many forces competing for attention. If you release something, you&#8217;ll see a huge spike of interest that falls off rapidly. It doesn&#8217;t matter if you spent two years working on something or two days, you&#8217;ll see the same spike, then everyone moves on to the next thing. From that I concluded that the better strategy is to release smaller things on a more consistent basis, and this is where having a memorable brand becomes useful.
</p>
<p>
&#8216;Matthew Davidson&#8217; is not very memorable, and it is kind of long. So, since I already had the domain—and short, pronounceable domain names are a rare commodity these days—I use Stretta. It is short and memorable and consistent across all these social media platforms.
</p>
<p><strong><a href="http://www.stretta.com" target="_blank">Stretta&#8217;s Website</a></strong></p>
<p><strong><a href="http://www.vimeo.com/stretta" target="_blank">Stretta&#8217;s Vimeo page</a></strong></p>
<p><em><br />
Text interview by <a href="http://www.marshavdovin.com/" target="_blank">Marsha Vdovin</a> for Cycling &#8216;74. Video made by Stretta.</em></p>
</div>
]]></content:encoded>
			<wfw:commentRss>http://cycling74.com/2010/01/20/an-interview-with-stretta/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Project 36: Phil Gerus Music</title>
		<link>http://cycling74.com/2010/01/14/project36-phil-gerus-music/</link>
		<comments>http://cycling74.com/2010/01/14/project36-phil-gerus-music/#comments</comments>
		<pubDate>Thu, 14 Jan 2010 16:36:12 +0000</pubDate>
		<dc:creator>c74</dc:creator>
		
		<category><![CDATA[Uncategorized]]></category>

		<category><![CDATA[granular]]></category>

		<category><![CDATA[piano]]></category>

		<category><![CDATA[techno]]></category>

		<category><![CDATA[voice]]></category>

		<guid isPermaLink="false">http://cycling74.com/?p=4113</guid>
		<description><![CDATA[Author: Phil Gerus
Project Date: Current
Moscow

Phil Gerus, born in 1989, Moscow resident. Presently a piano student at Ippolitov-Ivanov college. Started piano practicing in his family jazz trio which transformed later into a duo of which he is a member currently. In his piano studies takes a special interest of Scriabin, Rachmaninov, Ravel, Chopin’s legacy. Plays regular [...]]]></description>
			<content:encoded><![CDATA[<h2>Author: Phil Gerus</h2>
<h3>Project Date: Current</h3>
<p class="location">Moscow</p>
<p class="image"><img src="http://1cyjknyddcx62agyb002-web-assets.s3.amazonaws.com/projects/project36.jpg" alt="project" /></p>
<p class="project">Phil Gerus, born in 1989, Moscow resident. Presently a piano student at Ippolitov-Ivanov college. Started piano practicing in his family jazz trio which transformed later into a duo of which he is a member currently. In his piano studies takes a special interest of Scriabin, Rachmaninov, Ravel, Chopin’s legacy. Plays regular recitals of the above mentioned authors. Phil Gerus simultaneously tries his hand at experimental electronic music. The first interest in experimental electronic emerged after acquisition of a lap-top. He got fascinated by programming funk techno grooves, widely exploring Reaktor and Max/Msp. In his tracks Phil occasionally uses his own vocing. His creative approach to composing is marked by live performance as well as individual choice of software. He tends to incorporate piano playing into his tracks using granular synthesizing. His musical ambition has always been to put forward improvisation as the core unit of his live performances.</p>
<h4><a href="http://soundcloud.com/philgerus" target="_blank">Learn More About This Project</a></h4></p>
]]></content:encoded>
			<wfw:commentRss>http://cycling74.com/2010/01/14/project36-phil-gerus-music/feed/</wfw:commentRss>
		</item>
	</channel>
</rss>
