private void SetAudioDevice(int deviceIndex)
        {
            if (streamSlots != null)
            {
                foreach (var s in streamSlots.Values)
                {
                    s.TemporaryShutdown();
                }
            }
            if (freeVoices != null)
            {
                foreach (var v in freeVoices)
                {
                    v.TemporaryShutdown();
                }
            }
            if (usedVoices != null)
            {
                foreach (var v in usedVoices)
                {
                    v.TemporaryShutdown();
                }
            }

            if (masteringVoice != null)
            {
                masteringVoice.Dispose();
                X3DInstance.Dispose();
                masteringVoice = null;
                X3DInstance    = null;
            }

            masteringVoice = new MasteringVoice(AudioDevice, XAudio2.DefaultChannels, XAudio2.DefaultSampleRate, deviceIndex);
            DeviceDetails  = AudioDevice.GetDeviceDetails(deviceIndex);
            X3DInstance    = new X3DAudio(DeviceDetails.OutputFormat.ChannelMask, 340f);

            if (streamSlots != null)
            {
                foreach (var s in streamSlots.Values)
                {
                    s.ShutdownRevival();
                }
            }
            if (freeVoices != null)
            {
                foreach (var v in freeVoices)
                {
                    v.ShutdownRevival();
                }
            }
            if (usedVoices != null)
            {
                foreach (var v in usedVoices)
                {
                    v.ShutdownRevival();
                }
            }
        }