private void InitializeOutputDevices()
        {
            OutputList.Clear();

            if (ShowAdvancedControls)
                foreach (var device in DirectSoundOut.Devices)
                {
                    OutputList.Add(new OutputDeviceModel(device));
                }

            if (ShowAdvancedControls)
                for (int n = 0; n < WaveOut.DeviceCount; n++)
                {
                    var capabilities = WaveOut.GetCapabilities(n);
                    OutputList.Add(new OutputDeviceModel(n, capabilities));
                }

            foreach (var device in MMDevices.deviceEnum.EnumerateAudioEndPoints(DataFlow.Render, DeviceState.Active).ToList())
            {
                var model = new OutputDeviceModel(device);
                OutputList.Add(model);
            }
        }
 public static IWavePlayer InstanciateWavePlayerForOutput(OutputDeviceModel SelectedOutput, int desiredLatency, AudioClientShareMode shareMode, bool useWaveEvent)
 {
     switch (SelectedOutput.Provider)
     {
         case DeviceProvider.Wave:
             {
                 if (useWaveEvent)
                     return new WaveOutEvent() { DeviceNumber = SelectedOutput.WavDeviceNumber, DesiredLatency = desiredLatency };
                 else
                     return new WaveOut() { DeviceNumber = SelectedOutput.WavDeviceNumber, DesiredLatency = desiredLatency };
             }
         case DeviceProvider.DirectSound:
             return new DirectSoundOut(SelectedOutput.DirectSoundDeviceInfo.Guid, desiredLatency);
         case DeviceProvider.Wasapi:
             return new WasapiOut(SelectedOutput.MMDevice, shareMode, useEventSync, desiredLatency);
     }
     return new DirectSoundOut(DirectSoundOut.DSDEVID_DefaultVoicePlayback, desiredLatency);
 }