-
-
Notifications
You must be signed in to change notification settings - Fork 669
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Add sync versions of stream and save methods
In order to provide synchronous interface to the library
- Loading branch information
Showing
5 changed files
with
162 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,27 @@ | ||
#!/usr/bin/env python3 | ||
|
||
""" | ||
Basic audio streaming example for sync interface | ||
""" | ||
|
||
import edge_tts | ||
|
||
TEXT = "Hello World!" | ||
VOICE = "en-GB-SoniaNeural" | ||
OUTPUT_FILE = "test.mp3" | ||
|
||
|
||
def main() -> None: | ||
"""Main function to process audio and metadata synchronously.""" | ||
communicate = edge_tts.Communicate(TEXT, VOICE) | ||
with open(OUTPUT_FILE, "wb") as file: | ||
for chunk in communicate.stream_sync(): | ||
if chunk["type"] == "audio": | ||
file.write(chunk["data"]) | ||
elif chunk["type"] == "WordBoundary": | ||
print(f"WordBoundary: {chunk}") | ||
|
||
|
||
if __name__ == "__main__": | ||
main() |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,21 @@ | ||
#!/usr/bin/env python3 | ||
|
||
""" | ||
Basic example of edge_tts usage in synchronous function | ||
""" | ||
|
||
import edge_tts | ||
|
||
TEXT = "Hello World!" | ||
VOICE = "en-GB-SoniaNeural" | ||
OUTPUT_FILE = "test.mp3" | ||
|
||
|
||
def main() -> None: | ||
"""Main function""" | ||
communicate = edge_tts.Communicate(TEXT, VOICE) | ||
communicate.save_sync(OUTPUT_FILE) | ||
|
||
|
||
if __name__ == "__main__": | ||
main() |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,36 @@ | ||
#!/usr/bin/env python3 | ||
|
||
""" | ||
This example shows that sync version of save function also works when run from | ||
a sync function called itself from an async function. | ||
The simple implementation of save_sync() with only asyncio.run would fail in this scenario, | ||
that's why ThreadPoolExecutor is used in implementation. | ||
""" | ||
|
||
import asyncio | ||
|
||
import edge_tts | ||
|
||
TEXT = "Hello World!" | ||
VOICE = "en-GB-SoniaNeural" | ||
OUTPUT_FILE = "test.mp3" | ||
|
||
|
||
def sync_main() -> None: | ||
"""Main function""" | ||
communicate = edge_tts.Communicate(TEXT, VOICE) | ||
communicate.save_sync(OUTPUT_FILE) | ||
|
||
|
||
async def amain() -> None: | ||
"""Main function""" | ||
sync_main() | ||
|
||
|
||
if __name__ == "__main__": | ||
loop = asyncio.get_event_loop_policy().get_event_loop() | ||
try: | ||
loop.run_until_complete(amain()) | ||
finally: | ||
loop.close() |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,40 @@ | ||
#!/usr/bin/env python3 | ||
|
||
""" | ||
This example shows that sync version of string function also works when run from | ||
a sync function called itself from an async function. | ||
The simple implementation of stream_sync() with only asyncio.run would fail in this scenario, | ||
that's why ThreadPoolExecutor is used in implementation. | ||
""" | ||
|
||
import asyncio | ||
|
||
import edge_tts | ||
|
||
TEXT = "Hello World!" | ||
VOICE = "en-GB-SoniaNeural" | ||
OUTPUT_FILE = "test.mp3" | ||
|
||
|
||
def main() -> None: | ||
"""Main function to process audio and metadata synchronously.""" | ||
communicate = edge_tts.Communicate(TEXT, VOICE) | ||
with open(OUTPUT_FILE, "wb") as file: | ||
for chunk in communicate.stream_sync(): | ||
if chunk["type"] == "audio": | ||
file.write(chunk["data"]) | ||
elif chunk["type"] == "WordBoundary": | ||
print(f"WordBoundary: {chunk}") | ||
|
||
|
||
async def amain(): | ||
main() | ||
|
||
|
||
if __name__ == "__main__": | ||
loop = asyncio.get_event_loop_policy().get_event_loop() | ||
try: | ||
loop.run_until_complete(amain()) | ||
finally: | ||
loop.close() |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters