Spaces:
Sleeping
Sleeping
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'] | |
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') |