diff --git a/ANX.Framework/ANX.Framework.csproj b/ANX.Framework/ANX.Framework.csproj index 96f42a93..ba108d5a 100644 --- a/ANX.Framework/ANX.Framework.csproj +++ b/ANX.Framework/ANX.Framework.csproj @@ -456,6 +456,8 @@ + + diff --git a/ANX.Framework/Audio/AudioEmitter.cs b/ANX.Framework/Audio/AudioEmitter.cs index 37f6bd7c..aff0f2f9 100644 --- a/ANX.Framework/Audio/AudioEmitter.cs +++ b/ANX.Framework/Audio/AudioEmitter.cs @@ -1,8 +1,5 @@ -#region Using Statements -using System; -using System.IO; - -#endregion // Using Statements +using ANX.Framework.NonXNA; +using ANX.Framework.NonXNA.SoundSystem; #region License @@ -53,13 +50,86 @@ using System.IO; namespace ANX.Framework.Audio { - public class AudioEmitter - { - public AudioEmitter (){} - public float DopplerScale { get; set; } - public Vector3 Forward { get; set; } - public Vector3 Position { get; set; } - public Vector3 Up { get; set; } - public Vector3 Velocity { get; set; } - } + public class AudioEmitter + { + #region Private + private IAudioEmitter nativeEmitter; + #endregion + + #region Public + public float DopplerScale + { + get + { + return nativeEmitter.DopplerScale; + } + set + { + nativeEmitter.DopplerScale = value; + } + } + + public Vector3 Forward + { + get + { + return nativeEmitter.Forward; + } + set + { + nativeEmitter.Forward = value; + } + } + + public Vector3 Position + { + get + { + return nativeEmitter.Position; + } + set + { + nativeEmitter.Position = value; + } + } + + public Vector3 Up + { + get + { + return nativeEmitter.Up; + } + set + { + nativeEmitter.Up = value; + } + } + + public Vector3 Velocity + { + get + { + return nativeEmitter.Velocity; + } + set + { + nativeEmitter.Velocity = value; + } + } + #endregion + + #region Constructor + public AudioEmitter() + { + nativeEmitter = GetCreator().CreateAudioEmitter(); + } + #endregion + + #region GetCreator + private static ISoundSystemCreator GetCreator() + { + return AddInSystemFactory.Instance.GetDefaultCreator(); + } + #endregion + } } diff --git a/ANX.Framework/Audio/AudioListener.cs b/ANX.Framework/Audio/AudioListener.cs index 8c3fcb79..7249ce0a 100644 --- a/ANX.Framework/Audio/AudioListener.cs +++ b/ANX.Framework/Audio/AudioListener.cs @@ -1,8 +1,5 @@ -#region Using Statements -using System; -using System.IO; - -#endregion // Using Statements +using ANX.Framework.NonXNA; +using ANX.Framework.NonXNA.SoundSystem; #region License @@ -53,12 +50,74 @@ using System.IO; namespace ANX.Framework.Audio { - public class AudioListener - { - public AudioListener (){} - public Vector3 Forward { get; set; } - public Vector3 Position { get; set; } - public Vector3 Up { get; set; } - public Vector3 Velocity { get; set; } - } + public class AudioListener + { + #region Private + private IAudioListener nativeListener; + #endregion + + #region Public + public Vector3 Forward + { + get + { + return nativeListener.Forward; + } + set + { + nativeListener.Forward = value; + } + } + + public Vector3 Position + { + get + { + return nativeListener.Position; + } + set + { + nativeListener.Position = value; + } + } + + public Vector3 Up + { + get + { + return nativeListener.Up; + } + set + { + nativeListener.Up = value; + } + } + + public Vector3 Velocity + { + get + { + return nativeListener.Velocity; + } + set + { + nativeListener.Velocity = value; + } + } + #endregion + + #region Constructor + public AudioListener() + { + nativeListener = GetCreator().CreateAudioListener(); + } + #endregion + + #region GetCreator + private static ISoundSystemCreator GetCreator() + { + return AddInSystemFactory.Instance.GetDefaultCreator(); + } + #endregion + } } diff --git a/ANX.Framework/Audio/AudioStopOptions.cs b/ANX.Framework/Audio/AudioStopOptions.cs index 4e638135..3bf3c38c 100644 --- a/ANX.Framework/Audio/AudioStopOptions.cs +++ b/ANX.Framework/Audio/AudioStopOptions.cs @@ -1,9 +1,4 @@ -#region Using Statements -using System; - -#endregion // Using Statements - -#region License +#region License // // This file is part of the ANX.Framework created by the "ANX.Framework developer group". @@ -52,9 +47,9 @@ using System; namespace ANX.Framework.Audio { - public enum AudioStopOptions - { - AsAuthored, - Immediate - } + public enum AudioStopOptions + { + AsAuthored, + Immediate + } } diff --git a/ANX.Framework/Audio/SoundEffect.cs b/ANX.Framework/Audio/SoundEffect.cs index 5f3a4e72..f8ab5ad2 100644 --- a/ANX.Framework/Audio/SoundEffect.cs +++ b/ANX.Framework/Audio/SoundEffect.cs @@ -55,58 +55,58 @@ namespace ANX.Framework.Audio public sealed class SoundEffect : IDisposable { #region Static - #region DistanceScale (TODO) + #region DistanceScale public static float DistanceScale { get { - throw new NotImplementedException(); + return GetCreator().DistanceScale; } set { - throw new NotImplementedException(); + GetCreator().DistanceScale = value; } } #endregion - #region DopplerScale (TODO) + #region DopplerScale public static float DopplerScale { get { - throw new NotImplementedException(); + return GetCreator().DopplerScale; } set { - throw new NotImplementedException(); + GetCreator().DopplerScale = value; } } #endregion - #region MasterVolume (TODO) + #region MasterVolume public static float MasterVolume { get { - throw new NotImplementedException(); + return GetCreator().MasterVolume; } set { - throw new NotImplementedException(); + GetCreator().MasterVolume = value; } } #endregion - #region SpeedOfSound (TODO) + #region SpeedOfSound public static float SpeedOfSound { get { - throw new NotImplementedException(); + return GetCreator().SpeedOfSound; } set { - throw new NotImplementedException(); + GetCreator().SpeedOfSound = value; } } #endregion @@ -141,9 +141,7 @@ namespace ANX.Framework.Audio #region Constructor private SoundEffect(Stream stream) { - nativeSoundEffect = - AddInSystemFactory.Instance.GetDefaultCreator() - .CreateSoundEffect(stream); + nativeSoundEffect = GetCreator().CreateSoundEffect(stream); } public SoundEffect(byte[] buffer, int sampleRate, AudioChannels channels) @@ -154,10 +152,8 @@ namespace ANX.Framework.Audio public SoundEffect(byte[] buffer, int offset, int count, int sampleRate, AudioChannels channels, int loopStart, int loopLength) { - nativeSoundEffect = - AddInSystemFactory.Instance.GetDefaultCreator() - .CreateSoundEffect(buffer, offset, count, sampleRate, channels, - loopStart, loopLength); + nativeSoundEffect = GetCreator().CreateSoundEffect(buffer, offset, + count, sampleRate, channels, loopStart, loopLength); } ~SoundEffect() @@ -166,6 +162,13 @@ namespace ANX.Framework.Audio } #endregion + #region GetCreator + private static ISoundSystemCreator GetCreator() + { + return AddInSystemFactory.Instance.GetDefaultCreator(); + } + #endregion + #region CreateInstance public SoundEffectInstance CreateInstance() { diff --git a/ANX.Framework/Audio/SoundEffectInstance.cs b/ANX.Framework/Audio/SoundEffectInstance.cs index c762fabc..cebe142c 100644 --- a/ANX.Framework/Audio/SoundEffectInstance.cs +++ b/ANX.Framework/Audio/SoundEffectInstance.cs @@ -1,7 +1,7 @@ using System; using System.IO; -using ANX.Framework.NonXNA.SoundSystem; using ANX.Framework.NonXNA; +using ANX.Framework.NonXNA.SoundSystem; #region License @@ -60,46 +60,81 @@ namespace ANX.Framework.Audio private ISoundEffectInstance nativeInstance; #endregion - #region Public (TODO) + #region Public + #region IsDisposed public bool IsDisposed + { + get; + private set; + } + #endregion + + #region IsLooped + public virtual bool IsLooped { get { - throw new NotImplementedException(); + return nativeInstance.IsLooped; + } + set + { + nativeInstance.IsLooped = value; } } + #endregion - public virtual bool IsLooped - { - get; - set; - } - + #region Pan public float Pan { - get; - set; + get + { + return nativeInstance.Pan; + } + set + { + nativeInstance.Pan = value; + } } + #endregion + + #region Pitch public float Pitch { - get; - set; + get + { + return nativeInstance.Pitch; + } + set + { + nativeInstance.Pitch = value; + } } + #endregion + #region State public SoundState State { get { - throw new NotImplementedException(); + return nativeInstance.State; } } + #endregion + #region Volume public float Volume { - get; - set; + get + { + return nativeInstance.Volume; + } + set + { + nativeInstance.Volume = value; + } } #endregion + #endregion #region Constructor protected SoundEffectInstance() @@ -110,9 +145,7 @@ namespace ANX.Framework.Audio { parent = setParent; - nativeInstance = - AddInSystemFactory.Instance.GetDefaultCreator() - .CreateSoundEffectInstance(setParent); + nativeInstance = GetCreator().CreateSoundEffectInstance(setParent); } ~SoundEffectInstance() @@ -121,60 +154,73 @@ namespace ANX.Framework.Audio } #endregion - #region Apply3D (TODO) + #region GetCreator + private static ISoundSystemCreator GetCreator() + { + return AddInSystemFactory.Instance.GetDefaultCreator(); + } + #endregion + + #region Apply3D public void Apply3D(AudioListener listener, AudioEmitter emitter) { - throw new NotImplementedException(); + Apply3D(new AudioListener[] { listener }, emitter); } public void Apply3D(AudioListener[] listeners, AudioEmitter emitter) { - throw new NotImplementedException(); + nativeInstance.Apply3D(listeners, emitter); } #endregion - #region Pause (TODO) + #region Pause public void Pause() { - throw new NotImplementedException(); + nativeInstance.Pause(); } #endregion - #region Play (TODO) + #region Play public virtual void Play() { - throw new NotImplementedException(); + nativeInstance.Play(); } #endregion - #region Resume (TODO) + #region Resume public void Resume() { - throw new NotImplementedException(); + nativeInstance.Resume(); } #endregion - #region Stop (TODO) + #region Stop public void Stop() { - throw new NotImplementedException(); + Stop(true); } public void Stop(bool immediate) { - throw new NotImplementedException(); + nativeInstance.Stop(immediate); } #endregion - #region Dispose (TODO) + #region Dispose public void Dispose() { - throw new NotImplementedException(); + Dispose(true); } protected virtual void Dispose(bool disposing) { - throw new NotImplementedException(); + if (nativeInstance != null) + { + nativeInstance.Dispose(); + nativeInstance = null; + } + + IsDisposed = true; } #endregion } diff --git a/ANX.Framework/NonXNA/SoundSystem/IAudioEmitter.cs b/ANX.Framework/NonXNA/SoundSystem/IAudioEmitter.cs new file mode 100644 index 00000000..d7568a4d --- /dev/null +++ b/ANX.Framework/NonXNA/SoundSystem/IAudioEmitter.cs @@ -0,0 +1,84 @@ +using System; + +#region License + +// +// This file is part of the ANX.Framework created by the "ANX.Framework developer group". +// +// This file is released under the Ms-PL license. +// +// +// +// Microsoft Public License (Ms-PL) +// +// This license governs use of the accompanying software. If you use the software, you accept this license. +// If you do not accept the license, do not use the software. +// +// 1.Definitions +// The terms "reproduce," "reproduction," "derivative works," and "distribution" have the same meaning +// here as under U.S. copyright law. +// A "contribution" is the original software, or any additions or changes to the software. +// A "contributor" is any person that distributes its contribution under this license. +// "Licensed patents" are a contributor's patent claims that read directly on its contribution. +// +// 2.Grant of Rights +// (A) Copyright Grant- Subject to the terms of this license, including the license conditions and limitations +// in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free copyright license to +// reproduce its contribution, prepare derivative works of its contribution, and distribute its contribution +// or any derivative works that you create. +// (B) Patent Grant- Subject to the terms of this license, including the license conditions and limitations in +// section 3, each contributor grants you a non-exclusive, worldwide, royalty-free license under its licensed +// patents to make, have made, use, sell, offer for sale, import, and/or otherwise dispose of its contribution +// in the software or derivative works of the contribution in the software. +// +// 3.Conditions and Limitations +// (A) No Trademark License- This license does not grant you rights to use any contributors' name, logo, or trademarks. +// (B) If you bring a patent claim against any contributor over patents that you claim are infringed by the software, your +// patent license from such contributor to the software ends automatically. +// (C) If you distribute any portion of the software, you must retain all copyright, patent, trademark, and attribution +// notices that are present in the software. +// (D) If you distribute any portion of the software in source code form, you may do so only under this license by including +// a complete copy of this license with your distribution. If you distribute any portion of the software in compiled or +// object code form, you may only do so under a license that complies with this license. +// (E) The software is licensed "as-is." You bear the risk of using it. The contributors give no express warranties, guarantees, +// or conditions. You may have additional consumer rights under your local laws which this license cannot change. To the +// extent permitted under your local laws, the contributors exclude the implied warranties of merchantability, fitness for a +// particular purpose and non-infringement. + +#endregion // License + +namespace ANX.Framework.NonXNA.SoundSystem +{ + public interface IAudioEmitter + { + float DopplerScale + { + get; + set; + } + + Vector3 Forward + { + get; + set; + } + + Vector3 Position + { + get; + set; + } + + Vector3 Up + { + get; + set; + } + + Vector3 Velocity + { + get; + set; + } + } +} diff --git a/ANX.Framework/NonXNA/SoundSystem/IAudioListener.cs b/ANX.Framework/NonXNA/SoundSystem/IAudioListener.cs new file mode 100644 index 00000000..1b68934b --- /dev/null +++ b/ANX.Framework/NonXNA/SoundSystem/IAudioListener.cs @@ -0,0 +1,78 @@ +using System; + +#region License + +// +// This file is part of the ANX.Framework created by the "ANX.Framework developer group". +// +// This file is released under the Ms-PL license. +// +// +// +// Microsoft Public License (Ms-PL) +// +// This license governs use of the accompanying software. If you use the software, you accept this license. +// If you do not accept the license, do not use the software. +// +// 1.Definitions +// The terms "reproduce," "reproduction," "derivative works," and "distribution" have the same meaning +// here as under U.S. copyright law. +// A "contribution" is the original software, or any additions or changes to the software. +// A "contributor" is any person that distributes its contribution under this license. +// "Licensed patents" are a contributor's patent claims that read directly on its contribution. +// +// 2.Grant of Rights +// (A) Copyright Grant- Subject to the terms of this license, including the license conditions and limitations +// in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free copyright license to +// reproduce its contribution, prepare derivative works of its contribution, and distribute its contribution +// or any derivative works that you create. +// (B) Patent Grant- Subject to the terms of this license, including the license conditions and limitations in +// section 3, each contributor grants you a non-exclusive, worldwide, royalty-free license under its licensed +// patents to make, have made, use, sell, offer for sale, import, and/or otherwise dispose of its contribution +// in the software or derivative works of the contribution in the software. +// +// 3.Conditions and Limitations +// (A) No Trademark License- This license does not grant you rights to use any contributors' name, logo, or trademarks. +// (B) If you bring a patent claim against any contributor over patents that you claim are infringed by the software, your +// patent license from such contributor to the software ends automatically. +// (C) If you distribute any portion of the software, you must retain all copyright, patent, trademark, and attribution +// notices that are present in the software. +// (D) If you distribute any portion of the software in source code form, you may do so only under this license by including +// a complete copy of this license with your distribution. If you distribute any portion of the software in compiled or +// object code form, you may only do so under a license that complies with this license. +// (E) The software is licensed "as-is." You bear the risk of using it. The contributors give no express warranties, guarantees, +// or conditions. You may have additional consumer rights under your local laws which this license cannot change. To the +// extent permitted under your local laws, the contributors exclude the implied warranties of merchantability, fitness for a +// particular purpose and non-infringement. + +#endregion // License + +namespace ANX.Framework.NonXNA.SoundSystem +{ + public interface IAudioListener + { + Vector3 Forward + { + get; + set; + } + + Vector3 Position + { + get; + set; + } + + Vector3 Up + { + get; + set; + } + + Vector3 Velocity + { + get; + set; + } + } +} diff --git a/ANX.Framework/NonXNA/SoundSystem/ISoundEffectInstance.cs b/ANX.Framework/NonXNA/SoundSystem/ISoundEffectInstance.cs index e6ee15eb..ac6a6525 100644 --- a/ANX.Framework/NonXNA/SoundSystem/ISoundEffectInstance.cs +++ b/ANX.Framework/NonXNA/SoundSystem/ISoundEffectInstance.cs @@ -1,4 +1,5 @@ using System; +using ANX.Framework.Audio; #region License @@ -51,5 +52,43 @@ namespace ANX.Framework.NonXNA.SoundSystem { public interface ISoundEffectInstance : IDisposable { + bool IsLooped + { + get; + set; + } + + float Pan + { + get; + set; + } + + float Pitch + { + get; + set; + } + + SoundState State + { + get; + } + + float Volume + { + get; + set; + } + + void Play(); + + void Pause(); + + void Stop(bool immediate); + + void Resume(); + + void Apply3D(AudioListener[] listeners, AudioEmitter emitter); } } diff --git a/ANX.Framework/NonXNA/SoundSystem/ISoundSystemCreator.cs b/ANX.Framework/NonXNA/SoundSystem/ISoundSystemCreator.cs index baa8c97f..8507770c 100644 --- a/ANX.Framework/NonXNA/SoundSystem/ISoundSystemCreator.cs +++ b/ANX.Framework/NonXNA/SoundSystem/ISoundSystemCreator.cs @@ -1,5 +1,4 @@ -using System; -using System.IO; +using System.IO; using ANX.Framework.Audio; using ANX.Framework.NonXNA.SoundSystem; @@ -54,6 +53,34 @@ namespace ANX.Framework.NonXNA { public interface ISoundSystemCreator : ICreator { + float DistanceScale + { + get; + set; + } + + float DopplerScale + { + get; + set; + } + + float MasterVolume + { + get; + set; + } + + float SpeedOfSound + { + get; + set; + } + + IAudioListener CreateAudioListener(); + + IAudioEmitter CreateAudioEmitter(); + ISoundEffect CreateSoundEffect(Stream stream); ISoundEffect CreateSoundEffect(byte[] buffer, int offset, int count, diff --git a/SoundSystems/ANX.SoundSystem.OpenAL/Creator.cs b/SoundSystems/ANX.SoundSystem.OpenAL/Creator.cs index 34adc573..d19c0574 100644 --- a/SoundSystems/ANX.SoundSystem.OpenAL/Creator.cs +++ b/SoundSystems/ANX.SoundSystem.OpenAL/Creator.cs @@ -56,6 +56,7 @@ namespace ANX.SoundSystem.OpenAL public class Creator : ISoundSystemCreator { #region Public + #region Name public string Name { get @@ -63,7 +64,9 @@ namespace ANX.SoundSystem.OpenAL return "OpenAL"; } } + #endregion + #region Priority public int Priority { get @@ -71,7 +74,9 @@ namespace ANX.SoundSystem.OpenAL return 100; } } + #endregion + #region IsSupported public bool IsSupported { get @@ -84,6 +89,63 @@ namespace ANX.SoundSystem.OpenAL } #endregion + #region DistanceScale + public float DistanceScale + { + get + { + throw new NotImplementedException(); + } + set + { + throw new NotImplementedException(); + } + } + #endregion + + #region DopplerScale + public float DopplerScale + { + get + { + throw new NotImplementedException(); + } + set + { + throw new NotImplementedException(); + } + } + #endregion + + #region MasterVolume + public float MasterVolume + { + get + { + throw new NotImplementedException(); + } + set + { + throw new NotImplementedException(); + } + } + #endregion + + #region SpeedOfSound + public float SpeedOfSound + { + get + { + throw new NotImplementedException(); + } + set + { + throw new NotImplementedException(); + } + } + #endregion + #endregion + #region RegisterCreator public void RegisterCreator(AddInSystemFactory factory) { @@ -113,5 +175,19 @@ namespace ANX.SoundSystem.OpenAL throw new NotImplementedException(); } #endregion + + #region CreateAudioListener (TODO) + public IAudioListener CreateAudioListener() + { + throw new NotImplementedException(); + } + #endregion + + #region CreateAudioEmitter (TODO) + public IAudioEmitter CreateAudioEmitter() + { + throw new NotImplementedException(); + } + #endregion } } diff --git a/SoundSystems/ANX.SoundSystem.Windows.XAudio/Creator.cs b/SoundSystems/ANX.SoundSystem.Windows.XAudio/Creator.cs index 73770189..fdac5b08 100644 --- a/SoundSystems/ANX.SoundSystem.Windows.XAudio/Creator.cs +++ b/SoundSystems/ANX.SoundSystem.Windows.XAudio/Creator.cs @@ -6,6 +6,8 @@ using System.Text; using System.IO; using System.Runtime.InteropServices; using ANX.Framework.NonXNA; +using ANX.Framework.NonXNA.SoundSystem; +using ANX.Framework.Audio; #endregion // Using Statements @@ -58,51 +60,112 @@ using ANX.Framework.NonXNA; namespace ANX.SoundSystem.Windows.XAudio { - public class Creator : ISoundSystemCreator - { - - public void RegisterCreator(AddInSystemFactory factory) - { - factory.AddCreator(this); - } - - public string Name - { - get { return "XAudio"; } - } - - public int Priority - { - get { return 10; } - } - - public bool IsSupported - { - get - { - //TODO: this is just a very basic version of test for support - return AddInSystemFactory.Instance.OperatingSystem.Platform == PlatformID.Win32NT; - } - } - - - #region ISoundSystemCreator Member - - public Framework.NonXNA.SoundSystem.ISoundEffect CreateSoundEffect(Stream stream) - { - throw new NotImplementedException(); - } - - public Framework.NonXNA.SoundSystem.ISoundEffect CreateSoundEffect(byte[] buffer, int offset, int count, int sampleRate, Framework.Audio.AudioChannels channels, int loopStart, int loopLength) - { - throw new NotImplementedException(); - } - - public Framework.NonXNA.SoundSystem.ISoundEffectInstance CreateSoundEffectInstance(Framework.Audio.SoundEffect parent) - { - throw new NotImplementedException(); - } - - #endregion + public class Creator : ISoundSystemCreator + { + public void RegisterCreator(AddInSystemFactory factory) + { + factory.AddCreator(this); } + + public string Name + { + get { return "XAudio"; } + } + + public int Priority + { + get { return 10; } + } + + public bool IsSupported + { + get + { + //TODO: this is just a very basic version of test for support + return AddInSystemFactory.Instance.OperatingSystem.Platform == PlatformID.Win32NT; + } + } + + public float DistanceScale + { + get + { + throw new NotImplementedException(); + } + set + { + throw new NotImplementedException(); + } + } + + public float DopplerScale + { + get + { + throw new NotImplementedException(); + } + set + { + throw new NotImplementedException(); + } + } + + public float MasterVolume + { + get + { + throw new NotImplementedException(); + } + set + { + throw new NotImplementedException(); + } + } + + public float SpeedOfSound + { + get + { + throw new NotImplementedException(); + } + set + { + throw new NotImplementedException(); + } + } + + + #region ISoundSystemCreator Member + + public ISoundEffect CreateSoundEffect(Stream stream) + { + throw new NotImplementedException(); + } + + public ISoundEffect CreateSoundEffect(byte[] buffer, int offset, int count, int sampleRate, AudioChannels channels, int loopStart, int loopLength) + { + throw new NotImplementedException(); + } + + public ISoundEffectInstance CreateSoundEffectInstance(SoundEffect parent) + { + throw new NotImplementedException(); + } + + #endregion + + #region CreateAudioListener (TODO) + public IAudioListener CreateAudioListener() + { + throw new NotImplementedException(); + } + #endregion + + #region CreateAudioEmitter (TODO) + public IAudioEmitter CreateAudioEmitter() + { + throw new NotImplementedException(); + } + #endregion + } }