<?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="pipe" module="max" category="Timing">
	<digest>
		Delay numbers, lists or symbols
	</digest>
	<description>
		Delays numbers, lists of numbers or symbols. <o>pipe</o> uses the Max <link name="maxtime" module="core" type="vignette">time format</link> syntax, so the delay interval can be either fixed or tempo-relative.
	</description>
	<!--METADATA-->
	<metadatalist>
		<metadata name="author">
			Cycling '74
		</metadata>
		<metadata name="tag">
			Max
		</metadata>
		<metadata name="tag">
			Timing
		</metadata>
	</metadatalist>
	<!--INLETS-->
	<inletlist>
		<inlet id="0" type="INLET_TYPE">
			<digest>
				Anything to be Delayed
			</digest>
			<description>
				Number to be delayed.
			</description>
		</inlet>
		<inlet id="1" type="INLET_TYPE">
			<digest>
				Set Delay Time
			</digest>
			<description>
				Time can be specified in any of the <link name="maxtime" module="core" type="vignette">time formats</link> used in Max.
			</description>
		</inlet>
	</inletlist>
	<!--OUTLETS-->
	<outletlist>
		<outlet id="0" type="OUTLET_TYPE">
			<digest>
				Delayed Output
			</digest>
			<description>
				Delayed output.
			</description>
		</outlet>
	</outletlist>
	<!--ARGUMENTS-->
	<objarglist>
		<objarg name="initialization" optional="1" type="list">
			<arglist>
				<arg name="inlet-count" optional="1" type="number" />
				<arg name="delaytime" optional="1" type="int" />
			</arglist>
			<digest>
				Initialize values, inlet/outlet count, and delay time
			</digest>
			<description>
				The number of arguments to the <o>pipe</o> object depends on the number of items in a list you wish to delay, but the final argument is always used to set the initial value for the delay time.
				<br />
				<br />
				If no argument is specified, the initial value is 0 and the delay time is 0 ms.
				<br />
				<br />
				If there is one argument, this sets the delay time.
				<br />
				<br />
				If there are two arguments, the first argument sets an initial value to be stored in <o>pipe</o>, and the second argument sets the delay time.
				<br />
				<br />
				If more than two arguments are present, <o>pipe</o> creates additional inlets and outlets for delaying additional numbers.
				<br />
				<br />
				The <o>pipe</o> object allows you to specify time intervals using either a number which specifies time in milliseconds (e.g. pipe 200) or a <link name="maxtime_syntax" module="core" type="vignette">notevalue</link> (e.g. pipe 2n).
				<br />
				<br />
				Note: While the <o>pipe</o> object lets you specify time in any of Max's standard <link name="maxtime" module="core" type="vignette">time formats</link>, the <at>interval</at> attribute argument should be used when specifying time in any other time unit besides milliseconds or notevalues (e.g. <o>pipe</o>@ <at>interval</at> 11025 samples ).
				<br />
				<br />
				If notevalue, ticks, or bars.beats.units are specified for the delay interval, the object will not operate unless the transport is running.
			</description>
		</objarg>
	</objarglist>
	<!--MESSAGES-->
	<methodlist>
		<method name="bang">
			<arglist />
			<digest>
				Triggers delay and outputs stored numbers
			</digest>
			<description>
				Re-triggers the numbers currently stored in the <o>pipe</o> to be output again after the specified time (in addition to any numbers already being delayed).
			</description>
		</method>
		<method name="int">
			<arglist>
				<arg name="delay" optional="0" units="ms" type="int" />
			</arglist>
			<digest>
				Function depends on inlet
			</digest>
			<description>
				In left inlet: Sets value and triggers delay
				<br />
				<br />
				In middle inlets: Sets value without triggering delay
				<br />
				<br />
				In right inlet: Sets the delay time
			</description>
		</method>
		<method name="float">
			<arglist>
				<arg name="delay" optional="0" type="float" />
			</arglist>
			<digest>
				Function depends on inlet
			</digest>
			<description>
				Float is converted to <m>int</m> unless the inlet was initialized with a <ar>float</ar> argument.
				<br />
				<br />
				In left inlet: Sets value and triggers delay
				<br />
				<br />
				In middle inlets: Sets value without triggering delay
				<br />
				<br />
				In right inlet: Sets the delay time
			</description>
		</method>
		<method name="list">
			<arglist>
			</arglist>
			<digest>
				Function depends on inlet
			</digest>
			<description>
				In left inlet: For each character provided, a value will be set for each corresponding input and triggers a delay.
				<br />
				<br />
				In middle inlets: The middle inlets of <o>pipe</o> use the first character and set the stored value for the input inlet.
				<br />
				<br />
				In right inlet: Specify time in one of the Max <link name="maxtime" module="core" type="vignette">time formats</link>.
			</description>
		</method>
		<method name="anything">
			<arglist />
			<digest>
				See the <m>list</m> listing
			</digest>
			<description>
				TEXT_HERE
			</description>
		</method>
		<method name="clear">
			<arglist />
			<digest>
				Halts all output
			</digest>
			<description>
			</description>
		</method>
		<method name="flush">
			<arglist />
			<digest>
				Output and clear all held values
			</digest>
			<description>
				Immediately sends out all values currently being delayed by <o>pipe</o>, and clears the <o>pipe</o> object's memory. Values are sent out each outlet in reverse order from that in which they were received in the corresponding inlet.
			</description>
		</method>
		<method name="stop">
			<arglist />
			<digest>
				Halts all output
			</digest>
			<description>
			</description>
		</method>
	</methodlist>
	<!--ATTRIBUTES-->
	<attributelist>
		<attribute name="clock" get="1" set="1" type="symbol" size="1">
			<digest>
				Timing source
			</digest>
			<description>
				Use the <at>clock</at> attribute to specify a named <m>setclock</m> object for timing rather than by Max’s internal millisecond clock. The word <m>clock</m> by itself sets the <o>pipe</o> object back to using Max’s regular millisecond clock.
			</description>
			<attributelist>
				<attribute name="label" get="1" set="1" type="symbol" size="1" value="Setclock Name" />
			</attributelist>
		</attribute>
		<attribute name="delaytime" get="1" set="1" type="atom" size="10">
			<digest>
				Delay time
			</digest>
			<description>
				Sets the delay time for this object using any of Max's <link name="maxtime" module="core" type="vignette">time formats</link> 
			</description>
			<attributelist>
				<attribute name="basic" get="1" set="1" type="int" size="1" value="1" />
				<attribute name="category" get="1" set="1" type="symbol" size="1" value="Timing" />
				<attribute name="label" get="1" set="1" type="symbol" size="1" value="Delay Time" />
				<attribute name="style" get="1" set="1" type="symbol" size="1" value="time" />
				<attribute name="units" get="1" set="1" type="atom" size="7" value="ms hh:mm:ss ticks bars.beats.units notevalues hz samples" />
			</attributelist>
		</attribute>
		<attribute name="quantize" get="1" set="1" type="atom" size="10">
			<digest>
				Quantize output
			</digest>
			<description>
				Quantizes the output of <o>pipe</o> to a specified time-boundary. This is achieved by making internal adjustments to the times used for sending output. The quantization can be specified in the following <link name="maxtime" module="core" type="vignette">time formats</link>: bars.beats.units, ticks or note values.
				<br />
				<br />
				Fixed time units (for example: ms, seconds, hz, samples, etc.) will have no effect.
			</description>
			<attributelist>
				<attribute name="basic" get="1" set="1" type="int" size="1" value="1" />
				<attribute name="category" get="1" set="1" type="symbol" size="1" value="Timing" />
				<attribute name="label" get="1" set="1" type="symbol" size="1" value="Quantization" />
				<attribute name="style" get="1" set="1" type="symbol" size="1" value="time" />
				<attribute name="units" get="1" set="1" type="atom" size="3" value="ticks bars.beats.units notevalues" />
			</attributelist>
		</attribute>
	</attributelist>
	<!--EXAMPLE-->
	<examplelist>
		<example img="pipe.png" caption="One or more numbers can be delayed with pipe" />
	</examplelist>
	<!--SEEALSO-->
	<seealsolist>
		<seealso name="delay" />
		<seealso name="basicchapter19" module="max" type="tutorial" />
	</seealsolist>
	<misc name="Output">
		<entry name="int">
			<description>
				When a value is received in the <o>pipe</o> object's left inlet, it is delayed by the time specified, then sent out the left outlet. If there are middle inlets, the values in those inlets are also delayed and sent out their corresponding outlet, in response to a value is received in the left inlet. Unlike <o>delay</o>, more than one value at a time can be delayed in a <o>pipe</o>. When a new delay time is received in the right inlet, it does not affect when the values already being delayed by <o>pipe</o> will come out.
			</description>
		</entry>
	</misc>
</c74object>
