File size: 2,956 Bytes
8cb1844
5dfe98a
 
 
 
 
 
 
 
b23a251
5dfe98a
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
99db302
5dfe98a
5a090e9
5dfe98a
5a090e9
99db302
6b48298
1897f0d
6b48298
1897f0d
 
 
99db302
 
fc985f9
19b7774
b0966fd
5dfe98a
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
from TTS.utils.synthesizer import Synthesizer
from huggingface_hub import hf_hub_download
import gradio as gr
import tempfile
import os 

REPO_ID = "jhlfrfufyfn/bel-tts"

my_title = "Беларускі тэкст-у-маўленне"
my_description = "Беларускамоўная мадэль для агучвання тэксту (травень 2023)."

be_text = "Гепарды жывуць у адкрытых і прасторных месцах, дзе ёсць шмат здабычы."

my_inputs = [
  gr.inputs.Textbox(lines=5, label="Input Text", default=be_text),
]

my_outputs = gr.outputs.Audio(type="file", label="Output Audio")

def belarusify_russian_text(text: str):
    text = text.replace("и", "і")
    text = text.replace("іу", "іў")
    text = text.replace("оу", "оў")
    text = text.replace("ау", "аў")
    text = text.replace("ыу", "ыў")
    text = text.replace("уу", "уў")
    text = text.replace("юу", "юў")
    text = text.replace("еу", "еў")
    text = text.replace("ёу", "ёў")
    text = text.replace("щ", "шч")
    return text
    
import requests
def tts(text: str):
    print("Original text: ", text)
    text = belarusify_russian_text(text)
    print("Belarusified text: ", text)
     # Sending a request to the fonemizer
    headers = {'Content-Type': 'text/plain; charset=utf-8'}  # Specify the charset as UTF-8

    response = requests.post("http://fonemizer.nikuchin.fun/processText", 
                         data=text.encode('utf-8'),  # Encode the text as UTF-8
                         headers=headers)

    if response.status_code != 200:
        raise Exception(f"Request to fonemizer failed with status code {response.status_code}")
    print(response.content)
    print(response.headers.get('Content-Type'))
    text = response.text
    best_model_path = hf_hub_download(repo_id=REPO_ID, filename="model.pth") 
    config_path = hf_hub_download(repo_id=REPO_ID, filename="config.json")
    vocoder_path = hf_hub_download(repo_id=REPO_ID, filename="vocoder.pth")
    scale_stats_path = hf_hub_download(repo_id=REPO_ID, filename="scale_stats.npy")
    vocoder_config_path = hf_hub_download(repo_id=REPO_ID, filename="vocoder_config.json")
    
    # init synthesizer  
    synthesizer = Synthesizer(
        best_model_path,
        config_path,
        None,
        None,
        vocoder_path,
        vocoder_config_path,
        None,
        None,
        False
    )

    # create audio file
    wavs = synthesizer.tts(text)
    with tempfile.NamedTemporaryFile(suffix = ".wav", delete = False) as fp:
        synthesizer.save_wav(wavs, fp)                      
    return fp.name 

print("CWD IS ", os.getcwd())
print("LIST IS", os.listdir())
iface = gr.Interface(
    fn=tts, 
    inputs=my_inputs, 
    outputs=my_outputs, 
    title=my_title, 
    description = my_description, 
    article = "",
    examples = "", 
    allow_flagging=False
)
iface.launch()