<?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="mtr" module="max" category="Sequencing">
	<digest>
		Record and sequence messages
	</digest>
	<description>
		Records messages and provides sequenced playback.
	</description>
	<!--METADATA-->
	<metadatalist>
		<metadata name="author">
			Cycling '74
		</metadata>
		<metadata name="tag">
			Max
		</metadata>
		<metadata name="tag">
			MIDI
		</metadata>
		<metadata name="reference">
			TEXT_HERE
		</metadata>
		<metadata name="license">
			TEXT_HERE
		</metadata>
		<metadata name="tag">
			Sequencing
		</metadata>
	</metadatalist>
	<!--INLETS-->
	<inletlist>
		<inlet id="0" type="INLET_TYPE">
			<digest>
				Control Input for All Tracks
			</digest>
			<description>
				TEXT_HERE
			</description>
		</inlet>
		<inlet id="1" type="INLET_TYPE">
			<digest>
				Track 1 Record/Control Input
			</digest>
			<description>
				TEXT_HERE
			</description>
		</inlet>
	</inletlist>
	<!--OUTLETS-->
	<outletlist>
		<outlet id="0" type="OUTLET_TYPE">
			<digest>
				next Outputs list with Track and Duration
			</digest>
			<description>
				TEXT_HERE
			</description>
		</outlet>
		<outlet id="1" type="OUTLET_TYPE">
			<digest>
				Track 1 Play Output
			</digest>
			<description>
				TEXT_HERE
			</description>
		</outlet>
	</outletlist>
	<!--ARGUMENTS-->
	<objarglist>
		<objarg name="tracks" optional="1" type="int">
			<digest>
				Number of tracks
			</digest>
			<description>
				Specifies the number of tracks in <o>mtr</o>. The number of tracks determines the number of inlets and outlets in addition to the leftmost inlet and outlet. Up to 128 tracks are possible. If there is no argument, there will only be one track.
			</description>
		</objarg>
	</objarglist>
	<!--MESSAGES-->
	<methodlist>
		<method name="bang">
			<arglist />
			<digest>
				Send dictionary data out left outlet
			</digest>
			<description>
				Just like the <m>info</m> message, sending a <m>bang</m> to the left inlet of <o>mtr</o>, results in a dictionary being sent out the left outlet with information about the current state of the object. Both global and track specific informtion is included in the dictionary. An entry that begins with &quot;global_&quot; is the global setting for the specified attribute. If the same attribute has a track specific setting, that value will be listed under the track information.
			</description>
		</method>
		<method name="int">
			<arglist>
				<arg name="input" optional="0" type="int" />
			</arglist>
			<digest>
				Store the message on a track
			</digest>
			<description>
				In any inlet other than the left inlet: If the track is currently being recorded, numbers received in that track's inlet are combined with a delta time (the amount of time elapsed since the previous event) and stored in <o>mtr</o>.
			</description>
		</method>
		<method name="float">
			<arglist>
				<arg name="input" optional="0" type="float" />
			</arglist>
			<digest>
				Store the message on a track
			</digest>
			<description>
				In any inlet other than the left inlet: If the track is currently being recorded, numbers received in that track's inlet are combined with a delta time (the amount of time elapsed since the previous event) and stored in <o>mtr</o>.
			</description>
		</method>
		<method name="list">
			<arglist>
				<arg name="input" optional="0" type="list" />
			</arglist>
			<digest>
				Store the message on a track
			</digest>
			<description>
				In any inlet other than the left inlet: If the track is currently being recorded, lists received in that track's inlet are stored in <o>mtr</o>, preceded by the delta time (the amount of time elapsed since the previous event). The maximum allowed length for a list is 4096 items.
			</description>
		</method>
		<method name="anything">
			<arglist>
				<arg name="input" optional="0" type="list" />
			</arglist>
			<digest>
				Store the message on a track
			</digest>
			<description>
				In any inlet other than the left inlet: If the track is currently being recorded, symbols received in that track's inlet are stored in <o>mtr</o>, preceded by the delta time (the amount of time elapsed since the previous event).
				<br />
				<br />
				Although <o>mtr</o> can record individual bytes of MIDI messages received from <o>midiin</o>, it stores each byte with a separate delta time, and does not format the MIDI messages the way <o>seq</o> does. If you want to record complete MIDI messages and edit them later, <o>seq</o> is better suited for the task. On the other hand, <o>mtr</o> is perfectly suited for recording sequences of numbers, lists, or symbols from virtually any object in Max: specialized MIDI objects such as <o>notein</o> or <o>pgmin</o>, user interface objects such as <link name="number" type="refpage">number box</link>, <o>slider</o>, and <o>dial</o>, or any other object.
				<br />
				<br />
				In order for a file to be read into <o>mtr</o> for playback, it must be in the proper format. An <o>mtr</o> multi-track sequence can even be typed in a text file, provided it adheres to the format. The contents of the different tracks are listed in order in an <o>mtr</o> file, and the format of each track is as follows. Note that a semicolon (<m>;</m>) ends each line.
				<br />
				<br />
				Line 1: <m>track &lt;track number&gt;;</m> (Track in which to store subsequent data)
				<br />
				Line 2, etc.: <m>&lt;delta time&gt; &lt;message&gt;;
					<br />
