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