в коде после произнесения слова "стоп" или "найди" файл song.mp3 должен быть освобожден и удален: import os
import time
import requests
import speech_recognition as sr
import pyttsx3
import yt_dlp as youtube_dl
import pygame
import imageio_ffmpeg as ffmpeg
from freeGPT import Client
from googletrans import Translator


def speak(text):
    engine = pyttsx3.init()
    engine.say(text)
    engine.runAndWait()


# Инициация распознавания речи
recognizer = sr.Recognizer()


def listen_command():
    with sr.Microphone() as source:
        print("Listening for command…")
        audio = recognizer.listen(source)
    try:
        command = recognizer.recognize_google(audio, language="ru-RU")
        print(f"Command heard: {command}")
        return command.lower()
    except sr.UnknownValueError:
        # Если музыка не играет, произнесем сообщение об ошибке
        if not pygame.mixer.music.get_busy():
            speak("Я не понял ваш запрос")
        return ""
    except sr.RequestError:
        # Если музыка не играет, произнесем сообщение об ошибке
        if not pygame.mixer.music.get_busy():
            speak("Ошибка сервиса распознавания речи")
        return ""


def search_youtube(query):
    youtube_dl_opts = {
        'format': 'bestaudio/best',
        'noplaylist': True,
        'quiet': True,
        'outtmpl': 'song.%(ext)s',
        'ffmpeg_location': ffmpeg.get_ffmpeg_exe(),
        'postprocessors': [{
            'key': 'FFmpegExtractAudio',
            'preferredcodec': 'mp3',
            'preferredquality': '192',
        }],
    }

    with youtube_dl.YoutubeDL(youtube_dl_opts) as ydl:
        info = ydl.extract_info("ytsearch1:" + query, download=True)
        return ydl.prepare_filename(info['entries'][0])


def set_volume(level):
    try:
        level = int(level)
        if 0 <= level <= 10:
            pygame.mixer.music.set_volume(level / 10.0)
            speak(f"Громкость установлена на {level}")
        else:
            speak("Пожалуйста, укажите уровень громкости от 0 до 10.")
    except ValueError:
        speak("Я не понял уровень громкости, укажите значение от 0 до 10.")


def list_commands():
    commands = [
        "песню или музыку - для поиска и воспроизведения песни",
        "продолжай - для продолжения воспроизведения",
        "пауза - для паузы воспроизведения",
        "стоп - для остановки воспроизведения и удаления песни",
        "включи - для воспроизведения песни",
        "найди - для поиска новой песни",
        "перестань слушать - для прекращения слушать команды",
        "слушай - для возобновления слушания команд",
        "громкость - от нуля до десяти",
        "команды - для воспроизведения этого списка команд"
    ]
    speak("Доступные команды: " + ", ".join(commands))


def get_gpt_response(query):
    translator = Translator()

    try:
        # Переводим запрос на английский язык
        translated_query = translator.translate(query, src='ru', dest='en').text
        # Отправляем запрос в FreeGPT
        resp = Client.create_completion("gpt3", translated_query)
        # Переводим ответ на русский язык
        translated_resp = translator.translate(resp, src='en', dest='ru').text
        return translated_resp
    except Exception as e:
        return f"Произошла ошибка: {e}"


# Словарь для перевода текстовых чисел в числовые значения
text_to_number = {
    "ноль": 0, "один": 1, "два": 2, "три": 3, "четыре": 4, "пять": 5,
    "шесть": 6, "семь": 7, "восемь": 8, "девять": 9, "десять": 10
}


def get_number_from_text(text):
    return text_to_number.get(text, None)


def main():
    pygame.init()
    pygame.mixer.init()
    speak("Приветствую! Что вы хотите найти?")

    current_song = None
    listening = True

    while True:
        if not listening:
            command = listen_command()
            if "слушай" in command:
                speak("Я снова слушаю.")
                listening = True
            else:
                continue

        command = listen_command()

        if "перестань слушать" in command:
            speak("Я перестаю слушать. Скажите 'Слушай', чтобы я снова начал слушать.")
            listening = False
            continue

        if "команды" in command:
            list_commands()

        elif "песню" in command or "песня" in command or "музыку" in command or "музыка" in command or "youtube" in command:
            speak("Какую песню вы хотите услышать?")
            search_query = listen_command()

            if search_query:
                song_path = search_youtube(search_query)
                if song_path:
                    song_path = song_path.replace('.webm', '.mp3')  # Убедитесь, что файл имеет расширение mp3
                    if current_song:
                        pygame.mixer.music.stop()
                        while pygame.mixer.music.get_busy():
                            time.sleep(0.1)
                        os.remove(current_song)
                    current_song = song_path
                    pygame.mixer.music.load(current_song)
                    pygame.mixer.music.play()
                    speak("Проигрываю песню " + search_query)
                else:
                    speak("Не удалось найти песню.")

        elif "продолжай" in command:
            if current_song and not pygame.mixer.music.get_busy():
                pygame.mixer.music.unpause()

        elif "пауза" in command:
            if current_song and pygame.mixer.music.get_busy():
                pygame.mixer.music.pause()

        elif "стоп" in command:
            if current_song:
                pygame.mixer.music.stop()
                # Дождитесь остановки воспроизведения, чтобы освободить файл
                while pygame.mixer.music.get_busy():
                    time.sleep(0.1)
                os.remove(current_song)
                current_song = None

        elif "включи" in command:
            if current_song:
                pygame.mixer.music.play()

        elif "найди" in command:
            if current_song:
                pygame.mixer.music.stop()
                while pygame.mixer.music.get_busy():
                    time.sleep(0.1)
                os.remove(current_song)
                current_song = None

            speak("Что вы хотите найти?")
            search_query = listen_command()

            if search_query:
                song_path = search_youtube(search_query)
                if song_path:
                    song_path = song_path.replace('.webm', '.mp3')  # Убедитесь, что файл имеет расширение mp3
                    current_song = song_path
                    pygame.mixer.music.load(current_song)
                    pygame.mixer.music.play()
                    speak("Проигрываю песню " + search_query)
                else:
                    speak("Не удалось найти песню.")

        elif "громкость" in command:
            parts = command.split()
            if len(parts) > 1:
                number_word = parts[1]
                level = get_number_from_text(number_word)
                if level is not None:
                    set_volume(level)
                else:
                    speak("Пожалуйста, укажите уровень громкости от 0 до 10.")
            else:
                speak("Пожалуйста, укажите уровень громкости от 0 до 10.")

        else:
            gpt_response = get_gpt_response(command)
            speak(gpt_response)


if __name__ == "__main__":
    try:
        main()
    finally:
        pygame.quit()