/// <summary> /// Returns the device handle based on the present devices and the flags parameter. /// </summary> /// <returns>The device handle based on the present devices and the flags parameter.</returns> /// <param name="flags">Flags.</param> /// <param name = "selectedDevice">The selected device</param> public static DeviceHandle DetectDevice(MusicDriverTypes flags, string selectedDevice) { var result = new DeviceHandle(); var handle = GetDeviceHandle(selectedDevice); var musicType = GetMusicType(handle); switch (musicType) { case MusicType.PCSpeaker: if (flags.HasFlag(MusicDriverTypes.PCSpeaker)) { result = handle; } break; case MusicType.PCjr: if (flags.HasFlag(MusicDriverTypes.PCjr)) { result = handle; } break; case MusicType.AdLib: if (flags.HasFlag(MusicDriverTypes.AdLib)) { result = handle; } break; case MusicType.CMS: if (flags.HasFlag(MusicDriverTypes.CMS)) { result = handle; } break; case MusicType.FMTowns: if (flags.HasFlag(MusicDriverTypes.FMTowns)) { result = handle; } break; case MusicType.Null: result = handle; break; } if (!result.IsValid) { MusicType mt = MusicType.Null; if (flags.HasFlag(MusicDriverTypes.FMTowns)) { mt = MusicType.FMTowns; } else if (flags.HasFlag(MusicDriverTypes.AdLib)) { mt = MusicType.AdLib; } else if (flags.HasFlag(MusicDriverTypes.PCjr)) { mt = MusicType.PCjr; } else if (flags.HasFlag(MusicDriverTypes.PCSpeaker)) { mt = MusicType.PCSpeaker; } var device = MusicManager.GetPlugins().SelectMany(p => p.GetDevices()).FirstOrDefault(d => d.MusicType == mt); if (device != null) { result = device.Handle; } } return(result); }