Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
elebumm
GitHub Repository: elebumm/RedditVideoMakerBot
Path: blob/master/video_creation/voices.py
327 views
1
from typing import Tuple
2
3
from rich.console import Console
4
5
from TTS.aws_polly import AWSPolly
6
from TTS.elevenlabs import elevenlabs
7
from TTS.engine_wrapper import TTSEngine
8
from TTS.GTTS import GTTS
9
from TTS.pyttsx import pyttsx
10
from TTS.streamlabs_polly import StreamlabsPolly
11
from TTS.TikTok import TikTok
12
from utils import settings
13
from utils.console import print_step, print_table
14
15
console = Console()
16
17
TTSProviders = {
18
"GoogleTranslate": GTTS,
19
"AWSPolly": AWSPolly,
20
"StreamlabsPolly": StreamlabsPolly,
21
"TikTok": TikTok,
22
"pyttsx": pyttsx,
23
"ElevenLabs": elevenlabs,
24
}
25
26
27
def save_text_to_mp3(reddit_obj) -> Tuple[int, int]:
28
"""Saves text to MP3 files.
29
30
Args:
31
reddit_obj (): Reddit object received from reddit API in reddit/subreddit.py
32
33
Returns:
34
tuple[int,int]: (total length of the audio, the number of comments audio was generated for)
35
"""
36
37
voice = settings.config["settings"]["tts"]["voice_choice"]
38
if str(voice).casefold() in map(lambda _: _.casefold(), TTSProviders):
39
text_to_mp3 = TTSEngine(get_case_insensitive_key_value(TTSProviders, voice), reddit_obj)
40
else:
41
while True:
42
print_step("Please choose one of the following TTS providers: ")
43
print_table(TTSProviders)
44
choice = input("\n")
45
if choice.casefold() in map(lambda _: _.casefold(), TTSProviders):
46
break
47
print("Unknown Choice")
48
text_to_mp3 = TTSEngine(get_case_insensitive_key_value(TTSProviders, choice), reddit_obj)
49
return text_to_mp3.run()
50
51
52
def get_case_insensitive_key_value(input_dict, key):
53
return next(
54
(value for dict_key, value in input_dict.items() if dict_key.lower() == key.lower()),
55
None,
56
)
57
58