Spaces:
Runtime error
Runtime error
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')
|