Advertisement
Guest User

Untitled

a guest
Dec 6th, 2024
29
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.12 KB | None | 0 0
  1. using NAudio.CoreAudioApi;
  2. using NAudio.CoreAudioApi.Interfaces;
  3. using System;
  4. using System.Threading;
  5.  
  6. namespace VolumeAdjuster
  7. {
  8. class Program
  9. {
  10. private static DateTime lastVolumeChangeTime = DateTime.MinValue;
  11. private static bool volumeAdjusted = false;
  12. private static int channelToAdjust = 0; // 0 for left, 1 for right
  13. private static float adjustmentPercentage = 0.75f; // 25% lower
  14.  
  15. static void Main(string[] args)
  16. {
  17. Console.WriteLine("Which channel should be lower? (0 for left, 1 for right):");
  18. channelToAdjust = Convert.ToInt32(Console.ReadLine());
  19.  
  20. Console.WriteLine("By what percentage should the selected channel be lower? (Enter a value between 0 and 100):");
  21. adjustmentPercentage = 1 - (Convert.ToSingle(Console.ReadLine()) / 100);
  22.  
  23. AdjustVolumeOnUserChange();
  24. }
  25.  
  26. static void AdjustVolumeOnUserChange()
  27. {
  28. var deviceEnumerator = new MMDeviceEnumerator();
  29. var defaultDevice = deviceEnumerator.GetDefaultAudioEndpoint(DataFlow.Render, Role.Multimedia);
  30.  
  31. defaultDevice.AudioEndpointVolume.OnVolumeNotification += AudioEndpointVolume_OnVolumeNotification;
  32.  
  33. Console.WriteLine("Listening for volume changes. Press any key to exit...");
  34. Console.ReadKey(); // Keep the application running
  35. }
  36.  
  37. private static void AudioEndpointVolume_OnVolumeNotification(AudioVolumeNotificationData data)
  38. {
  39. if (volumeAdjusted)
  40. {
  41. return;
  42. }
  43.  
  44. DateTime now = DateTime.Now;
  45.  
  46. // Delay for at least 1 second between changes
  47. if ((now - lastVolumeChangeTime).TotalSeconds < 1)
  48. {
  49. return;
  50. }
  51.  
  52. if (data.Muted == false && data.MasterVolume > 0) // Ensure volume is not muted and greater than zero
  53. {
  54. float currentVolume = data.MasterVolume; // Get the current master volume
  55. float adjustedVolume = currentVolume * adjustmentPercentage; // Adjust the volume
  56.  
  57. // Adjust the selected channel volume
  58. var deviceEnumerator = new MMDeviceEnumerator();
  59. var defaultDevice = deviceEnumerator.GetDefaultAudioEndpoint(DataFlow.Render, Role.Multimedia);
  60. defaultDevice.AudioEndpointVolume.Channels[channelToAdjust].VolumeLevelScalar = adjustedVolume;
  61.  
  62. Console.WriteLine($"Volume changed. Master Volume: {currentVolume * 100}%, Adjusted Channel: {adjustedVolume * 100}%");
  63.  
  64. // Update the last volume change time and set the flag
  65. lastVolumeChangeTime = DateTime.Now;
  66. volumeAdjusted = true;
  67. }
  68.  
  69. // Reset the volumeAdjusted flag after 2 seconds to allow further adjustments
  70. Timer timer = new Timer(ResetVolumeAdjustedFlag, null, 2000, Timeout.Infinite);
  71. }
  72.  
  73. private static void ResetVolumeAdjustedFlag(object state)
  74. {
  75. volumeAdjusted = false;
  76. }
  77. }
  78. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement