Skip to content

image-20250412151418069

python
import streamlit as st
from kokoro import KPipeline
from IPython.display import display, Audio
import soundfile as sf
import os,time

def tts(text):
    pipeline = KPipeline(lang_code='z')   
    tts_dir = os.path.join(os.getcwd(), 'tts_voice') 
    if not os.path.exists(tts_dir):
        os.makedirs(tts_dir)
    voice_path = os.path.join(tts_dir,str(int(time.time())))
    generator = pipeline(
        text, voice='zm_yunxi',
        speed=1, split_pattern=r'\n+'
    )
    for i, (gs, ps, audio) in enumerate(generator):
        # print(i)  # i => index
        # print(gs) # gs => graphemes/text
        # print(ps) # ps => phonemes
        # display(Audio(data=audio, rate=24000, autoplay=False))
        sf.write(f'{voice_path}.wav', audio, 24000) # save each audio file
        st.audio(f'{voice_path}.wav', format="audio/mpeg", loop=False)

data = st.text_area("请输入要转换的文本",value="你好,我是Kokoro,一个基于LLM的语音播报工具。")

if st.button("转换"):
    with st.spinner("转换中...", show_time=True):
        tts(data)