private void LoadX3DAudio() { _hModule = Win32.NativeMethods.LoadLibrary("X3DAudio1_7.dll"); if (_hModule == IntPtr.Zero) { _hModule = Win32.NativeMethods.LoadLibrary("X3DAudio2_8.dll"); } if (_hModule == IntPtr.Zero) { _hModule = Win32.NativeMethods.LoadLibrary("XAudio2_8.dll"); } if (_hModule == IntPtr.Zero) { _hModule = Win32.NativeMethods.LoadLibrary("XAudio2_9.dll"); } if (_hModule == IntPtr.Zero) { throw new NotSupportedException("No supported X3DAudio version could be found."); } _initializeDelegate = GetUnmanagedProc <X3DAudioInitializeDelegate>(_hModule, "X3DAudioInitialize"); _calculateDelegate = GetUnmanagedProc <X3DAudioCalculateDelegate>(_hModule, "X3DAudioCalculate"); if (_initializeDelegate == null || _calculateDelegate == null) { _initializeDelegate = null; _calculateDelegate = null; Win32.NativeMethods.FreeLibrary(_hModule); throw new Exception("Could not load X3DAudio functions."); } }
/// <summary> /// Initializes a new instance of the <see cref="X3DAudio"/> class. /// </summary> /// <param name="speakers">The speakers config.</param> /// <param name="speedOfSound">The speed of sound.</param> /// <param name="requestVersion">The request requestVersion.</param> /// /// <msdn-id>microsoft.directx_sdk.x3daudio.x3daudioinitialize</msdn-id> /// /// <unmanaged>void X3DAudioInitialize([In] SPEAKER_FLAGS SpeakerChannelMask,[In] float SpeedOfSound,[Out] X3DAUDIOHANDLE* Instance)</unmanaged> /// /// <unmanaged-short>X3DAudioInitialize</unmanaged-short> public X3DAudio(Speakers speakers, float speedOfSound, X3DAudioVersion requestVersion = X3DAudioVersion.Default) { var tryVersions = requestVersion == X3DAudioVersion.Default ? new [] { X3DAudioVersion.Version29, X3DAudioVersion.Version28, X3DAudioVersion.Version17 } : new[] { requestVersion }; foreach (var tryVersion in tryVersions) { switch (tryVersion) { #if DESKTOP_APP case X3DAudioVersion.Version17: try { X3DAudio17.X3DAudioInitialize(speakers, speedOfSound, out handle); version = X3DAudioVersion.Version17; calculateDelegate = X3DAudio17.X3DAudioCalculate; } catch (DllNotFoundException) {} break; #endif case X3DAudioVersion.Version28: try { X3DAudio28.X3DAudioInitialize(speakers, speedOfSound, out handle); version = X3DAudioVersion.Version28; calculateDelegate = X3DAudio28.X3DAudioCalculate; } catch (DllNotFoundException) { } break; #if STORE_APP_10 case X3DAudioVersion.Version29: try { X3DAudio29.X3DAudioInitialize(speakers, speedOfSound, out handle); version = X3DAudioVersion.Version29; calculateDelegate = X3DAudio29.X3DAudioCalculate; } catch (DllNotFoundException) { } break; #endif } if (version != X3DAudioVersion.Default) { break; } } if (version == X3DAudioVersion.Default) { throw new DllNotFoundException(string.Format("Unable to find X3DAudio dlls for the following requested version [{0}]", string.Join(",", tryVersions))); } }
/// <summary> /// Disposes the <see cref="X3DAudioCore" /> instance. /// </summary> public void Dispose() { _calculateDelegate = null; _initializeDelegate = null; if (_hModule != IntPtr.Zero) { Win32.NativeMethods.FreeLibrary(_hModule); _hModule = IntPtr.Zero; } }
/// <summary> /// Initializes a new instance of the <see cref="X3DAudio"/> class. /// </summary> /// <param name="speakers">The speakers config.</param> /// <param name="speedOfSound">The speed of sound.</param> /// <param name="requestVersion">The request requestVersion.</param> /// /// <msdn-id>microsoft.directx_sdk.x3daudio.x3daudioinitialize</msdn-id> /// /// <unmanaged>void X3DAudioInitialize([In] SPEAKER_FLAGS SpeakerChannelMask,[In] float SpeedOfSound,[Out] X3DAUDIOHANDLE* Instance)</unmanaged> /// /// <unmanaged-short>X3DAudioInitialize</unmanaged-short> public X3DAudio(Speakers speakers, float speedOfSound, X3DAudioVersion requestVersion = X3DAudioVersion.Default) { var tryVersions = requestVersion == X3DAudioVersion.Default ? new [] {X3DAudioVersion.Version29, X3DAudioVersion.Version28, X3DAudioVersion.Version17} : new[] {requestVersion}; foreach(var tryVersion in tryVersions) { switch(tryVersion) { #if DESKTOP_APP case X3DAudioVersion.Version17: try { X3DAudio17.X3DAudioInitialize(speakers, speedOfSound, out handle); version = X3DAudioVersion.Version17; calculateDelegate = X3DAudio17.X3DAudioCalculate; } catch (DllNotFoundException) {} break; #endif case X3DAudioVersion.Version28: try { X3DAudio28.X3DAudioInitialize(speakers, speedOfSound, out handle); version = X3DAudioVersion.Version28; calculateDelegate = X3DAudio28.X3DAudioCalculate; } catch (DllNotFoundException) { } break; #if STORE_APP_10 case X3DAudioVersion.Version29: try { X3DAudio29.X3DAudioInitialize(speakers, speedOfSound, out handle); version = X3DAudioVersion.Version29; calculateDelegate = X3DAudio29.X3DAudioCalculate; } catch (DllNotFoundException) { } break; #endif } if(version != X3DAudioVersion.Default) { break; } } if(version == X3DAudioVersion.Default) { throw new DllNotFoundException(string.Format("Unable to find X3DAudio dlls for the following requested version [{0}]", string.Join(",", tryVersions))); } }