<?xml version="1.0" encoding="UTF-8" ?>
<class name="AudioStreamPlayer3D" inherits="Spatial" version="3.8">
	<brief_description>
		Plays positional sound in 3D space.
	</brief_description>
	<description>
		Plays a sound effect with directed sound effects, dampens with distance if needed, generates effect of hearable position in space. For greater realism, a low-pass filter is automatically applied to distant sounds. This can be disabled by setting [member attenuation_filter_cutoff_hz] to [code]20500[/code].
		By default, audio is heard from the camera position. This can be changed by adding a [Listener] node to the scene and enabling it by calling [method Listener.make_current] on it.
		See also [AudioStreamPlayer] to play a sound non-positionally.
		[b]Note:[/b] Hiding an [AudioStreamPlayer3D] node does not disable its audio output. To temporarily disable an [AudioStreamPlayer3D]'s audio output, set [member unit_db] to a very low value like [code]-100[/code] (which isn't audible to human hearing).
	</description>
	<tutorials>
		<link>$DOCS_URL/tutorials/audio/audio_streams.html</link>
	</tutorials>
	<methods>
		<method name="get_playback_position">
			<return type="float" />
			<description>
				Returns the position in the [AudioStream].
			</description>
		</method>
		<method name="get_stream_playback">
			<return type="AudioStreamPlayback" />
			<description>
				Returns the [AudioStreamPlayback] object associated with this [AudioStreamPlayer3D].
			</description>
		</method>
		<method name="play">
			<return type="void" />
			<argument index="0" name="from_position" type="float" default="0.0" />
			<description>
				Plays the audio from the given position [code]from_position[/code], in seconds.
			</description>
		</method>
		<method name="seek">
			<return type="void" />
			<argument index="0" name="to_position" type="float" />
			<description>
				Sets the position from which audio will be played, in seconds.
			</description>
		</method>
		<method name="stop">
			<return type="void" />
			<description>
				Stops the audio.
			</description>
		</method>
	</methods>
	<members>
		<member name="area_mask" type="int" setter="set_area_mask" getter="get_area_mask" default="1">
			Determines which [Area] layers affect the sound for reverb and audio bus effects. Areas can be used to redirect [AudioStream]s so that they play in a certain audio bus. An example of how you might use this is making a "water" area so that sounds played in the water are redirected through an audio bus to make them sound like they are being played underwater.
		</member>
		<member name="attenuation_filter_cutoff_hz" type="float" setter="set_attenuation_filter_cutoff_hz" getter="get_attenuation_filter_cutoff_hz" default="5000.0">
			Dampens audio using a low-pass filter above this frequency, in Hz. To disable the dampening effect entirely, set this to [code]20500[/code] as this frequency is above the human hearing limit.
		</member>
		<member name="attenuation_filter_db" type="float" setter="set_attenuation_filter_db" getter="get_attenuation_filter_db" default="-24.0">
			Amount how much the filter affects the loudness, in decibels.
		</member>
		<member name="attenuation_model" type="int" setter="set_attenuation_model" getter="get_attenuation_model" enum="AudioStreamPlayer3D.AttenuationModel" default="0">
			Decides if audio should get quieter with distance linearly, quadratically, logarithmically, or not be affected by distance, effectively disabling attenuation.
		</member>
		<member name="autoplay" type="bool" setter="set_autoplay" getter="is_autoplay_enabled" default="false">
			If [code]true[/code], audio plays when the AudioStreamPlayer3D node is added to scene tree.
		</member>
		<member name="bus" type="StringName" setter="set_bus" getter="get_bus" default="@&quot;Master&quot;">
			The bus on which this audio is playing.
			[b]Note:[/b] When setting this property, keep in mind that no validation is performed to see if the given name matches an existing bus. This is because audio bus layouts might be loaded after this property is set. If this given name can't be resolved at runtime, it will fall back to [code]"Master"[/code].
		</member>
		<member name="doppler_tracking" type="int" setter="set_doppler_tracking" getter="get_doppler_tracking" enum="AudioStreamPlayer3D.DopplerTracking" default="0">
			Decides in which step the [url=https://en.wikipedia.org/wiki/Doppler_effect]Doppler effect[/url] should be calculated.
			[b]Note:[/b] Only effective if the current [Camera]'s [member Camera.doppler_tracking] property is set to a value other than [constant Camera.DOPPLER_TRACKING_DISABLED].
		</member>
		<member name="emission_angle_degrees" type="float" setter="set_emission_angle" getter="get_emission_angle" default="45.0">
			The angle in which the audio reaches cameras undampened.
		</member>
		<member name="emission_angle_enabled" type="bool" setter="set_emission_angle_enabled" getter="is_emission_angle_enabled" default="false">
			If [code]true[/code], the audio should be dampened according to the direction of the sound.
		</member>
		<member name="emission_angle_filter_attenuation_db" type="float" setter="set_emission_angle_filter_attenuation_db" getter="get_emission_angle_filter_attenuation_db" default="-12.0">
			Dampens audio if camera is outside of [member emission_angle_degrees] and [member emission_angle_enabled] is set by this factor, in decibels.
		</member>
		<member name="max_db" type="float" setter="set_max_db" getter="get_max_db" default="3.0">
			Sets the absolute maximum of the soundlevel, in decibels.
		</member>
		<member name="max_distance" type="float" setter="set_max_distance" getter="get_max_distance" default="0.0">
			Sets the distance from which the [member out_of_range_mode] takes effect. Has no effect if set to 0.
		</member>
		<member name="out_of_range_mode" type="int" setter="set_out_of_range_mode" getter="get_out_of_range_mode" enum="AudioStreamPlayer3D.OutOfRangeMode" default="0">
			Decides if audio should pause when source is outside of [member max_distance] range.
		</member>
		<member name="panning_strength" type="float" setter="set_panning_strength" getter="get_panning_strength" default="1.0">
			Scales the panning strength for this node by multiplying the base [member ProjectSettings.audio/3d_panning_strength] with this factor. Higher values will pan audio from left to right more dramatically than lower values.
		</member>
		<member name="pitch_scale" type="float" setter="set_pitch_scale" getter="get_pitch_scale" default="1.0">
			The pitch and the tempo of the audio, as a multiplier of the audio sample's sample rate.
		</member>
		<member name="playing" type="bool" setter="_set_playing" getter="is_playing" default="false">
			If [code]true[/code], audio is playing.
		</member>
		<member name="stream" type="AudioStream" setter="set_stream" getter="get_stream">
			The [AudioStream] resource to be played.
		</member>
		<member name="stream_paused" type="bool" setter="set_stream_paused" getter="get_stream_paused" default="false">
			If [code]true[/code], the playback is paused. You can resume it by setting [member stream_paused] to [code]false[/code].
		</member>
		<member name="unit_db" type="float" setter="set_unit_db" getter="get_unit_db" default="0.0">
			The base sound level unaffected by dampening, in decibels.
		</member>
		<member name="unit_size" type="float" setter="set_unit_size" getter="get_unit_size" default="1.0">
			The factor for the attenuation effect. Higher values make the sound audible over a larger distance.
		</member>
	</members>
	<signals>
		<signal name="finished">
			<description>
				Emitted when the audio stops playing.
			</description>
		</signal>
	</signals>
	<constants>
		<constant name="ATTENUATION_INVERSE_DISTANCE" value="0" enum="AttenuationModel">
			Linear dampening of loudness according to distance.
		</constant>
		<constant name="ATTENUATION_INVERSE_SQUARE_DISTANCE" value="1" enum="AttenuationModel">
			Squared dampening of loudness according to distance.
		</constant>
		<constant name="ATTENUATION_LOGARITHMIC" value="2" enum="AttenuationModel">
			Logarithmic dampening of loudness according to distance.
		</constant>
		<constant name="ATTENUATION_DISABLED" value="3" enum="AttenuationModel">
			No dampening of loudness according to distance. The sound will still be heard positionally, unlike an [AudioStreamPlayer]. [constant ATTENUATION_DISABLED] can be combined with a [member max_distance] value greater than [code]0.0[/code] to achieve linear attenuation clamped to a sphere of a defined size.
		</constant>
		<constant name="OUT_OF_RANGE_MIX" value="0" enum="OutOfRangeMode">
			Mix this audio in, even when it's out of range. This increases CPU usage, but keeps the sound playing at the correct position if the camera leaves and enters the [AudioStreamPlayer3D]'s [member max_distance] radius.
		</constant>
		<constant name="OUT_OF_RANGE_PAUSE" value="1" enum="OutOfRangeMode">
			Pause this audio when it gets out of range. This decreases CPU usage, but will cause the sound to restart if the camera leaves and enters the [AudioStreamPlayer3D]'s [member max_distance] radius.
		</constant>
		<constant name="DOPPLER_TRACKING_DISABLED" value="0" enum="DopplerTracking">
			Disables doppler tracking.
		</constant>
		<constant name="DOPPLER_TRACKING_IDLE_STEP" value="1" enum="DopplerTracking">
			Executes doppler tracking in idle step (every rendered frame).
		</constant>
		<constant name="DOPPLER_TRACKING_PHYSICS_STEP" value="2" enum="DopplerTracking">
			Executes doppler tracking in physics step (every simulated physics frame).
		</constant>
	</constants>
</class>
