""" 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")