Merge pull request #32 from rany2/moreexamples

Add more examples
This commit is contained in:
rany 2023-01-05 01:34:06 +02:00 committed by GitHub
commit 2a8f90761f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 72 additions and 1 deletions

View File

@ -15,7 +15,7 @@ jobs:
- name: Setup Python
uses: actions/setup-python@v1
with:
python-version: 3.7.4
python-version: 3.11
architecture: x64
- name: Checkout
uses: actions/checkout@v1

View File

@ -85,5 +85,7 @@ It is possible to use the `edge-tts` module directly from Python. For a list of
* https://github.com/rany2/edge-tts/blob/master/examples/basic_generation.py
* https://github.com/rany2/edge-tts/blob/master/examples/dynamic_voice_selection.py
* https://github.com/rany2/edge-tts/blob/master/examples/streaming_tts.py
* https://github.com/rany2/edge-tts/blob/master/examples/streaming_tts_with_subtitles.py
* https://github.com/rany2/edge-tts/blob/master/src/edge_tts/util.py
* https://github.com/hasscc/hass-edge-tts/blob/main/custom_components/edge_tts/tts.py

34
examples/streaming_tts.py Normal file
View File

@ -0,0 +1,34 @@
#!/usr/bin/env python3
"""
Streaming TTS example.
This example shows how to stream the audio data from the TTS engine,
and how to get the WordBoundary events from the engine (which could
be ignored if not needed).
The example streaming_tts_with_subtitles.py shows how to use the
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"
communicate = edge_tts.Communicate(TEXT, VOICE)
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":
print(f"WordBoundary: {chunk}")
if __name__ == "__main__":
asyncio.get_event_loop().run_until_complete(main())

View File

@ -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())