From ad79872631cbb2a2c80efebc0ac8d8ef040e0d39 Mon Sep 17 00:00:00 2001 From: Daniel Weschke Date: Fri, 9 Apr 2021 00:48:15 +0200 Subject: [PATCH] add microphone / source buttons --- controldeck.py | 118 ++++++++++++++++++++++++++++++--------- example/controldeck.conf | 8 +++ 2 files changed, 101 insertions(+), 25 deletions(-) diff --git a/controldeck.py b/controldeck.py index 9176f91..bb8758b 100644 --- a/controldeck.py +++ b/controldeck.py @@ -34,7 +34,7 @@ def process_shell(command): process(command, False) def volume(name): - result = process(f'pamixer --get-volume-human --sink "{name}"') + result = process(f'pamixer --sink "{name}" --get-volume-human') if search("The sink doesn't exit", result): result = "--" elif search("pamixer: command not found", result) is not None: @@ -47,7 +47,7 @@ def volume(name): return result def volume_decrease(name): - result = process(f'pamixer --get-volume-human --sink "{name}" --decrease 5') + result = process(f'pamixer --sink "{name}" --get-volume-human --decrease 5') if search("pamixer: command not found", result) is not None: process(f'pactl set-sink-volume "{name}" -5%') #process(f'pactl set-sink-volume "{name}" -5db') @@ -55,7 +55,7 @@ def volume_decrease(name): return result def volume_increase(name): - result = process(f'pamixer --get-volume-human --sink "{name}" --increase 5') + result = process(f'pamixer --sink "{name}" --get-volume-human --increase 5') if search("pamixer: command not found", result) is not None: process(f'pactl set-sink-volume "{name}" +5%') #process(f'pactl set-sink-volume "{name}" +5db') @@ -63,12 +63,48 @@ def volume_increase(name): return result def volume_mute(name): - result = process(f'pamixer --get-volume-human --sink "{name}" --toggle-mute') + result = process(f'pamixer --sink "{name}" --get-volume-human --toggle-mute') if search("pamixer: command not found", result) is not None: process(f'pactl set-sink-mute "{name}" toggle') result = volume(name) return result +def source_volume(name): + result = process(f'pamixer --source "{name}" --get-volume-human') + if search("The source doesn't exit", result): + result = "--" + elif search("pamixer: command not found", result) is not None: + n = process(r"pactl list sources short | awk '{print $2}'").split() + v = process(r"pactl list sources | grep '^[[:space:]]Volume:' | sed -e 's,.* \([0-9][0-9]*\)%.*,\1,'").split() + if name in n: + result = v[n.index(name)] + '%' + else: + result = '--' + return result + +def source_volume_decrease(name): + result = process(f'pamixer --source "{name}" --get-volume-human --decrease 5') + if search("pamixer: command not found", result) is not None: + process(f'pactl set-source-volume "{name}" -5%') + #process(f'pactl set-source-volume "{name}" -5db') + result = volume(name) + return result + +def source_volume_increase(name): + result = process(f'pamixer --source "{name}" --get-volume-human --increase 5') + if search("pamixer: command not found", result) is not None: + process(f'pactl set-source-volume "{name}" +5%') + #process(f'pactl set-source-volume "{name}" +5db') + result = volume(name) + return result + +def source_volume_mute(name): + result = process(f'pamixer --source "{name}" --get-volume-human --toggle-mute') + if search("pamixer: command not found", result) is not None: + process(f'pactl set-source-mute "{name}" toggle') + result = volume(name) + return result + def config_load(): config = ConfigParser(strict=False) config_file = "controldeck.conf" @@ -189,6 +225,7 @@ class Button(Div): class ButtonSound(Div): div = None + btype = None name = None description = None volume = None @@ -236,7 +273,10 @@ class ButtonSound(Div): icon=self.mute_icon, icon_alt=self.mute_icon_alt, click=self.mute, a=self.div) - self.bmute.state = f'{volume(self.name)}' + if self.btype == 'mic': + self.bmute.state = f'{source_volume(self.name)}' + else: + self.bmute.state = f'{volume(self.name)}' if self.bmute.state == 'muted': if self.bmute.image_alt_element: @@ -247,18 +287,32 @@ class ButtonSound(Div): self.bmute.text = 'unmute' self.add(self.div) - self.volume = Div(text=f"{self.description}: {volume(self.name)}", - classes="text-gray-600 text-center -mt-2", a=self) + if self.btype == 'mic': + self.volume = Div(text=f"{self.description}: {source_volume(self.name)}", + classes="text-gray-600 text-center -mt-2", a=self) + else: + self.volume = Div(text=f"{self.description}: {volume(self.name)}", + classes="text-gray-600 text-center -mt-2", a=self) async def decrease(self, msg): - self.volume.text = f'{self.description}: {volume_decrease(self.name)}' + if self.btype == 'mic': + self.volume.text = f'{self.description}: {source_volume_decrease(self.name)}' + else: + self.volume.text = f'{self.description}: {volume_decrease(self.name)}' async def increase(self, msg): - self.volume.text = f'{self.description}: {volume_increase(self.name)}' + if self.btype == 'mic': + self.volume.text = f'{self.description}: {source_volume_increase(self.name)}' + else: + self.volume.text = f'{self.description}: {volume_increase(self.name)}' async def mute(self, msg): - self.volume.text = f'{self.description}: {volume_mute(self.name)}' - self.bmute.state = f'{volume(self.name)}' + if self.btype == 'mic': + self.volume.text = f'{self.description}: {source_volume_mute(self.name)}' + self.bmute.state = f'{source_volume(self.name)}' + else: + self.volume.text = f'{self.description}: {volume_mute(self.name)}' + self.bmute.state = f'{volume(self.name)}' if self.bmute.state == 'muted': if self.bmute.image_alt_element: self.bmute.components[0] = self.bmute.image_alt_element @@ -307,21 +361,35 @@ def application(request): for i in config.sections(): iname = None # volume buttons - iname = search("^([0-9]*.?)volume", i, flags=IGNORECASE) + iname = search("^([0-9]*.?)(volume|mic)", i, flags=IGNORECASE) if iname is not None: id = iname.group(1)[:-1] # remove dot - tmp = [{'description': i[iname.end(0)+1:], - 'color-bg': config.get(i, 'color-bg', fallback=''), - 'color-fg': config.get(i, 'color-fg', fallback=''), - 'name': config.get(i, 'name', fallback=None), - 'decrease-icon': config.get('default', 'volume-decrease-icon', fallback=''), - 'decrease-image': config.get('default', 'volume-decrease-image', fallback=''), - 'increase-icon': config.get('default', 'volume-increase-icon', fallback=''), - 'increase-image': config.get('default', 'volume-increase-image', fallback=''), - 'mute-icon': config.get('default', 'volume-mute-icon', fallback=''), - 'mute-icon-alt': config.get('default', 'volume-mute-icon-alt', fallback=''), - 'mute-image': config.get('default', 'volume-mute-image', fallback=''), - 'mute-image-alt': config.get('default', 'volume-mute-image-alt', fallback='')}] + if iname.group(2) == 'mic': + tmp = [{'type': iname.group(2), 'description': i[iname.end(0)+1:], + 'color-bg': config.get(i, 'color-bg', fallback=''), + 'color-fg': config.get(i, 'color-fg', fallback=''), + 'name': config.get(i, 'name', fallback=None), + 'decrease-icon': config.get('default', 'mic-decrease-icon', fallback=''), + 'decrease-image': config.get('default', 'mic-decrease-image', fallback=''), + 'increase-icon': config.get('default', 'mic-increase-icon', fallback=''), + 'increase-image': config.get('default', 'mic-increase-image', fallback=''), + 'mute-icon': config.get('default', 'mic-mute-icon', fallback=''), + 'mute-icon-alt': config.get('default', 'mic-mute-icon-alt', fallback=''), + 'mute-image': config.get('default', 'mic-mute-image', fallback=''), + 'mute-image-alt': config.get('default', 'mic-mute-image-alt', fallback='')}] + else: + tmp = [{'type': iname.group(2), 'description': i[iname.end(0)+1:], + 'color-bg': config.get(i, 'color-bg', fallback=''), + 'color-fg': config.get(i, 'color-fg', fallback=''), + 'name': config.get(i, 'name', fallback=None), + 'decrease-icon': config.get('default', 'volume-decrease-icon', fallback=''), + 'decrease-image': config.get('default', 'volume-decrease-image', fallback=''), + 'increase-icon': config.get('default', 'volume-increase-icon', fallback=''), + 'increase-image': config.get('default', 'volume-increase-image', fallback=''), + 'mute-icon': config.get('default', 'volume-mute-icon', fallback=''), + 'mute-icon-alt': config.get('default', 'volume-mute-icon-alt', fallback=''), + 'mute-image': config.get('default', 'volume-mute-image', fallback=''), + 'mute-image-alt': config.get('default', 'volume-mute-image-alt', fallback='')}] try: volume_dict[id] += tmp except KeyError: @@ -356,7 +424,7 @@ def application(request): vars()[var] = Div(classes="flex flex-wrap", a=wp) color_bg = f"background-color:{j['color-bg']};" if ishexcolor(j['color-bg']) else '' color_fg = f"color:{j['color-fg']};" if ishexcolor(j['color-fg']) else '' - ButtonSound(name=j['name'], description=j['description'], + ButtonSound(name=j['name'], description=j['description'], btype=j['type'], color_bg=j['color-bg'], color_fg=j['color-fg'], decrease_icon=j['decrease-icon'], decrease_image=j['decrease-image'], increase_icon=j['increase-icon'], increase_image=j['increase-image'], diff --git a/example/controldeck.conf b/example/controldeck.conf index 7f9bee6..3eb45f0 100644 --- a/example/controldeck.conf +++ b/example/controldeck.conf @@ -57,6 +57,14 @@ # volume-increase-image = # volume-mute-image = # volume-mute-image-alt = +# mic-decrease-icon = fas fa-volume-down +# mic-increase-icon = fas fa-volume-up +# mic-mute-icon = fas fa-microphone-alt +# mic-mute-icon-alt = fas fa-microphone-alt-slash +# mic-decrease-image = +# mic-increase-image = +# mic-mute-image = +# mic-mute-image-alt = [gui] width = 800