2023-01-04 23:31:45 +00:00
|
|
|
#!/usr/bin/env python3
|
|
|
|
|
|
|
|
"""
|
|
|
|
Streaming TTS example with subtitles.
|
|
|
|
|
2023-01-04 23:55:02 +00:00
|
|
|
This example is similar to the example basic_audio_streaming.py, but it shows
|
2023-01-04 23:31:45 +00:00
|
|
|
WordBoundary events to create subtitles using SubMaker.
|
|
|
|
"""
|
|
|
|
|
|
|
|
import asyncio
|
|
|
|
|
|
|
|
import edge_tts
|
|
|
|
|
2023-01-05 05:48:40 +00:00
|
|
|
TEXT = "Hello World!"
|
|
|
|
VOICE = "en-GB-SoniaNeural"
|
|
|
|
OUTPUT_FILE = "test.mp3"
|
|
|
|
WEBVTT_FILE = "test.vtt"
|
2023-01-04 23:31:45 +00:00
|
|
|
|
|
|
|
|
2023-06-02 17:03:37 +00:00
|
|
|
async def amain() -> None:
|
|
|
|
"""Main function"""
|
2023-01-04 23:31:45 +00:00
|
|
|
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__":
|
2024-04-08 01:57:20 +00:00
|
|
|
asyncio.run(amain())
|