From bb0ae04976365fab0c2e18a7ff89d686ea7b5cd7 Mon Sep 17 00:00:00 2001 From: SillyLossy Date: Sat, 10 Jun 2023 15:37:37 +0300 Subject: [PATCH] Add rate to Edge TTS --- README.md | 2 +- server.py | 6 +++++- tts_edge.py | 6 ++++-- 3 files changed, 10 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 3bbe148..0e699f4 100644 --- a/README.md +++ b/README.md @@ -419,7 +419,7 @@ WAV audio file. `POST /api/edge-tts/generate` #### **Input** ``` -{ "text": "Text to narrate", "voice": "af-ZA-AdriNeural" } +{ "text": "Text to narrate", "voice": "af-ZA-AdriNeural", "rate": 0 } ``` #### **Output** MP3 audio file. diff --git a/server.py b/server.py index 71cdd70..852408a 100644 --- a/server.py +++ b/server.py @@ -676,10 +676,14 @@ def edge_tts_generate(): abort(400, '"text" is required') if "voice" not in data or not isinstance(data["voice"], str): abort(400, '"voice" is required') + if "rate" in data and isinstance(data['rate'], int): + rate = data['rate'] + else: + rate = 0 # Remove asterisks data["text"] = data["text"].replace("*", "") try: - audio = edge.generate_audio(text=data["text"], voice=data["voice"]) + audio = edge.generate_audio(text=data["text"], voice=data["voice"], rate=rate) return Response(audio, mimetype="audio/mpeg") except Exception as e: print(e) diff --git a/tts_edge.py b/tts_edge.py index a4004ac..7031e18 100644 --- a/tts_edge.py +++ b/tts_edge.py @@ -21,8 +21,10 @@ async def _async_generator_to_list(async_gen): return result -def generate_audio(text: str, voice: str) -> bytes: - audio = edge_tts.Communicate(text, voice) +def generate_audio(text: str, voice: str, rate: int) -> bytes: + sign = '+' if rate > 0 else '-' + rate = f'{sign}{abs(rate)}%' + audio = edge_tts.Communicate(text=text, voice=voice, rate=rate) chunks = asyncio.run(_async_generator_to_list(_iterate_chunks(audio))) buffer = io.BytesIO()