add_music_functions #6

Merged
Dmitrium12 merged 3 commits from add_music_functions into master 2024-05-09 16:36:27 +07:00
3 changed files with 72 additions and 2 deletions
Showing only changes of commit 789f4f38d5 - Show all commits
+3 -2
View File
@@ -11,7 +11,7 @@ from fuzzywuzzy import fuzz
from pvrecorder import PvRecorder
from data import config
from modules import HomeAssistant
from modules import HomeAssistant, MediaPlayerController
from utils import download_models, execute_cmd, play
@@ -25,6 +25,7 @@ class Jarvis:
self.CDIR = os.getcwd()
self.VA_CMD_LIST = yaml.safe_load(open('data/commands.yaml', encoding='utf8'))
self.home_assistant = HomeAssistant.HomeAssistant()
self.media_player_controller = MediaPlayerController.MediaPlayerController()
self.porcupine = pvporcupine.create(
access_key=config.PICOVOICE_TOKEN,
keywords=['jarvis'],
@@ -73,7 +74,7 @@ class Jarvis:
:return: bool - распознана или нет команда
"""
print(f"Распознано: {voice}")
for x in config.VA_ALIAS + config.VA_TBR:
for x in config.VA_ALIAS:
voice = voice.replace(x, "").strip()
rc = {'cmd': '', 'percent': 0}
for c, v in self.VA_CMD_LIST.items():
+61
View File
@@ -0,0 +1,61 @@
import platform
import subprocess
class MediaPlayerController:
def __init__(self):
self.os_type = platform.system()
def play_pause(self):
if self.os_type == 'Windows':
self._windows_play_pause()
elif self.os_type == 'Linux':
self._linux_control("play-pause")
def stop(self):
if self.os_type == 'Windows':
self._windows_control("stop")
elif self.os_type == 'Linux':
self._linux_control("stop")
def next_track(self):
if self.os_type == 'Windows':
self._windows_control("next")
elif self.os_type == 'Linux':
self._linux_control("next")
def previous_track(self):
if self.os_type == 'Windows':
self._windows_control("previous")
elif self.os_type == 'Linux':
self._linux_control("previous")
@staticmethod
def _windows_play_pause():
from pycaw.pycaw import AudioUtilities
sessions = AudioUtilities.GetAllSessions()
for session in sessions:
if session.Process and session.AudioSessionControl:
control = session.AudioSessionControl
if control and control.State == 1:
control.Stop()
else:
control.Play()
@staticmethod
def _windows_control(action):
from pycaw.pycaw import AudioUtilities, IAudioSessionControl2
sessions = AudioUtilities.GetAllSessions()
for session in sessions:
if session.Process and isinstance(session.ControlInterface, IAudioSessionControl2):
if action == "stop":
session.SimpleAudioVolume.SetMute(1, None)
elif action == "next" or action == "previous":
pass
@staticmethod
def _linux_control(command):
try:
subprocess.run(["playerctl", command], check=True)
except subprocess.CalledProcessError as e:
print(f"Failed to {command}: {e}")
+8
View File
@@ -16,6 +16,14 @@ def execute_cmd(self, cmd: str, recognized_phrase: str, voice: str) -> None:
self.play("off", True)
self.porcupine.delete()
exit(0)
elif cmd == 'music_on':
self.media_player_controller.play_pause()
elif cmd == 'music_off':
self.media_player_controller.play_pause()
elif cmd == 'music_next':
self.media_player_controller.next_track()
elif cmd == 'music_previous':
self.media_player_controller.previous_track()
elif cmd == 'home_assistant_execute':
self.home_assistant.send_process(recognized_phrase)
elif cmd == 'home_assistant_get':