/// <summary> /// Initializes a new instance of the <see cref="XAudio2"/> class. /// </summary> /// <param name="flags">Specify a Debug or Normal XAudio2 instance.</param> /// <param name="processorSpecifier">The processor specifier.</param> public XAudio2(XAudio2Flags flags, ProcessorSpecifier processorSpecifier) : base(IntPtr.Zero) { #if !DIRECTX11_1 Guid clsid = (flags == XAudio2Flags.DebugEngine) ? CLSID_XAudio2_Debug : CLSID_XAudio2; // Initialize for multithreaded //var result = Utilities.CoInitializeEx(IntPtr.Zero, Utilities.CoInit.MultiThreaded); //result.CheckError(); Utilities.CreateComInstance(clsid, Utilities.CLSCTX.ClsctxInprocServer, Utilities.GetGuidFromType(typeof(XAudio2)), this); // Initialize XAudio2 Initialize(0, processorSpecifier); #else XAudio2Functions.XAudio2Create(this, 0, (int)processorSpecifier); #endif // Register engine callback engineCallbackImpl = new EngineCallbackImpl(this); engineShadowPtr = EngineShadow.ToIntPtr(engineCallbackImpl); RegisterForCallbacks_(engineShadowPtr); }
/// <summary> /// Initializes a new instance of the <see cref="XAudio2" /> class. /// </summary> /// <param name="flags">Specify a Debug or Normal XAudio2 instance.</param> /// <param name="processorSpecifier">The processor specifier.</param> /// <param name="version">The version to use (auto, 2.7 or 2.8).</param> /// <exception cref="System.InvalidOperationException">XAudio2 version [ + version + ] is not installed</exception> public XAudio2(XAudio2Flags flags, ProcessorSpecifier processorSpecifier, XAudio2Version version = XAudio2Version.Default) : base(IntPtr.Zero) { #if DESKTOP_APP Guid clsid = ((int)flags == 1) ? CLSID_XAudio27_Debug : CLSID_XAudio27; if ((version == XAudio2Version.Default || version == XAudio2Version.Version27) && Utilities.TryCreateComInstance(clsid, Utilities.CLSCTX.ClsctxInprocServer, IID_IXAudio2, this)) { SetupVtblFor27(); // Initialize XAudio2 Initialize(0, processorSpecifier); Version = XAudio2Version.Version27; } else #endif if (version == XAudio2Version.Default || version == XAudio2Version.Version28) { XAudio2Functions.XAudio2Create(this, 0, (int)processorSpecifier); Version = XAudio2Version.Version28; } else { throw new InvalidOperationException("XAudio2 version [" + version + "] is not installed"); } // Register engine callback engineCallbackImpl = new EngineCallbackImpl(this); engineShadowPtr = EngineShadow.ToIntPtr(engineCallbackImpl); RegisterForCallbacks_(engineShadowPtr); }
/// <summary> /// Initializes a new instance of the <see cref="XAudio2" /> class. /// </summary> /// <param name="flags">Specify a Debug or Normal XAudio2 instance.</param> /// <param name="processorSpecifier">The processor specifier.</param> /// <param name="requestedVersion">The requestedVersion to use (auto, 2.7 or 2.8).</param> /// <exception cref="System.InvalidOperationException">XAudio2 requestedVersion [ + requestedVersion + ] is not installed</exception> public XAudio2(XAudio2Flags flags, ProcessorSpecifier processorSpecifier, XAudio2Version requestedVersion = XAudio2Version.Default) : base(IntPtr.Zero) { var tryVersions = requestedVersion == XAudio2Version.Default ? new[] { XAudio2Version.Version29, XAudio2Version.Version28, XAudio2Version.Version27 } : new[] { requestedVersion }; foreach (var tryVersion in tryVersions) { switch (tryVersion) { #if !WINDOWS_UWP case XAudio2Version.Version27: Guid clsid = ((int)flags == 1) ? CLSID_XAudio27_Debug : CLSID_XAudio27; if ((requestedVersion == XAudio2Version.Default || requestedVersion == XAudio2Version.Version27) && Utilities.TryCreateComInstance(clsid, Utilities.CLSCTX.ClsctxInprocServer, IID_IXAudio2, this)) { SetupVtblFor27(); // Initialize XAudio2 Initialize(0, processorSpecifier); Version = XAudio2Version.Version27; } break; #endif case XAudio2Version.Version28: try { XAudio28Functions.XAudio2Create(this, 0, (int)processorSpecifier); Version = XAudio2Version.Version28; } catch (DllNotFoundException) { } break; case XAudio2Version.Version29: try { XAudio29Functions.XAudio2Create(this, 0, (int)processorSpecifier); Version = XAudio2Version.Version29; } catch (DllNotFoundException) { } break; } // Early exit if we found a requestedVersion if (Version != XAudio2Version.Default) { break; } } if (Version == XAudio2Version.Default) { throw new DllNotFoundException(string.Format("Unable to find XAudio2 dlls for requested versions [{0}], not installed on this machine", requestedVersion == XAudio2Version.Default ? "2.7, 2.8 or 2.9" : requestedVersion.ToString())); } // Register engine callback engineCallbackImpl = new EngineCallbackImpl(this); engineShadowPtr = EngineShadow.ToIntPtr(engineCallbackImpl); RegisterForCallbacks(engineCallbackImpl); }
/// <summary> /// Constructor /// </summary> internal GameAudio() { XAudio2Flags audio2Flags = XAudio2Flags.None; #if DEBUG audio2Flags = XAudio2Flags.DebugEngine; #endif this.device = new XAudio2(audio2Flags, ProcessorSpecifier.DefaultProcessor); #if DEBUG DebugConfiguration debugConfiguration = new DebugConfiguration() { TraceMask = (int)(LogType.Errors | LogType.Warnings), BreakMask = (int)(LogType.Errors), }; this.device.SetDebugConfiguration(debugConfiguration, IntPtr.Zero); #endif this.MasteringVoice = new MasteringVoice(this.device); this.MasteringVoice.GetChannelMask(out int channelMask); this.Speakers = (Speakers)channelMask; this.MasteringVoice.SetVolume(this.MasterVolume); }
public XAudio2Engine() { #if DEBUG XAudio2Flags flags = XAudio2Flags.DebugEngine; #else XAudio2Flags flags = XAudio2Flags.None; #endif XAudio2 = new XAudio2(flags, ProcessorSpecifier.DefaultProcessor); #if DEBUG DebugConfiguration debugConfig = new DebugConfiguration(); debugConfig.BreakMask = (int)LogType.Warnings; debugConfig.TraceMask = (int) (LogType.Errors | LogType.Warnings | LogType.Information | LogType.Detail | LogType.ApiCalls | LogType.FunctionCalls | LogType.Timing | LogType.Locks | LogType.Memory | LogType.Streaming); debugConfig.LogThreadID = new RawBool(true); debugConfig.LogFileline = new RawBool(true); debugConfig.LogFunctionName = new RawBool(true); debugConfig.LogTiming = new RawBool(true); XAudio2.SetDebugConfiguration(debugConfig, IntPtr.Zero); #endif XAudio2.CriticalError += (s, e) => Console.WriteLine("XAudio2: Critical Error. " + e.ToString()); MasteringVoice _masteringVoice = new MasteringVoice(XAudio2); X3DAudio = new X3DAudio(SharpDX.Multimedia.Speakers.Stereo); ResourceFactory = new XAudio2ResourceFactory(this); _x3dListener = new Listener(); _x3dListener.OrientFront = new RawVector3(0, 0, 1); _x3dListener.OrientTop = new RawVector3(0, 1, 0); }
public IXAudio2(XAudio2Flags flags, ProcessorSpecifier processorSpecifier, XAudio2Version requestedVersion = XAudio2Version.Default) : base(IntPtr.Zero) { var tryVersions = requestedVersion == XAudio2Version.Default ? new[] { XAudio2Version.Version29, XAudio2Version.Version28, XAudio2Version.Version27 } : new[] { requestedVersion }; foreach (var tryVersion in tryVersions) { switch (tryVersion) { case XAudio2Version.Version27: if (PlatformDetection.IsUAP) { throw new NotSupportedException("XAudio 2.7 is not supported on UAP platform"); } Guid clsid = ((int)flags == 1) ? CLSID_XAudio27_Debug : CLSID_XAudio27; if ((requestedVersion == XAudio2Version.Default || requestedVersion == XAudio2Version.Version27) && ComUtilities.TryCreateComInstance(clsid, ComContext.InprocServer, IID_IXAudio27, this)) { SetupVtblFor27(); // Initialize XAudio2 Initialize(0, processorSpecifier); Version = XAudio2Version.Version27; } break; case XAudio2Version.Version28: try { NativePointer = XAudio28.XAudio2Create(0, processorSpecifier); Version = XAudio2Version.Version28; } catch (DllNotFoundException) { } break; case XAudio2Version.Version29: try { NativePointer = XAudio29.XAudio2Create(0, processorSpecifier); Version = XAudio2Version.Version29; } catch (DllNotFoundException) { } break; } // Early exit if we found a requestedVersion if (Version != XAudio2Version.Default) { break; } } if (Version == XAudio2Version.Default) { var versionStr = requestedVersion == XAudio2Version.Default ? "2.7, 2.8 or 2.9" : requestedVersion.ToString(); throw new DllNotFoundException($"Unable to find XAudio2 dlls for requested versions [{versionStr}], not installed on this machine"); } IXAudio2Voice.Version = Version; // Register engine callback _engineCallbackImpl = new EngineCallbackImpl(this); RegisterForCallbacks(_engineCallbackImpl); }
/// <summary> /// Initializes a new instance of the <see cref="XAudio2" /> class. /// </summary> /// <param name="flags">Specify a Debug or Normal XAudio2 instance.</param> /// <param name="processorSpecifier">The processor specifier.</param> /// <param name="requestedVersion">The requestedVersion to use (auto, 2.7 or 2.8).</param> /// <exception cref="System.InvalidOperationException">XAudio2 requestedVersion [ + requestedVersion + ] is not installed</exception> public XAudio2(XAudio2Flags flags, ProcessorSpecifier processorSpecifier, XAudio2Version requestedVersion = XAudio2Version.Default) : base(IntPtr.Zero) { var tryVersions = requestedVersion == XAudio2Version.Default ? new[] { XAudio2Version.Version29, XAudio2Version.Version28, XAudio2Version.Version27 } : new[] { requestedVersion }; foreach (var tryVersion in tryVersions) { switch (tryVersion) { #if DESKTOP_APP case XAudio2Version.Version27: Guid clsid = ((int)flags == 1) ? CLSID_XAudio27_Debug : CLSID_XAudio27; if ((requestedVersion == XAudio2Version.Default || requestedVersion == XAudio2Version.Version27) && Utilities.TryCreateComInstance(clsid, Utilities.CLSCTX.ClsctxInprocServer, IID_IXAudio2, this)) { SetupVtblFor27(); // Initialize XAudio2 Initialize(0, processorSpecifier); Version = XAudio2Version.Version27; } break; #endif case XAudio2Version.Version28: try { XAudio28Functions.XAudio2Create(this, 0, (int)processorSpecifier); Version = XAudio2Version.Version28; } catch (DllNotFoundException) { } break; #if STORE_APP_10 case XAudio2Version.Version29: try { XAudio29Functions.XAudio2Create(this, 0, (int)processorSpecifier); Version = XAudio2Version.Version29; } catch (DllNotFoundException) { } break; #endif } // Early exit if we found a requestedVersion if (Version != XAudio2Version.Default) { break; } } if (Version == XAudio2Version.Default) { throw new DllNotFoundException(string.Format("Unable to find XAudio2 dlls for requested versions [{0}], not installed on this machine", requestedVersion == XAudio2Version.Default ? "2.7, 2.8 or 2.9" : requestedVersion.ToString())); } // Register engine callback engineCallbackImpl = new EngineCallbackImpl(this); engineShadowPtr = EngineShadow.ToIntPtr(engineCallbackImpl); RegisterForCallbacks_(engineShadowPtr); }