jianuo commited on
Commit
14a6e16
1 Parent(s): 5ee48fc

代码重钩,将功能模块化,使代码高内聚,第耦合

Browse files
This view is limited to 50 files because it contains too many changes.   See raw diff
Files changed (50) hide show
  1. TTSs/base_tts.py +141 -0
  2. TTSs/elevenlabs_tts.py +89 -49
  3. TTSs/genshin_api_tts.py +75 -26
  4. TTSs/genshin_local/__init__.py +1 -0
  5. TTSs/{genshin → genshin_local/genshin}/.gitignore +0 -0
  6. TTSs/{genshin → genshin_local/genshin}/.gitmodules +0 -0
  7. TTSs/{genshin → genshin_local/genshin}/.pre-commit-config.yaml +0 -0
  8. TTSs/{genshin → genshin_local/genshin}/LICENSE +0 -0
  9. TTSs/{genshin → genshin_local/genshin}/README.md +0 -0
  10. TTSs/{genshin → genshin_local/genshin}/__init__.py +0 -0
  11. TTSs/{genshin → genshin_local/genshin}/attentions.py +0 -0
  12. TTSs/{genshin → genshin_local/genshin}/bert/bert-base-japanese-v3/.gitattributes +0 -0
  13. TTSs/{genshin → genshin_local/genshin}/bert/bert-base-japanese-v3/README.md +0 -0
  14. TTSs/{genshin → genshin_local/genshin}/bert/bert-base-japanese-v3/config.json +0 -0
  15. TTSs/{genshin → genshin_local/genshin}/bert/bert-base-japanese-v3/tokenizer_config.json +0 -0
  16. TTSs/{genshin → genshin_local/genshin}/bert/bert-base-japanese-v3/vocab.txt +0 -0
  17. TTSs/{genshin → genshin_local/genshin}/bert/bert-large-japanese-v2/.gitattributes +0 -0
  18. TTSs/{genshin → genshin_local/genshin}/bert/bert-large-japanese-v2/README.md +0 -0
  19. TTSs/{genshin → genshin_local/genshin}/bert/bert-large-japanese-v2/config.json +0 -0
  20. TTSs/{genshin → genshin_local/genshin}/bert/bert-large-japanese-v2/tokenizer_config.json +0 -0
  21. TTSs/{genshin → genshin_local/genshin}/bert/bert-large-japanese-v2/vocab.txt +0 -0
  22. TTSs/{genshin → genshin_local/genshin}/bert/bert_models.json +0 -0
  23. TTSs/{genshin → genshin_local/genshin}/bert/chinese-roberta-wwm-ext-large/.gitattributes +0 -0
  24. TTSs/{genshin → genshin_local/genshin}/bert/chinese-roberta-wwm-ext-large/README.md +0 -0
  25. TTSs/{genshin → genshin_local/genshin}/bert/chinese-roberta-wwm-ext-large/added_tokens.json +0 -0
  26. TTSs/{genshin → genshin_local/genshin}/bert/chinese-roberta-wwm-ext-large/config.json +0 -0
  27. TTSs/{genshin → genshin_local/genshin}/bert/chinese-roberta-wwm-ext-large/special_tokens_map.json +0 -0
  28. TTSs/{genshin → genshin_local/genshin}/bert/chinese-roberta-wwm-ext-large/tokenizer.json +0 -0
  29. TTSs/{genshin → genshin_local/genshin}/bert/chinese-roberta-wwm-ext-large/tokenizer_config.json +0 -0
  30. TTSs/{genshin → genshin_local/genshin}/bert/chinese-roberta-wwm-ext-large/vocab.txt +0 -0
  31. TTSs/{genshin → genshin_local/genshin}/bert/deberta-v2-large-japanese-char-wwm/.gitattributes +0 -0
  32. TTSs/{genshin → genshin_local/genshin}/bert/deberta-v2-large-japanese-char-wwm/README.md +0 -0
  33. TTSs/{genshin → genshin_local/genshin}/bert/deberta-v2-large-japanese-char-wwm/config.json +0 -0
  34. TTSs/{genshin → genshin_local/genshin}/bert/deberta-v2-large-japanese-char-wwm/special_tokens_map.json +0 -0
  35. TTSs/{genshin → genshin_local/genshin}/bert/deberta-v2-large-japanese-char-wwm/tokenizer_config.json +0 -0
  36. TTSs/{genshin → genshin_local/genshin}/bert/deberta-v2-large-japanese-char-wwm/vocab.txt +0 -0
  37. TTSs/{genshin → genshin_local/genshin}/bert/deberta-v2-large-japanese/.gitattributes +0 -0
  38. TTSs/{genshin → genshin_local/genshin}/bert/deberta-v2-large-japanese/README.md +0 -0
  39. TTSs/{genshin → genshin_local/genshin}/bert/deberta-v2-large-japanese/config.json +0 -0
  40. TTSs/{genshin → genshin_local/genshin}/bert/deberta-v2-large-japanese/special_tokens_map.json +0 -0
  41. TTSs/{genshin → genshin_local/genshin}/bert/deberta-v2-large-japanese/tokenizer.json +0 -0
  42. TTSs/{genshin → genshin_local/genshin}/bert/deberta-v2-large-japanese/tokenizer_config.json +0 -0
  43. TTSs/{genshin → genshin_local/genshin}/bert/deberta-v3-large/.gitattributes +0 -0
  44. TTSs/{genshin → genshin_local/genshin}/bert/deberta-v3-large/README.md +0 -0
  45. TTSs/{genshin → genshin_local/genshin}/bert/deberta-v3-large/config.json +0 -0
  46. TTSs/{genshin → genshin_local/genshin}/bert/deberta-v3-large/generator_config.json +0 -0
  47. TTSs/{genshin → genshin_local/genshin}/bert/deberta-v3-large/tokenizer_config.json +0 -0
  48. TTSs/{genshin → genshin_local/genshin}/bert_gen.py +0 -0
  49. TTSs/{genshin → genshin_local/genshin}/clap_gen.py +0 -0
  50. TTSs/{genshin → genshin_local/genshin}/clap_wrapper.py +0 -0
