<?xml version="1.0"?>
<?xml-stylesheet type="text/css" href="http://cycling74.com/wiki/skins/common/feed.css?303"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
		<id>http://cycling74.com/wiki/index.php?title=MSP_Sequencing_Tutorial_1:_Audio-Rate_Sequencing&amp;feed=atom&amp;action=history</id>
		<title>MSP Sequencing Tutorial 1: Audio-Rate Sequencing - Revision history</title>
		<link rel="self" type="application/atom+xml" href="http://cycling74.com/wiki/index.php?title=MSP_Sequencing_Tutorial_1:_Audio-Rate_Sequencing&amp;feed=atom&amp;action=history"/>
		<link rel="alternate" type="text/html" href="http://cycling74.com/wiki/index.php?title=MSP_Sequencing_Tutorial_1:_Audio-Rate_Sequencing&amp;action=history"/>
		<updated>2013-06-19T09:19:54Z</updated>
		<subtitle>Revision history for this page on the wiki</subtitle>
		<generator>MediaWiki 1.19.1</generator>

	<entry>
		<id>http://cycling74.com/wiki/index.php?title=MSP_Sequencing_Tutorial_1:_Audio-Rate_Sequencing&amp;diff=844&amp;oldid=prev</id>
		<title>Gtaylor@rtqe.net at 15:42, 28 June 2012</title>
		<link rel="alternate" type="text/html" href="http://cycling74.com/wiki/index.php?title=MSP_Sequencing_Tutorial_1:_Audio-Rate_Sequencing&amp;diff=844&amp;oldid=prev"/>
				<updated>2012-06-28T15:42:53Z</updated>
		
		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table class='diff diff-contentalign-left'&gt;
				&lt;col class='diff-marker' /&gt;
				&lt;col class='diff-content' /&gt;
				&lt;col class='diff-marker' /&gt;
				&lt;col class='diff-content' /&gt;
			&lt;tr valign='top'&gt;
			&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;← Older revision&lt;/td&gt;
			&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;Revision as of 15:42, 28 June 2012&lt;/td&gt;
			&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 1:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 1:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Click here to open the tutorial patch: [[01qAudioRateSequencing.maxpat]] &amp;#160;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Click here to open the tutorial patch: [[&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;Media:&lt;/ins&gt;01qAudioRateSequencing.maxpat]] &amp;#160;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;	 &amp;#160;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;	 &amp;#160;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;===Introduction=== 	 &amp;#160;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;===Introduction=== 	 &amp;#160;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Gtaylor@rtqe.net</name></author>	</entry>

	<entry>
		<id>http://cycling74.com/wiki/index.php?title=MSP_Sequencing_Tutorial_1:_Audio-Rate_Sequencing&amp;diff=749&amp;oldid=prev</id>
		<title>Admin: Created page with &quot;Click here to open the tutorial patch: 01qAudioRateSequencing.maxpat  	  ===Introduction=== 	   This tutorial looks at how to generate timed events in Max using MSP audio ...&quot;</title>
		<link rel="alternate" type="text/html" href="http://cycling74.com/wiki/index.php?title=MSP_Sequencing_Tutorial_1:_Audio-Rate_Sequencing&amp;diff=749&amp;oldid=prev"/>
				<updated>2012-06-25T20:12:26Z</updated>
		
		<summary type="html">&lt;p&gt;Created page with &amp;quot;Click here to open the tutorial patch: &lt;a href=&quot;/wiki/index.php?title=01qAudioRateSequencing.maxpat&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new&quot; title=&quot;01qAudioRateSequencing.maxpat (page does not exist)&quot;&gt;01qAudioRateSequencing.maxpat&lt;/a&gt;  	  ===Introduction=== 	   This tutorial looks at how to generate timed events in Max using MSP audio ...&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;Click here to open the tutorial patch: [[01qAudioRateSequencing.maxpat]] &lt;br /&gt;
	 &lt;br /&gt;
