Spaces:
Runtime error
Runtime error
File size: 5,033 Bytes
14a6e16 c02528e 14a6e16 c02528e 14a6e16 c02528e 14a6e16 c02528e 14a6e16 c02528e 14a6e16 c02528e |
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 |
import io
import logging
import os
import traceback
import gradio as gr
import scipy.io.wavfile as wavfile
from pydub import AudioSegment
from TTSs.base_tts import Base_TTS
class genshin_local_TTS(Base_TTS):
def __init__(self):
if self.is_show():
try:
from .genshin_bg import speakers
from .genshin_bg import languages
from .genshin_bg import tts_fn
from .genshin_bg import change_dir
self.speakers_genshin_local = speakers
self.languages = languages
self.genshin_tts_fn = tts_fn
self.change_dir = change_dir
logging.info('导入原神本地语音合成模块成功')
except Exception as e:
traceback.print_exc()
logging.error('导入原神本地语音合成模块失败')
logging.error(e)
else:
logging.info('未启用原神本地语音合成模块')
def is_show(self):
if os.environ.get('USING_LOCAL', 'false').lower() == 'true':
return True
else:
return False
def get_name(self):
return '原神语音合成-local'
def _get_submit_button(self):
"""
要求返回1个参数:btn
btn: gr.Button对象,是提交按钮
:return: btn
"""
btn = gr.Button(value="原神语音合成(本地版)", variant="primary", interactive=True, visible=False)
return btn
def _get_config_page(self):
with gr.Group(visible=False) as config_genshin_local:
gr.Markdown('原作者:红血球AE3803\nhttps://space.bilibili.com/6589795/dynamic')
with gr.Row():
speaker_local = gr.Dropdown(choices=self.speakers_genshin_local, value=self.speakers_genshin_local[0],
label="角色",
interactive=True)
search_local = gr.Textbox(label="搜索角色", lines=1, interactive=True)
btn2 = gr.Button(value="搜索")
with gr.Column():
with gr.Row():
sdp_ratio_local = gr.Slider(minimum=0, maximum=1, value=0.5, step=0.1,
label="SDP Ratio",
interactive=True)
noise_scale_local = gr.Slider(minimum=0.1, maximum=2, value=0.6, step=0.1,
label="Noise",
interactive=True)
with gr.Row():
noise_scale_w_local = gr.Slider(minimum=0.1, maximum=2, value=0.9, step=0.1,
label="Noise_W",
interactive=True)
length_scale_local = gr.Slider(minimum=0.1, maximum=2, value=1.0, step=0.1,
label="Length",
interactive=True)
language_local = gr.Dropdown(
choices=self.languages, value=self.languages[0], label="Language", interactive=True
)
btn2.click(self.search_speaker, inputs=[search_local], outputs=[speaker_local])
inputs = [
speaker_local,
sdp_ratio_local,
noise_scale_local,
noise_scale_w_local,
length_scale_local,
language_local
]
return config_genshin_local, inputs
def _generate(self, text, speaker_local,
sdp_ratio_local,
noise_scale_local,
noise_scale_w_local,
length_scale_local,
language_local):
with self.change_dir():
ori_audio_data = self.genshin_tts_fn(text, speaker_local,
sdp_ratio_local,
noise_scale_local,
noise_scale_w_local,
length_scale_local,
language_local,
None, 'Happy',
'Text prompt',
'style_text',
0.7)[1]
wav_io = io.BytesIO()
wavfile.write(wav_io, ori_audio_data[0], ori_audio_data[1])
wav_io.seek(0)
original_audio = AudioSegment.from_wav(wav_io)
return original_audio
def search_speaker(self, search_value):
for s in self.speakers_genshin_local:
if search_value == s:
return s
for s in self.speakers_genshin_local:
if search_value in s:
return s
|