Spaces:
Running
Running
File size: 1,212 Bytes
f82071f c26a7da f82071f c26a7da f82071f c26a7da f82071f c26a7da f82071f c26a7da f82071f c26a7da f82071f 1e5e583 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 |
import asyncio
import random
import edge_tts
from edge_tts import VoicesManager
import sys
from langdetect import detect
from langdetect import DetectorFactory
DetectorFactory.seed = 0
TEXT = sys.argv[1]
LANG = detect(TEXT) if sys.argv[2] == "Auto" else sys.argv[2]
if LANG == "zh-cn" or LANG == "zh-tw":
LOCALE = LANG[:-2] + LANG[-2:].upper()
RATE = sys.argv[3]
VOLUME = sys.argv[4]
GENDER = sys.argv[5] if len(sys.argv) == 6 else None
OUTPUT_FILE = "tts.wav"
print("Running TTS...")
print(f"Text: {TEXT}, Language: {LANG}, Gender: {GENDER}, Rate: {RATE}, Volume: {VOLUME}")
async def _main() -> None:
voices = await VoicesManager.create()
if not GENDER is None:
if LANG.startswith("zh"):
voice = voices.find(Gender=GENDER, Locale=LOCALE)
else:
voice = voices.find(Gender=GENDER, Language=LANG)
VOICE = random.choice(voice)["Name"]
else:
VOICE = LANG
communicate = edge_tts.Communicate(text = TEXT, voice = VOICE, rate = RATE, volume = VOLUME)
await communicate.save(OUTPUT_FILE)
if __name__ == "__main__":
loop = asyncio.get_event_loop()
try:
loop.run_until_complete(_main())
finally:
loop.close() |