| 1 | #Requires AutoHotkey v2.0+ |
| 2 | #SingleInstance Force |
| 3 | |
| 4 | ; Define volume levels |
| 5 | volume_levels := [0, 2, 5, 8, 12, 20, 30, 40, 50, 60, 70, 80, 90, 100] |
| 6 | |
| 7 | current_volume := Round(SoundGetVolume()) |
| 8 | |
| 9 | ; Find the closest volume level index |
| 10 | closest_idx := 1 |
| 11 | min_diff := Abs(volume_levels[1] - current_volume) |
| 12 | |
| 13 | for idx, level in volume_levels { |
| 14 | diff := Abs(level - current_volume) |
| 15 | if (diff < min_diff) { |
| 16 | min_diff := diff |
| 17 | closest_idx := idx |
| 18 | } |
| 19 | } |
| 20 | |
| 21 | ; Calculate new index |
| 22 | new_idx := closest_idx - 1 |
| 23 | |
| 24 | ; Ensure we don't go below minimum |
| 25 | if (new_idx < 1) |
| 26 | new_idx := 1 |
| 27 | |
| 28 | ; Set new volume |
| 29 | new_volume := volume_levels[new_idx] |
| 30 | SoundSetVolume new_volume |
| 31 | ToolTip("Volume " new_volume "%") |
| 32 | SetTimer () => ToolTip(), -500 |
| 33 |