using System;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
namespace BansheeEngine
{
/** @addtogroup Audio
* @{
*/
///
/// Represents a source for emitting audio. Audio can be played spatially (gun shot), or normally (music). Each audio
/// source must have an AudioClip to play-back, and it can also have a position in the case of spatial (3D) audio.
///
/// Whether or not an audio source is spatial is controlled by the assigned AudioClip. The volume and the pitch of a
/// spatial audio source is controlled by its position and the AudioListener's position/direction/velocity.
///
public partial class AudioSource : Component
{
private AudioSource(bool __dummy0) { }
protected AudioSource() { }
/// Audio clip to play.
[ShowInInspector]
public RRef Clip
{
get { return Internal_getClip(mCachedPtr); }
set { Internal_setClip(mCachedPtr, value); }
}
/// Volume of the audio played from this source, in [0, 1] range.
[ShowInInspector]
public float Volume
{
get { return Internal_getVolume(mCachedPtr); }
set { Internal_setVolume(mCachedPtr, value); }
}
/// Determines the pitch of the played audio. 1 is the default.
[ShowInInspector]
public float Pitch
{
get { return Internal_getPitch(mCachedPtr); }
set { Internal_setPitch(mCachedPtr, value); }
}
/// Determines whether the audio clip should loop when it finishes playing.
[ShowInInspector]
public bool Loop
{
get { return Internal_getIsLooping(mCachedPtr); }
set { Internal_setIsLooping(mCachedPtr, value); }
}
///
/// Determines the priority of the audio source. If more audio sources are playing than supported by the hardware, some
/// might get disabled. By setting a higher priority the audio source is guaranteed to be disabled after sources with
/// lower priority.
///
[ShowInInspector]
public uint Priority
{
get { return Internal_getPriority(mCachedPtr); }
set { Internal_setPriority(mCachedPtr, value); }
}
///
/// Minimum distance at which audio attenuation starts. When the listener is closer to the source than this value, audio
/// is heard at full volume. Once farther away the audio starts attenuating.
///
[ShowInInspector]
public float MinDistance
{
get { return Internal_getMinDistance(mCachedPtr); }
set { Internal_setMinDistance(mCachedPtr, value); }
}
///
/// Attenuation that controls how quickly does audio volume drop off as the listener moves further from the source.
///
[ShowInInspector]
public float Attenuation
{
get { return Internal_getAttenuation(mCachedPtr); }
set { Internal_setAttenuation(mCachedPtr, value); }
}
///
/// Determines the current time of playback. If playback hasn't yet started, it specifies the time at which playback will
/// start at. The time is in seconds, in range [0, clipLength].
///
[ShowInInspector]
public float Time
{
get { return Internal_getTime(mCachedPtr); }
set { Internal_setTime(mCachedPtr, value); }
}
/// Sets whether playback should start as soon as the component is enabled.
[ShowInInspector]
public bool PlayOnStart
{
get { return Internal_getPlayOnStart(mCachedPtr); }
set { Internal_setPlayOnStart(mCachedPtr, value); }
}
/// Returns the current state of the audio playback (playing/paused/stopped).
[ShowInInspector]
public AudioSourceState State
{
get { return Internal_getState(mCachedPtr); }
}
/// Starts playing the currently assigned audio clip.
public void Play()
{
Internal_play(mCachedPtr);
}
/// Pauses the audio playback.
public void Pause()
{
Internal_pause(mCachedPtr);
}
/// Stops audio playback, rewinding it to the start.
public void Stop()
{
Internal_stop(mCachedPtr);
}
[MethodImpl(MethodImplOptions.InternalCall)]
private static extern void Internal_setClip(IntPtr thisPtr, RRef clip);
[MethodImpl(MethodImplOptions.InternalCall)]
private static extern RRef Internal_getClip(IntPtr thisPtr);
[MethodImpl(MethodImplOptions.InternalCall)]
private static extern void Internal_setVolume(IntPtr thisPtr, float volume);
[MethodImpl(MethodImplOptions.InternalCall)]
private static extern float Internal_getVolume(IntPtr thisPtr);
[MethodImpl(MethodImplOptions.InternalCall)]
private static extern void Internal_setPitch(IntPtr thisPtr, float pitch);
[MethodImpl(MethodImplOptions.InternalCall)]
private static extern float Internal_getPitch(IntPtr thisPtr);
[MethodImpl(MethodImplOptions.InternalCall)]
private static extern void Internal_setIsLooping(IntPtr thisPtr, bool loop);
[MethodImpl(MethodImplOptions.InternalCall)]
private static extern bool Internal_getIsLooping(IntPtr thisPtr);
[MethodImpl(MethodImplOptions.InternalCall)]
private static extern void Internal_setPriority(IntPtr thisPtr, uint priority);
[MethodImpl(MethodImplOptions.InternalCall)]
private static extern uint Internal_getPriority(IntPtr thisPtr);
[MethodImpl(MethodImplOptions.InternalCall)]
private static extern void Internal_setMinDistance(IntPtr thisPtr, float distance);
[MethodImpl(MethodImplOptions.InternalCall)]
private static extern float Internal_getMinDistance(IntPtr thisPtr);
[MethodImpl(MethodImplOptions.InternalCall)]
private static extern void Internal_setAttenuation(IntPtr thisPtr, float attenuation);
[MethodImpl(MethodImplOptions.InternalCall)]
private static extern float Internal_getAttenuation(IntPtr thisPtr);
[MethodImpl(MethodImplOptions.InternalCall)]
private static extern void Internal_setTime(IntPtr thisPtr, float time);
[MethodImpl(MethodImplOptions.InternalCall)]
private static extern float Internal_getTime(IntPtr thisPtr);
[MethodImpl(MethodImplOptions.InternalCall)]
private static extern void Internal_setPlayOnStart(IntPtr thisPtr, bool enable);
[MethodImpl(MethodImplOptions.InternalCall)]
private static extern bool Internal_getPlayOnStart(IntPtr thisPtr);
[MethodImpl(MethodImplOptions.InternalCall)]
private static extern void Internal_play(IntPtr thisPtr);
[MethodImpl(MethodImplOptions.InternalCall)]
private static extern void Internal_pause(IntPtr thisPtr);
[MethodImpl(MethodImplOptions.InternalCall)]
private static extern void Internal_stop(IntPtr thisPtr);
[MethodImpl(MethodImplOptions.InternalCall)]
private static extern AudioSourceState Internal_getState(IntPtr thisPtr);
}
/** @} */
}