<?xml version="1.0" encoding="UTF-8" ?>
<class name="AudioStreamRandomizer" inherits="AudioStream" api_type="core" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../class.xsd">
	<brief_description>
		Wraps a pool of audio streams with pitch and volume shifting.
	</brief_description>
	<description>
		Picks a random AudioStream from the pool, depending on the playback mode, and applies random pitch shifting and volume shifting during playback.
	</description>
	<tutorials>
		<link title="Audio streams">$DOCS_URL/tutorials/audio/audio_streams.html</link>
	</tutorials>
	<methods>
		<method name="add_stream">
			<return type="void" />
			<param index="0" name="index" type="int" />
			<param index="1" name="stream" type="AudioStream" />
			<param index="2" name="weight" type="float" default="1.0" />
			<description>
				Insert a stream at the specified index. If the index is less than zero, the insertion occurs at the end of the underlying pool.
			</description>
		</method>
		<method name="get_stream" qualifiers="const">
			<return type="AudioStream" />
			<param index="0" name="index" type="int" />
			<description>
				Returns the stream at the specified index.
			</description>
		</method>
		<method name="get_stream_probability_weight" qualifiers="const">
			<return type="float" />
			<param index="0" name="index" type="int" />
			<description>
				Returns the probability weight associated with the stream at the given index.
			</description>
		</method>
		<method name="move_stream">
			<return type="void" />
			<param index="0" name="index_from" type="int" />
			<param index="1" name="index_to" type="int" />
			<description>
				Move a stream from one index to another.
			</description>
		</method>
		<method name="remove_stream">
			<return type="void" />
			<param index="0" name="index" type="int" />
			<description>
				Remove the stream at the specified index.
			</description>
		</method>
		<method name="set_stream">
			<return type="void" />
			<param index="0" name="index" type="int" />
			<param index="1" name="stream" type="AudioStream" />
			<description>
				Set the AudioStream at the specified index.
			</description>
		</method>
		<method name="set_stream_probability_weight">
			<return type="void" />
			<param index="0" name="index" type="int" />
			<param index="1" name="weight" type="float" />
			<description>
				Set the probability weight of the stream at the specified index. The higher this value, the more likely that the randomizer will choose this stream during random playback modes.
			</description>
		</method>
	</methods>
	<members>
		<member name="playback_mode" type="int" setter="set_playback_mode" getter="get_playback_mode" enum="AudioStreamRandomizer.PlaybackMode" default="0">
			Controls how this AudioStreamRandomizer picks which AudioStream to play next.
		</member>
		<member name="random_pitch" type="float" setter="set_random_pitch" getter="get_random_pitch" default="1.0">
			The largest possible frequency multiplier of the random pitch variation. Pitch will be randomly chosen within a range of [code skip-lint]1.0 / random_pitch[/code] and [code skip-lint]random_pitch[/code]. A value of [code]1.0[/code] means no variation. A value of [code]2.0[/code] means pitch will be randomized between double and half.
			[b]Note:[/b] Setting this property also sets [member random_pitch_semitones].
		</member>
		<member name="random_pitch_semitones" type="float" setter="set_random_pitch_semitones" getter="get_random_pitch_semitones" default="0.0">
			The largest possible distance, in semitones, of the random pitch variation. A value of [code]0.0[/code] means no variation.
			[b]Note:[/b] Setting this property also sets [member random_pitch].
		</member>
		<member name="random_volume_offset_db" type="float" setter="set_random_volume_offset_db" getter="get_random_volume_offset_db" default="0.0">
			The intensity of random volume variation. Volume will be increased or decreased by a random value up to [code skip-lint]random_volume_offset_db[/code]. A value of [code]0.0[/code] means no variation. A value of [code]3.0[/code] means volume will be randomized between [code]-3.0 dB[/code] and [code]+3.0 dB[/code].
		</member>
		<member name="stream_{index}/stream" type="AudioStream" setter="" getter="">
			The [AudioStream] at [code]index[/code].
			[b]Note:[/b] [code]index[/code] is a value in the [code]0 .. streams_count - 1[/code] range.
		</member>
		<member name="stream_{index}/weight" type="float" setter="" getter="" default="1.0">
			The probability weight of the [AudioStream] at [code]index[/code].
			[b]Note:[/b] [code]index[/code] is a value in the [code]0 .. streams_count - 1[/code] range.
		</member>
		<member name="streams_count" type="int" setter="set_streams_count" getter="get_streams_count" default="0">
			The number of streams in the stream pool.
		</member>
	</members>
	<constants>
		<constant name="PLAYBACK_RANDOM_NO_REPEATS" value="0" enum="PlaybackMode">
			Pick a stream at random according to the probability weights chosen for each stream, but avoid playing the same stream twice in a row whenever possible. If only 1 sound is present in the pool, the same sound will always play, effectively allowing repeats to occur.
		</constant>
		<constant name="PLAYBACK_RANDOM" value="1" enum="PlaybackMode">
			Pick a stream at random according to the probability weights chosen for each stream. If only 1 sound is present in the pool, the same sound will always play.
		</constant>
		<constant name="PLAYBACK_SEQUENTIAL" value="2" enum="PlaybackMode">
			Play streams in the order they appear in the stream pool. If only 1 sound is present in the pool, the same sound will always play.
		</constant>
	</constants>
</class>