TTSs/base_tts.py ADDED
@@ -0,0 +1,141 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import abc
2
+ import io
3
+ import scipy.io.wavfile as wavfile
4
+ from pydub import AudioSegment
5
+
6
+ import gradio as gr
7
+
8
+
9
+
10
+ def mix_background_music(original_audio, 背景音乐, TTS_up, bg_up):
11
+ original_audio = original_audio + TTS_up
12
+
13
+ ori_out = io.BytesIO()
14
+ original_audio.export(ori_out, format="mp3")
15
+ ori_out.seek(0)
16
+ original_audio_bytes = ori_out.read()
17
+
18
+ if 背景音乐 is None: # 没有背景音乐
19
+ return original_audio_bytes, None
20
+
21
+ else: # 有背景音乐
22
+ # 读取用户上传的背景音乐文件
23
+ wav_io = io.BytesIO()
24
+ wavfile.write(wav_io, 背景音乐[0], 背景音乐[1])
25
+ wav_io.seek(0)
26
+ background_music = AudioSegment.from_wav(wav_io)
27
+
28
+ background_music = background_music + bg_up
29
+
30
+ # 将背景音乐合并到原始音频中
31
+ combined = original_audio.overlay(background_music)
32
+
33
+ # 使用BytesIO导出合并后的音频为字节串
34
+ mix_out = io.BytesIO()
35
+ combined.export(mix_out, format="mp3")
36
+ mix_out.seek(0) # 重置指针到开始位置
37
+ combined_audio_bytes = mix_out.read()
38
+
39
+ return original_audio_bytes, combined_audio_bytes
40
+
41
+ class Base_TTS(metaclass=abc.ABCMeta):
42
+ default_show = False
43
+
44
+ @abc.abstractmethod
45
+ def _get_config_page(self):
46
+ """要求返回2个参数:config和inputs
47
+ config: gr.Group对象,用于包裹所有的输入项
48
+ inputs: 一个列表,包含所有的输入项,用于后续的事件绑定,列表的顺序必须和后续_generate方法中参数args的顺序一致
49
+
50
+ 例如:
51
+ :return: config, inputs
52
+ """
53
+
54
+ @abc.abstractmethod
55
+ def _generate(self, text, *args):
56
+ """要求返回一个AudioSegment对象
57
+
58
+ :param text: str,要转换为语音的文本
59
+ :param args: 其他参数,与_get_config_page方法中的inputs一一对应
60
+
61
+ :return: original_audio
62
+
63
+ 示例:
64
+ original_audio = AudioSegment.from_file(io.BytesIO(original_audio_bytes), format="mp3")
65
+ return original_audio
66
+ """
67
+
68
+ @abc.abstractmethod
69
+ def get_name(self):
70
+ """要求返回一个str,是TTS的名称
71
+
72
+ :return: name
73
+
74
+ 示例:
75
+ return '原神语音合成引擎'
76
+ """
77
+
78
+ def is_show(self):
79
+ """
80
+ 是否显示这个TTS
81
+
82
+ :return: True or False
83
+ """
84
+ return True
85
+
86
+ def _get_submit_button(self):
87
+ """
88
+ 要求返回1个参数:btn
89
+ btn: gr.Button对象,是提交按钮
90
+
91
+ :return: btn
92
+ """
93
+ btn = gr.Button(value="test提交", variant="primary", interactive=True, visible=False)
94
+ return btn
95
+
96
+ def get_config_page(self):
97
+ self.config, self.inputs = self._get_config_page()
98
+ if self.default_show:
99
+ self.config.visible = True
100
+ else:
101
+ self.config.visible = False
102
+
103
+ def get_submit_button(self):
104
+ self.btn = self._get_submit_button()
105
+ if self.default_show:
106
+ self.btn.visible = True
107
+ else:
108
+ self.btn.visible = False
109
+
110
+ def set_visible(self, visible: bool):
111
+ # 检查是否已经获取了config和btn
112
+ if not hasattr(self, 'config') or not hasattr(self, 'btn'):
113
+ raise Exception('请先调用get_config_page和get_submit_button方法')
114
+
115
+ self.btn.visible = visible
116
+ self.config.visible = visible
117
+
118
+ def create_interface_event(self, text, audio, TTS_up, bg_up, text_output, ori_audio_output, mix_audio_output):
119
+ """如果交互方法只是的点击提交按钮,可以不用重写这个方法"""
120
+
121
+ # 检查是否已经获取了config和btn
122
+ if not hasattr(self, 'config') or not hasattr(self, 'btn'):
123
+ raise Exception('请先调用get_config_page和get_submit_button方法')
124
+
125
+ self.btn.click(self.generate, inputs=[
126
+ text,
127
+ audio,
128
+ TTS_up,
129
+ bg_up
130
+ ] + self.inputs,
131
+ outputs=[text_output, ori_audio_output, mix_audio_output])
132
+
133
+ def generate(self, text, 背景音乐, TTS_up, bg_up, *args):
134
+ try:
135
+ original_audio = self._generate(text, *args)
136
+
137
+ return None, *mix_background_music(original_audio, 背景音乐, TTS_up, bg_up)
138
+ except Exception as e:
139
+ return str(e), None, None
140
+
141
+
TTSs/elevenlabs_tts.py CHANGED
@@ -1,20 +1,68 @@
1
  import io
