SystemAudioVolumeInterop.cs 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. using NAudio.CoreAudioApi;
  2. namespace SinMaiLauncher.Interops
  3. {
  4. public class SystemAudioVolumeInterop
  5. {
  6. /// <summary>
  7. /// 设置系统音量(0-100)
  8. /// </summary>
  9. /// <param name="value">音量百分比,范围 0-100</param>
  10. /// <returns>是否成功</returns>
  11. public static bool SetVolume(float value)
  12. {
  13. try
  14. {
  15. var setValue = value / 100f;
  16. // 创建 MMDeviceEnumerator 来访问音频设备
  17. using var enumerator = new MMDeviceEnumerator();
  18. // 获取默认音频输出设备
  19. using var device = enumerator.GetDefaultAudioEndpoint(DataFlow.Render, Role.Multimedia);
  20. // 获取 AudioEndpointVolume 对象
  21. using var volume = device.AudioEndpointVolume;
  22. volume.MasterVolumeLevelScalar = setValue;
  23. return true;
  24. }
  25. catch (Exception)
  26. {
  27. return false;
  28. }
  29. }
  30. /// <summary>
  31. /// 获取当前系统音量(0-100)
  32. /// </summary>
  33. /// <returns>音量百分比,失败时返回 -1</returns>
  34. public static float? GetVolume()
  35. {
  36. try
  37. {
  38. // 创建 MMDeviceEnumerator 来访问音频设备
  39. using var enumerator = new MMDeviceEnumerator();
  40. // 获取默认音频输出设备
  41. using var device = enumerator.GetDefaultAudioEndpoint(DataFlow.Render, Role.Multimedia);
  42. // 获取 AudioEndpointVolume 对象
  43. using var volume = device.AudioEndpointVolume;
  44. // 获取当前音量 (0.0f 到 1.0f)
  45. var currentVolume = volume.MasterVolumeLevelScalar;
  46. return (int)(currentVolume * 100);
  47. }
  48. catch (Exception e)
  49. {
  50. return null;
  51. }
  52. }
  53. }
  54. }