Spaces:
Sleeping
Sleeping
Update src/streamlit_app.py
Browse files- src/streamlit_app.py +74 -38
src/streamlit_app.py
CHANGED
@@ -1,40 +1,76 @@
|
|
1 |
-
import altair as alt
|
2 |
-
import numpy as np
|
3 |
-
import pandas as pd
|
4 |
import streamlit as st
|
|
|
|
|
|
|
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 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
import streamlit as st
|
2 |
+
from kokoro import KPipeline
|
3 |
+
import soundfile as sf
|
4 |
+
import tempfile
|
5 |
|
6 |
+
languages = ['American English','British English','Spanish','French','Italian']
|
7 |
+
flags = ['๐บ๐ธ','๐ฌ๐ง','๐ช๐ธ','๐ซ๐ท','๐ฎ๐น']
|
8 |
+
voices = ['af_heart','am_adam','bf_isabella','bm_lewis','ef_dora','em_alex','ff_siwis','if_sara','im_nicola']
|
9 |
+
|
10 |
+
@st.cache_resource
|
11 |
+
def model_setup(lang_code='a'):
|
12 |
+
return KPipeline(lang_code=lang_code)
|
13 |
+
|
14 |
+
### Title
|
15 |
+
st.title("Convert your text into audio")
|
16 |
+
st.subheader("with your options of language, speed and voice")
|
17 |
+
|
18 |
+
# Text
|
19 |
+
input_text = st.text_area(
|
20 |
+
"Your text:"
|
21 |
+
)
|
22 |
+
|
23 |
+
if input_text:
|
24 |
+
st.write(f"{len(input_text)} characters")
|
25 |
+
language = st.radio(
|
26 |
+
"Language:",
|
27 |
+
['']+[flag+lang for flag,lang in zip(flags,languages)],
|
28 |
+
)
|
29 |
+
|
30 |
+
# Language
|
31 |
+
if language:
|
32 |
+
match language[2:]:
|
33 |
+
case 'American English':
|
34 |
+
lang_code = 'a'
|
35 |
+
case 'British English':
|
36 |
+
lang_code = 'b'
|
37 |
+
case 'Spanish':
|
38 |
+
lang_code = 'e'
|
39 |
+
case 'French':
|
40 |
+
lang_code = 'f'
|
41 |
+
case 'Italian':
|
42 |
+
lang_code = 'i'
|
43 |
+
|
44 |
+
# Speed
|
45 |
+
speed = st.radio(
|
46 |
+
"Speed:",
|
47 |
+
['slow','normal','fast'],
|
48 |
+
index = 1
|
49 |
+
)
|
50 |
+
if speed == 'slow':
|
51 |
+
sp = 0.8
|
52 |
+
elif speed == 'normal':
|
53 |
+
sp = 1
|
54 |
+
elif speed == 'fast':
|
55 |
+
sp = 1.4
|
56 |
+
|
57 |
+
# Voice
|
58 |
+
voices_l = [voice for voice in voices if voice[0]==lang_code]
|
59 |
+
voices_gender = ['Female' if voice[1]=='f' else 'Male' for voice in voices_l]
|
60 |
+
voice = st.radio(
|
61 |
+
"Voice:",
|
62 |
+
['']+voices_gender,
|
63 |
+
)
|
64 |
+
if voice:
|
65 |
+
if voice == 'Female':
|
66 |
+
voice = voices_l[0]
|
67 |
+
else:
|
68 |
+
voice = voices_l[1]
|
69 |
+
|
70 |
+
pipeline = KPipeline(lang_code=lang_code)
|
71 |
+
generator = pipeline(input_text, voice=voice, speed=sp, split_pattern=r'')
|
72 |
+
|
73 |
+
for i,(_, _, audio) in enumerate(generator):
|
74 |
+
with tempfile.TemporaryDirectory() as temp_dir:
|
75 |
+
sf.write(temp_dir+'temp.wav', audio, 24000)
|
76 |
+
st.audio(temp_dir+'temp.wav')
|