</m> Last line: <m>end;</m> (End of this track's data)
			</description>
		</method>
		<method name="addevent">
			<arglist>
				<arg name="absolute time-data" type="list" optional="0" />
			</arglist>
			<digest>
				Add an event at a specific time
			</digest>
			<description>
				The word <m>addevent</m> followed by a list, absolute time and data, adds an event to a track at a specific time. For example, the message &quot;addevent 1000 1&quot; will add the event 1 at time 1000. This message can be sent while a track is recording, playing, or stopped. The message will only work in track-specific inlets, and cannot be sent to the left inlet.
			</description>
		</method>
		<method name="clear">
			<arglist>
				<arg name="tracks" optional="0" type="list" />
			</arglist>
			<digest>
				Clear the contents of tracks
			</digest>
			<description>
				In left inlet: Erases the contents of <o>mtr</o>. The word <m>clear</m>, followed by one or more track numbers, clears those tracks.
				<br />
				<br />
				In other inlets: Erases the track that corresponds to the inlet.
			</description>
		</method>
		<method name="cleareventat">
			<arglist>
				<arg name="absolute time-matching criteria" type="list" optional="0" />
			</arglist>
			<digest>
				Clear an event at a specific time
			</digest>
			<description>
				The word <m>cleareventat</m> followed by a list, absolute time and matching criteria, clears all events that exactly match the criteria at the specific time. Unlike <m>deleteeventat</m>, <m>cleareventat</m> does not delete the time occupied by the event. For example, if events are at time 1000, 2000, and 3000, and the event at 2000 is cleared, the next event remains at time 3000. This message can be sent while a track is recording, playing, or stopped. The message will only work in track-specific inlets, and cannot be sent to the left inlet.
			</description>
		</method>
		<method name="definelengthandstop">
			<arglist>
				<arg name="tracks" type="list" optional="0" />
			</arglist>
			<digest>
				Stop recording and set track length
			</digest>
			<description>
				In left inlet: Stops recording and sets the track’s length to the current recording time. The <m>stop</m> message, by contrast, does not set the track’s length; the total recorded length (available in the info dictionary) is defined by both messages and consists of the time between the start of the recording and the time of the final event recorded before <m>stop</m> or <m>definelengthandstop</m> is received. The word <m>definelengthandstop</m>, followed by one or more tracks, stops and sets the length for those tracks.
				<br />
				<br />
				In other inlets: Stops and sets the length of the track that corresponds to the inlet.
			</description>
		</method>
		<method name="delay">
			<arglist>
				<arg name="delay-time" optional="0" units="ms" type="int" />
			</arglist>
			<digest>
				Set an initial delta time value
			</digest>
			<description>
				In left inlet: The word <m>delay</m>, followed by a number, sets the first delta time value of each track to that number, so that all tracks begin playing back that amount of time after the <m>play</m> message is received.
				<br />
				<br />
				In other inlets: Sets the initial delta time of the track that corresponds to the inlet.
			</description>
		</method>
		<method name="deleteeventat">
			<arglist>
				<arg name="absolute time-matching criteria" type="list" optional="0" />
			</arglist>
			<digest>
				Delete an event at a specific time
			</digest>
			<description>
				The word <m>deleteeventat</m> followed by a list, absolute time and matching criteria, deletes all events that exactly match the criteria at the specific time. The time occupied by the event is also deleted. &quot;deleteeventat 1000&quot; will delete all events at absolute time 1000 in the track. The message &quot;deleteeventat 1000 3&quot; will delete an event at absolute time 1000 containing 3. The event &quot;3 4 5&quot; will not be deleted because it does not match exactly. This message can be sent while a track is recording, playing, or stopped. The message will only work in track-specific inlets, and cannot be sent to the left inlet.
			</description>
		</method>
		<method name="dictionary">
			<arglist>
				<arg name="dictionary name" type="symbol" optional="0" />
			</arglist>
			<digest>
				Send a dictionary to <o>mtr</o> 
			</digest>
			<description>
				The message <m>dictionary</m>, followed by a name, will load that specific dictionary into <o>mtr</o>, including all events from each track sequence.
			</description>
		</method>
		<method name="dump">
			<arglist />
			<digest>
				Send dictionary data out left outlet
			</digest>
			<description>
				The message <m>dump</m>, when sent to any inlet of <o>mtr</o>, sends a dictionary out the left outlet of <o>mtr</o>. Unlike the dictionary sent out from the <m>info</m> or <m>bang</m> messages, this dictionary contains individual events from each track sequence.
			</description>
		</method>
		<method name="first">
			<arglist>
				<arg name="wait-time" optional="0" units="ms" type="int" />
			</arglist>
			<digest>
				Set playback wait time
			</digest>
			<description>
				In left inlet: The word <m>first</m>, followed by a number, causes <o>mtr</o> to wait that amount of time after a <m>play</m> message is received before playing back. Unlike <m>delay</m>, <m>first</m> does not alter the delta time value of the first event in a track, it just waits a certain time (in addition to the first delta time) before playing back from the beginning.
			</description>
		</method>
		<method name="info">
			<arglist />
			<digest>
				Send dictionary data out left outlet
			</digest>
			<description>
				Just like <m>bang</m>, sending the <m>info</m> message to the left inlet of <o>mtr</o>, results in a dictionary being sent out the left outlet with information about the current state of the object. Both global and track specific informtion is included in the dictionary. An entry that begins with &quot;global_&quot; is the global setting for the specified attribute. If the same attribute has a track specific setting, that value will be listed under the track information.
			</description>
		</method>
		<method name="mute">
			<arglist>
				<arg name="tracks" optional="0" type="list" />
			</arglist>
			<digest>
				Mute output
			</digest>
			<description>
				In left inlet: Causes <o>mtr</o> to stop producing output, while still continuing to &quot;play&quot; (still moving forward in the sequence). The word <m>mute</m>, followed by one or more tracks, mutes those tracks.
				<br />
				<br />
				In other inlets: Mutes the track that corresponds to the inlet.
			</description>
		</method>
		<method name="next">
			<arglist>
				<arg name="tracks" optional="0" type="list" />
			</arglist>
			<digest>
				Output the next message
			</digest>
			<description>
				In left inlet: Causes each track to output only the next message in its recorded sequence. When a <m>next</m> message is received, the track number, delta time, and absolute time of each message being output are sent out the leftmost outlet as a list. The word <m>next</m>, followed by one or more track numbers, outputs the next message stored in those tracks.
				<br />
				<br />
				In other inlets: Outputs the next message stored on the track that corresponds to the inlet.
			</description>
		</method>
		<method name="play">
			<arglist>
				<arg name="tracks" optional="0" type="list" />
			</arglist>
			<digest>
				Play back messages at their normal rate
			</digest>
			<description>
				In left inlet: Plays back all messages recorded earlier, sending them out the corresponding outlets in the same rhythm and at the same speed they were recorded. The word <m>play</m>, followed by one or more track numbers, begins playing those tracks.
				<br />
				<br />
				In other inlets: Plays back all messages on the track that corresponds to the inlet. When the <m>play</m> message is sent to specific track inlets you can give it two optional arguments: number of iterations and timescale. 100 is the original timescale. The message &quot;play 3 200&quot; will play the track three times, at twice the speed.
			</description>
		</method>
		<method name="playat">
			<arglist>
				<arg name="position" type="float" optional="0" />
			</arglist>
			<digest>
				Start playback at a specific point (0-1)
			</digest>
			<description>
				In left inlet: Starts playback of all messages at a specific point, which is specified in a normalized range from 0-1, where 0 is the beginning and 1 is the end. Messages are sent out the corresponding outlets in the same rhythm and at the same speed they were recorded.
				<br />
				<br />
				In other inlets: Starts playback of all messages on the track that corresponds to the inlet. Playback stars at a specific point, which is specified in a normalized range from 0-1.
			</description>
		</method>
		<method name="playatms">
			<arglist>
				<arg name="milliseconds" type="float" optional="0" />
			</arglist>
			<digest>
				Start playback at a specific point - milliseconds
			</digest>
			<description>
				In left inlet: Starts playback of all messages at a specific point, which is specified in milliseconds. Messages are sent out the corresponding outlets in the same rhythm and at the same speed they were recorded.
				<br />
				<br />
				In other inlets: Starts playback of all messages on the track that corresponds to the inlet. Playback stars at a specific point, which is specified in milliseconds.
			</description>
		</method>
		<method name="read">
			<arglist>
				<arg name="filename" optional="0" type="symbol" />
			</arglist>
			<digest>
				Load a saved <o>mtr</o> file
			</digest>
			<description>
				In left inlet: Calls up the standard Open Document dialog box, so that a previously saved file can be read into <o>mtr</o>. Only .txt, .pat, and .json files can be loaded.
				<br />
				<br />
				In other inlets: Opens a file containing only the track that corresponds to the inlet.
			</description>
		</method>
		<method name="record">
			<arglist>
				<arg name="tracks" optional="0" type="list" />
			</arglist>
			<digest>
				Start recording
			</digest>
			<description>
				In left inlet: Begins recording all messages received in the other inlets. The word <m>record</m>, followed by one or more track numbers, begins recording those tracks.
				<br />
				<br />
				In other inlets: Begins recording messages on the track that corresponds to the inlet.
			</description>
		</method>
		<method name="rewind">
			<arglist>
				<arg name="tracks" optional="0" type="list" />
			</arglist>
			<digest>
				Return to the start of the sequence/track
			</digest>
			<description>
				In left inlet: Resets <o>mtr</o> to the beginning of its recorded sequence. This command is used to return to the beginning of the sequence when stepping through messages with <m>next</m>. To return to the beginning of a sequence while playing or recording, just repeat the <m>play</m> or <m>record</m> message. When <o>mtr</o> is playing or recording, a <m>stop</m> message should precede a <m>rewind</m> message. The word <m>rewind</m>, followed by one or more track numbers, returns to the beginning of those tracks.
				<br />
				<br />
				In other inlets: Returns the pointer to the beginning of the track that corresponds to the inlet.
			</description>
		</method>
		<method name="stop">
			<arglist>
				<arg name="tracks" optional="0" type="list" />
			</arglist>
			<digest>
				Stop recording or playback
			</digest>
			<description>
				In left inlet: Stops <o>mtr</o> when it is recording or playing. The word <m>stop</m>, followed by one or more track numbers, stops those tracks.
				<br />
				<br />
				In other inlets: Stops the track that corresponds to the inlet.
			</description>
		</method>
		<method name="timescale">
			<arglist>
				<arg name="timescale" type="float" optional="0" />
			</arglist>
			<digest>
				Sets the timescale of a track
			</digest>
			<description>
				In left inlet: Sets the timescale for all tracks. 100 is the original timescale, whereas 200 would be twice as fast. This message can be set while a track is playing. Please note that when a track is played again, the timescale is reset to 100. For this reason, use of this message is strongly discouraged in favor of the <at>trackspeed</at> attribute, which does not reset.
				<br />
				<br />
				In other inlets: Sets the timescale for the track that corresponds to the inlet.
			</description>
		</method>
		<method name="touch">
			<arglist>
				<arg name="off/on" type="int" optional="0" />
			</arglist>
			<digest>
				Touch automation recording for a specific inlet
			</digest>
			<description>
				Turn touch automation recording off/on for the track that corresponds to the inlet. Sending the message &quot;touch 1&quot; to a specific inlet while a track is playing, overwrites the existing recording with new data received in the track’s inlet. Timing is unaffected. Sending the message &quot;touch 0&quot; to a specific inlet ends the touch automation recording, and any events from that point on in the track play as usual. The <m>touch</m> message only works when a track is already playing.
				<br />
				<br />
				This message is for individual track inlets. To enable/disable touch automation recording on multiple tracks at once, use the <m>touchenable</m> and <m>touchdisable</m> messages, which are sent to the left inlet of <o>mtr</o>.
			</description>
		</method>
		<method name="touchdisable">
			<arglist>
				<arg name="tracks" type="list" optional="0" />
			</arglist>
			<digest>
				Disable touch automation recording
			</digest>
			<description>
				In left inlet: Turns touch automation recording off for the specified tracks. Sending the message &quot;touchdisable 2 3&quot; ends touch automation recording on tracks 2 and 3. Any events from that point on in the tracks play as usual. This message is used in conjunction with the <m>touchenable</m> message. Timing is unaffected. The <m>touchdisable</m> message only works when a track is already playing.
			</description>
		</method>
		<method name="touchenable">
			<arglist>
				<arg name="tracks" type="list" optional="0" />
			</arglist>
			<digest>
				Enable touch automation recording
			</digest>
			<description>
				In left inlet: Turns touch automation recording on for the specified tracks. Sending the message &quot;touchenable 2 3&quot; while a track is playing, overwrites the existing recording for tracks 2 and 3 with new data received in the tracks' inlets. Use the message <m>touchdisable</m> to stop touch automation recording. Timing is unaffected. The <m>touchenable</m> message only works when a track is already playing.
			</description>
		</method>
		<method name="unmute">
			<arglist>
				<arg name="tracks" optional="0" type="list" />
			</arglist>
			<digest>
				Unmute output
			</digest>
			<description>
				In left inlet: Undoes any previously received <m>mute</m> messages. The word <m>unmute</m>, followed by one or more track numbers, unmutes those tracks.
				<br />
				<br />
				In other inlets: Unmutes the track that corresponds to the inlet.
			</description>
		</method>
		<method name="write">
			<arglist>
				<arg name="filename" optional="0" type="symbol" />
			</arglist>
			<digest>
				Write the sequence to disk
			</digest>
			<description>
				In left inlet: Calls up the standard Save As dialog box, allowing the contents of <o>mtr</o> to be saved as a separate file. If the specified filename (given as an argument) ends in .json, a JSON format file is saved.
				<br />
				<br />
				In other inlets: Writes a file containing only the track that corresponds to the inlet.
			</description>
		</method>
		<method name="writejson">
			<arglist>
				<arg name="ARG_NAME_0" type="symbol" optional="0" />
			</arglist>
			<digest>
				Write the sequence to disk in JSON format
			</digest>
			<description>
				In left inlet: Calls up the standard Save As dialog box, allowing the contents of <o>mtr</o> to be saved as a separate file, in JSON format. Unlike the <m>write</m> message, <m>writejson</m> writes times as floats, preserving the timing of events precisely.
				<br />
				<br />
				In other inlets: Writes a file, in JSON format, containing only the track that corresponds to the inlet.
			</description>
		</method>
	</methodlist>
	<!--ATTRIBUTES-->
	<attributelist>
		<attribute name="autostart" get="1" set="1" type="int" size="1">
			<digest>
				Play tracks when transport is started
			</digest>
			<description>
				Sets whether mtr plays all tracks when the transport is started. Default is 0 (off). This attribute can only be set globally, and does not apply to individual tracks.
			</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="Autostart" />
				<attribute name="style" get="1" set="1" type="symbol" size="1" value="onoff" />
			</attributelist>
		</attribute>
		<attribute name="autostarttime" get="1" set="1" type="Time Value" size="1">
			<digest>
				Autostart Time
			</digest>
			<description>
				Sets the autostarttime for mtr. If the <at>autostart</at> attribute is enabled, <o>mtr</o> will play all tracks automatically at the time specified with this attribute. <at>autostarttime</at> can only be set globally, and does not apply to individual tracks.
			</description>
			<attributelist>
				<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="Autostart Time" />
				<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>
		<attribute name="bindto" get="1" set="1" type="atom" size="1">
			<digest>
				Bind objects to tracks
			</digest>
			<description>
				Bind individual UI objects to tracks without patch cords using pattr scripting names. If you assign a scripting name to a UI object, you can use that same name to set bindings to <o>mtr</o>. The typed in arguments for @bindto should be the track number followed by the scripting name of the desired object.
			</description>
			<attributelist>
				<attribute name="basic" get="1" set="1" type="int" size="1" value="1" />
				<attribute name="label" get="1" set="1" type="symbol" size="1" value="Bound Objects for Tracks" />
			</attributelist>
		</attribute>
		<attribute name="embed" get="1" set="1" type="int" size="1">
			<digest>
				Save Data with Patcher
			</digest>
			<description>
				When <at>embed</at> is set to 1, any recorded data is saved with the patcher. Note that recording, changing, or clearing data does not cause the patcher to be dirtied. This attribute can only be set globally, and does not apply to individual tracks.
			</description>
			<attributelist>
				<attribute name="label" get="1" set="1" type="symbol" size="1" value="Save Data with Patcher" />
				<attribute name="save" get="1" set="1" type="int" size="1" value="1" />
				<attribute name="style" get="1" set="1" type="symbol" size="1" value="onoff" />
			</attributelist>
		</attribute>
		<attribute name="length" get="1" set="1" type="float" size="1">
			<digest>
				Length of tracks
			</digest>
			<description>
				Sets the length of all tracks in time units. This defines when the track will stop or loop. If the length is shorter than the original recorded length, events after the specified time are not played but are still present in the track. This attribute can be set via the inspector, attrui, as a typed-in argument, or as a message to the left inlet. When set this way, <at>length</at> is considered a global attribute and will overwrite any previously set track-specific length values.
				<br />
				<br />
				If sent as a message to any non-left inlet, it sets the length of the track in time units that corresponds to the inlet. If a length value is subsequently set globally (see above), all track-specific values are overwritten.
			</description>
			<attributelist>
				<attribute name="basic" get="1" set="1" type="int" size="1" value="1" />
				<attribute name="label" get="1" set="1" type="symbol" size="1" value="Length (All Tracks)" />
			</attributelist>
		</attribute>
		<attribute name="loop" get="1" set="1" type="int" size="1">
			<digest>
				Loop tracks
			</digest>
			<description>
				Turns looping off/on for all tracks. This attribute can be set via the inspector, attrui, as a typed-in argument, or as a message to the left inlet. When set this way, <at>loop</at> is considered a global attribute and will overwrite any previously set track-specific loop values.
				<br />
				<br />
				If sent as a message to any non-left inlet, it sets the looping state of the track that corresponds to the inlet. If the <at>loop</at> value is subsequently set globally (see above), all track-specific values are overwritten.
			</description>
			<attributelist>
				<attribute name="basic" get="1" set="1" type="int" size="1" value="1" />
				<attribute name="label" get="1" set="1" type="symbol" size="1" value="Looping (All Tracks)" />
				<attribute name="style" get="1" set="1" type="symbol" size="1" value="onoff" />
			</attributelist>
		</attribute>
		<attribute name="mode" get="1" set="1" type="int" size="1">
			<digest>
				Automation playback mode
			</digest>
			<description>
				Enables automation playback mode, which when starting or restarting a track will play the last event before the <at>selection</at> (if a selection start point is non-zero). The default value is 0 (off). This attribute can be set via the inspector, attrui, as a typed-in argument, or as a message to the left inlet. When set this way, <at>mode</at> is considered a global attribute and will overwrite any track-specific settings that were previously specified.
				<br />
				<br />
				If sent as a message to any non-left inlet, it enables/disables automation playback mode for the track that corresponds to the inlet. If the <at>mode</at> attribute is subsequently set globally (see above), all track-specific settings are overwritten.
			</description>
			<attributelist>
				<attribute name="basic" get="1" set="1" type="int" size="1" value="1" />
				<attribute name="label" get="1" set="1" type="symbol" size="1" value="Automation Mode (All Tracks)" />
				<attribute name="style" get="1" set="1" type="symbol" size="1" value="onoff" />
			</attributelist>
		</attribute>
		<attribute name="nextmode" get="1" set="1" type="int" size="1">
			<digest>
				next message behavior
			</digest>
			<description>
				Sets how the <m>next</m> message behaves. When <at>nextmode</at> is set to 0, a <m>next</m> message after the last event will produce an event with a delta time of -1. When <at>nextmode</at> is set to 1 (loop mode), a <m>next</m> message after the last event will immediately loop back to the first event. This attribute can only be set globally, and does not apply to individual tracks.
			</description>
			<attributelist>
				<attribute name="enumvals" get="1" set="1" type="atom" size="2">
					<enumlist>
						<enum name="end">
							<digest>
								TEXT_HERE
							</digest>
							<description>
								TEXT_HERE
							</description>
						</enum>
						<enum name="loop">
							<digest>
								TEXT_HERE
							</digest>
							<description>
								TEXT_HERE
							</description>
						</enum>
					</enumlist>
				</attribute>
				<attribute name="label" get="1" set="1" type="symbol" size="1" value="next Message Behavior" />
				<attribute name="style" get="1" set="1" type="symbol" size="1" value="enumindex" />
			</attributelist>
		</attribute>
		<attribute name="quantize" get="1" set="1" type="Time Value" size="1">
			<digest>
				Sets playback quantization
			</digest>
			<description>
				Sets playback quantization. This does not change the actual events in tracks, only how they are played. This attribute can only be set globally, and does not apply to individual tracks.
			</description>
			<attributelist>
				<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>
		<attribute name="selection" get="1" set="1" type="float" size="2">
			<digest>
				Playback selection of tracks
			</digest>
			<description>
				Sets the playback selection of all tracks. The selection is made in normalized units based on the length of the track, either defined via the <at>length</at> attribute, or if length is 0, the total recorded time. For example, &quot;selection 0.25 0.75&quot; will play the middle section of a track. When sending a <m>play</m> message to a track, it will start at the selection point, not the beginning. Playback is (subtly) affected by the <at>mode</at> attribute.
				<br />
				<br />
				This attribute can be set via the inspector, attrui, as a typed-in argument, or as a message to the left inlet. When set this way, <at>selection</at> is considered a global attribute and will overwrite any previously set track-specific selection values.
				<br />
				<br />
				If sent as a message to any non-left inlet, it sets the playback selection of the track that corresponds to the inlet. If the <at>selection</at> attribute is subsequently set globally (see above), all track-specific values are overwritten.
			</description>
			<attributelist>
				<attribute name="basic" get="1" set="1" type="int" size="1" value="1" />
				<attribute name="label" get="1" set="1" type="symbol" size="1" value="Loop Selection (All Tracks)" />
			</attributelist>
		</attribute>
		<attribute name="speed" get="1" set="1" type="float" size="1">
			<digest>
				Speed Factor of all tracks
			</digest>
			<description>
				Sets the global multiplier to be applied to the speed of all tracks, where 1.0 is the original speed. This allows you to have individual tracks running at different <at>trackspeed</at> s, and then apply a global speed change. This attribute can only be set globally, and does not apply to individual tracks.
			</description>
			<attributelist>
				<attribute name="basic" get="1" set="1" type="int" size="1" value="1" />
				<attribute name="label" get="1" set="1" type="symbol" size="1" value="Speed Factor (All Tracks)" />
			</attributelist>
		</attribute>
		<attribute name="sync" get="1" set="1" type="int" size="1">
			<digest>
				Sync to Transport
			</digest>
			<description>
				When <at>sync</at> is enabled, <o>mtr</o> syncs to a named transport (“internal” is the default). When <at>sync</at> is off, time units are in milliseconds. When <at>sync</at> is on, time units are in ticks. This attribute can only be set globally, and does not apply to individual tracks.
			</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="Sync to Transport" />
				<attribute name="style" get="1" set="1" type="symbol" size="1" value="onoff" />
			</attributelist>
		</attribute>
		<attribute name="trackspeed" get="1" set="1" type="float" size="1">
			<digest>
				Speed of tracks
			</digest>
			<description>
				Sets the speed of all tracks, with 1.0 being the originally recorded speed. The actual track speed is a combination of the mtr's <at>speed</at> attribute, the <at>trackspeed</at>, and the <m>timescale</m>. This attribute can be set via the inspector, attrui, as a typed-in argument, or as a message to the left inlet. When set this way, <at>trackspeed</at> is considered a global attribute and will overwrite any previously set track-specific trackspeed values.
				<br />
				<br />
				If sent as a message to any non-left inlet, it sets the speed of the track that corresponds to the inlet. If a trackspeed value is subsequently set globally (see above), all track-specific values are overwritten.
			</description>
			<attributelist>
				<attribute name="basic" get="1" set="1" type="int" size="1" value="1" />
				<attribute name="label" get="1" set="1" type="symbol" size="1" value="Speed (All Tracks)" />
			</attributelist>
		</attribute>
		<attribute name="transport" get="1" set="1" type="symbol" size="1">
			<digest>
				Sets the transport name
			</digest>
			<description>
				Sets the transport name. The default setting is &quot;internal&quot;, which is the global transport. This attribute can only be set globally, and does not apply to individual tracks.
			</description>
			<attributelist>
				<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="Transport" />
				<attribute name="timeobj" get="1" set="1" type="atom" size="1" value="interval" />
			</attributelist>
		</attribute>
	</attributelist>
	<!--EXAMPLE-->
	<examplelist>
		<example img="mtr.png" caption="Record MIDI data or other events" />
	</examplelist>
	<!--SEEALSO-->
	<seealsolist>
		<seealso name="multislider" />
		<seealso name="seq" />
		<seealso name="rslider" />
		<seealso name="slider" />
	</seealsolist>
	<discussion>
		<o>mtr</o> acts as a multi-track recorder for any kind of message. The leftmost inlet of <o>mtr</o> is a control inlet for all tracks. You can send the same messages to individual tracks as well. Each track records what comes into its inlet, and plays it back through the outlet directly below the inlet.
		<br />
		<br />
		Time is measured in <o>mtr</o> in two different ways, depending on whether the <at>sync</at> attribute is enabled or disabled. When <at>sync</at> is off, time units are in milliseconds. When <at>sync</at> is on, time units are in ticks. The remainder of this document will refer to &quot;time&quot;, with the understanding that the type of time units depends on the <at>sync</at> setting.
	</discussion>
	<misc name="Output">
		<entry name="anything">
			<description>
				Out all track outlets: When a <m>play</m> message is received in the leftmost inlet, the messages stored in each track are sent out the outlet of that track, in the same rhythm and at the same speed they were recorded. A <m>play</m> message received in the inlet of an individual track plays that particular track.
				<br />
				<br />
				When a <m>next</m> message is received in the leftmost inlet, the next message in each track is sent out its corresponding outlet. The word <m>next</m>, received in the inlet of an individual track, sends out the next message in that track.
			</description>
		</entry>
		<entry name="list">
			<description>
				Out left outlet: Whenever a value is sent out in response to a <m>next</m> message, the track number, delta time, and absolute-time of that value are sent out the left outlet as a three-item list.
			</description>
		</entry>
	</misc>
</c74object>
