добавь в код проверку, если ответ на “Приветствую! Что вы хотите найти?” не музыку и не песню, то отправь запрос в https://pypi.org/project/freeGPT/ и проговори ее ответ: import os
import time
import speech_recognition as sr
import pyttsx3
import yt_dlp as youtube_dl
import pygame
import imageio_ffmpeg as ffmpeg


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(), # Используем путь к установленному ffmpeg
‘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 list_commands():
commands = [
“песню или музыку - для поиска и воспроизведения песни”,
“продолжай - для продолжения воспроизведения”,
“пауза - для паузы воспроизведения”,
“стоп - для остановки воспроизведения и удаления песни”,
“включи - для воспроизведения песни”,
“найди - для поиска новой песни”,
“перестань слушать - для прекращения слушать команды”,
“слушай - для возобновления слушания команд”,
“команды - для воспроизведения этого списка команд”
]
speak("Доступные команды: " + ", ".join(commands))


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:
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()
time.sleep(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()
time.sleep(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()
time.sleep(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(“Не удалось найти песню.”)


if name == “main”:
main()