2
- import json
3
 
4
- import requests
5
  from elevenlabs import voices, generate, set_api_key, VoiceSettings, Voice
6
  from pydub import AudioSegment
7
 
8
- from .tts_utils import mix_background_music
9
-
10
-
11
- def merge_audio(token, text, 背景音乐, 音色选择, stability, similarity_boost, style, use_speaker_boost, TTS_up, bg_up):
12
- try:
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
13
  set_api_key(token)
14
 
15
  original_audio_bytes = generate(
16
  text=text,
17
- voice=Voice(voice_id=voices_eleven[speakers_eleven[音色选择]].voice_id,
18
  settings=VoiceSettings(stability=stability, similarity_boost=similarity_boost, style=style,
19
  use_speaker_boost=use_speaker_boost)),
20
  model="eleven_multilingual_v2",
@@ -23,44 +71,36 @@ def merge_audio(token, text, 背景音乐, 音色选择, stability, similarity_b
23
 
24
  # 将字节串转换为AudioSegment对象
25
  original_audio = AudioSegment.from_file(io.BytesIO(original_audio_bytes), format="mp3")
26
-
27
- return None, *mix_background_music(original_audio, 背景音乐, TTS_up, bg_up)
28
- except Exception as e:
29
- return str(e), None, None
30
-
31
-
32
- def get_eleven_spk():
33
- try:
34
- voices_eleven = voices()
35
- speakers_eleven = {}
36
- for i, v in enumerate(voices_eleven):
37
- label = {}
38
- label['口音'] = v.labels.get('accent')
39
-
40
- if 'description ' in v.labels:
41
- label['描述'] = v.labels['description ']
42
- elif 'description' in v.labels:
43
- label['描述'] = v.labels['description']
44
-
45
- label['年龄'] = v.labels['age']
46
- label['性别'] = v.labels['gender']
47
-
48
- if 'use case' in v.labels:
49
- label['用例'] = v.labels['use case']
50
- elif 'usecase' in v.labels:
51
- label['用例'] = v.labels['usecase']
52
- else:
53
- raise Exception('use case not found')
54
-
55
- key = v.name + '-' + str(label)
56
- speakers_eleven[key] = i
57
- select_key = list(speakers_eleven.keys())
58
-
59
- return voices_eleven, speakers_eleven, select_key
60
- except Exception as e:
61
- print(e)
62
- return [], {'获取音色失败': '获取音色失败'}, ['获取音色失败']
63
-
64
-
65
-
66
- voices_eleven, speakers_eleven, select_key = get_eleven_spk()
 
1
  import io
2
+ import os
3
 
4
+ import gradio as gr
5
  from elevenlabs import voices, generate, set_api_key, VoiceSettings, Voice
6
  from pydub import AudioSegment
7
 
8
+ from TTSs.base_tts import Base_TTS
9
+
10
+
11
+ class eleven_TTS(Base_TTS):
12
+ def __init__(self):
13
+ self.voices_eleven, self.speakers_eleven, self.select_key = self.get_eleven_spk()
14
+
15
+ def get_name(self):
16
+ return 'ElevenLabs'
17
+
18
+ def _get_config_page(self):
19
+ with gr.Group(visible=False) as config:
20
+ with gr.Row():
21
+ elevenlabs_api_key = gr.Textbox(label="elevenlabs的API Key(默认为环境变量值)",
22
+ placeholder="请输入elevenlabs的API Key",
23
+ type="password",
24
+ interactive=True,
25
+ value=os.environ.get('ELEVENLABS_API_KEY', ''))
26
+ speaker_eleven = gr.Dropdown(choices=self.select_key,
27
+ value=self.select_key[0], label="音色选择",
28
+ interactive=True)
29
+ with gr.Blocks():
30
+ with gr.Row():
31
+ stability = gr.Slider(minimum=0, maximum=1, value=0.5, label='stability', interactive=True)
32
+ similarity_boost = gr.Slider(minimum=0, maximum=1, value=0.75, label='similarity_boost',
33
+ interactive=True)
34
+
35
+ with gr.Row():
36
+ style = gr.Slider(minimum=0, maximum=1, value=0, label='style', interactive=True)
37
+ use_speaker_boost = gr.Checkbox(label="Use Speaker Boost", value=True, interactive=True)
38
+
39
+ inputs = [
40
+ elevenlabs_api_key,
41
+ speaker_eleven,
42
+ stability,
43
+ similarity_boost,
44
+ style,
45
+ use_speaker_boost
46
+ ]
47
+
48
+ return config, inputs
49
+
50
+ def _get_submit_button(self):
51
+ """
52
+ 要求返回1个参数:btn
53
+ btn: gr.Button对象,是提交按钮
54
+
55
+ :return: btn
56
+ """
57
+ btn = gr.Button(value="ElevenLabs提交", variant="primary", interactive=True, visible=False)
58
+ return btn
59
+
60
+ def _generate(self, text, token, 音色选择, stability, similarity_boost, style, use_speaker_boost):
61
  set_api_key(token)
62
 
63
  original_audio_bytes = generate(
64
  text=text,
65
+ voice=Voice(voice_id=self.voices_eleven[self.speakers_eleven[音色选择]].voice_id,
66
  settings=VoiceSettings(stability=stability, similarity_boost=similarity_boost, style=style,
67
  use_speaker_boost=use_speaker_boost)),
68
  model="eleven_multilingual_v2",
 
71
 
72
  # 将字节串转换为AudioSegment对象
73
  original_audio = AudioSegment.from_file(io.BytesIO(original_audio_bytes), format="mp3")
74
+ return original_audio
75
+
76
+ def get_eleven_spk(self):
77
+ try:
78
+ voices_eleven = voices()
79
+ speakers_eleven = {}
80
+ for i, v in enumerate(voices_eleven):
81
+ label = {}
82
+ label['口音'] = v.labels.get('accent')
83
+
84
+ if 'description ' in v.labels:
85
+ label['描述'] = v.labels['description ']
86
+ elif 'description' in v.labels:
87
+ label['描述'] = v.labels['description']
88
+
89
+ label['年龄'] = v.labels['age']
90
+ label['性别'] = v.labels['gender']
91
+
92
+ if 'use case' in v.labels:
93
+ label['用例'] = v.labels['use case']
94
+ elif 'usecase' in v.labels:
95
+ label['用例'] = v.labels['usecase']
96
+ else:
97
+ raise Exception('use case not found')
98
+
99
+ key = v.name + '-' + str(label)
100
+ speakers_eleven[key] = i
101
+ select_key = list(speakers_eleven.keys())
102
+
103
+ return voices_eleven, speakers_eleven, select_key
104
+ except Exception as e:
105
+ print(e)
106
+ return [], {'获取音色失败': '获取音色失败'}, ['获取音色失败']
 
 
 
 
 
 
 
 
TTSs/genshin_api_tts.py CHANGED
@@ -1,46 +1,95 @@
1
  import io
2
  import json
 
3
 
 
4
  import requests
5
  from pydub import AudioSegment
6
 
7
- from .tts_utils import mix_background_music
8
 
9
 
10
- def infer(token, appid, speaker, text, sdp, noise, noisew, length, 背景音乐, speaker_up, back_up):
11
- try:
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
12
  speed = (100 - length) / 100
13
  headers = {'Content-Type': 'application/json'}
14
  infer_info = {'lang': 'zh', 'appid': appid, 'token': token, 'speaker': speaker, 'text': text,
15
  'sdp_ratio': sdp, 'noise': noise, 'noisew': noisew, 'length': speed}
16
- resp = requests.post(url=f"{genshin_api}/api/ex/vits", headers=headers,
17
  data=json.dumps(infer_info))
18
  data = json.loads(resp.text)
19
 
20
  wmv_file = requests.get(data["audio"]).content
21
 
22
  original_audio = AudioSegment.from_wav(io.BytesIO(wmv_file))
 
23
 
24
- return data["message"].replace("\\n", "\n"), *mix_background_music(original_audio, 背景音乐, speaker_up,
25
- back_up)
26
- except Exception as e:
27
- return str(e), None, None
28
-
29
-
30
- def get_spk():
31
- resp = requests.get(url=f"{genshin_api}/spklist/spks.json")
32
- data = json.loads(resp.text)
33
- return data
34
-
35
-
36
- def search_speaker(search_value):
37
- for s in speakers_genshin:
38
- if search_value == s:
39
- return s
40
- for s in speakers_genshin:
41
- if search_value in s:
42
- return s
43
-
44
 
45
- genshin_api = "https://tirs.ai-lab.top"
46
- speakers_genshin = get_spk()
 
 
 
 
 
 
1
  import io
2
  import json
3
+ import os
4
 
5
+ import gradio as gr
6
  import requests
7
  from pydub import AudioSegment
8
 
9
+ from TTSs.base_tts import Base_TTS
10
 
11
 
12
+ class genshin_api_TTS(Base_TTS):
13
+ def __init__(self):
14
+ self.genshin_api = "https://tirs.ai-lab.top"
15
+ self.speakers_genshin = self.get_spk()
16
+
17
+ def get_name(self):
18
+ return '原神语音合成-api'
19
+
20
+ def _get_submit_button(self):
21
+ """
22
+ 要求返回1个参数:btn
23
+ btn: gr.Button对象,是提交按钮
24
+
25
+ :return: btn
26
+ """
27
+ btn = gr.Button(value="原神提交", variant="primary", interactive=True, visible=False)
28
+ return btn
29
+
30
+ def _get_config_page(self):
31
+ with gr.Group(visible=False) as config_genshin_api:
32
+ gr.Markdown('原作者:https://modelscope.cn/studios/erythrocyte/Bert-VITS2_Genshin_TTS/summary')
33
+ with gr.Row():
34
+ token = gr.Textbox(label="AccessToken", placeholder="请输入AccessToken",
35
+ type="password",
36
+ interactive=True, value=os.environ.get('GENSHIN_API_KEY', ''))
37
+ appid = gr.Textbox(label="AppID", placeholder="请输入AppID", interactive=True,
38
+ value='ig8t76x6036h3hpw')
39
+ with gr.Row():
40
+ gr.Markdown(
41
+ "AppID不要改,AccessToken最好换自己的。")
42
+
43
+ with gr.Row():
44
+ speaker = gr.Dropdown(choices=self.speakers_genshin,
45
+ value=self.speakers_genshin[0], label="角色",
46
+ interactive=True)
47
+ search = gr.Textbox(label="搜索角色", lines=1, interactive=True)
48
+ btn2 = gr.Button(value="搜索")
49
+ with gr.Column():
50
+ with gr.Row():
51
+ sdp_ratio = gr.Slider(minimum=0, maximum=1, value=0.2, step=0.1, label="SDP/DP 混合比",
52
+ interactive=True)
53
+ noise_scale = gr.Slider(minimum=0.1, maximum=2, value=0.6, step=0.1, label="感情",
54
+ interactive=True)
55
+ with gr.Row():
56
+ noise_scale_w = gr.Slider(minimum=0.1, maximum=2, value=0.8, step=0.1, label="音素长度",
57
+ interactive=True)
58
+ length_scale = gr.Slider(minimum=-99, maximum=99, value=0, step=0.1, label="语速(%)",
59
+ interactive=True)
60
+
61
+ btn2.click(self.search_speaker, inputs=[search], outputs=[speaker])
62
+
63
+ inputs = [
64
+ token, appid, speaker, sdp_ratio, noise_scale, noise_scale_w,
65
+ length_scale
66
+ ]
67
+
68
+ return config_genshin_api, inputs
69
+
70
+ def _generate(self, text, token, appid, speaker, sdp, noise, noisew, length):
71
  speed = (100 - length) / 100
72
  headers = {'Content-Type': 'application/json'}
73
  infer_info = {'lang': 'zh', 'appid': appid, 'token': token, 'speaker': speaker, 'text': text,
74
  'sdp_ratio': sdp, 'noise': noise, 'noisew': noisew, 'length': speed}
75
+ resp = requests.post(url=f"{self.genshin_api}/api/ex/vits", headers=headers,
76
  data=json.dumps(infer_info))
77
  data = json.loads(resp.text)
78
 
79
  wmv_file = requests.get(data["audio"]).content
80
 
81
  original_audio = AudioSegment.from_wav(io.BytesIO(wmv_file))
82
+ return original_audio
83
 
84
+ def get_spk(self):
85
+ resp = requests.get(url=f"{self.genshin_api}/spklist/spks.json")
86
+ data = json.loads(resp.text)
87
+ return data
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
88
 
89
+ def search_speaker(self, search_value):
90
+ for s in self.speakers_genshin:
91
+ if search_value == s:
92
+ return s
93
+ for s in self.speakers_genshin:
94
+ if search_value in s:
95
+ return s
TTSs/genshin_local/__init__.py ADDED
@@ -0,0 +1 @@
 
 
1
+ from .genshin_local_tts import genshin_local_TTS
TTSs/{genshin → genshin_local/genshin}/.gitignore RENAMED
File without changes
TTSs/{genshin → genshin_local/genshin}/.gitmodules RENAMED
File without changes
TTSs/{genshin → genshin_local/genshin}/.pre-commit-config.yaml RENAMED
File without changes
TTSs/{genshin → genshin_local/genshin}/LICENSE RENAMED
File without changes
TTSs/{genshin → genshin_local/genshin}/README.md RENAMED
File without changes
TTSs/{genshin → genshin_local/genshin}/__init__.py RENAMED
File without changes
TTSs/{genshin → genshin_local/genshin}/attentions.py RENAMED
File without changes
TTSs/{genshin → genshin_local/genshin}/bert/bert-base-japanese-v3/.gitattributes RENAMED
File without changes
TTSs/{genshin → genshin_local/genshin}/bert/bert-base-japanese-v3/README.md RENAMED
File without changes
TTSs/{genshin → genshin_local/genshin}/bert/bert-base-japanese-v3/config.json RENAMED
File without changes
TTSs/{genshin → genshin_local/genshin}/bert/bert-base-japanese-v3/tokenizer_config.json RENAMED
File without changes
TTSs/{genshin → genshin_local/genshin}/bert/bert-base-japanese-v3/vocab.txt RENAMED
File without changes
TTSs/{genshin → genshin_local/genshin}/bert/bert-large-japanese-v2/.gitattributes RENAMED
File without changes
TTSs/{genshin → genshin_local/genshin}/bert/bert-large-japanese-v2/README.md RENAMED
File without changes
TTSs/{genshin → genshin_local/genshin}/bert/bert-large-japanese-v2/config.json RENAMED
File without changes
TTSs/{genshin → genshin_local/genshin}/bert/bert-large-japanese-v2/tokenizer_config.json RENAMED
File without changes
TTSs/{genshin → genshin_local/genshin}/bert/bert-large-japanese-v2/vocab.txt RENAMED
File without changes
TTSs/{genshin → genshin_local/genshin}/bert/bert_models.json RENAMED
File without changes
TTSs/{genshin → genshin_local/genshin}/bert/chinese-roberta-wwm-ext-large/.gitattributes RENAMED
File without changes
TTSs/{genshin → genshin_local/genshin}/bert/chinese-roberta-wwm-ext-large/README.md RENAMED
File without changes
TTSs/{genshin → genshin_local/genshin}/bert/chinese-roberta-wwm-ext-large/added_tokens.json RENAMED
File without changes
TTSs/{genshin → genshin_local/genshin}/bert/chinese-roberta-wwm-ext-large/config.json RENAMED
File without changes
TTSs/{genshin → genshin_local/genshin}/bert/chinese-roberta-wwm-ext-large/special_tokens_map.json RENAMED
File without changes
TTSs/{genshin → genshin_local/genshin}/bert/chinese-roberta-wwm-ext-large/tokenizer.json RENAMED
File without changes
TTSs/{genshin → genshin_local/genshin}/bert/chinese-roberta-wwm-ext-large/tokenizer_config.json RENAMED
File without changes
TTSs/{genshin → genshin_local/genshin}/bert/chinese-roberta-wwm-ext-large/vocab.txt RENAMED
File without changes
TTSs/{genshin → genshin_local/genshin}/bert/deberta-v2-large-japanese-char-wwm/.gitattributes RENAMED
File without changes
TTSs/{genshin → genshin_local/genshin}/bert/deberta-v2-large-japanese-char-wwm/README.md RENAMED
File without changes
TTSs/{genshin → genshin_local/genshin}/bert/deberta-v2-large-japanese-char-wwm/config.json RENAMED
File without changes
TTSs/{genshin → genshin_local/genshin}/bert/deberta-v2-large-japanese-char-wwm/special_tokens_map.json RENAMED
File without changes
TTSs/{genshin → genshin_local/genshin}/bert/deberta-v2-large-japanese-char-wwm/tokenizer_config.json RENAMED
File without changes
TTSs/{genshin → genshin_local/genshin}/bert/deberta-v2-large-japanese-char-wwm/vocab.txt RENAMED
File without changes
TTSs/{genshin → genshin_local/genshin}/bert/deberta-v2-large-japanese/.gitattributes RENAMED
File without changes
TTSs/{genshin → genshin_local/genshin}/bert/deberta-v2-large-japanese/README.md RENAMED
File without changes
TTSs/{genshin → genshin_local/genshin}/bert/deberta-v2-large-japanese/config.json RENAMED
File without changes
TTSs/{genshin → genshin_local/genshin}/bert/deberta-v2-large-japanese/special_tokens_map.json RENAMED
File without changes
TTSs/{genshin → genshin_local/genshin}/bert/deberta-v2-large-japanese/tokenizer.json RENAMED
File without changes
TTSs/{genshin → genshin_local/genshin}/bert/deberta-v2-large-japanese/tokenizer_config.json RENAMED
File without changes
TTSs/{genshin → genshin_local/genshin}/bert/deberta-v3-large/.gitattributes RENAMED
File without changes
TTSs/{genshin → genshin_local/genshin}/bert/deberta-v3-large/README.md RENAMED
File without changes
TTSs/{genshin → genshin_local/genshin}/bert/deberta-v3-large/config.json RENAMED
File without changes
TTSs/{genshin → genshin_local/genshin}/bert/deberta-v3-large/generator_config.json RENAMED
File without changes
TTSs/{genshin → genshin_local/genshin}/bert/deberta-v3-large/tokenizer_config.json RENAMED
File without changes
TTSs/{genshin → genshin_local/genshin}/bert_gen.py RENAMED
File without changes
TTSs/{genshin → genshin_local/genshin}/clap_gen.py RENAMED
File without changes
TTSs/{genshin → genshin_local/genshin}/clap_wrapper.py RENAMED
File without changes