Spaces:
Build error
Build error
import asyncio | |
import os | |
from concurrent.futures import ThreadPoolExecutor | |
import edge_tts | |
from shortGPT.audio.voice_module import VoiceModule | |
from shortGPT.config.languages import (EDGE_TTS_VOICENAME_MAPPING, | |
LANGUAGE_ACRONYM_MAPPING, Language) | |
def run_async_func(loop, func): | |
return loop.run_until_complete(func) | |
class EdgeTTSVoiceModule(VoiceModule): | |
def __init__(self, voiceName): | |
self.voiceName = voiceName | |
super().__init__() | |
def update_usage(self): | |
return None | |
def get_remaining_characters(self): | |
return 999999999999 | |
def generate_voice(self, text, outputfile): | |
loop = asyncio.new_event_loop() | |
asyncio.set_event_loop(loop) | |
try: | |
with ThreadPoolExecutor() as executor: | |
loop.run_in_executor(executor, run_async_func, loop, self.async_generate_voice(text, outputfile)) | |
finally: | |
loop.close() | |
if not os.path.exists(outputfile): | |
print("An error happened during edge_tts audio generation, no output audio generated") | |
raise Exception("An error happened during edge_tts audio generation, no output audio generated") | |
return outputfile | |
async def async_generate_voice(self, text, outputfile): | |
try: | |
communicate = edge_tts.Communicate(text, self.voiceName) | |
with open(outputfile, "wb") as file: | |
async for chunk in communicate.stream(): | |
if chunk["type"] == "audio": | |
file.write(chunk["data"]) | |
except Exception as e: | |
print("Error generating audio using edge_tts", e) | |
raise Exception("An error happened during edge_tts audio generation, no output audio generated", e) | |
return outputfile | |