<?xml version="1.0" encoding="utf-8" standalone="yes"?>

<?xml-stylesheet href="./_c74_ref.xsl" type="text/xsl"?>

<!--This is an automatically generated file. DO NOT EDIT THIS FILE DIRECTLY. Rather, use the _ref.xml files found in the 'edits' folder.-->
<c74object name="techno~" module="msp" category="MSP Functions">
	<digest>
		Signal-driven step sequencer
	</digest>
	<description>
		<o>techno~</o> is a signal-based step-sequencer that facilitates sample-accurate timing of events.
	</description>
	<!--METADATA-->
	<metadatalist>
		<metadata name="author">
			Cycling '74
		</metadata>
		<metadata name="tag">
			MSP
		</metadata>
		<metadata name="tag">
			MSP Functions
		</metadata>
	</metadatalist>
	<!--INLETS-->
	<inletlist>
		<inlet id="0" type="signal/message">
			<digest>
				(signal/message) phasor/note messages
			</digest>
			<description>
				TEXT_HERE
			</description>
		</inlet>
		<inlet id="1" type="signal/message">
			<digest>
				(signal/message) phasor/note messages
			</digest>
			<description>
				TEXT_HERE
			</description>
		</inlet>
	</inletlist>
	<!--OUTLETS-->
	<outletlist>
		<outlet id="0" type="signal">
			<digest>
				(signal) frequency
			</digest>
			<description>
				TEXT_HERE
			</description>
		</outlet>
		<outlet id="1" type="signal">
			<digest>
				(signal) amplitude envelope
			</digest>
			<description>
				TEXT_HERE
			</description>
		</outlet>
		<outlet id="2" type="signal">
			<digest>
				(signal) step position
			</digest>
			<description>
				TEXT_HERE
			</description>
		</outlet>
	</outletlist>
	<!--ARGUMENTS-->
	<objarglist>
		<objarg id="0" name="OBJARG_NAME" type="OBJARG_TYPE" optional="0">
			<digest>
				TEXT_HERE
			</digest>
			<description>
				TEXT_HERE
			</description>
		</objarg>
	</objarglist>
	<!--MESSAGES-->
	<methodlist>
		<method name="amplitude">
			<arglist>
				<arg name="sequencer-step" optional="0" type="int" />
				<arg name="amplitude-value" optional="0" type="float" />
			</arglist>
			<digest>
				Set the amplitude for a step's note
			</digest>
			<description>
				The word <m>amplitude</m>, followed by a number that specifies the sequencer step and a float that specifies an amplitude value, sets the amplitude (as an absolute factor) of a step's output note. The amplitude is specified as an absolute factor of that step's note -- an amplitude of 1.0 will result in the amplitude output signal having a value of 1.0 at the very beginning of the step.
			</description>
		</method>
		<method name="attack">
			<arglist>
				<arg name="sequencer-step" optional="0" type="int" />
				<arg name="attack-curve-exponent" optional="0" type="float" />
			</arglist>
			<digest>
				Set the attack curve
			</digest>
			<description>
				The word <m>attack</m>, followed by a number that specifies the sequencer step and a float that specifies the exponent of a curve, sets the curve used to calculate the amplitude trajectory from 0.0 at the beginning of the previous step to the amplitude value at the beginning of the current step. The values used to specify the exponents of the curve are the same as those used for the <m>curve</m> message.
			</description>
		</method>
		<method name="curve">
			<arglist>
				<arg name="sequencer-step" optional="0" type="int" />
				<arg name="curve-exponent" optional="0" type="float" />
			</arglist>
			<digest>
				Set the pitch trajectory curve
			</digest>
			<description>
				The word <m>curve</m>, followed by a number that specifies the sequencer step and a float that specifies the exponent of a curve, sets the curve used to calculate the trajectory of pitch from the previous step.
				<br />
				<br />
				A value of 1.0 represents a linear slide from the previous step; a value of 0.5 represents a square root function; a value of 2.0 represents a second-order parabolic slide; etc. The <m>curve</m> message lets you set and experiment with different varieties of portamento.
			</description>
		</method>
		<method name="decay">
			<arglist>
				<arg name="sequencer-step" optional="0" type="int" />
				<arg name="decay-trajectory-exponent" optional="0" type="float" />
			</arglist>
			<digest>
				Set the decay curve
			</digest>
			<description>
				The word <m>decay</m>, followed by a number that specifies the sequencer step and a float that specifies the exponent of a curve, sets the curve used to calculate the decay trajectory from the amplitude value at the beginning of this previous step to 0.0 at the beginning of the next step. The values used to specify the exponents of the curve are the same as those used for the <m>curve</m> message.
			</description>
		</method>
		<method name="length">
			<arglist>
				<arg name="number-of-steps" optional="0" type="int" />
			</arglist>
			<digest>
				Set the number of steps in the sequence
			</digest>
			<description>
				The word <m>length</m>, followed by a number, sets the number of notes in the sequence. The default is 1.
			</description>
		</method>
		<method name="pitch">
			<arglist>
				<arg name="sequencer-step" optional="0" type="int" />
				<arg name="frequency" optional="0" units="hz" type="float" />
			</arglist>
			<digest>
				Set the pitch for a step's note
			</digest>
			<description>
				The word <m>pitch</m>, followed by a number that specifies the sequencer step and a float that specifies a pitch as a Hertz frequency, sets the pitch of that step's note.
			</description>
		</method>
		<method name="pos">
			<arglist>
				<arg name="sequencer-step" optional="0" type="int" />
				<arg name="start-position (step-size-coefficient)" optional="0" type="float" />
			</arglist>
			<digest>
				Set the sequencer step position
			</digest>
			<description>
				The word <m>pos</m>, followed by an integer that specifies the sequencer step and a float that specifies a start position, positions the step to the specified position. A step may not be placed before the previous step or after the next step. For instance, a uniformly-spaced four step sequence will have its steps in positions 0.0, 0.25, 0.5 and 0.75, so a <m>pos</m> message for the third step (index 2) can only specify positions between 0.25 and 0.75.
			</description>
		</method>
		<method name="repeatpos">
			<arglist>
				<arg name="step-width" optional="0" type="list" />
			</arglist>
			<digest>
				Enable repeat settings of non-uniform step sizes
			</digest>
			<description>
				The word <m>repeatpos</m>, followed by one or more floats, allows repeating settings of non-uniform sequencer step sizes. The number of floats following the lengths message represents one less than the size of the repeating segment of steps - this segment size can be any even divisor of the total number of steps in the sequence. So for instance with an eight-step sequence the length of the segment can be 2, 4, or 8 steps. The floating point arguments, which must be strictly increasing and in the range between 0 and 1, set the relative width of each step. For instance, one can set uniform divisions for a sequence with an even number of steps with any of the following messages:
				<br />
				<br />
				repeatpos 0.5
				<br />
				<br />
				repeatpos 0.25 0.5 0.75
				<br />
				<br />
				repeatpos 0.125 0.25 0.375 0.5 0.625 0.75 0.875
				<br />
				<br />
				The message <m>repeatpos 0.66</m> affects a repeating segment two steps long, giving the first step 66% of the time and the second step 34%. (This is like classic &quot;swing&quot; on a drum machine.)
			</description>
		</method>
		<method name="signal">
			<arglist />
			<digest>
				Identify step position in a sequence
			</digest>
			<description>
				A signal is used as an input to the <o>techno~</o> object to specify the step position in a sequence. The signal is in the range 0 - 1.0 and indicates a phase value, expressed as a fraction of the number of total steps in the sequence (set using the <m>length</m> message). A <o>phasor~</o> object is customarily used as input to the <o>techno~</o> object. All input signals are clipped to the range 0 - 1.0.
			</description>
		</method>
	</methodlist>
	<!--ATTRIBUTES-->
	<!--EXAMPLE-->
	<examplelist>
		<example img="techno~.png" caption="techno~ use as a synth sequencer or to trigger individual samples, like a drum machine" />
	</examplelist>
	<!--SEEALSO-->
	<seealsolist>
		<seealso name="adsr~" />
		<seealso name="cycle~" />
		<seealso name="phasor~" />
		<seealso name="rate~" />
		<seealso name="rect~" />
		<seealso name="saw~" />
		<seealso name="seq~" />
		<seealso name="svf~" />
		<seealso name="tri~" />
	</seealsolist>
	<misc name="Output">
		<entry name="signal">
			<description>
				Out left inlet: Pitch signal output for oscillator(s).
				<br />
				<br />
				Out middle inlet: An amplitude envelope. You can multiply this signal output with the output of your oscillators.
				<br />
				<br />
				Out right inlet: The current position in the step sequence. Each step represents a distance of 1.0 and the total output range is from 0 to the value set by the <m>size</m> message.
			</description>
		</entry>
	</misc>
</c74object>
