<?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="el.convolver~">
	<digest>
		<o>el.convolver~</o> is a non-realtime convolution program.
	</digest>
	<description>
		<o>el.convolver~</o> is a non-realtime convolution program based on the CARL utililty <i>convolvesf</i> by Mark Dolson. Many realtime convolution programs are available elsewhere. The advantage of el.convolver~ is that extremely long impulses become practical. The external operates on a source buffer, an impulse buffer and a destination buffer. WARNING: Be careful not to play the destination buffer while convolution is taking place, since the midstage result will have an extremely high amplitude before it is internally rescaled!
    </description>
	<!--METADATA-->
	<metadatalist>
		<metadata name="author">
			Eric Lyon
		</metadata>
		<metadata name="tag">
			MSP
		</metadata>
		<metadata name="tag">
			LyonPotpourri
		</metadata>
	</metadatalist>
	<!--INLETS-->
	<inletlist>
	</inletlist>
	<!--OUTLETS-->
	<outletlist>
	</outletlist>
	<!--ARGUMENTS-->
	<objarglist>
		<objarg name="source buffer" type="symbol" optional="0">
			<digest>
				TEXT_HERE
			</digest>
			<description>
				The sound to be convolved.
			</description>
		</objarg>
		<objarg name="impulse buffer" type="symbol" optional="0">
			<digest>
				TEXT_HERE
			</digest>
			<description>
				The impulse response.
			</description>
		</objarg>
		<objarg name="destination buffer" type="symbol" optional="0">
			<digest>
				TEXT_HERE
			</digest>
			<description>
				The buffer to capture the result of the convolution. If it is too short, it will be resized automatically.
			</description>
		</objarg>
	</objarglist>
	<!--MESSAGES-->
	<methodlist>
		<method name="convolve">
			<arglist>
                
			</arglist>
			<digest>
				TEXT_HERE
			</digest>
			<description>
				Perform convolution. A bang is sent to the outlet when the operation is completed. This is the easiest way to do the convolution, but it will work only in the following cases:
                1) source, impulse and destination have the same number of channels;
                2) source is mono, and impulse and destination have the same number of channels;
                3) impulse is mono, and source and destination have the same number of channels.
            </description>
		</method>
 		<method name="convolvechans">
			<arglist>
                <arg name="channel selection" type="list" optional="0" id="1" />
                
			</arglist>
			<digest>
				TEXT_HERE
			</digest>
			<description>
				Convolve specific channels together. The channels are specified in a list: [source channel, impulse channel, destination channel]. Only a single channel is convolved. Channels are counted starting from 1. A bang is sent to the outlet when the operation is completed.
			</description>
		</method>
		<method name="noiseimp">
			<arglist>
                <arg name="slope" type="float" optional="0" id="1" />
			</arglist>
			<digest>
			</digest>
			<description>
				Writes an enveloped impulse of white noise into the impulse buffer. The slope argument defines the shape of the envelope. Negative slope values give a concave shape and positive slope gives a convex shape to the envelope.
            </description>
		</method>
		<method name="spikeimp">
			<arglist>
                <arg name="density" type="float" optional="0" id="1" />
                
			</arglist>
			<digest>
			</digest>
			<description>
                Writes a decaying impulse with spikes. The density factor specifies the average number of spikes per second. This can create a very sparse impulse if desired.
            </description>
		</method>
        <method name="static_memory">
			<arglist>
                <arg name="flag" type="int" optional="0" id="1" />
                
			</arglist>
			<digest>
			</digest>
			<description>
				When set, memory is allocated and held for the object. Do not resize either the impulse or destination buffers after setting this flag. The advantage of this approach is that all memory is allocated well before convolution, which may be useful in a live context.
            </description>
        </method>
	</methodlist>
	<!--ATTRIBUTES-->
	<attributelist>
	</attributelist>
	<!--SEEALSO-->
	<seealsolist>
		<seealso name="buffir~"/>
	</seealsolist>
    
</c74object>
