Spaces:
Runtime error
Runtime error
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()) |