File size: 1,590 Bytes
9b0d264 4bb9300 3a802c4 4bb9300 9b0d264 0fb503b 9b0d264 4bb9300 d2150bd 4bb9300 be26bab 0fb503b 4bb9300 6298db6 4ac82ef 6298db6 be26bab d2150bd be26bab d2150bd 5e83c71 9b0d264 0fb503b 06fe464 0fb503b 06fe464 4bb9300 0fb503b 4bb9300 6298db6 b3fbe5e 6298db6 06fe464 6298db6 9b0d264 b3fbe5e |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 |
import logging
import torch
import librosa
import soundfile as sf
from io import BytesIO
from .config import pipe_tts
from streamlit_TTS import auto_play, text_to_audio
SAMPLING_RATE = 16000
class T2A:
def __init__(self, input_text: str = None):
self.text = input_text
self.output_model = pipe_tts(input_text)
def __get_duration(self, raw: bytes):
chunk = BytesIO(raw)
audio, sample_rate = librosa.load(chunk, sr=SAMPLING_RATE)
duration = librosa.get_duration(y=audio, sr=sample_rate)
return duration
def autoplay(self, lang: str = "en") -> None:
if self.text is not None:
if isinstance(self.text, str):
audio = text_to_audio(self.text, language=lang)
auto_play(audio)
else:
text = f"Text you provide is {type(self.text)} accepted only string type"
audio = text_to_audio(text, language=language)
auto_play(audio)
else:
raise Exception("Text is None")
def get_audio(self):
try:
synth = self.output_model["audio"][0]
print(f"synth : {synth}")
with BytesIO() as buffer:
sf.write(buffer, synth, SAMPLING_RATE, format='wav')
output = buffer.getvalue() # bytes
print(f"type : {type(output)}")
duration = self.__get_duration(output)
print(f"duration : {duration}")
return output, SAMPLING_RATE, duration
except Exception as e:
logging.error(e) |