import io import edge_tts import asyncio def get_voices(): voices = asyncio.run(edge_tts.list_voices()) return voices async def _iterate_chunks(audio): async for chunk in audio.stream(): if chunk["type"] == "audio": yield chunk["data"] async def _async_generator_to_list(async_gen): result = [] async for item in async_gen: result.append(item) return result 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() for chunk in chunks: buffer.write(chunk) return buffer.getvalue()