File size: 2,121 Bytes
63f1d6d
 
 
 
 
 
 
49ccc00
75ff20e
63f1d6d
 
 
 
49ccc00
63f1d6d
49ccc00
63f1d6d
 
0a06be6
 
e445d26
63f1d6d
 
 
 
 
8529fe9
 
 
 
 
d81bde6
63f1d6d
 
49ccc00
3bc1862
d81bde6
63f1d6d
 
 
efdf9cb
 
0a06be6
 
63f1d6d
 
 
 
 
0a06be6
d81bde6
1bb3e36
63f1d6d
1c0e2fe
4f5115c
63f1d6d
 
 
8529fe9
 
 
 
 
63f1d6d
49ccc00
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
import gradio as gr
import edge_tts
import asyncio
import tempfile
import os

async def get_voices():
    voices = await edge_tts.list_voices()
    voices = [voice for voice in voices if voice.get("Locale") == "de-DE"]
    return {f"{v['ShortName']} - {v['Locale']} ({v['Gender']})": v['ShortName'] for v in voices}

async def text_to_speech(text, voice, rate, pitch):
    if not text.strip():
        return None, "Please enter text to convert."
    if not voice:
        return None, "Please select a voice."
    
    voice_short_name = voice.split(" - ")[0]
    rate_str = f"+0%"
    pitch_str = f"+0Hz"
    communicate = edge_tts.Communicate(text, voice_short_name, rate=rate_str, pitch=pitch_str)
    with tempfile.NamedTemporaryFile(delete=False, suffix=".mp3") as tmp_file:
        tmp_path = tmp_file.name
        await communicate.save(tmp_path)
    return tmp_path, None

async def tts_interface(text, voice, rate, pitch):
    audio, warning = await text_to_speech(text, voice, rate, pitch)
    if warning:
        return audio, gr.Warning(warning)
    return audio, None

async def create_demo():
    voices = await get_voices()
    
    description = ""
    
    demo = gr.Interface(
        fn=tts_interface,
        inputs=[
            gr.Textbox(label="Text", lines=5),
            gr.Dropdown(choices=[""] + list(voices.keys()), label="Stimme", value=""),
            #gr.Slider(minimum=-50, maximum=50, value=0, label="Speech Rate Adjustment (%)", step=1),
            #gr.Slider(minimum=-20, maximum=20, value=0, label="Pitch Adjustment (Hz)", step=1)
        ],
        outputs=[
            gr.Audio(label="Generated Audio", type="filepath"),
            gr.Markdown(label="Warning", visible=False)
        ],
        title="Text in mp3-Sprachdatei umwandeln",
        description=description,
        article="",
        analytics_enabled=False,
        allow_flagging="never",
        api_name=None
    )
    return demo

async def main():
    demo = await create_demo()
    demo.queue(default_concurrency_limit=5)
    demo.launch(show_api=False)

if __name__ == "__main__":
    asyncio.run(main())