rany2 / edge-tts

Use Microsoft Edge's online text-to-speech service from Python WITHOUT needing Microsoft Edge or Windows or an API key
https://pypi.org/project/edge-tts/
GNU General Public License v3.0
4.21k stars 444 forks source link

Add sync versions of stream and save methods #215

Closed lzieniew closed 2 months ago

lzieniew commented 2 months ago

This pull request should solve the issue: https://github.com/rany2/edge-tts/issues/194 The implementation is a bit more complicated than the simplest asyncio.run() of the save and stream methods. That's because I've wanted to use this synchronous interface in my Fastapi app, and simple asyncio.run() would give me errors that the event loop is alread running. That's because Fastapi is itself async, and I would run synchronous function inside async fastapi handler, and then from this synchronous function I wanted to call edge-tts generation. I've reproduced similar scenario in two example files: examples/sync_audio_generation_in_async_context.py and examples/sync_audio_stream_in_async_context.py. I've roughly checked the performance of my solution and from what I've saw there should be no visible performance hit when using ThreadPoolExecutor instead of just asyncio.run().

rany2 commented 2 months ago

Thank you for your contribution!