удали из кода информацию о скорости скачивания и его использования, а также сделай так чтобы файлы сохранялись в директории 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
import re # Для обработки строковых символов

# Проверка, запущено ли приложение на Android
try:
from android.permissions import request_permissions, Permission
from android import api_version

android_platform = True
except ImportError:
android_platform = False


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 sanitize_filename(filename):
return re.sub(r’[/*?:”<>|]‘, ‘’, filename)


# Функция определения скорости скачивания
def get_download_speed():
url = “https://www.google.com/images/branding/googlelogo/1x/googlelogo_color_272x92dp.png”
start_time = time.time()
response = requests.get(url)
end_time = time.time()
file_size = len(response.content)
speed_bps = file_size / (end_time - start_time)
return speed_bps


# Функция для поиска на YouTube и скачивания аудио
def search_youtube(query):
sanitized_query = sanitize_filename(query)
directory = “mp3”

# Создание директории, если она не существует
if not os.path.exists(directory):
os.makedirs(directory)

youtube_dl_opts = {
‘format’: ‘bestaudio/best’,
‘noplaylist’: True,
‘quiet’: True,
‘outtmpl’: os.path.join(directory, f’{sanitized_query}.%(ext)s’),
‘ffmpeg_location’: ffmpeg.get_ffmpeg_exe(),
‘postprocessors’: [{
‘key’: ‘FFmpegExtractAudio’,
‘preferredcodec’: ‘mp3’,
‘preferredquality’: ‘192’,
}],
}

file_path = os.path.join(directory, f"{sanitized_query}.mp3")

if os.path.exists(file_path):
speak(f"Файл уже существует. Проигрываю {sanitized_query}.“)
return file_path

with youtube_dl.YoutubeDL(youtube_dl_opts) as ydl:
info = ydl.extract_info(“ytsearch1:” + query, download=False)

# Получение информации о размере файла
video_info = info[‘entries’][0]
file_size = video_info.get(“filesize_approx”, None)

if file_size:
file_size_mb = file_size / (1024 * 1024)
speak(f"Начинается скачивание файла размером {file_size_mb:.2f} мегабайт.”)

download_speed = get_download_speed()
if download_speed:
download_time = file_size / download_speed
speak(f"Это займет примерно {download_time:.2f} секунд.“)

ydl.download([“ytsearch1:” + query])
title = sanitize_filename(video_info[‘title’])
return os.path.join(directory, f”{title}.mp3")


# Функция регулировки громкости
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))


# Функция для запроса к GPT
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.lower(), None)


# Главная функция
def main():
pygame.init()
pygame.mixer.init()

# Запрашиваем разрешения, если приложение запущено на Android
if android_platform:
def callback(permissions, results):
if all(results):
print(“Permissions granted”)
else:
print(“Permissions denied”)
speak(“Приложению необходимы все разрешения для корректной работы.”)
return

if api_version >= 23:
permissions_to_request = [Permission.READ_EXTERNAL_STORAGE,
Permission.WRITE_EXTERNAL_STORAGE,
Permission.RECORD_AUDIO]
request_permissions(permissions_to_request, callback)
else:
print(“Permissions granted by default (API < 23)”)

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 or “не слушай” 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 and os.path.exists(song_path):
if current_song:
pygame.mixer.music.stop()
while pygame.mixer.music.get_busy():
time.sleep(0.1)
if os.path.exists(current_song):
os.remove(current_song)
current_song = song_path
pygame.mixer.music.load(current_song)
pygame.mixer.music.play()
speak(f"Проигрываю песню ‘{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)
if os.path.exists(current_song):
os.remove(current_song)
current_song = None

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

elif “найди” in command or “найти” in command:
if current_song:
pygame.mixer.music.stop()
while pygame.mixer.music.get_busy():
time.sleep(0.1)
if os.path.exists(current_song):
os.remove(current_song)
current_song = None

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

if search_query:
song_path = search_youtube(search_query)
if song_path and os.path.exists(song_path):
current_song = song_path
pygame.mixer.music.load(current_song)
pygame.mixer.music.play()
speak(f"Проигрываю песню ‘{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.”)

elif “спасибо” in command or “выход” in command or “завершить” in command:
speak(“Завершаю работу. До свидания!”)
break

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


if name == “main”:
try:
main()
except KeyboardInterrupt:
pass
finally:
pygame.quit()