File size: 2,328 Bytes
e95bc25
 
15e7b85
e95bc25
2c32692
 
 
e95bc25
 
 
 
 
 
 
884068b
 
e707d6a
884068b
e95bc25
 
 
96fabd6
15e7b85
e707d6a
e95bc25
 
15e7b85
e95bc25
15e7b85
 
e95bc25
15e7b85
 
 
 
 
 
f194fff
 
 
 
 
96fabd6
f194fff
e95bc25
15e7b85
 
 
 
 
e95bc25
15e7b85
e95bc25
 
 
 
 
15e7b85
 
e95bc25
 
 
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
import gradio as gr
import tempfile
from TTS.api import TTS
from huggingface_hub import hf_hub_download
import torch

CUDA = torch.cuda.is_available()

REPO_ID = "ayymen/Coqui-TTS-Vits-shi"

my_title = "Tamazight Text-to-Speech"
my_description = "This model is based on [VITS](https://github.com/jaywalnut310/vits), thanks to 🐸 [Coqui.ai](https://coqui.ai/)." 

my_examples = [
  ["ⴰⵣⵓⵍ. ⵎⴰⵏⵣⴰⴽⵉⵏ?"],
  ["ⵡⴰ ⵜⴰⵎⵖⴰⵔⵜ ⵎⴰ ⴷ ⵓⴽⴰⵏ ⵜⵙⴽⵔⵜ?"],
  ["ⴳⵏ ⴰⴷ ⴰⴽ ⵉⵙⵙⴳⵏ ⵕⴱⴱⵉ ⵉⵜⵜⵓ ⴽ."],
  ["ⴰⵔⵔⴰⵡ ⵏ ⵍⵀⵎⵎ ⵢⵓⴽⵔ ⴰⵖ ⵉⵀⴷⵓⵎⵏ ⵏⵏⵖ!"]
]

my_inputs = [
  gr.Textbox(lines=5, label="Input Text", placeholder="The only available characters are: ⴰⴱⴳⴷⴹⴻⴼⴽⵀⵃⵄⵅⵇⵉⵊⵍⵎⵏⵓⵔⵕⵖⵙⵚⵛⵜⵟⵡⵢⵣⵥⵯ !,.:?"),
  gr.Audio(type="filepath", label="Speaker audio for voice cloning (optional)"),
  gr.Checkbox(label="Split Sentences (each sentence will be generated separately)", value=True)
]

my_outputs = gr.Audio(type="filepath", label="Output Audio", autoplay=True)

best_model_path = hf_hub_download(repo_id=REPO_ID, filename="best_model.pth") 
config_path = hf_hub_download(repo_id=REPO_ID, filename="config.json")

api = TTS(model_path=best_model_path, config_path=config_path).to("cuda" if CUDA else "cpu")

# load voice conversion model
api.load_vc_model_by_name("voice_conversion_models/multilingual/vctk/freevc24", gpu=CUDA)

def tts(text: str, speaker_wav: str = None, split_sentences: bool = True):
    # replace oov characters
    text = text.replace("\n", ". ")
    text = text.replace("(", ",")
    text = text.replace(")", ",")
    text = text.replace(";", ",")
    text = text.replace("-", " ")

    with tempfile.NamedTemporaryFile(suffix = ".wav", delete = False) as fp:
        if speaker_wav:
            api.tts_with_vc_to_file(text, speaker_wav=speaker_wav, file_path=fp.name, split_sentences=split_sentences)
        else:
            api.tts_to_file(text, file_path=fp.name, split_sentences=split_sentences)

    return fp.name 

iface = gr.Interface(
    fn=tts, 
    inputs=my_inputs, 
    outputs=my_outputs, 
    title=my_title, 
    description=my_description, 
    examples=my_examples,
    cache_examples=True
)
iface.launch()