From 1012a08cf59d240199f3541a850ad1bb482d887a Mon Sep 17 00:00:00 2001 From: rany2 Date: Thu, 5 Jan 2023 01:31:45 +0200 Subject: [PATCH] add examples/streaming_tts_with_subtitles.py --- examples/streaming_tts_with_subtitles.py | 35 ++++++++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 examples/streaming_tts_with_subtitles.py diff --git a/examples/streaming_tts_with_subtitles.py b/examples/streaming_tts_with_subtitles.py new file mode 100644 index 0000000..c976c2d --- /dev/null +++ b/examples/streaming_tts_with_subtitles.py @@ -0,0 +1,35 @@ +#!/usr/bin/env python3 + +""" +Streaming TTS example with subtitles. + +This example is similar to the example streaming_tts.py, but it shows +WordBoundary events to create subtitles using SubMaker. +""" + +import asyncio + +import edge_tts + + +async def main() -> None: + TEXT = "Hello World!" + VOICE = "en-GB-SoniaNeural" + OUTPUT_FILE = "test.mp3" + WEBVTT_FILE = "test.vtt" + + communicate = edge_tts.Communicate(TEXT, VOICE) + submaker = edge_tts.SubMaker() + with open(OUTPUT_FILE, "wb") as file: + async for chunk in communicate.stream(): + if chunk["type"] == "audio": + file.write(chunk["data"]) + elif chunk["type"] == "WordBoundary": + submaker.create_sub((chunk["offset"], chunk["duration"]), chunk["text"]) + + with open(WEBVTT_FILE, "w", encoding="utf-8") as file: + file.write(submaker.generate_subs()) + + +if __name__ == "__main__": + asyncio.get_event_loop().run_until_complete(main())