Some stuff

This commit is contained in:
2024-02-13 14:15:27 +01:00
parent 3567b9dc75
commit e8121e3e8d
14 changed files with 229 additions and 0 deletions

1
interfaces/__init__.py Normal file
View File

@@ -0,0 +1 @@
from .gradio_ui import GenerateUI

51
interfaces/gradio_ui.py Normal file
View File

@@ -0,0 +1,51 @@
import importlib
import json
import os
import gradio as gr
from src import engines
class GenerateUI:
def __init__(self):
self.engines = self.get_engines()
def get_engines(self):
engines_d = {}
with open(os.path.join(os.getcwd(), "src", "engines", "engines.json"), "r") as f:
engine_types = json.load(f)
for engine_type, engine_list in engine_types.items():
engines_d[engine_type] = {}
for engine_name in engine_list:
module = importlib.import_module(f"src.engines.{engine_type}.{engine_name}")
engine_class = getattr(module, engine_name)
engines_d[engine_type][engine_name] = engine_class
return engines_d
def launch_ui(self):
with gr.Blocks() as main_block:
for engine_type, engines in self.engines.items():
switch_dropdown = gr.Dropdown(list(engines.keys()), label=engine_type)
engine_blocks = []
for engine_name, engine_class in engines.items():
with gr.Blocks(elem_id=f"{engine_type}_{engine_name}_block", visible=False) as engine_block:
options = engine_class().get_options()
for option in options:
engine_block.add(option)
engine_blocks.append(engine_block)
def switch_engine(engine_name, engine_blocks=engine_blocks, switch_dropdown=switch_dropdown):
for block in engine_blocks:
block.visible = block.elem_id.startswith(f"{engine_type}_{engine_name}")
switch_dropdown.change(switch_engine, inputs=[switch_dropdown], outputs=engine_blocks)
# Initially show the first engine's options
if engines:
first_engine_name = list(engines.keys())[0]
switch_engine(first_engine_name)
main_block.launch()
if __name__ == "__main__":
ui_generator = GenerateUI()
ui_generator.launch_ui()

5
main.py Normal file
View File

@@ -0,0 +1,5 @@
from interfaces import GenerateUI
if __name__ == "__main__":
ui_generator = GenerateUI()
ui_generator.launch_ui()

1
src/__init__.py Normal file
View File

@@ -0,0 +1 @@
from . import engines

10
src/engines/BaseEngine.py Normal file
View File

@@ -0,0 +1,10 @@
from abc import ABC, abstractmethod
import gradio as gr
class BaseEngine(ABC):
options: list
name: str
description: str
def __init__(self):
pass

View File

@@ -0,0 +1,10 @@
from abc import ABC, abstractmethod
from ..BaseEngine import BaseEngine
class BaseTTSEngine(BaseEngine):
pass
@abstractmethod
def synthesize(self, text: str, path: str) -> str:
pass

View File

@@ -0,0 +1,111 @@
import gradio as gr
import TTS
import os
import torch
from .BaseTTSEngine import BaseTTSEngine
class CoquiTTSEngine(BaseTTSEngine):
voices = [
"Claribel Dervla",
"Daisy Studious",
"Gracie Wise",
"Tammie Ema",
"Alison Dietlinde",
"Ana Florence",
"Annmarie Nele",
"Asya Anara",
"Brenda Stern",
"Gitta Nikolina",
"Henriette Usha",
"Sofia Hellen",
"Tammy Grit",
"Tanja Adelina",
"Vjollca Johnnie",
"Andrew Chipper",
"Badr Odhiambo",
"Dionisio Schuyler",
"Royston Min",
"Viktor Eka",
"Abrahan Mack",
"Adde Michal",
"Baldur Sanjin",
"Craig Gutsy",
"Damien Black",
"Gilberto Mathias",
"Ilkin Urbano",
"Kazuhiko Atallah",
"Ludvig Milivoj",
"Suad Qasim",
"Torcull Diarmuid",
"Viktor Menelaos",
"Zacharie Aimilios",
"Nova Hogarth",
"Maja Ruoho",
"Uta Obando",
"Lidiya Szekeres",
"Chandra MacFarland",
"Szofi Granger",
"Camilla Holmström",
"Lilya Stainthorpe",
"Zofija Kendrick",
"Narelle Moon",
"Barbora MacLean",
"Alexandra Hisakawa",
"Alma María",
"Rosemary Okafor",
"Ige Behringer",
"Filip Traverse",
"Damjan Chapman",
"Wulf Carlevaro",
"Aaron Dreschner",
"Kumar Dahl",
"Eugenio Mataracı",
"Ferran Simen",
"Xavier Hayasaka",
"Luis Moray",
"Marcos Rudaski",
]
name = "Coqui TTS"
description = "Coqui TTS engine."
languages = [
"en", # English
"es", # Spanish
"fr", # French
"de", # German
"it", # Italian
"pt", # Portuguese
"pl", # Polish
"tr", # Turkish
"ru", # Russian
"nl", # Dutch
"cs", # Czech
"ar", # Arabic
"zh-cn", # Chinese (Simplified)
"ja", # Japanese
"hu", # Hungarian
"ko", # Korean
"hi", # Hindi
]
options = [
gr.Dropdown(
voices, value=voices[0], label="voice", max_choices=1
),
gr.Dropwdown(
languages, value=languages[0], label="language", max_choices=1
),
]
def __init__(self):
super().__init__()
os.environ["COQUI_TOS_AGREED"] = "1"
self.tts = TTS("tts_models/multilingual/multi-dataset/xtts_v2")
device = "cuda" if torch.cuda.is_available() else "cpu"
self.tts.to(device)
def synthesize(self, text: str, path: str) -> str:
voice = self.options[0].value
language = self.options[1].value
self.tts.tts_to_file(text=text, file_path=path, lang=language, speaker=voice)
return path

View File

@@ -0,0 +1,13 @@
from .BaseTTSEngine import AbstractTTSEngine
import gradio as gr
class ElevenLabsTTSEngine(AbstractTTSEngine):
options = [gr.Radio(["Neutral", "Happy", "Sad"], label="emotion")]
name = "ElevenLabs"
description = "ElevenLabs TTS engine."
def __init__(self):
super().__init__()
def synthesize(self, text: str, path: str) -> str:
pass

View File

@@ -0,0 +1,3 @@
from .BaseTTSEngine import BaseTTSEngine
from .CoquiTTSEngine import CoquiTTSEngine
from .ElevenLabsTTSEngine import ElevenLabsTTSEngine

2
src/engines/__init__.py Normal file
View File

@@ -0,0 +1,2 @@
from . import TTSEngine
from .BaseEngine import BaseEngine

6
src/engines/engines.json Normal file
View File

@@ -0,0 +1,6 @@
{
"TTSEngine": [
"CoquiTTSEngine",
"ElevenLabsTTSEngine"
]
}

View File

@@ -0,0 +1,4 @@
from src.engines.BaseEngine import AbstractEngine
class AbstractScriptEngine(AbstractEngine):
pass

View File

@@ -0,0 +1,6 @@
from AbstractScriptEngine import AbstractScriptEngine
class ComicalScriptEngine(AbstractScriptEngine):
def __init__(self):
super().__init__()
self.options = {"comicality": ["Low", "Medium", "High"]}

View File

@@ -0,0 +1,6 @@
from AbstractScriptEngine import AbstractScriptEngine
class DramaticScriptEngine(AbstractScriptEngine):
def __init__(self):
super().__init__()
self.options = {"tone": ["Serious", "Light-hearted"]}