Anew511/extras
0
1import io2import edge_tts3import asyncio4 5 6def get_voices():7 voices = asyncio.run(edge_tts.list_voices())8 return voices9 10 11async def _iterate_chunks(audio):12 async for chunk in audio.stream():13 if chunk["type"] == "audio":14 yield chunk["data"]15 16 17async def _async_generator_to_list(async_gen):18 result = []19 async for item in async_gen:20 result.append(item)21 return result22 23 24def generate_audio(text: str, voice: str, rate: int) -> bytes:25 sign = '+' if rate > 0 else '-'26 rate = f'{sign}{abs(rate)}%'27 audio = edge_tts.Communicate(text=text, voice=voice, rate=rate)28 chunks = asyncio.run(_async_generator_to_list(_iterate_chunks(audio)))29 buffer = io.BytesIO()30 31 for chunk in chunks:32 buffer.write(chunk)33 34 return buffer.getvalue()35 