From dcb42a4939111fd8b4572c2fd0b78845afe9dfca Mon Sep 17 00:00:00 2001 From: Jason Date: Thu, 16 Jun 2022 15:11:51 -0400 Subject: [PATCH] reworked the tts system --- TTS/GTTS.py | 7 +++++++ video_creation/TTSwrapper.py => TTS/TikTok.py | 2 +- TTS/swapper.py | 20 +++++++++++++++++++ main.py | 2 +- video_creation/voices.py | 20 +++++++++---------- 5 files changed, 38 insertions(+), 13 deletions(-) create mode 100644 TTS/GTTS.py rename video_creation/TTSwrapper.py => TTS/TikTok.py (98%) create mode 100644 TTS/swapper.py diff --git a/TTS/GTTS.py b/TTS/GTTS.py new file mode 100644 index 0000000..20890ed --- /dev/null +++ b/TTS/GTTS.py @@ -0,0 +1,7 @@ +from gtts import gTTS + + +class GTTS: + def tts(self, req_text: str = "Google Text To Speech", filename: str = "title.mp3", random_speaker=False, censer=False): + tts = gTTS(text=req_text, lang="en", slow=False) + tts.save(f"{filename}") diff --git a/video_creation/TTSwrapper.py b/TTS/TikTok.py similarity index 98% rename from video_creation/TTSwrapper.py rename to TTS/TikTok.py index fc104dc..9ec9341 100644 --- a/video_creation/TTSwrapper.py +++ b/TTS/TikTok.py @@ -65,7 +65,7 @@ noneng = [ # 'ok': ['en_au_002', 'en_uk_001']} # less en_us_stormtrooper more less en_us_rocket en_us_ghostface -class TTTTSWrapper: # TikTok Text-to-Speech Wrapper +class TikTok: # TikTok Text-to-Speech Wrapper def __init__(self): self.URI_BASE = "https://api16-normal-useast5.us.tiktokv.com/media/api/text/speech/invoke/?text_speaker=" diff --git a/TTS/swapper.py b/TTS/swapper.py new file mode 100644 index 0000000..5b01a30 --- /dev/null +++ b/TTS/swapper.py @@ -0,0 +1,20 @@ +from os import getenv + +from dotenv import load_dotenv + +from TTS.GTTS import GTTS +from TTS.TikTok import TikTok + +CHOICE_DIR = { + 'tiktok': TikTok, + 'gtts': GTTS +} + +class TTS: + def __new__(cls): + load_dotenv() + CHOICE = getenv('TTsChoice').casefold() + valid_keys = [key.lower() for key in CHOICE_DIR.keys()] + if CHOICE not in valid_keys: + raise ValueError(f'{CHOICE} is not valid. Please use one of these {valid_keys} options') + return CHOICE_DIR.get(CHOICE)() diff --git a/main.py b/main.py index 4f74a74..1c6316d 100755 --- a/main.py +++ b/main.py @@ -23,7 +23,7 @@ print(banner) load_dotenv() # Modified by JasonLovesDoggo print_markdown( - "### Thanks for using this tool! [Feel free to contribute to this project on GitHub!](https://lewismenelaws.com) If you have any questions, feel free to reach out to me on Twitter or submit a GitHub issue." + "### Thanks for using this tool! [Feel free to contribute to this project on GitHub!](https://lewismenelaws.com) If you have any questions, feel free to reach out to me on Twitter or submit a GitHub issue. You can find solutions to many common problems in the [Documentation](https://luka-hietala.gitbook.io/documentation-for-the-reddit-bot/)" ) time.sleep(1) diff --git a/video_creation/voices.py b/video_creation/voices.py index 7912314..76c4dc3 100644 --- a/video_creation/voices.py +++ b/video_creation/voices.py @@ -1,20 +1,19 @@ #!/usr/bin/env python3 -from gtts import gTTS +from os import getenv from pathlib import Path -from os import getenv, name import sox from mutagen import MutagenError from mutagen.mp3 import MP3, HeaderNotFoundError -from rich.progress import track from rich.console import Console +from rich.progress import track + +from TTS.swapper import TTS console = Console() -import re from utils.console import print_step, print_substep from utils.voice import sanitize_text -from video_creation.TTSwrapper import TTTTSWrapper VIDEO_LENGTH: int = 40 # secs @@ -29,9 +28,8 @@ def save_text_to_mp3(reddit_obj): # Create a folder for the mp3 files. Path("assets/temp/mp3").mkdir(parents=True, exist_ok=True) - - ttttsw = TTTTSWrapper() # tiktok text to speech wrapper - ttttsw.tts( + TextToSpeech = TTS() + TextToSpeech.tts( sanitize_text(reddit_obj["thread_title"]), filename=f"assets/temp/mp3/title.mp3", random_speaker=False, @@ -41,19 +39,19 @@ def save_text_to_mp3(reddit_obj): except HeaderNotFoundError: # note to self AudioFileClip length += sox.file_info.duration(f"assets/temp/mp3/title.mp3") if getenv("STORYMODE").casefold() == "true": - ttttsw.tts( + TextToSpeech.tts( sanitize_text(reddit_obj["thread_content"]), filename=f"assets/temp/mp3/story_content.mp3", random_speaker=False, ) - #'story_content' + # 'story_content' com = 0 for comment in track((reddit_obj["comments"]), "Saving..."): # ! Stop creating mp3 files if the length is greater than VIDEO_LENGTH seconds. This can be longer, but this is just a good_voices starting point if length > VIDEO_LENGTH: break - ttttsw.tts( + TextToSpeech.tts( sanitize_text(comment["comment_body"]), filename=f"assets/temp/mp3/{com}.mp3", random_speaker=False,