Squashed 'utils_v2/' content from commit aa76ceb
git-subtree-dir: utils_v2 git-subtree-split: aa76ceb7480020f473af5cdb44891d3ebcfc8373
This commit is contained in:
@@ -0,0 +1,175 @@
|
||||
"""
|
||||
|
||||
AUTHOR:
|
||||
|
||||
Khushal P Soonderji
|
||||
|
||||
DATE:
|
||||
|
||||
Thursday, 26th Sept., 2024
|
||||
|
||||
OBJECTIVE:
|
||||
|
||||
To provide a fast way to make audio from TTS engines.
|
||||
|
||||
REFERENCES:
|
||||
|
||||
01. Usage: https://github.com/myshell-ai/MeloTTS/blob/main/docs/install.md#python-api
|
||||
02. Installation: https://github.com/myshell-ai/MeloTTS/blob/main/docs/install.md#linux-and-macos-install
|
||||
|
||||
DOWNLOADS:
|
||||
|
||||
N/A
|
||||
|
||||
"""
|
||||
|
||||
|
||||
# *****************************************************************************************************************
|
||||
# ***** ****
|
||||
# *** IMPORT ***
|
||||
# ***** ****
|
||||
# *****************************************************************************************************************
|
||||
|
||||
|
||||
# To make sibling directories accessible for imports:
|
||||
import sys
|
||||
sys.path.append(".")
|
||||
sys.path.append("..")
|
||||
|
||||
# System-level activities:
|
||||
import io
|
||||
|
||||
# To use the AI:
|
||||
from melo.api import TTS
|
||||
import numpy as np
|
||||
import soundfile
|
||||
|
||||
|
||||
# *****************************************************************************************************************
|
||||
# ***** ****
|
||||
# *** MACROS / ONE-TIME INIT ***
|
||||
# ***** ****
|
||||
# *****************************************************************************************************************
|
||||
|
||||
|
||||
# --- Nothing Yet
|
||||
|
||||
|
||||
# *****************************************************************************************************************
|
||||
# ***** ****
|
||||
# *** VARIABLES ***
|
||||
# ***** ****
|
||||
# *****************************************************************************************************************
|
||||
|
||||
|
||||
# --- Nothing Yet
|
||||
|
||||
|
||||
# *****************************************************************************************************************
|
||||
# ***** ****
|
||||
# *** CLASSES ***
|
||||
# ***** ****
|
||||
# *****************************************************************************************************************
|
||||
|
||||
|
||||
class EasyTTS:
|
||||
|
||||
__sampling_rate = 44_100
|
||||
|
||||
def __init__(
|
||||
self,
|
||||
language = "EN",
|
||||
speed = 1.0
|
||||
):
|
||||
|
||||
self.__audio = np.zeros(1)
|
||||
self.__language = language
|
||||
self.__speed = speed
|
||||
self.__model = TTS(language = language, device = "auto")
|
||||
self.__speakers = self.__model.hps.data.spk2id
|
||||
|
||||
def list_speakers(self):
|
||||
return list(self.__speakers.keys())
|
||||
|
||||
def speak(
|
||||
self,
|
||||
text,
|
||||
speaker
|
||||
):
|
||||
|
||||
this_audio = self.__model.tts_to_file(
|
||||
text,
|
||||
self.__speakers[speaker],
|
||||
speed = self.__speed,
|
||||
quiet = True
|
||||
)
|
||||
|
||||
self.__audio = np.concatenate((self.__audio, this_audio))
|
||||
|
||||
def pause(self, seconds):
|
||||
|
||||
self.__audio = np.concatenate((
|
||||
self.__audio,
|
||||
np.zeros(int(self.__sampling_rate * seconds))
|
||||
))
|
||||
|
||||
def to_wav(self, path = None):
|
||||
|
||||
if path is None:
|
||||
audio_buffer = io.BytesIO()
|
||||
soundfile.write(audio_buffer, self.__audio, self.__sampling_rate)
|
||||
return audio_buffer
|
||||
|
||||
else: soundfile.write(path, self.__audio, self.__sampling_rate)
|
||||
|
||||
|
||||
# *****************************************************************************************************************
|
||||
# ***** ****
|
||||
# *** MAIN PROGRAM ***
|
||||
# ***** ****
|
||||
# *****************************************************************************************************************
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
|
||||
speaker = "EN-BR"
|
||||
tts_maker = EasyTTS(language = "EN", speed = 0.9)
|
||||
|
||||
tts_maker.speak(
|
||||
text = """
|
||||
Imagine delighting your doctors with a personalized calendar,
|
||||
crafted from their own cherished memories.
|
||||
""",
|
||||
speaker = speaker
|
||||
)
|
||||
tts_maker.pause(seconds = 0.3)
|
||||
tts_maker.speak(
|
||||
text = """
|
||||
Every day, as they turn the page,
|
||||
they’ll not only relive those special moments but also remember you,
|
||||
the one who made it happen.
|
||||
""",
|
||||
speaker = speaker
|
||||
)
|
||||
tts_maker.pause(seconds = 0.75)
|
||||
tts_maker.speak(
|
||||
text = "STEP 1:",
|
||||
speaker = speaker
|
||||
)
|
||||
tts_maker.pause(seconds = 0.3)
|
||||
tts_maker.speak(
|
||||
text = "Start by identifying the doctors you’d like to engage with, and add them to our app.",
|
||||
speaker = speaker
|
||||
)
|
||||
tts_maker.pause(seconds = 0.3)
|
||||
tts_maker.speak(
|
||||
text = "No rush, you can add their photographs later as well.",
|
||||
speaker = speaker
|
||||
)
|
||||
tts_maker.pause(seconds = 0.3)
|
||||
tts_maker.speak(
|
||||
text = "With this, your engagement funnel is created.",
|
||||
speaker = speaker
|
||||
)
|
||||
|
||||
tts_maker.to_wav(r"/home/developer/Downloads/voiceover.wav")
|
||||
Reference in New Issue
Block a user