dotfiles/dot_config/qtile/old_configs/sweenu/util/soundcard.py
eeleater bc838a571d Add dot_config/qtile/.keep
Add dot_config/qtile/__pycache__/.keep
Add dot_config/qtile/__pycache__/bars.cpython-38.pyc
Add dot_config/qtile/__pycache__/bars.cpython-39.pyc
Add dot_config/qtile/__pycache__/colors.cpython-38.pyc
Add dot_config/qtile/__pycache__/colors.cpython-39.pyc
Add dot_config/qtile/__pycache__/config-done.cpython-38.pyc
Add dot_config/qtile/__pycache__/config.cpython-38.pyc
Add dot_config/qtile/__pycache__/config.cpython-39.pyc
Add dot_config/qtile/__pycache__/groups.cpython-38.pyc
Add dot_config/qtile/__pycache__/groups.cpython-39.pyc
Add dot_config/qtile/__pycache__/keys.cpython-38.pyc
Add dot_config/qtile/__pycache__/keys.cpython-39.pyc
Add dot_config/qtile/__pycache__/layouts.cpython-38.pyc
Add dot_config/qtile/__pycache__/layouts.cpython-39.pyc
Add dot_config/qtile/__pycache__/screens.cpython-38.pyc
Add dot_config/qtile/__pycache__/screens.cpython-39.pyc
Add dot_config/qtile/bars.py
Add dot_config/qtile/colors.py
Add dot_config/qtile/config.py
Add dot_config/qtile/groups.py
Add dot_config/qtile/keys.py
Add dot_config/qtile/layouts.py
Add dot_config/qtile/old_configs/.keep
Add dot_config/qtile/old_configs/config.py
Add dot_config/qtile/old_configs/sweenu/.keep
Add dot_config/qtile/old_configs/sweenu/bars.py
Add dot_config/qtile/old_configs/sweenu/colors.py
Add dot_config/qtile/old_configs/sweenu/config.py
Add dot_config/qtile/old_configs/sweenu/keys.py
Add dot_config/qtile/old_configs/sweenu/util/.keep
Add dot_config/qtile/old_configs/sweenu/util/__main__.py
Add dot_config/qtile/old_configs/sweenu/util/backlight.py
Add dot_config/qtile/old_configs/sweenu/util/monitor.py
Add dot_config/qtile/old_configs/sweenu/util/screenshot.py
Add dot_config/qtile/old_configs/sweenu/util/soundcard.py
Add dot_config/qtile/old_configs/sweenu/widgets.py
Add dot_config/qtile/screens.py
Add dot_config/qtile/scripts/.keep
Add dot_config/qtile/scripts/executable_autostart.sh
Add dot_config/qtile/themes/.keep
Add dot_config/qtile/themes/ayu-dark.json
Add dot_config/qtile/themes/dracula.json
Add dot_config/qtile/themes/hopscotch.json
Add dot_config/qtile/themes/material-darker.json
Add dot_config/qtile/themes/nord.json
Add dot_config/qtile/themes/one-dark.json
Add dot_config/qtile/themes/operator.json
Add dot_config/qtile/themes/royal.json
Add dot_config/qtile/themes/seashells.json
Add dot_config/qtile/themes/smyck.json
Add dot_config/qtile/themes/spacedust.json
Add dot_config/qtile/themes/spacegray.json
Add dot_config/qtile/themes/square.json
Add dot_config/qtile/themes/tomorrow-nb.json
2021-08-26 20:17:03 +02:00

79 lines
2.7 KiB
Python

from subprocess import run, PIPE
import parse
from . import qtile_func, notify
class SoundCard():
def __init__(self, primary_card_name):
self.primary_card = primary_card_name
def get_current_sink(self):
cp = run(['pactl', 'info'], stdout=PIPE)
output = cp.stdout.decode('utf-8')
return parse.search('Default Sink: {}\n', output)[0]
def list_sinks(self):
"""Generator that yields for each sink, the sink and card name."""
cp = run(['pactl', 'list', 'sinks'], stdout=PIPE)
output = cp.stdout.decode('utf-8')
for sink in output.split('\nSink'):
sink_name = parse.search('Name: {}\n', sink)[0]
card_name = parse.search('alsa.card_name = "{}"', sink)[0]
yield sink_name, card_name
def set_new_sink(self, sink_card_tuple):
run(['pactl', 'set-default-sink', sink_card_tuple[0]])
def list_sink_inputs(self):
cp = run(['pactl', 'list', 'short', 'sink-inputs'], stdout=PIPE)
output = cp.stdout.decode('utf-8')
return {line.split()[0] for line in output.split('\n') if line}
def move_sink_input(self, name, new_sink):
run(['pactl', 'move-sink-input', name, new_sink])
def get_current_profile(self):
cp = run(['pactl', 'list', 'cards'], stdout=PIPE)
cp = run(['grep', 'Active'], stdout=PIPE, input=cp.stdout)
return 'hdmi' if b'hdmi' in cp.stdout else 'analog'
def set_profile(self, profile):
cmd = f'output:{profile}-stereo+input:analog-stereo'
run(['pactl', 'set-card-profile', self.primary_card, cmd])
@qtile_func
def change_sink(self, direction):
sinks = list(self.list_sinks())
# get the index of the tuple containing the current default sink
current_sink = self.get_current_sink()
for index, tup in enumerate(sinks):
if current_sink in tup:
default_sink_index = index
break
if direction == 'next':
new_sink = sinks[default_sink_index - 1]
elif direction == 'prev':
new_sink = sinks[(default_sink_index + 1) % len(sinks)]
self.set_new_sink(new_sink)
notify('Sound Card', new_sink[1])
# move current sink inputs, if any, to the new default sink
sink_inputs = self.list_sink_inputs()
if sink_inputs:
for sink_input in sink_inputs:
self.move_sink_input(sink_input, new_sink[0])
@qtile_func
def swap_profile(self):
profile = self.get_current_profile()
if profile == 'analog':
self.set_profile('hdmi')
notify('Sound Profile', 'HDMI')
elif profile == 'hdmi':
self.set_profile('analog')
notify('Sound Profile', 'Analog')