-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathWinAudioControl.py
More file actions
80 lines (58 loc) · 2 KB
/
WinAudioControl.py
File metadata and controls
80 lines (58 loc) · 2 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
from __future__ import print_function
import sys
from pycaw import pycaw
from pycaw.pycaw import ISimpleAudioVolume, AudioUtilities
protocolName: str = "wac"
def mainLoop():
while True:
message = getProtocolMessage(sys.stdin.readline().strip())
if message.__eq__("exit"):
sys.exit(0)
elif message.__eq__("list"):
outputAudioInfo()
elif not message.__eq__("null"):
processMessage(message)
def processMessage(message):
volume = ""
processName = ""
hasBeenEnd = False
for c in message[::-1]:
if not hasBeenEnd:
if c.__eq__("|"):
hasBeenEnd = True
else:
volume = c + volume
else:
processName = c + processName
try:
newVol = float(volume)
if processName:
setVolume(processName, newVol)
except:
print(volume + " is no volume")
def setVolume(processName, value):
if value > 1:
value = 1
if value < 0:
value = 0
sessions = AudioUtilities.GetAllSessions()
for session in sessions:
volume = session._ctl.QueryInterface(ISimpleAudioVolume)
if session.Process:
if session.Process.name().__eq__(processName):
volume.SetMasterVolume(value, None)
# Prints all Processes with their volume
def outputAudioInfo():
sessions = pycaw.AudioUtilities.GetAllSessions()
for session in sessions:
volume = session._ctl.QueryInterface(pycaw.ISimpleAudioVolume)
if session.Process:
print(protocolName + "[" + str(session.Process.name()).replace("[", "^<<^").replace("]", "^>>^") + "|"
+ str(volume.GetMasterVolume()) + "]")
def getProtocolMessage(input: str):
if input.startswith(protocolName + "[") and input.endswith("]"):
# Convert placeholder to "[" "]" in message
return input[4:-1].replace("^<<^", "[").replace("^>>^", "]")
return "null"
if __name__ == "__main__":
mainLoop()