Spaces:
Running
Running
File size: 4,259 Bytes
a7b6452 84502d4 a7b6452 84502d4 a7b6452 84502d4 a7b6452 84502d4 a7b6452 84502d4 a7b6452 84502d4 a7b6452 84502d4 a7b6452 84502d4 a7b6452 84502d4 a7b6452 84502d4 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 |
import gradio as gr
from TTS.api import TTS
import os
import logging
# Настройка логирования
logging.basicConfig(level=logging.INFO)
logger = logging.getLogger(__name__)
# Установка переменной окружения для обхода запроса лицензии
os.environ["COQUI_TOS_AGREED"] = "1"
def process_audio(audio, language, custom_text):
try:
if not custom_text:
return "Ошибка: Пожалуйста, введите текст для синтеза."
if not audio:
return "Ошибка: Пожалуйста, загрузите аудиофайл."
# 1. Проверка входного аудио
logger.info("Проверка аудиофайла...")
audio_path = audio
if not os.path.exists(audio_path):
return "Ошибка: Аудиофайл не найден."
# 2. Синтез речи с клонированием голоса
logger.info("Синтез речи с клонированием голоса...")
lang_map = {
"Inglês": "en", "Espanhol": "es", "Francês": "fr", "Alemão": "de",
"Italiano": "it", "Português": "pt", "Polonês": "pl", "Turco": "tr",
"Russo": "ru", "Holandês": "nl", "Tcheco": "cs", "Árabe": "ar",
"Chinês (Simplificado)": "zh-cn", "Japonês": "ja", "Húngaro": "hu",
"Coreano": "ko", "Hindi": "hi"
}
target_lang = lang_map.get(language, "ru")
try:
logger.info("Загрузка модели XTTS-v2...")
tts = TTS(
model_name="tts_models/multilingual/multi-dataset/xtts_v2",
progress_bar=True,
gpu=False
)
except Exception as e:
logger.error(f"Ошибка загрузки модели XTTS-v2: {e}")
return f"Ошибка: Не удалось загрузить модель TTS. Детали: {str(e)}"
output_audio = "cloned_audio.wav"
try:
logger.info("Синтез речи...")
tts.tts_to_file(
text=custom_text,
speaker_wav=audio_path,
language=target_lang,
file_path=output_audio
)
except Exception as e:
logger.error(f"Ошибка синтеза речи: {e}")
return f"Ошибка: Не удалось синтезировать речь. Детали: {str(e)}"
# Проверка результата
if os.path.exists(output_audio):
logger.info("Синтез завершён успешно.")
return output_audio
else:
return "Ошибка: Выходной файл не создан."
except Exception as e:
logger.error(f"Общая ошибка: {e}")
return str(e)
# Gradio интерфейс
audio = gr.Audio(label="Загрузите аудиофайл", type="filepath")
dropdown = gr.Dropdown(choices=["Inglês", "Espanhol", "Francês", "Alemão", "Italiano", "Português", "Polonês", "Turco", "Russo", "Holandês", "Tcheco", "Árabe", "Chinês (Simplificado)", "Japonês", "Húngaro", "Coreano", "Hindi"], label="Idioma de Destino для синтеза", value="Russo")
custom_text_input = gr.Textbox(label="Введите текст для синтеза (обязательно)", placeholder="Например: Привет, это тестовое аудио!")
iface = gr.Interface(
fn=process_audio,
inputs=[audio, dropdown, custom_text_input],
outputs=gr.Audio(label="Синтезированное аудио"),
title="Синтез аудио с клонированием голоса",
description="Загрузите аудиофайл и введите текст для синтеза с клонированием голоса с использованием XTTS-v2."
)
if __name__ == "__main__":
try:
logger.info("Запуск Gradio-приложения...")
iface.launch(server_name="0.0.0.0", server_port=7860)
except Exception as e:
logger.error(f"Ошибка запуска Gradio: {e}")
raise |