<?xml version="1.0" encoding="UTF-8" ?>
<class name="AudioEffectChorus" inherits="AudioEffect" api_type="core" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../class.xsd">
	<brief_description>
		Adds a chorus audio effect to an audio bus.
		Gives the impression of multiple audio sources.
	</brief_description>
	<description>
		A "chorus" effect creates multiple copies of the original audio (called "voices") with variations in pitch, and layers on top of the original, giving the impression that the sound comes from multiple sources. This creates spectral and spatial movement.
		Each voice is played a short period of time after the original audio, controlled by [code]delay[/code]. An internal low-frequency oscillator (LFO) controls their pitch, and [code]depth[/code] controls the LFO's maximum amount.
		In the real world, this kind of effect is found in pianos, choirs, and instrument ensembles.
		This effect can also be used to widen mono audio and make digital sounds have a more natural or analog quality.
	</description>
	<tutorials>
		<link title="Audio buses">$DOCS_URL/tutorials/audio/audio_buses.html</link>
		<link title="Audio effects">$DOCS_URL/tutorials/audio/audio_effects.html</link>
	</tutorials>
	<methods>
		<method name="get_voice_cutoff_hz" qualifiers="const">
			<return type="float" />
			<param index="0" name="voice_idx" type="int" />
			<description>
				Returns the frequency threshold of a given [param voice_idx]'s low-pass filter in Hz. Frequencies above this value are removed from the voice.
			</description>
		</method>
		<method name="get_voice_delay_ms" qualifiers="const">
			<return type="float" />
			<param index="0" name="voice_idx" type="int" />
			<description>
				Returns the delay of a given [param voice_idx] in milliseconds, compared to the original audio.
			</description>
		</method>
		<method name="get_voice_depth_ms" qualifiers="const">
			<return type="float" />
			<param index="0" name="voice_idx" type="int" />
			<description>
				Returns the depth of a given [param voice_idx]'s low-frequency oscillator in milliseconds.
			</description>
		</method>
		<method name="get_voice_level_db" qualifiers="const">
			<return type="float" />
			<param index="0" name="voice_idx" type="int" />
			<description>
				Returns the gain of a given [param voice_idx] in dB.
			</description>
		</method>
		<method name="get_voice_pan" qualifiers="const">
			<return type="float" />
			<param index="0" name="voice_idx" type="int" />
			<description>
				Returns the pan position of a given [param voice_idx]. Negative values mean the left channel, positive mean the right.
			</description>
		</method>
		<method name="get_voice_rate_hz" qualifiers="const">
			<return type="float" />
			<param index="0" name="voice_idx" type="int" />
			<description>
				Returns the rate of a given [param voice_idx]'s low-frequency oscillator in Hz.
			</description>
		</method>
		<method name="set_voice_cutoff_hz">
			<return type="void" />
			<param index="0" name="voice_idx" type="int" />
			<param index="1" name="cutoff_hz" type="float" />
			<description>
				Sets the frequency threshold of a given [param voice_idx]'s low-pass filter in Hz. Frequencies above [param cutoff_hz] are removed from [param voice_idx]. Value can range from 1 to 20500.
			</description>
		</method>
		<method name="set_voice_delay_ms">
			<return type="void" />
			<param index="0" name="voice_idx" type="int" />
			<param index="1" name="delay_ms" type="float" />
			<description>
				Sets the delay of a given [param voice_idx] in milliseconds, compared to the original audio. Value can range from 0 to 50.
			</description>
		</method>
		<method name="set_voice_depth_ms">
			<return type="void" />
			<param index="0" name="voice_idx" type="int" />
			<param index="1" name="depth_ms" type="float" />
			<description>
				Sets the depth of a given [param voice_idx]'s low-frequency oscillator in milliseconds. Value can range from 0 to 20.
			</description>
		</method>
		<method name="set_voice_level_db">
			<return type="void" />
			<param index="0" name="voice_idx" type="int" />
			<param index="1" name="level_db" type="float" />
			<description>
				Sets the gain of a given [param voice_idx] in dB. Value can range from -60 to 24.
			</description>
		</method>
		<method name="set_voice_pan">
			<return type="void" />
			<param index="0" name="voice_idx" type="int" />
			<param index="1" name="pan" type="float" />
			<description>
				Sets the pan position of a given [param voice_idx]. Negative values pan the sound to the left, positive pan to the right. Value can range from -1 to 1.
			</description>
		</method>
		<method name="set_voice_rate_hz">
			<return type="void" />
			<param index="0" name="voice_idx" type="int" />
			<param index="1" name="rate_hz" type="float" />
			<description>
				Sets the rate of a given [param voice_idx]'s low-frequency oscillator in Hz. Value can range from 0.1 to 20.
			</description>
		</method>
	</methods>
	<members>
		<member name="dry" type="float" setter="set_dry" getter="get_dry" default="1.0">
			The volume ratio of the original audio. Value can range from 0 to 1.
		</member>
		<member name="voice/1/cutoff_hz" type="float" setter="set_voice_cutoff_hz" getter="get_voice_cutoff_hz" default="8000.0">
			The frequency threshold of the voice's low-pass filter in Hz.
		</member>
		<member name="voice/1/delay_ms" type="float" setter="set_voice_delay_ms" getter="get_voice_delay_ms" default="15.0">
			The delay of the voice in milliseconds, compared to the original audio.
		</member>
		<member name="voice/1/depth_ms" type="float" setter="set_voice_depth_ms" getter="get_voice_depth_ms" default="2.0">
			The depth of the voice's low-frequency oscillator in milliseconds.
		</member>
		<member name="voice/1/level_db" type="float" setter="set_voice_level_db" getter="get_voice_level_db" default="0.0">
			The gain of the voice in dB.
		</member>
		<member name="voice/1/pan" type="float" setter="set_voice_pan" getter="get_voice_pan" default="-0.5">
			The pan position of the voice.
		</member>
		<member name="voice/1/rate_hz" type="float" setter="set_voice_rate_hz" getter="get_voice_rate_hz" default="0.8">
			The rate of the voice's low-frequency oscillator in Hz.
		</member>
		<member name="voice/2/cutoff_hz" type="float" setter="set_voice_cutoff_hz" getter="get_voice_cutoff_hz" default="8000.0">
			The frequency threshold of the voice's low-pass filter in Hz.
		</member>
		<member name="voice/2/delay_ms" type="float" setter="set_voice_delay_ms" getter="get_voice_delay_ms" default="20.0">
			The delay of the voice in milliseconds, compared to the original audio.
		</member>
		<member name="voice/2/depth_ms" type="float" setter="set_voice_depth_ms" getter="get_voice_depth_ms" default="3.0">
			The depth of the voice's low-frequency oscillator in milliseconds.
		</member>
		<member name="voice/2/level_db" type="float" setter="set_voice_level_db" getter="get_voice_level_db" default="0.0">
			The gain of the voice in dB.
		</member>
		<member name="voice/2/pan" type="float" setter="set_voice_pan" getter="get_voice_pan" default="0.5">
			The pan position of the voice.
		</member>
		<member name="voice/2/rate_hz" type="float" setter="set_voice_rate_hz" getter="get_voice_rate_hz" default="1.2">
			The rate of the voice's low-frequency oscillator in Hz.
		</member>
		<member name="voice/3/cutoff_hz" type="float" setter="set_voice_cutoff_hz" getter="get_voice_cutoff_hz">
			The frequency threshold of the voice's low-pass filter in Hz.
		</member>
		<member name="voice/3/delay_ms" type="float" setter="set_voice_delay_ms" getter="get_voice_delay_ms">
			The delay of the voice in milliseconds, compared to the original audio.
		</member>
		<member name="voice/3/depth_ms" type="float" setter="set_voice_depth_ms" getter="get_voice_depth_ms">
			The depth of the voice's low-frequency oscillator in milliseconds.
		</member>
		<member name="voice/3/level_db" type="float" setter="set_voice_level_db" getter="get_voice_level_db">
			The gain of the voice in dB.
		</member>
		<member name="voice/3/pan" type="float" setter="set_voice_pan" getter="get_voice_pan">
			The pan position of the voice.
		</member>
		<member name="voice/3/rate_hz" type="float" setter="set_voice_rate_hz" getter="get_voice_rate_hz">
			The rate of the voice's low-frequency oscillator in Hz.
		</member>
		<member name="voice/4/cutoff_hz" type="float" setter="set_voice_cutoff_hz" getter="get_voice_cutoff_hz">
			The frequency threshold of the voice's low-pass filter in Hz.
		</member>
		<member name="voice/4/delay_ms" type="float" setter="set_voice_delay_ms" getter="get_voice_delay_ms">
			The delay of the voice in milliseconds, compared to the original audio.
		</member>
		<member name="voice/4/depth_ms" type="float" setter="set_voice_depth_ms" getter="get_voice_depth_ms">
			The depth of the voice's low-frequency oscillator in milliseconds.
		</member>
		<member name="voice/4/level_db" type="float" setter="set_voice_level_db" getter="get_voice_level_db">
			The gain of the voice in dB.
		</member>
		<member name="voice/4/pan" type="float" setter="set_voice_pan" getter="get_voice_pan">
			The pan position of the voice.
		</member>
		<member name="voice/4/rate_hz" type="float" setter="set_voice_rate_hz" getter="get_voice_rate_hz">
			The rate of the voice's low-frequency oscillator in Hz.
		</member>
		<member name="voice_count" type="int" setter="set_voice_count" getter="get_voice_count" default="2">
			The number of voices in the effect. Value can range from 1 to 4.
		</member>
		<member name="wet" type="float" setter="set_wet" getter="get_wet" default="0.5">
			The volume ratio of all voices. Value can range from 0 to 1.
		</member>
	</members>
</class>
