Spaces:
Sleeping
Sleeping
import IPython | |
from huggingface_hub.inference_api import InferenceApi | |
import torch | |
from TTS.api import TTS | |
import wave | |
from espeakng import ESpeakNG | |
import subprocess | |
from scipy.io import wavfile | |
from transformers import pipeline | |
import os | |
def synth_mms(text:str, model:str): | |
''' | |
Use Huggingface inference pipeline to synthesize text. | |
(Can be replaced by inference API, but that requires stored API token.) | |
Inputs: | |
text: Text to synthesze | |
model: Model code of the form mms-tts-LAN | |
Returns: | |
Streaming numpy and sampling rate. | |
''' | |
#inference = InferenceApi(repo_id=f"facebook/{model}", | |
# token=API_TOKEN) | |
#mms_tts = inference(inputs=text, | |
# raw_response=True)._content | |
if model is not None: | |
pipe = pipeline("text-to-speech", model=model, device=-1) # Change device if it should use GPU | |
mms_tts = pipe(text) | |
return mms_tts['audio'], mms_tts['sampling_rate'] | |
else: | |
return None | |
def synth_coqui(text:str, model:str): | |
''' | |
Use Coqui inference API to synthesize text. | |
Inputs: | |
text: Text to synthesze | |
model: Model code | |
Returns: | |
Streaming Wav and sampling rate. | |
''' | |
if model is not None: | |
# Get device | |
device = "cuda" if torch.cuda.is_available() else "cpu" | |
# Init TTS | |
tts = TTS(model, progress_bar=False).to(device) | |
tts.tts_to_file(text=text, file_path="test.wav", is_multi_speaker=False) | |
sampling_rate, wav = wavfile.read('test.wav') | |
os.remove("test.wav") | |
#wav = tts.tts(text=text) | |
return wav, sampling_rate | |
else: | |
return None | |
def synth_espeakng(text:str, model:str): | |
''' | |
Use ESpeak-NG to synthesize text. | |
Inputs: | |
text: Text to synthesze | |
model: Model code | |
Returns: | |
Streaming Wav and sampling rate. | |
''' | |
if model is not None: | |
subprocess.run(["apt-get", "install","espeak-ng"]) # Make sure espeak is installed -- not the most elegant solution, can swap for python API when that is resolved | |
subprocess.run(['espeak-ng', f'-v{model}', "-w test.wav", text]) #.returncode | |
sampling_rate, wav = wavfile.read('test.wav') | |
os.remove("test.wav") | |
#wav = tts.tts(text=text) | |
return wav, sampling_rate | |
else: | |
return None | |