Δημοσιεύτηκε: 31 Μαρ 2024, 20:13
από malos
Το κατατρόπωσα ρε! Που θα κάνει αυτό ό,τι θέλει.

Κατ' αρχάς διορθώθηκε η αδυναμία που δεν έβρισκε όλα τα αρχεία.

Κώδικας: Επιλογή όλων

def play_music(self, query=None):
music_directories = [
"/media/left/SELINI/Enjoy/music/mp3",
"/home/left/Μουσική",
]

music_files = []
for directory in music_directories:
if os.path.exists(directory):
for root, dirs, files in os.walk(directory):
for file in files:
if file.lower().endswith((".mp3", ".wav", ".ogg", ".mp4", ".avi", ".m3u")):
file_path = os.path.join(root, file)
music_files.append(file_path)

if music_files:
if query:
# Μετατροπή του ερωτήματος σε lowercase και αφαίρεση των ελληνικών χαρακτήρων
query_normalized = unidecode(query.lower())
matching_files = []

for file in music_files:
file_name = os.path.basename(file)
file_name_normalized = unidecode(file_name.lower())

# Αναγνώριση με βάση την προσέγγιση συμφωνίας
if fuzz.partial_ratio(query_normalized, file_name_normalized) >= 90:
matching_files.append(file)

if matching_files:
music_file = matching_files[0]
else:
print("Δεν βρέθηκαν μουσικά αρχεία που να ταιριάζουν στην αναζήτηση.")
os.system('notify-send "Δεν βρέθηκαν μουσικά αρχεία που να ταιριάζουν στην αναζήτηση."')
return
else:
music_file = music_files[0]

self.mpv_process = subprocess.Popen(["mpv", music_file])
mpv_pid = self.mpv_process.pid
print("Started mpv with PID:", mpv_pid)
else:
print("Δεν βρέθηκαν μουσικά αρχεία.")
os.system('notify-send "Δεν βρέθηκαν μουσικά αρχεία."')


Και τώρα του λες ό,τι θες. Είτε όλες τις λέξεις, είτε μόνο μία (χαρακτηριστική όσο γίνεται), και είτε το λάβει με ελληνικά γράμματα είτε λατινικά και ο τίτλος είτε είναι ελληνικός είτε greeklish, τα παίζει όλα.
Μου αρέσει και η ανταπόκρισή του. Αμέσως ακούς το τραγούδι.
Βεβαίως ακόμα υπάρχει το φαινόμενο άλλα να τα ανοίγει σε παράθυρο και άλλα να παίζει στο παρασκήνιο. Αλλά το έλυσα κι αυτό με μια εντολή stop και ησύχασα

Κώδικας: Επιλογή όλων
def stop_mpv(self):
if self.mpv_process:
mpv_pid = self.mpv_process.pid
os.system(f"kill {mpv_pid}")
print("Stopped mpv with PID:", mpv_pid)
else:
print("No mpv process running.")


Η προηγούμενη συνάρτηση ( def play_music ( τσιμπάει το pid του επί τόπου εκτλεσμένου mpv ) και με την εντολή "σταμάτα" τον κλείνει.

Κώδικας: Επιλογή όλων
def execute_command(self, command):
if command:
..........................................
# άλλα
..........................................

elif command.startswith(("stop", "στοπ", "σταμάτα", "σκάσε")):
self.stop_mpv()
os.system('notify-send "Δεν υπάρχει διαδικασία mpv." --icon=/home/left/Εικόνες/χρήση/icons/desperate.png')


Προτιμώ το "σταμάτα¨ και το "σκάσε", γιατί το "στοπ" κατα 70% μου το άκουσε "στο"