Viole11 commited on
Commit
a7b6452
·
verified ·
1 Parent(s): 9e1e4cd

Upload 2 files

Browse files
Files changed (2) hide show
  1. app.py +82 -0
  2. requirements.txt +4 -0
app.py ADDED
@@ -0,0 +1,82 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import gradio as gr
2
+ from TTS.api import TTS
3
+ import os
4
+
5
+ def process_audio(audio, language, custom_text):
6
+ try:
7
+ if not custom_text:
8
+ return "Ошибка: Пожалуйста, введите текст для синтеза."
9
+ if not audio:
10
+ return "Ошибка: Пожалуйста, загрузите аудиофайл."
11
+
12
+ # 1. Проверка входного аудио
13
+ print("Проверка аудиофайла...")
14
+ audio_path = audio
15
+ if not os.path.exists(audio_path):
16
+ return "Ошибка: Аудиофайл не найден."
17
+
18
+ # 2. Синтез речи с клонированием голоса
19
+ print("Синтез речи с клонированием голоса...")
20
+ lang_map = {
21
+ "Inglês": "en", "Espanhol": "es", "Francês": "fr", "Alemão": "de",
22
+ "Italiano": "it", "Português": "pt", "Polonês": "pl", "Turco": "tr",
23
+ "Russo": "ru", "Holandês": "nl", "Tcheco": "cs", "Árabe": "ar",
24
+ "Chinês (Simplificado)": "zh-cn", "Japonês": "ja", "Húngaro": "hu",
25
+ "Coreano": "ko", "Hindi": "hi"
26
+ }
27
+ target_lang = lang_map.get(language, "ru")
28
+
29
+ try:
30
+ tts = TTS(
31
+ model_name="tts_models/multilingual/multi-dataset/xtts_v2",
32
+ progress_bar=True,
33
+ gpu=False
34
+ )
35
+ except Exception as e:
36
+ print(f"Ошибка загрузки модели XTTS-v2: {e}")
37
+ return f"Ошибка: Не удалось загрузить модель TTS. Детали: {str(e)}"
38
+
39
+ output_audio = "cloned_audio.wav"
40
+ try:
41
+ tts.tts_to_file(
42
+ text=custom_text,
43
+ speaker_wav=audio_path,
44
+ language=target_lang,
45
+ file_path=output_audio
46
+ )
47
+ except Exception as e:
48
+ print(f"Ошибка синтеза речи: {e}")
49
+ return f"Ошибка: Не удалось синтезировать речь. Детали: {str(e)}"
50
+
51
+ # Проверка результата
52
+ if os.path.exists(output_audio):
53
+ return output_audio
54
+ else:
55
+ return "Ошибка: Выходной файл не создан."
56
+ except Exception as e:
57
+ print(f"Общая ошибка: {e}")
58
+ return str(e)
59
+
60
+ # Gradio интерфейс
61
+ audio = gr.Audio(label="Загрузите аудиофайл", type="filepath")
62
+ 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")
63
+ custom_text_input = gr.Textbox(label="Введите текст для синтеза (обязательно)", placeholder="Например: Привет, это тестовое аудио!")
64
+
65
+ iface = gr.Interface(
66
+ fn=process_audio,
67
+ inputs=[audio, dropdown, custom_text_input],
68
+ outputs=gr.Audio(label="Синтезированное аудио"),
69
+ title="Синтез аудио с клонированием голоса",
70
+ description="Загрузите аудиофайл и введите текст для синтеза с клонированием голоса с использованием XTTS-v2."
71
+ )
72
+
73
+ with gr.Blocks() as demo:
74
+ iface.render()
75
+ gr.Markdown("""
76
+ **Примечания:**
77
+ - Загружайте аудиофайлы (.wav или .mp3) длительностью 3–10 секунд для лучшего качества.
78
+ - Обработка на CPU может занять 1–3 минуты.
79
+ - Используется Coqui TTS (XTTS-v2, поддерживает 17 языков, включая русский).
80
+ """)
81
+
82
+ demo.launch(debug=True)
requirements.txt ADDED
@@ -0,0 +1,4 @@
 
 
 
 
 
1
+ coqui-tts==0.25.0
2
+ gradio>=4.44.1
3
+ numpy>=1.25.2,<2.0
4
+ torch>=2.0.0