text2audio / src /streamlit_app.py
myyim's picture
Update src/streamlit_app.py
5e5f797 verified
raw
history blame
2.24 kB
import streamlit as st
from kokoro import KPipeline
import soundfile as sf
import tempfile
languages = ['American English','British English','Spanish','French','Italian']
flags = ['๐Ÿ‡บ๐Ÿ‡ธ','๐Ÿ‡ฌ๐Ÿ‡ง','๐Ÿ‡ช๐Ÿ‡ธ','๐Ÿ‡ซ๐Ÿ‡ท','๐Ÿ‡ฎ๐Ÿ‡น']
voices = ['af_heart','am_adam','bf_isabella','bm_lewis','ef_dora','em_alex','ff_siwis','if_sara','im_nicola']
@st.cache_resource
def model_setup(lang_code='a'):
return KPipeline(lang_code=lang_code)
### Title
st.title("Convert your text into audio")
st.subheader("with your options of language, speed and voice")
# Text
input_text = st.text_area(
"Your text:"
)
if input_text:
st.write(f"{len(input_text)} characters")
language = st.radio(
"Language:",
['']+[flag+lang for flag,lang in zip(flags,languages)],
)
# Language
if language:
lang = language[2:]
if lang == 'American English':
lang_code = 'a'
elif lang == 'British English':
lang_code = 'b'
elif lang == 'Spanish':
lang_code = 'e'
elif lang == 'French':
lang_code = 'f'
elif lang == 'Italian':
lang_code = 'i'
# Speed
speed = st.radio(
"Speed:",
['slow','normal','fast'],
index = 1
)
if speed == 'slow':
sp = 0.8
elif speed == 'normal':
sp = 1
elif speed == 'fast':
sp = 1.4
# Voice
voices_l = [voice for voice in voices if voice[0]==lang_code]
voices_gender = ['Female' if voice[1]=='f' else 'Male' for voice in voices_l]
voice = st.radio(
"Voice:",
['']+voices_gender,
)
if voice:
if voice == 'Female':
voice = voices_l[0]
else:
voice = voices_l[1]
pipeline = KPipeline(lang_code=lang_code)
generator = pipeline(input_text, voice=voice, speed=sp, split_pattern=r'')
for i,(_, _, audio) in enumerate(generator):
with tempfile.TemporaryDirectory() as temp_dir:
sf.write(temp_dir+'temp.wav', audio, 24000)
st.audio(temp_dir+'temp.wav')