3 #if SILICONSTUDIO_PLATFORM_WINDOWS
7 using SharpDX.MediaFoundation;
8 using SharpDX.Multimedia;
9 using SharpDX.X3DAudio;
10 using SharpDX.XAudio2;
12 namespace SiliconStudio.
Paradox.Audio
14 public partial class AudioEngine
16 internal XAudio2 XAudio2;
18 internal X3DAudio X3DAudio;
20 internal MasteringVoice MasteringVoice;
22 private static bool mediaEngineStarted;
24 #region Implementation of the IDisposable Interface
26 private void DestroyImpl()
28 if (MasteringVoice != null)
30 MasteringVoice.Dispose();
31 MasteringVoice = null;
41 PlatformSpecificDispose();
43 if (mediaEngineStarted && nbOfAudioEngineInstances == 0)
45 MediaManager.Shutdown();
46 mediaEngineStarted =
false;
52 #region Audio Hardware Selection
56 private void AudioEngineImpl(AudioDevice device)
60 XAudio2 =
new XAudio2();
61 X3DAudio =
new X3DAudio(Speakers.Stereo);
63 XAudio2.CriticalError += XAudio2OnCriticalError;
65 MasteringVoice =
new MasteringVoice(XAudio2, 2, (
int)AudioSampleRate);
67 if (!mediaEngineStarted)
70 MediaFactory.Startup(0x20070, 0);
71 mediaEngineStarted =
true;
74 PlatformSpecificInit();
76 catch (DllNotFoundException exp)
78 State = AudioEngineState.Invalidated;
79 Logger.Warning(
"One or more of the XAudio and MediaFoundation dlls were not found on the computer. " +
80 "Audio functionalities will not fully work for the current game instance." +
81 "To fix the problem install or repair the installation of XAudio and Media Foundation. [Exception details: {0}]", exp.Message);
83 catch (SharpDX.SharpDXException exp)
85 State = AudioEngineState.Invalidated;
87 if (exp.ResultCode == XAudioErrorCodes.ErrorInvalidCall)
89 Logger.Warning(
"Initialization of the audio engine failed. This may be due to missing audio hardware or missing audio outputs. [Exception details: {0}]", exp.Message);
91 else if (exp.ResultCode == 0x8007007E)
93 Logger.Warning(
"Audio engine initialization failed. This is probably due to missing dll on your computer. " +
94 "Please check that XAudio2 and MediaFoundation are correctly installed.[Exception details: {0}]", exp.Message);
98 Logger.Warning(
"Audio engine initialization failed. [Exception details: {0}]", exp.Message);
103 private void XAudio2OnCriticalError(
object sender, ErrorEventArgs errorEventArgs)
105 Logger.Error(
"XAudio2 critical error {0} ", errorEventArgs.ErrorCode);
110 private void PauseAudioPlatformSpecific()
115 private void ResumeAudioPlatformSpecific()