Spaces:
Sleeping
Sleeping
File size: 2,243 Bytes
f30e274 bd4b687 f30e274 bd4b687 5e5f797 bd4b687 |
1 2 3 4 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 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 |
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') |