from pycaw.pycaw import AudioUtilities from pprint import pprint import serial import serial.tools.list_ports import time def main(): print ("Starting Arduino Mixer...\n") # Get audio sessions sessions = AudioUtilities.GetAllSessions() print (str(len(sessions)) + " audio sessions found:") for session in sessions: print (" " + str(session)) # Init serial connection ports = serial.tools.list_ports.comports() if len(ports) == 0: print("\nNo Serial ports Available") exit() else: print ("\nSerial ports Available:") for port, desc, hwid in sorted(ports): print(" {}: {} [{}]".format(port, desc, hwid)) board = serial.Serial() board.baudrate = 115200 board.port = input("\nSelect COM port: ") board.open() print ("Waiting for arduino...") time.sleep(5) board.write("".encode("utf-8")) currentProgram = 0 line = [] newData = False recvInProgress = False startMarker = '60' # < endMarker = '62' # > while True: for c in board.read(): if c == 62: recvInProgress = False newData = True if recvInProgress == True: line.append(chr(c)) if c == 60: recvInProgress = True break if newData == True: dataArray = ''.join(line).split(',') command = dataArray[0] if len(dataArray) > 1: data = dataArray[1] # Process data # TODO: Listen for programs being added, then send this again if command == "COUNT": board.write(("").encode()) elif command == "SWITCH": currentProgram = int(data) program = sessions[currentProgram] volume = program.SimpleAudioVolume.GetMasterVolume() if program.DisplayName == "@%SystemRoot%\System32\AudioSrv.Dll,-202": name = "Systeem" # TODO: This line is being overwritten somehow elif session.Process and session.Process.name() == "firefox.exe": name = "Firefox" elif program.DisplayName != "": name = str(program.DisplayName) else: name = str(session.Process and session.Process.name()) board.write(("").encode()) board.write(("").encode()) elif command == "SETVOL": audio = sessions[currentProgram].SimpleAudioVolume audio.SetMasterVolume(float(data) / 100, None) volume = audio.GetMasterVolume() board.write(("").encode()) line = [] newData = False if __name__ == "__main__": main()