Spaces:
Runtime error
Runtime error
Upload folder using huggingface_hub
Browse files- __pycache__/app.cpython-39.pyc +0 -0
- app.py +17 -13
- css/style.css +40 -14
- tools/__pycache__/webui.cpython-39.pyc +0 -0
- tools/webui.py +10 -0
__pycache__/app.cpython-39.pyc
ADDED
Binary file (4.77 kB). View file
|
|
app.py
CHANGED
@@ -21,7 +21,7 @@ import gradio as gr
|
|
21 |
import webbrowser
|
22 |
from config import config
|
23 |
from tools.translate import translate
|
24 |
-
from tools.webui import reload_javascript
|
25 |
|
26 |
device = config.webui_config.device
|
27 |
if device == "mps":
|
@@ -31,6 +31,7 @@ if device == "mps":
|
|
31 |
def speak_fn(
|
32 |
text: str,
|
33 |
exceed_flag,
|
|
|
34 |
speaker="TalkFlower_CNzh",
|
35 |
sdp_ratio=0.2, # SDP/DP混合比
|
36 |
noise_scale=0.6, # 感情
|
@@ -46,9 +47,9 @@ def speak_fn(
|
|
46 |
print(f"Too Long Text: {text}")
|
47 |
gr.Warning("Too long! No more than 100 characters. 一口气不要超过 100 个字,憋坏我了。")
|
48 |
if exceed_flag:
|
49 |
-
return gr.update(value="./assets/audios/nomorethan100.wav", autoplay=True), False
|
50 |
else:
|
51 |
-
return gr.update(value="./assets/audios/overlength.wav", autoplay=True), True
|
52 |
audio_list = []
|
53 |
if len(text) > 42:
|
54 |
print(f"Long Text: {text}")
|
@@ -103,7 +104,11 @@ def speak_fn(
|
|
103 |
audio_list.append(silence) # 将静音添加到列表中
|
104 |
|
105 |
audio_concat = np.concatenate(audio_list)
|
106 |
-
return (hps.data.sampling_rate, audio_concat), exceed_flag
|
|
|
|
|
|
|
|
|
107 |
|
108 |
|
109 |
def init_fn():
|
@@ -117,7 +122,8 @@ with open("./css/style.css", "r", encoding="utf-8") as f:
|
|
117 |
|
118 |
with gr.Blocks(css=customCSS) as demo:
|
119 |
exceed_flag = gr.State(value=False)
|
120 |
-
|
|
|
121 |
with gr.Tab("Speak", elem_id="tab-speak"):
|
122 |
speak_input = gr.Textbox(lines=1, label="Talking Flower will say:", elem_classes="wonder-card", elem_id="input_text")
|
123 |
speak_button = gr.Button("Speak!", elem_id="speak_button", elem_classes="main-button wonder-card")
|
@@ -138,14 +144,14 @@ with gr.Blocks(css=customCSS) as demo:
|
|
138 |
)
|
139 |
speak_input.submit(
|
140 |
speak_fn,
|
141 |
-
inputs=[speak_input, exceed_flag],
|
142 |
-
outputs=[audio_output, exceed_flag],
|
143 |
-
)
|
144 |
speak_button.click(
|
145 |
speak_fn,
|
146 |
-
inputs=[speak_input, exceed_flag],
|
147 |
-
outputs=[audio_output, exceed_flag],
|
148 |
-
)
|
149 |
|
150 |
|
151 |
if __name__ == "__main__":
|
@@ -156,7 +162,5 @@ if __name__ == "__main__":
|
|
156 |
demo.launch(
|
157 |
allowed_paths=["./assets"],
|
158 |
show_api=False,
|
159 |
-
# server_name=server_name,
|
160 |
-
# server_port=server_port,
|
161 |
inbrowser=True,
|
162 |
)
|
|
|
21 |
import webbrowser
|
22 |
from config import config
|
23 |
from tools.translate import translate
|
24 |
+
from tools.webui import reload_javascript, get_character_html
|
25 |
|
26 |
device = config.webui_config.device
|
27 |
if device == "mps":
|
|
|
31 |
def speak_fn(
|
32 |
text: str,
|
33 |
exceed_flag,
|
34 |
+
bubble_text,
|
35 |
speaker="TalkFlower_CNzh",
|
36 |
sdp_ratio=0.2, # SDP/DP混合比
|
37 |
noise_scale=0.6, # 感情
|
|
|
47 |
print(f"Too Long Text: {text}")
|
48 |
gr.Warning("Too long! No more than 100 characters. 一口气不要超过 100 个字,憋坏我了。")
|
49 |
if exceed_flag:
|
50 |
+
return gr.update(value="./assets/audios/nomorethan100.wav", autoplay=True), False, "不要超过100个字!"
|
51 |
else:
|
52 |
+
return gr.update(value="./assets/audios/overlength.wav", autoplay=True), True, "这句太长啦,憋坏我了!"
|
53 |
audio_list = []
|
54 |
if len(text) > 42:
|
55 |
print(f"Long Text: {text}")
|
|
|
104 |
audio_list.append(silence) # 将静音添加到列表中
|
105 |
|
106 |
audio_concat = np.concatenate(audio_list)
|
107 |
+
return (hps.data.sampling_rate, audio_concat), exceed_flag, text
|
108 |
+
|
109 |
+
|
110 |
+
def update_bubble_fn(text):
|
111 |
+
return gr.update(value=get_character_html(text))
|
112 |
|
113 |
|
114 |
def init_fn():
|
|
|
122 |
|
123 |
with gr.Blocks(css=customCSS) as demo:
|
124 |
exceed_flag = gr.State(value=False)
|
125 |
+
bubble_text = gr.State(value="你好呀!")
|
126 |
+
character_area = gr.HTML(get_character_html("你好呀!"), elem_id="character_area")
|
127 |
with gr.Tab("Speak", elem_id="tab-speak"):
|
128 |
speak_input = gr.Textbox(lines=1, label="Talking Flower will say:", elem_classes="wonder-card", elem_id="input_text")
|
129 |
speak_button = gr.Button("Speak!", elem_id="speak_button", elem_classes="main-button wonder-card")
|
|
|
144 |
)
|
145 |
speak_input.submit(
|
146 |
speak_fn,
|
147 |
+
inputs=[speak_input, exceed_flag, bubble_text],
|
148 |
+
outputs=[audio_output, exceed_flag, bubble_text],
|
149 |
+
).then(update_bubble_fn, inputs=[speak_input], outputs=[character_area], show_progress=False)
|
150 |
speak_button.click(
|
151 |
speak_fn,
|
152 |
+
inputs=[speak_input, exceed_flag, bubble_text],
|
153 |
+
outputs=[audio_output, exceed_flag, bubble_text],
|
154 |
+
).then(update_bubble_fn, inputs=[speak_input], outputs=[character_area], show_progress=False)
|
155 |
|
156 |
|
157 |
if __name__ == "__main__":
|
|
|
162 |
demo.launch(
|
163 |
allowed_paths=["./assets"],
|
164 |
show_api=False,
|
|
|
|
|
165 |
inbrowser=True,
|
166 |
)
|
css/style.css
CHANGED
@@ -63,11 +63,47 @@ gradio-app {
|
|
63 |
background-position: center center !important;
|
64 |
}
|
65 |
|
66 |
-
|
67 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
68 |
}
|
69 |
-
|
70 |
-
/* TalkingFlower Image */
|
71 |
#talking_flower_pic img {
|
72 |
height: 10rem;
|
73 |
}
|
@@ -129,16 +165,6 @@ gradio-app {
|
|
129 |
}
|
130 |
|
131 |
|
132 |
-
/* TalkingFlower Portrait */
|
133 |
-
#talking_flower_pic {
|
134 |
-
display: flex;
|
135 |
-
align-self: center !important;
|
136 |
-
width: var(--card-width) !important;
|
137 |
-
object-fit: cover !important;
|
138 |
-
object-position: center !important;
|
139 |
-
justify-content: flex-end;
|
140 |
-
}
|
141 |
-
|
142 |
.wonder-card {
|
143 |
--border-radius: 15px;
|
144 |
--border-color: var(--color-accent-black);
|
|
|
63 |
background-position: center center !important;
|
64 |
}
|
65 |
|
66 |
+
/* Character Row */
|
67 |
+
/* #character_row {
|
68 |
+
width: var(--card-width) !important;
|
69 |
+
align-self: center;
|
70 |
+
} */
|
71 |
+
#character_area {
|
72 |
+
width: var(--card-width) !important;
|
73 |
+
align-self: center;
|
74 |
+
}
|
75 |
+
.character {
|
76 |
+
display: flex;
|
77 |
+
flex-direction: row;
|
78 |
+
flex-wrap: nowrap;
|
79 |
+
justify-content: flex-end;
|
80 |
+
align-items: flex-start;
|
81 |
+
}
|
82 |
+
.text-bubble-content {
|
83 |
+
--color: #fff;
|
84 |
+
background: var(--color) !important;
|
85 |
+
border-radius: 1rem;
|
86 |
+
padding: 0.5rem 1rem !important;
|
87 |
+
box-shadow: #00000078 0.1rem 0.1rem 0.75rem 0px;
|
88 |
+
text-align: center;
|
89 |
+
}
|
90 |
+
.text-bubble-content::after {
|
91 |
+
border: 0.75em solid transparent;
|
92 |
+
border-top: 1.5em solid #ffffff;
|
93 |
+
content: "";
|
94 |
+
position: absolute;
|
95 |
+
left: calc(100% - 12em);
|
96 |
+
top: calc(100% - 9.75em);
|
97 |
+
transform: rotate(-45deg);
|
98 |
+
}
|
99 |
+
#talking_flower_pic {
|
100 |
+
display: flex;
|
101 |
+
align-self: center !important;
|
102 |
+
object-fit: cover !important;
|
103 |
+
object-position: center !important;
|
104 |
+
justify-content: flex-end;
|
105 |
+
height: 10rem;
|
106 |
}
|
|
|
|
|
107 |
#talking_flower_pic img {
|
108 |
height: 10rem;
|
109 |
}
|
|
|
165 |
}
|
166 |
|
167 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
168 |
.wonder-card {
|
169 |
--border-radius: 15px;
|
170 |
--border-color: var(--color-accent-black);
|
tools/__pycache__/webui.cpython-39.pyc
CHANGED
Binary files a/tools/__pycache__/webui.cpython-39.pyc and b/tools/__pycache__/webui.cpython-39.pyc differ
|
|
tools/webui.py
CHANGED
@@ -4,6 +4,16 @@ import os
|
|
4 |
GradioTemplateResponseOriginal = gr.routes.templates.TemplateResponse
|
5 |
root_path = os.path.dirname(os.path.realpath(__file__))
|
6 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
7 |
def webpath(fn):
|
8 |
if fn.startswith(root_path):
|
9 |
web_path = os.path.relpath(fn, root_path).replace('\\', '/')
|
|
|
4 |
GradioTemplateResponseOriginal = gr.routes.templates.TemplateResponse
|
5 |
root_path = os.path.dirname(os.path.realpath(__file__))
|
6 |
|
7 |
+
def get_character_html(text):
|
8 |
+
return f"""\
|
9 |
+
<div class="character">
|
10 |
+
<span class="text-bubble-content">
|
11 |
+
{text}
|
12 |
+
</span>
|
13 |
+
<img src="file=assets/flower-2x.webp" id="talking_flower_pic" alt="TalkingFlowerPic">
|
14 |
+
</div>
|
15 |
+
"""
|
16 |
+
|
17 |
def webpath(fn):
|
18 |
if fn.startswith(root_path):
|
19 |
web_path = os.path.relpath(fn, root_path).replace('\\', '/')
|