<?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="teeth~" module="msp" category="MSP Filters">
	<digest>
		Comb filter with feedforward and feedback delay control
	</digest>
	<description>
		The <o>teeth~</o> object implements a comb filter, in which a slightly delayed version of a signal is added to itself, causing phase cancellations and a spectrum that looks like a comb.
	</description>
	<!--METADATA-->
	<metadatalist>
		<metadata name="author">
			Cycling '74
		</metadata>
		<metadata name="tag">
			MSP
		</metadata>
		<metadata name="tag">
			MSP Filters
		</metadata>
	</metadatalist>
	<!--INLETS-->
	<inletlist>
		<inlet id="0" type="signal">
			<digest>
				(signal) Input
			</digest>
			<description>
				TEXT_HERE
			</description>
		</inlet>
		<inlet id="1" type="signal/float">
			<digest>
				(signal/float) Feedforward Delay in ms
			</digest>
			<description>
				TEXT_HERE
			</description>
		</inlet>
		<inlet id="2" type="signal/float">
			<digest>
				(signal/float) Feedback Delay in ms
			</digest>
			<description>
				TEXT_HERE
			</description>
		</inlet>
		<inlet id="3" type="signal/float">
			<digest>
				(signal/float) Gain Coefficient
			</digest>
			<description>
				TEXT_HERE
			</description>
		</inlet>
		<inlet id="4" type="signal/float">
			<digest>
				(signal/float) Feedforward Coefficient
			</digest>
			<description>
				TEXT_HERE
			</description>
		</inlet>
		<inlet id="5" type="signal/float">
			<digest>
				(signal/float) Feedback Coefficient
			</digest>
			<description>
				TEXT_HERE
			</description>
		</inlet>
	</inletlist>
	<!--OUTLETS-->
	<outletlist>
		<outlet id="0" type="signal">
			<digest>
				(signal) Filter Output
			</digest>
			<description>
				TEXT_HERE
			</description>
		</outlet>
	</outletlist>
	<!--ARGUMENTS-->
	<objarglist>
		<objarg name="feedforward-delay" optional="1" units="ms" type="float">
			<digest>
				Set the feedforward delay amount
			</digest>
			<description>
				Sets the initial value for the feedforward delay, in milliseconds. If a signal is connected to this inlet, the coefficient supplied as an argument for that inlet is ignored. If no argument is present, the delay time defaults to 10 milliseconds.
			</description>
		</objarg>
		<objarg name="feedback-delay" optional="1" units="ms" type="float">
			<digest>
				Set the feedback delay amount
			</digest>
			<description>
				Sets the initial value for the feedback delay, in milliseconds. If a signal is connected to this inlet, the coefficient supplied as an argument for that inlet is ignored. If no argument is present, the delay time defaults to 10 milliseconds.
			</description>
		</objarg>
		<objarg name="gain" optional="1" type="float">
			<digest>
				Set the gain
			</digest>
			<description>
				Sets the initial value for the gain. If a signal is connected to this inlet, the coefficient supplied as an argument for that inlet is ignored. If no argument is present, the value defaults to 0.
			</description>
		</objarg>
		<objarg name="feedforward-gain" optional="1" type="float">
			<digest>
				Set the feedforward gain
			</digest>
			<description>
				Sets the initial value for the feedforward gain. If a signal is connected to this inlet, the coefficient supplied as an argument for that inlet is ignored. If no argument is present, the value defaults to 0.
			</description>
		</objarg>
		<objarg name="feedback-gain" optional="1" type="float">
			<digest>
				Set the feedback gain
			</digest>
			<description>
				Sets the initial value for the feedback gain. If a signal is connected to this inlet, the coefficient supplied as an argument for that inlet is ignored. If no argument is present, the value defaults to 0.
			</description>
		</objarg>
	</objarglist>
	<!--MESSAGES-->
	<methodlist>
		<method name="int">
			<arglist>
				<arg name="filter-parameters" optional="0" type="int" />
			</arglist>
			<digest>
				Function depends on inlet
			</digest>
			<description>
				The filter parameters in inlets 2 to 6 may be specified by a <m>float</m> instead of a signal. If a signal is also connected to the inlet, the <m>float</m> is ignored.
			</description>
		</method>
		<method name="float">
			<arglist>
				<arg name="filter-parameters" optional="0" type="float" />
			</arglist>
			<digest>
				Function depends on inlet
			</digest>
			<description>
				The filter parameters in inlets 2 to 6 may be specified by a <m>float</m> instead of a signal. If a signal is also connected to the inlet, the <m>float</m> is ignored.
			</description>
		</method>
		<method name="clear">
			<arglist />
			<digest>
				Clear the <o>teeth~</o> object's memory
			</digest>
			<description>
				Clears the <o>teeth~</o> object's memory of previous outputs, resetting them to 0.
			</description>
		</method>
		<method name="signal">
			<arglist />
			<digest>
				Function depends on inlet
			</digest>
			<description>
				In left inlet: Signal to be filtered. The <o>teeth~</o> object is a variant of <o>comb~</o>-- a comb filter that mixes the current input sample with earlier input and/or output samples to accentuate and attenuate the input signal at regularly spaced frequency intervals. Unlike the <o>comb~</o> object, <o>teeth~</o> adds feedforward and feedback, which adds to the extremity of the effect.
				<br />
				<br />
				In 2nd inlet: Feedforward - the delay, in milliseconds, before past samples of the input are added to the current input.
				<br />
				<br />
				In 3rd inlet: Feedback - the delay, in milliseconds, before past samples of the output are added to the current input.
				<br />
				<br />
				In 4th inlet: Gain coefficient - for scaling the amount of the input sample to be sent to the output.
				<br />
				<br />
				In 5th inlet: Gain coefficient - for scaling the amount of feedforward to be sent to the output.
				<br />
				<br />
				In right inlet: Gain coefficient - for scaling the amount of feedback to be sent to the output.
			</description>
		</method>
		<method name="list">
			<arglist>
				<arg name="feedforward-delay" optional="0" units="ms" type="float" />
				<arg name="feedback-delay" optional="0" units="ms" type="float" />
				<arg name="gain" optional="0" type="float" />
				<arg name="feedforward-gain" optional="0" type="float" />
				<arg name="feedback-gain" optional="0" type="float" />
			</arglist>
			<digest>
				Set parameters as a list to the left inlet
			</digest>
			<description>
				The five parameters can be provided as a list in the left inlet. The first number in the list is the feedforward delay, the next number is the feedback delay, the third number is the Gain coefficient for the input sample, the fourth number is the feedforward gain coefficient, and the fifth number is the feedback gain coefficient. If a signal is connected to a given inlet, the coefficient supplied in the list for that inlet is ignored.
			</description>
		</method>
	</methodlist>
	<!--ATTRIBUTES-->
	<!--EXAMPLE-->
	<examplelist>
		<example img="teeth~.png" caption="teeth~ does comb filtering on an input signal with variable feedforward and feedback delays" />
	</examplelist>
	<!--SEEALSO-->
	<seealsolist>
		<seealso name="allpass~" />
		<seealso name="comb~" />
		<seealso name="delay~" />
		<seealso name="reson~" />
		<seealso name="audio_filtering" module="core" type="vignette" />
	</seealsolist>
	<discussion>
		The <o>teeth~</o> object is a variation of the <o>comb~</o> object and implements a similar filter formula:
		<br />
		<br />
		y[n] = a * x[n] + b * x[n - FFdelay] + c * y[n - FBdelay]
	</discussion>
	<misc name="Output">
		<entry name="signal">
			<description>
				The filtered signal.
			</description>
		</entry>
	</misc>
</c74object>
