<?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="live.modulate~" module="m4l" category="Live MSP Objects">
	<digest>
		Modulate Ableton Live and Max for Live Parameters
	</digest>
	<description>
		The <o>live.modulate~</o> object enables you to modulate the value of Live parameters in realtime using signal objects. To understand more about Live's parameters, look up the DeviceParameter Object Class in the <link type="vignette" module="core" name="live_object_model">Live Object Model</link>.
	</description>
	<!--METADATA-->
	<metadatalist>
		<metadata name="author">
			Cycling '74, Ableton
		</metadata>
		<metadata name="tag">
			Live
		</metadata>
		<metadata name="tag">
			Live MSP Objects
		</metadata>
	</metadatalist>
	<!--INLETS-->
	<inletlist>
		<inlet id="0" type="INLET_TYPE">
			<digest>
				value (signal/float) clipped to [-1, 1]
			</digest>
			<description>
				TEXT_HERE
			</description>
		</inlet>
		<inlet id="1" type="INLET_TYPE">
			<digest>
				id in
			</digest>
			<description>
				TEXT_HERE
			</description>
		</inlet>
	</inletlist>
	<!--OUTLETS-->
	<outletlist>
		<outlet id="0" type="OUTLET_TYPE">
			<digest>
				status
			</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="int">
			<arglist>
				<arg name="value" optional="0" type="int" />
			</arglist>
			<digest>
				Send a value to the selected Live Parameter
			</digest>
			<description>
				An integer number value received in the left inlet will be applied to the selected Live parameter (DeviceParameter Object), if any, at the beginning of the next audio buffer, or at the end of a pending ramp (see <at>smoothing</at>).
			</description>
		</method>
		<method name="float">
			<arglist>
				<arg name="value" optional="0" type="float" />
			</arglist>
			<digest>
				Send a decimal value to the selected Live Parameter
			</digest>
			<description>
				A floating point number value received in the left inlet will be applied to the selected Live parameter (DeviceParameter Object), if any, at the beginning of the next audio buffer, or at the end of a pending ramp (see <at>smoothing</at>).
			</description>
		</method>
		<method name="list">
			<arglist>
				<arg name="target-value" optional="0" type="float" />
				<arg name="delta-time" optional="0" units="ms" type="number" />
			</arglist>
			<digest>
				Start a ramp
			</digest>
			<description>
				Start a ramp with a list of two floats, similar to the <o>line~</o> object. Sending in “1 500” means that the value 1 will be reached in 500 ms, starting at the current value. New ramps will always override the current ramp, so if you want to cut short a ramp, send another value.
			</description>
		</method>
		<method name="getid">
			<arglist />
			<digest>
				Report the mapped object's id
			</digest>
			<description>
				The mapped object's id is sent from the outlet, preceded by the word <m>id</m>. If there is no mapped object, <m>id 0</m> will be sent.
			</description>
		</method>
		<method name="id">
			<arglist>
				<arg name="parameter id" type="int" optional="0" />
			</arglist>
			<digest>
				Set the Live object using it's <m>id <i>nn</i></m> 
			</digest>
			<description>
				In right inlet: Sets the selected Live object. The message has no effect if the id is not a parameter (DeviceParameter Object).
			</description>
		</method>
		<method name="signal">
			<arglist />
			<digest>
				Send signal values to the selected Live Parameter
			</digest>
			<description>
				Signal input values received in the left inlet will be applied to the selected parameter (DeviceParameter Object), if any, in realtime.
			</description>
		</method>
	</methodlist>
	<!--ATTRIBUTES-->
	<attributelist>
		<attribute name="depth" get="1" set="1" type="float" size="1">
			<digest>
				Depth constrains the modulation range
			</digest>
			<description>
				The <o>live.modulate~</o> object has an input range of -1 to 1 which maps onto the full range of the modulated parameter.
				<br />
				You can control the depth of the modulation with the depth attribute. In other words, you can constrain the modulation to a smaller amount than the full range, expressed as a depth amount between 0 and 1.
			</description>
			<attributelist>
				<attribute name="label" get="1" set="1" type="symbol" size="1" value="Depth [0., 1.]" />
				<attribute name="save" get="1" set="1" type="int" size="1" value="1" />
			</attributelist>
		</attribute>
		<attribute name="smoothing" get="1" set="1" type="float" size="1">
			<digest>
				Smoothing (ms) downsamples the input signal
			</digest>
			<description>
				Set the ramp time that is used for each incoming event. This also performs an automatic downsampling of any signal you send in. For example, a smoothing value of 1 ms will downsample the signal to 1 ms and send ramp events which output a linear approximation of the initial signal. This attribute defaults to 1 ms.
			</description>
			<attributelist>
				<attribute name="label" get="1" set="1" type="symbol" size="1" value="Smoothing (ms)" />
				<attribute name="save" get="1" set="1" type="int" size="1" value="1" />
			</attributelist>
		</attribute>
	</attributelist>
	<!--EXAMPLE-->
	<examplelist>
		<example caption="" img="" />
	</examplelist>
	<!--SEEALSO-->
	<seealsolist>
		<seealso name="live_api_overview" module="core" type="vignette" display="Live API Overview" />
		<seealso name="live_object_model" module="core" type="vignette" display="Live Object Model" />
		<seealso name="live.remote~" />
		<seealso name="live.object" />
		<seealso name="live.path" />
		<seealso name="live.map" />
		<seealso name="live.observer" />
		<seealso display="Using the Live API" module="core" name="live_api" type="vignette" />
		<seealso display="The LiveAPI JavaScript Object (jsliveapi)" module="js" name="jsliveapi" type="vignette" />
	</seealsolist>
	<discussion>
		<o>live.modulate~</o> modulates a valid Live parameter by sending an identifier such as <m>id 3</m> to the right inlet. A signal to the left inlet within the range -1 to 1 modulates that parameter.
		<br />
		<br />
		The input range is mapped to the full range of the mapped parameter. This means that for a 'bipolar' parameter, a signal value of 1 will modulate the current base value by the maximum - minimum. For example, if the current value is 50 and the minimum and maximum are 0 and 100 respectively and the modulation signal is 1, the resulting modulated value would be 50 + 100. The result is then clamped to the minimum and maximum.
		<br />
		<br />
		For unipolar parameters, the input range of -1 to 1 is interpreted as a percentage of the range between the minimum and current value. For example, if the minimum is 0 and the current value is 50, a modulation signal value of 0.0 would result in a modulated parameter value of 25 (halfway between the current and minimum). A modulation signal value of -1 would result in a modulated parameter value of 0.
		<br />
		<br />
		See the <o>live.modulate~</o> help patch for more information on how scaling and parameter modulation types work together to change the behaviour of the object.
		<br />
		<br />
		In this sense, it is similar to <o>live.remote~</o>, however, <o>live.modulate~</o> does not take over control of the parameter it is modulating. Instead, the current value acts as a 'nominal' reference point that can be changed, with the input signal applying an offset to that reference.
		<br />
		<br />
		To stop modulating a parameter, send an <m>id 0</m> message to the right inlet of <o>live.modulate~</o>.
	</discussion>
	<misc name="Inspector">
		<entry name="Persistence">
			<description>
				The <o>live.modulate~</o> object has a special entry in its inspector labelled &quot;Use Persistent Mapping&quot;. This setting, when enabled, causes the <m>id</m> associated with the object to persist when the Live document is saved and restored, and when the Max Device is moved between the Live application and the Max editor, or within the Live Set. Beginning in Live 8.2.2, Live API ids remain persistent between launches of Live, which in conjunction with the <m>Persistence</m> feature of <o>live.modulate~</o>, <o>live.object</o>, <o>live.observer</o> and <o>live.remote~</o>, makes it possible to create simpler devices which retain their association with elements in the Live user interface.
			</description>
		</entry>
	</misc>
</c74object>
