File size: 4,990 Bytes
a7960cf
 
5386471
a7960cf
12da6cc
a7960cf
12da6cc
 
320b21c
aa14d93
a7960cf
 
 
3d29f27
320b21c
a7960cf
 
 
 
320b21c
a7960cf
 
 
 
 
6194d18
a7960cf
320b21c
 
a7960cf
 
 
320b21c
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
07b0b77
5a4e089
a7960cf
 
 
fd93471
a7960cf
 
4acb066
 
 
 
 
 
 
a7960cf
 
 
 
 
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
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
from vietTTS.hifigan.mel2wave import mel2wave
from vietTTS.nat.text2mel import text2mel
from vietTTS.synthesizer import nat_normalize_text
import numpy as np
import gradio as gr
import os


def text_to_speech(text,stop_duration):
    print("starting")
    # prevent too long text
    if len(text) > 500:
        text = text[:500]
    # stop_duration_float = float(stop_duration_text)
    text = clean_text(text)
    text = nat_normalize_text(text)
    mel = text2mel(
        text,
        "lexicon.txt",
        stop_duration,
        "acoustic_latest_ckpt.pickle",
        "duration_latest_ckpt.pickle",
    )
    wave = mel2wave(mel, "config.json", "hk_hifi.pickle")
    return (wave * (2**15)).astype(np.int16)


def speak(text,stop_duration):
    y = text_to_speech(text,stop_duration)
    return 16_000, y



def clean_text(test_string):
  list_word = test_string.split()
  # print(list_word)

  regex = r"\d{2}(?P<sep>[-/])\d{1,2}(?P=sep)\d{4}"

  for word in list_word :
    try:
      # print(word)
      searchbox_result = re.match(regex, word)
      day = searchbox_result.group(0)
      day2 = day
      day2 = day2.replace('/',' ').replace('-',' ')
      list_date = day2.split(' ')
      date_result = 'Ngày ' + n2w(list_date[0]) + ' tháng ' + n2w(list_date[1].replace('0','') if list_date[1].startswith('0') else list_date[1]) + ' năm ' + n2w(list_date[2])
      # print(date_result)
      test_string = test_string.replace(word, date_result)

    except AttributeError:
      # print(word) 
      # print("can't make a group")
      continue


  # print(test_string)

  regex2 = r"\d{2}(?P<sep>[-/])\d{1,2}"

  for word in list_word :
    try:
      # print(word)
      searchbox_result = re.match(regex2, word)
      day = searchbox_result.group(0)
      day2 = day
      day2 = day2.replace('/',' ').replace('-',' ')
      list_date = day2.split(' ')
      date_result = 'Ngày ' + n2w(list_date[0]) + ' tháng ' + n2w(list_date[1].replace('0','') if list_date[1].startswith('0') else list_date[1])
      # print(date_result)
      test_string = test_string.replace(word, date_result)

    except AttributeError:
      # print(word) 
      # print("can't make a group")
      continue


  # print(test_string)

  regex3 = r"\d{1,2}(?P<sep>[h:])\d{1,2}"

  for word in list_word :
    try:
      # print(word)
      searchbox_result = re.match(regex3, word)
      day = searchbox_result.group(0)
      day2 = day
      day2 = day2.replace('h',' ').replace(':',' ')
      list_date = day2.split(' ')
      date_result = n2w(list_date[0]) + ' giờ ' + n2w(list_date[1].replace('0','') if list_date[1].startswith('0') else list_date[1]) + ' phút '
      # print(date_result)
      test_string = test_string.replace(word, date_result)

    except AttributeError:
      # print(word) 
      # print("can't make a group")
      continue


  print(test_string)

  for word in list_word :
    try:
      if word.isdigit() :
        # print(word)
        text_result = n2w_single(word)
        # print(text_result)
        test_string = test_string.replace(word, text_result, 1)

    except AttributeError:
      # print(word) 
      print("can't make a group")
      continue


  return test_string


title = "SLT TTS"
description = "SLT Vietnamese Text to speech demo."

gr.Interface(
    fn=speak, 
    inputs=["text","number"],
    outputs="audio",
    title = title,
    examples = [
    ["Thành phố muốn thí điểm thu thuế bất động sản thứ 2, tự quyết nhiều quyết định đầu tư để thu hút nguồn vốn tư nhân",0.2],
    ["Thứ năm, 22/12/2022, 10:59 những mét hàng rào đầu tiên quanh công viên lớn nhất thủ đô được tháo dỡ, chuyển công viên sang hình thức mở, không thu vé.",0.2],
    ["Cô dì chú bác nhà em không học hành vì vẫn làm bất động sản. Có phải làm ngành này thì chỉ cần biết sơ sơ, không cần học hành?... Đó là vấn đề được học sinh trường Trung học phổ thông  Gia Định, Thành phố Hồ Chí Minh đặt ra tại buổi khai mạc chương trình tư vấn tuyển sinh do Tạp chí Giáo dục Thành phố Hồ Chí Minh tổ chức sáng mồng 9 tháng 1.",0.2],
    ["Trong chuyến công du nước ngoài thứ hai từ khi Nga phát động chiến dịch quân sự tại Ukraine gần 12 tháng trước, Tổng thống Volodymyr Zelensky dự kiến phát biểu tại Nghị viện châu Âu ngày 9/2",0.2],
    ["Tuy nhiên, kế hoạch này đang đứng trước nguy cơ đổ vỡ sau khi các quan chức Nghị viện châu âu làm rò rỉ kế hoạch bí mật tiếp đón Tổng thống Ukraine. Hồi đầu tuần, thông tin về chuyến thăm xuất hiện trên nhiều tờ báo châu âu, khởi nguồn từ báo La Stampa của Italy.",0.2]
    ],
    description=description,
    theme="default",
    allow_screenshot=False,
    allow_flagging="never",
).launch(debug=False)