<?xml version="1.0" encoding="UTF-8" ?>
<class name="AudioStream" inherits="Resource" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../class.xsd">
	<brief_description>
		Base class for audio streams.
	</brief_description>
	<description>
		Base class for audio streams. Audio streams are used for sound effects and music playback, and support WAV (via [AudioStreamWAV]) and Ogg (via [AudioStreamOggVorbis]) file formats.
	</description>
	<tutorials>
		<link title="Audio streams">$DOCS_URL/tutorials/audio/audio_streams.html</link>
		<link title="Audio Generator Demo">https://godotengine.org/asset-library/asset/2759</link>
		<link title="Audio Microphone Record Demo">https://godotengine.org/asset-library/asset/2760</link>
		<link title="Audio Spectrum Visualizer Demo">https://godotengine.org/asset-library/asset/2762</link>
	</tutorials>
	<methods>
		<method name="_get_bar_beats" qualifiers="virtual const">
			<return type="int" />
			<description>
				Override this method to return the bar beats of this stream.
			</description>
		</method>
		<method name="_get_beat_count" qualifiers="virtual const">
			<return type="int" />
			<description>
				Overridable method. Should return the total number of beats of this audio stream. Used by the engine to determine the position of every beat.
				Ideally, the returned value should be based off the stream's sample rate ([member AudioStreamWAV.mix_rate], for example).
			</description>
		</method>
		<method name="_get_bpm" qualifiers="virtual const">
			<return type="float" />
			<description>
				Overridable method. Should return the tempo of this audio stream, in beats per minute (BPM). Used by the engine to determine the position of every beat.
				Ideally, the returned value should be based off the stream's sample rate ([member AudioStreamWAV.mix_rate], for example).
			</description>
		</method>
		<method name="_get_length" qualifiers="virtual const">
			<return type="float" />
			<description>
				Override this method to customize the returned value of [method get_length]. Should return the length of this audio stream, in seconds.
			</description>
		</method>
		<method name="_get_parameter_list" qualifiers="virtual const">
			<return type="Dictionary[]" />
			<description>
				Return the controllable parameters of this stream. This array contains dictionaries with a property info description format (see [method Object.get_property_list]). Additionally, the default value for this parameter must be added tho each dictionary in "default_value" field.
			</description>
		</method>
		<method name="_get_stream_name" qualifiers="virtual const">
			<return type="String" />
			<description>
				Override this method to customize the name assigned to this audio stream. Unused by the engine.
			</description>
		</method>
		<method name="_get_tags" qualifiers="virtual const">
			<return type="Dictionary" />
			<description>
				Override this method to customize the tags for this audio stream. Should return a [Dictionary] of strings with the tag as the key and its content as the value.
				Commonly used tags include [code]title[/code], [code]artist[/code], [code]album[/code], [code]tracknumber[/code], and [code]date[/code].
			</description>
		</method>
		<method name="_has_loop" qualifiers="virtual const">
			<return type="bool" />
			<description>
				Override this method to return [code]true[/code] if this stream has a loop.
			</description>
		</method>
		<method name="_instantiate_playback" qualifiers="virtual const">
			<return type="AudioStreamPlayback" />
			<description>
				Override this method to customize the returned value of [method instantiate_playback]. Should return a new [AudioStreamPlayback] created when the stream is played (such as by an [AudioStreamPlayer]).
			</description>
		</method>
		<method name="_is_monophonic" qualifiers="virtual const">
			<return type="bool" />
			<description>
				Override this method to customize the returned value of [method is_monophonic]. Should return [code]true[/code] if this audio stream only supports one channel.
			</description>
		</method>
		<method name="can_be_sampled" qualifiers="const" experimental="">
			<return type="bool" />
			<description>
				Returns if the current [AudioStream] can be used as a sample. Only static streams can be sampled.
			</description>
		</method>
		<method name="generate_sample" qualifiers="const" experimental="">
			<return type="AudioSample" />
			<description>
				Generates an [AudioSample] based on the current stream.
			</description>
		</method>
		<method name="get_length" qualifiers="const">
			<return type="float" />
			<description>
				Returns the length of the audio stream in seconds. If this stream is an [AudioStreamRandomizer], returns the length of the last played stream. If this stream has an indefinite length (such as for [AudioStreamGenerator] and [AudioStreamMicrophone]), returns [code]0.0[/code].
			</description>
		</method>
		<method name="instantiate_playback">
			<return type="AudioStreamPlayback" />
			<description>
				Returns a newly created [AudioStreamPlayback] intended to play this audio stream. Useful for when you want to extend [method _instantiate_playback] but call [method instantiate_playback] from an internally held AudioStream subresource. An example of this can be found in the source code for [code]AudioStreamRandomPitch::instantiate_playback[/code].
			</description>
		</method>
		<method name="is_meta_stream" qualifiers="const">
			<return type="bool" />
			<description>
				Returns [code]true[/code] if the stream is a collection of other streams, [code]false[/code] otherwise.
			</description>
		</method>
		<method name="is_monophonic" qualifiers="const">
			<return type="bool" />
			<description>
				Returns [code]true[/code] if this audio stream only supports one channel ([i]monophony[/i]), or [code]false[/code] if the audio stream supports two or more channels ([i]polyphony[/i]).
			</description>
		</method>
	</methods>
	<signals>
		<signal name="parameter_list_changed">
			<description>
				Signal to be emitted to notify when the parameter list changed.
			</description>
		</signal>
	</signals>
</class>