===Introduction=== 	 &lt;br /&gt;
&lt;br /&gt;
This tutorial looks at how to generate timed events in Max using MSP audio signals as the synchronization source. When designing timing-based systems in Max, we're used to using {{maxword|name=metro}}, {{maxword|name=clocker}}, {{maxword|name=delay}}, and other Max objects that run in the Max scheduler to generate events automatically. However, when working with MSP, it's often beneficial to be able to synchronize events directly off of an MSP signal. This technique not only allows for more precise control of event timing (so-called ''sample accurate'' sequencing), but also allows us to use a number of MSP objects that allow for the synchronization of multiple event streams based on a master clock signal. Our first tutorial looks at a few of these objects and how they work.	&lt;br /&gt;
&lt;br /&gt;
===Providing a master synchronization signal===&lt;br /&gt;
&lt;br /&gt;
* Take a look at the tutorial patcher. Turn on audio in the patcher by clicking on the {{maxword|name=ezdac~}} object at the top of the patch. The {{maxword|name=scope~}} objects, as well as the {{maxword|name=multislider}} object in the middle of the patcher, should all spring to life. In the area of the patcher labeled &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt;, click the {{maxword|name=button}} object a few times at a steady speed. Notice how the signal scopes change, and how the {{maxword|name=number}} box labeled &amp;lt;code&amp;gt;BPM&amp;lt;/code&amp;gt; adjusts itself. 	 The MSP object driving the behavior in our tutorial patcher is called {{maxword|name=sync~}}, and outputs the same kind of signal as a {{maxword|name=phasor~}} object, i.e. a linear signal ramp going from &amp;lt;code&amp;gt;0.&amp;lt;/code&amp;gt; to &amp;lt;code&amp;gt;1.&amp;lt;/code&amp;gt; at a steady rate. Unlike the {{maxword|name=phasor~}} object, however, the object understands its speed not in Hertz, but in ''beats-per-minute'' (BPM), a standard definition of musical ''tempo'' used in most audio sequencing applications. Clicking the {{maxword|name=button}} object at the top of the patcher sends &amp;lt;code&amp;gt;bang&amp;lt;/code&amp;gt; messages to the {{maxword|name=sync~}} object, which simulates a ''tap tempo'' system used in many sequencers. By clicking the {{maxword|name=button}} at a steady rate, the {{maxword|name=sync~}} object adjusts its speed to send out a single ramp for every beat (interval) between the &amp;lt;code&amp;gt;bang&amp;lt;/code&amp;gt; messages. The BPM of our &amp;lt;code&amp;gt;bang&amp;lt;/code&amp;gt; messages is calculated and sent out the second outlet of the {{maxword|name=sync~}} object, which we then use to set a {{maxword|name=number}} box that we can change to set the BPM manually.&lt;br /&gt;
&lt;br /&gt;
* In the {{maxword|name=number}} box at the top of the patcher, type &amp;lt;code&amp;gt;60.&amp;lt;/code&amp;gt; and press return. The {{maxword|name=sync~}} object now runs at 60 BPM, outputting a signal ramp once per second. In the patcher area labeled &amp;lt;code&amp;gt;2&amp;lt;/code&amp;gt; (colored green), turn up the top {{maxword|name=gain~}} slider and listen to the result. 	 The output of the {{maxword|name=sync~}} object is a signal ramp, just like the output of the {{maxword|name=phasor~}} object. As such, we can use it as an envelope generator directly, to control the volume of an audio signal going to the {{maxword|name=dac~}} (in this case, a {{maxword|name=rand~}} noise generator). While this is certainly useful in certain applications, the main advantage of using a signal to provide event synchronization is in our ability to time-scale the signal and then generate events from it.&lt;br /&gt;
&lt;br /&gt;
===Many rates at once===&lt;br /&gt;
&lt;br /&gt;
* Notice that, throughout the tutorial patcher, each of the {{maxword|name=scope~}} objects seem to be drawing ramps at different speeds: 	 	&lt;br /&gt;
&lt;br /&gt;
[[Image:Sequencingchapter01a.png|border]]&lt;br /&gt;
&lt;br /&gt;
''Different ramp time-scales generated by use of the {{maxword|name=sync~}} and {{maxword|name=rate~}} objects.''&lt;br /&gt;
&lt;br /&gt;
The {{maxword|name=rate~}} object allows us to ''time-scale'' the ramp signals generated by {{maxword|name=sync~}} and {{maxword|name=phasor~}} objects. The argument to the object (or a new value provided in the right inlet) sets the scaling factor, e.g. a {{maxword|name=rate~}} object with a factor of &amp;lt;code&amp;gt;2.0&amp;lt;/code&amp;gt; will generate a ramp that takes ''twice as long'' to repeat as the input signal. A {{maxword|name=rate~}} of &amp;lt;code&amp;gt;0.5&amp;lt;/code&amp;gt;, by comparison, will go two times ''as fast'' as the input. Using this system, we can have multiple areas of signal logic in our MSP patcher running at different multiples of the original synchronization signal yet staying perfectly in time.&lt;br /&gt;
&lt;br /&gt;
===Generating Max events from a synchronization signal===&lt;br /&gt;
&lt;br /&gt;
* In patcher area &amp;lt;code&amp;gt;2&amp;lt;/code&amp;gt;, turn down the top {{maxword|name=gain~}} slider and turn up the lower one. You should hear a regular metronomic 'click', generated by the {{maxword|name=noise~}} object with an envelope triggered by the {{maxword|name=button}} object in that part of the patcher. 	 Two things are going on here of note. The first is that the 'click' is happening not at the speed we've set in the {{maxword|name=sync~}} object, but at four times that speed. This is the doing of the {{maxword|name=rate~}} object in patcher area &amp;lt;code&amp;gt;2&amp;lt;/code&amp;gt;, which is set to a value of &amp;lt;code&amp;gt;0.25&amp;lt;/code&amp;gt;. This means that our effective musical timing for one 'beat' in our patcher is subdivided into four in this part of the MSP signal chain, allowing us to trigger faster events.&lt;br /&gt;
&lt;br /&gt;
The 'click' we hear is generated by sending a &amp;lt;code&amp;gt;bang&amp;lt;/code&amp;gt; message (from the {{maxword|name=button}} object to generate an envelope from the {{maxword|name=line~}} object, fading in and out the {{maxword|name=noise~}} quickly to make a sharp ticking sound. This logic is familiar to use from previous tutorials; the big question here is, how is the {{maxword|name=button}} object being triggered?&lt;br /&gt;
&lt;br /&gt;
The MSP {{maxword|name=delta~}} object takes a signal input and outputs a signal, the numbers of which report how much the incoming signal has ''changed'' from sample to sample:&lt;br /&gt;
&lt;br /&gt;
[[Image:Sequencingchapter01b.png|border]]&lt;br /&gt;
&lt;br /&gt;
''A {{maxword|name=phasor~}} ramp (top) and its {{maxword|name=delta~}} signal (bottom).''&lt;br /&gt;
&lt;br /&gt;
In the case of a ramp signal, the {{maxword|name=delta~}} object reports a more-or-less constant positive value as the signal rises; when the ramp resets to &amp;lt;code&amp;gt;0.&amp;lt;/code&amp;gt;, however, the {{maxword|name=delta~}} object reports a sudden, high, ''negative'' value that represents the sudden drop in the ramp. This momentary negative signal value can be detected by using a logical operator on the signal to test whether it goes negative. The {{maxword|name=&amp;amp;lt;~}} object in the patcher does this, by outputting a signal value of &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt; when the input signal matches the condition specified by the object's argument, and a &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt; otherwise. In the present case, the output of {{maxword|name=&amp;amp;lt;~}} will be a &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt; whenever the input signal is ''less than'' &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt;, i.e. only when the ramp coming out of the {{maxword|name=rate~}} object resets, causing the {{maxword|name=delta~}} object to output a negative value.&lt;br /&gt;
&lt;br /&gt;
The {{maxword|name=edge~}} object is an MSP object that takes input signals and uses them to trigger Max &amp;lt;code&amp;gt;bang&amp;lt;/code&amp;gt; messages. It does this by looking at transition states from &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt; to &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt; (left outlet) or &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt; to &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt; (right outlet). When the {{maxword|name=rate~}} object resets its ramp, the left outlet of the {{maxword|name=edge~}} object generates a &amp;lt;code&amp;gt;bang&amp;lt;/code&amp;gt; in response to the logical &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt; to &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt; (false to true) transition coming out of the {{maxword|name=&amp;amp;lt;~}} object. This &amp;lt;code&amp;gt;bang&amp;lt;/code&amp;gt; can trigger any Max event, just as if it were fired from a {{maxword|name=metro}} object or triggered by clicking a {{maxword|name=button}} manually.&lt;br /&gt;
&lt;br /&gt;
* Turn down the {{maxword|name=gain~}} slider at the bottom of patcher area &amp;lt;code&amp;gt;2&amp;lt;/code&amp;gt; and take a look at patcher area &amp;lt;code&amp;gt;3&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Audio-rate sequencing using fixed timing intervals===&lt;br /&gt;
&lt;br /&gt;
* In patcher area &amp;lt;code&amp;gt;3&amp;lt;/code&amp;gt;, click and draw in the two {{maxword|name=multislider}} objects labeled 'Pitch' and 'Amplitude'. Turn up the {{maxword|name=gain~}} slider at the bottom of patcher area &amp;lt;code&amp;gt;3&amp;lt;/code&amp;gt;'s logic. You should hear a square wave repeating a melodic pattern that matches the shape you drew in the {{maxword|name=multislider}} objects. Try drawing different patterns for the sequence and listen to the results.&lt;br /&gt;
&lt;br /&gt;
The repeating melody specified by our {{maxword|name=multislider}} objects is being triggered by a sample-accurate sequencing object called {{maxword|name=techno~}}. The {{maxword|name=techno~}} object maintains a certain number of ''steps'' of data points based on its &amp;lt;code&amp;gt;length&amp;lt;/code&amp;gt; parameter (set in our tutorial patcher with the message &amp;lt;code&amp;gt;length 16&amp;lt;/code&amp;gt;). Each step can have a pitch and amplitude associated with it, which it then puts out as ''signals'' from its outlets. These signals contain all the information necessary to directly drive MSP oscillators and amplifiers (in this case the {{maxword|name=rect~}} and {{maxword|name=*~}} objects).&lt;br /&gt;
&lt;br /&gt;
Sequences are loaded into the {{maxword|name=techno~}} object by sending &amp;lt;code&amp;gt;pitch&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;amplitude&amp;lt;/code&amp;gt; messages with the step number and value as their arguments. The {{maxword|name=listfunnel}} objects in our tutorial patcher create the appropriate messages for this purpose, by taking the sixteen-member lists from the {{maxword|name=multislider}} objects and translating them into sixteen individual, numbered messages. By a similar token, other attributes of the sequence process can be set, either for each step individually or for the entire sequence.&lt;br /&gt;
&lt;br /&gt;
* At the bottom of patcher area &amp;lt;code&amp;gt;3&amp;lt;/code&amp;gt;, set the {{maxword|name=number}} box labeled 'Attack' to &amp;lt;code&amp;gt;1.0&amp;lt;/code&amp;gt;. Notice how the notes change from being short to long (or ''staccato'' to ''legato''). Set the {{maxword|name=number}} box labeled 'Decay' to &amp;lt;code&amp;gt;0.&amp;lt;/code&amp;gt;. Notice how the envelope of the notes change to produce a different kind of note separation where the square wave fades in and ends abruptly. Set both the 'Attack' and 'Decay' values to &amp;lt;code&amp;gt;1.&amp;lt;/code&amp;gt; and change the {{maxword|name=number}} box labeled 'Curve' to &amp;lt;code&amp;gt;0.1&amp;lt;/code&amp;gt;. Hear how the pitches now slide into on another.&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;attack&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;decay&amp;lt;/code&amp;gt;, and &amp;lt;code&amp;gt;curve&amp;lt;/code&amp;gt; messages, like the &amp;lt;code&amp;gt;pitch&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;amplitude&amp;lt;/code&amp;gt; messages, allow us to fine-tune the behavior of the internal sequencer of the {{maxword|name=techno~}} object. The &amp;lt;code&amp;gt;attack&amp;lt;/code&amp;gt; values control the trajectory for the envelope coming out of the middle outlet of the {{maxword|name=techno~}} object as it rises at the beginning of a note. A value of &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt; causes the notes to snap on instantaneously; a value of &amp;lt;code&amp;gt;1.0&amp;lt;/code&amp;gt; causes the tones in the sequence to take the entire beat to fade in from their previous value. The &amp;lt;code&amp;gt;decay&amp;lt;/code&amp;gt; values work on a similar principle, only with regards to the end (or 'release' stage) of the note's envelope. A &amp;lt;code&amp;gt;decay&amp;lt;/code&amp;gt; of 1.0 allows the notes to blend together; a value of &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt; ensures that each note falls to silence between steps of the sequencer. These two values interact to create dynamic envelope shapes. the &amp;lt;code&amp;gt;curve&amp;lt;/code&amp;gt; messages control the amount of ''portamento'' (or gliding) applied to the signal controlling the sequence's ''pitch''. Curve values of &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt; will cause the pitches to 'snap' from note to note in the sequence. As we raise the &amp;lt;code&amp;gt;curve&amp;lt;/code&amp;gt; value, more and more of the beat will be taken up by an interpolating pitch ramp, causing the sound to slide around in frequency.&lt;br /&gt;
&lt;br /&gt;
As with the &amp;lt;code&amp;gt;pitch&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;amplitude&amp;lt;/code&amp;gt;, the &amp;lt;code&amp;gt;attack&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;decay&amp;lt;/code&amp;gt;, and &amp;lt;code&amp;gt;curve&amp;lt;/code&amp;gt; parameters of the {{maxword|name=techno~}} object are provided on a ''step-by-step'' basis. Notice how we use the {{maxword|name=uzi}} object to transmit the same value sixteen times to set every step of our sequence to the same values.&lt;br /&gt;
&lt;br /&gt;
* Play around with the possibilities of sequencing with {{maxword|name=techno~}}. Once you've gotten a grasp of how the controls work, turn down the {{maxword|name=gain~}} slider for patcher area &amp;lt;code&amp;gt;3&amp;lt;/code&amp;gt; and take a look to the right, at patcher area &amp;lt;code&amp;gt;4&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Audio-rate sequencing of arbitrary data===&lt;br /&gt;
&lt;br /&gt;
* Turn up the {{maxword|name=gain~}} slider for patcher area &amp;lt;code&amp;gt;4&amp;lt;/code&amp;gt;. Using your computer keyboard, type on the middle row of letter keys (A, S, D, F, G, H, J, K, L, ;). You should hear different notes being played from a simple sawtooth oscillator. If you like, double-click the {{maxword|name=coll}} object named &amp;lt;code&amp;gt;keys&amp;lt;/code&amp;gt; to see the mapping from ASCII values to MIDI note numbers.&lt;br /&gt;
&lt;br /&gt;
* Click the 'r' key on your keyboard and play some notes on the middle row. Notice that the {{maxword|name=toggle}} object attached to the &amp;lt;code&amp;gt;record $1&amp;lt;/code&amp;gt; message becomes enabled. Click the 'r' key a second time, and click the 'p' key. Once the sequence repeats, you should hear your notes played back.&lt;br /&gt;
&lt;br /&gt;
The {{maxword|name=seq~}} object works as an audio-rate sequencer of arbitrary numeric events. The signal it receives in its input serves as a master clock for the object, allowing us to feed it with a signal ramp from a {{maxword|name=rate~}} object set to eight measures. When {{maxword|name=seq~}} receives a &amp;lt;code&amp;gt;record 1&amp;lt;/code&amp;gt; message, it listens to Max messages coming into the object and ''timestamps'' them based on the input signal. When {{maxword|name=seq~}} is in 'play' mode (through a &amp;lt;code&amp;gt;play 1&amp;lt;/code&amp;gt; message), it uses the input signal to look up events based on their timestamp, and outputs them in the correct order. Note that, unlike the {{maxword|name=techno~}} object, the {{maxword|name=seq~}} object outputs Max events, not signal values, and so it can be used to store arbitrary data.&lt;br /&gt;
&lt;br /&gt;
---- &lt;br /&gt;
&lt;br /&gt;
'''Technical Detail:''' Though beyond the scope of this tutorial, the {{maxword|name=seq~}} object can store multiple sequences simultaneously, can overdub multiple passes of data, and can read and write files of data in a manner similar to the {{maxword|name=coll}} object. Also, because it stores arbitrary, timestamped messages, it can be used to sequence other Max commands besides MIDI with sample accuracy, e.g. lists of drawing commands to an {{maxword|name=lcd}} object, or messages to a series of Jitter objects, etc. Finally, the signal providing the timestamping for the {{maxword|name=seq~}} object can be at an arbitrary scale; it doesn't have to be in the range of &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt; to &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt;, nor do you have to send it a linear ramp. This further expands the flexibility of the object. &lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
* Turn up the lower {{maxword|name=gain~}} slider in patcher area &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt; to give yourself a click to work against. Hit the 'c' key to &amp;lt;code&amp;gt;clear&amp;lt;/code&amp;gt; the sequence stored in the {{maxword|name=seq~}} object. Hit the 'r' key to record a new sequence. When the sequence loop has wrapped around, disable recording and play your sequence. Notice that the {{maxword|name=seq~}} object can handle data with any timing interval, unlike the {{maxword|name=techno~}} object, which works in discrete steps.&lt;br /&gt;
&lt;br /&gt;
===Summary===&lt;br /&gt;
&lt;br /&gt;
MSP has a variety of tools for audio-rate sequencing. The {{maxword|name=sync~}}  and {{maxword|name=rate~}} objects can be used to create simple timing ramps and  regular intervals using beats-per-minute values to determine tempo. The {{maxword|name=delta~}}  and {{maxword|name=edge~}} objects are useful in generating Max events from an MSP  ramp signal. The {{maxword|name=techno~}} object allows for sample-accurate sequencing of  a finite number of steps for a single audio oscillator/amplifier pair; for more flexible  sequencing, the {{maxword|name=seq~}} object allows for audio-rate timestamping of arbitrary  Max events which can be saved, edited, and replayed as sequences of instructions. 	 ===See Also===&lt;br /&gt;
&lt;br /&gt;
{{maxword|name=sync~}} - Synchronize MSP with an external source&lt;br /&gt;
&lt;br /&gt;
{{maxword|name=rate~}} - Time-scale the output of a phasor~&lt;br /&gt;
&lt;br /&gt;
{{maxword|name=delta~}} - Signal of sample differences&lt;br /&gt;
&lt;br /&gt;
{{maxword|name=edge~}} - Detect logical signal transitions&lt;br /&gt;
&lt;br /&gt;
{{maxword|name=techno~}} - Signal-driven step sequencer&lt;br /&gt;
&lt;br /&gt;
{{maxword|name=seq~}} - Signal-driven event sequencer&lt;br /&gt;
&lt;br /&gt;
[[Category:Teaching Material]]&lt;/div&gt;</summary>
		<author><name>Admin</name></author>	</entry>

	</feed>