first commit

This commit is contained in:
2026-01-02 20:26:44 +03:00
commit 51ed78078b
14 changed files with 841 additions and 0 deletions

70
sound_level.py Normal file
View File

@@ -0,0 +1,70 @@
"""
Volume control module.
Regulates system volume on a scale from 1 to 10.
"""
import subprocess
import re
NUMBER_MAP = {
"один": 1, "раз": 1, "два": 2, "три": 3, "четыре": 4,
"пять": 5, "шесть": 6, "семь": 7, "восемь": 8, "девять": 9, "десять": 10
}
def set_volume(level: int) -> bool:
"""
Set system volume (1-10 corresponding to 10%-100%).
Args:
level: Integer between 1 and 10
Returns:
True if successful, False otherwise
"""
if not isinstance(level, int):
print(f"❌ Ошибка: Уровень громкости должен быть целым числом, получено {type(level)}")
return False
if level < 1:
level = 1
elif level > 10:
level = 10
percentage = level * 10
try:
# Set volume using amixer
# -q: quiet
# sset: set simple control
# Master: control name
# %: percentage
cmd = ["amixer", "-q", "sset", "Master", f"{percentage}%"]
subprocess.run(cmd, check=True)
print(f"🔊 Громкость установлена на {level} ({percentage}%)")
return True
except subprocess.CalledProcessError as e:
print(f"❌ Ошибка при установке громкости: {e}")
return False
except Exception as e:
print(f"❌ Неизвестная ошибка громкости: {e}")
return False
def parse_volume_text(text: str) -> int | None:
"""
Parse volume level from text (digits or Russian words).
Returns integer 1-10 or None if not found.
"""
text = text.lower()
# 1. Check for digits
num_match = re.search(r'\b(10|[1-9])\b', text)
if num_match:
return int(num_match.group())
# 2. Check for words
for word, value in NUMBER_MAP.items():
if word in text:
return value
return None