Show More
Commit Description:
Various UI improvements.
Commit Description:
Various UI improvements.
References:
File last commit:
Show/Diff file:
Action:
FNA/src/Audio/AudioEmitter.cs
158 lines | 3.1 KiB | text/x-csharp | CSharpLexer
158 lines | 3.1 KiB | text/x-csharp | CSharpLexer
r0 | #region License | |||
/* FNA - XNA4 Reimplementation for Desktop Platforms | ||||
* Copyright 2009-2020 Ethan Lee and the MonoGame Team | ||||
* | ||||
* Released under the Microsoft Public License. | ||||
* See LICENSE for details. | ||||
*/ | ||||
#endregion | ||||
#region Using Statements | ||||
using System; | ||||
using System.Runtime.InteropServices; | ||||
#endregion | ||||
namespace Microsoft.Xna.Framework.Audio | ||||
{ | ||||
// http://msdn.microsoft.com/en-us/library/microsoft.xna.framework.audio.audioemitter.aspx | ||||
public class AudioEmitter | ||||
{ | ||||
#region Public Properties | ||||
public float DopplerScale | ||||
{ | ||||
get | ||||
{ | ||||
return emitterData.DopplerScaler; | ||||
} | ||||
set | ||||
{ | ||||
if (value < 0.0f) | ||||
{ | ||||
throw new ArgumentOutOfRangeException("AudioEmitter.DopplerScale must be greater than or equal to 0.0f"); | ||||
} | ||||
emitterData.DopplerScaler = value; | ||||
} | ||||
} | ||||
public Vector3 Forward | ||||
{ | ||||
get | ||||
{ | ||||
return new Vector3( | ||||
emitterData.OrientFront.x, | ||||
emitterData.OrientFront.y, | ||||
-emitterData.OrientFront.z | ||||
); | ||||
} | ||||
set | ||||
{ | ||||
emitterData.OrientFront.x = value.X; | ||||
emitterData.OrientFront.y = value.Y; | ||||
emitterData.OrientFront.z = -value.Z; | ||||
} | ||||
} | ||||
public Vector3 Position | ||||
{ | ||||
get | ||||
{ | ||||
return new Vector3( | ||||
emitterData.Position.x, | ||||
emitterData.Position.y, | ||||
-emitterData.Position.z | ||||
); | ||||
} | ||||
set | ||||
{ | ||||
emitterData.Position.x = value.X; | ||||
emitterData.Position.y = value.Y; | ||||
emitterData.Position.z = -value.Z; | ||||
} | ||||
} | ||||
public Vector3 Up | ||||
{ | ||||
get | ||||
{ | ||||
return new Vector3( | ||||
emitterData.OrientTop.x, | ||||
emitterData.OrientTop.y, | ||||
-emitterData.OrientTop.z | ||||
); | ||||
} | ||||
set | ||||
{ | ||||
emitterData.OrientTop.x = value.X; | ||||
emitterData.OrientTop.y = value.Y; | ||||
emitterData.OrientTop.z = -value.Z; | ||||
} | ||||
} | ||||
public Vector3 Velocity | ||||
{ | ||||
get | ||||
{ | ||||
return new Vector3( | ||||
emitterData.Velocity.x, | ||||
emitterData.Velocity.y, | ||||
-emitterData.Velocity.z | ||||
); | ||||
} | ||||
set | ||||
{ | ||||
emitterData.Velocity.x = value.X; | ||||
emitterData.Velocity.y = value.Y; | ||||
emitterData.Velocity.z = -value.Z; | ||||
} | ||||
} | ||||
#endregion | ||||
#region Internal Variables | ||||
internal FAudio.F3DAUDIO_EMITTER emitterData; | ||||
#endregion | ||||
#region Private Static Variables | ||||
private static readonly float[] stereoAzimuth = new float[] | ||||
{ | ||||
0.0f, 0.0f | ||||
}; | ||||
private static readonly GCHandle stereoAzimuthHandle = GCHandle.Alloc( | ||||
stereoAzimuth, | ||||
GCHandleType.Pinned | ||||
); | ||||
#endregion | ||||
#region Public Constructor | ||||
public AudioEmitter() | ||||
{ | ||||
emitterData = new FAudio.F3DAUDIO_EMITTER(); | ||||
DopplerScale = 1.0f; | ||||
Forward = Vector3.Forward; | ||||
Position = Vector3.Zero; | ||||
Up = Vector3.Up; | ||||
Velocity = Vector3.Zero; | ||||
/* Unused variables, defaults based on XNA behavior */ | ||||
emitterData.pCone = IntPtr.Zero; | ||||
emitterData.ChannelCount = 1; | ||||
emitterData.ChannelRadius = 1.0f; | ||||
emitterData.pChannelAzimuths = stereoAzimuthHandle.AddrOfPinnedObject(); | ||||
emitterData.pVolumeCurve = IntPtr.Zero; | ||||
emitterData.pLFECurve = IntPtr.Zero; | ||||
emitterData.pLPFDirectCurve = IntPtr.Zero; | ||||
emitterData.pLPFReverbCurve = IntPtr.Zero; | ||||
emitterData.pReverbCurve = IntPtr.Zero; | ||||
emitterData.CurveDistanceScaler = 1.0f; | ||||
} | ||||
#endregion | ||||
} | ||||
} | ||||