import spaces import gradio as gr import librosa import numpy as np import torch from transformers import pipeline synthesiser = pipeline("text-to-speech", "techiaith/microsoft_speecht5_finetuned_bu_tts_cy_en") speaker_embeddings = { "GGP": "spkemb/speaker0.npy", "BGP": "spkemb/speaker1.npy", "BDP": "spkemb/speaker2.npy", } @spaces.GPU def predict(text, speaker): if len(text.strip()) == 0: return (16000, np.zeros(0).astype(np.int16)) # limit input length input_ids = inputs["input_ids"] input_ids = input_ids[..., :model.config.max_text_positions] if speaker == "Surprise Me!": # load one of the provided speaker embeddings at random idx = np.random.randint(len(speaker_embeddings)) key = list(speaker_embeddings.keys())[idx] speaker_embedding = np.load(speaker_embeddings[key]) # randomly shuffle the elements np.random.shuffle(speaker_embedding) # randomly flip half the values x = (np.random.rand(512) >= 0.5) * 1.0 x[x == 0] = -1.0 speaker_embedding *= x #speaker_embedding = np.random.rand(512).astype(np.float32) * 0.3 - 0.15 else: speaker_embedding = np.load(speaker_embeddings[speaker[:3]]) speaker_embedding = torch.tensor(speaker_embedding).unsqueeze(0) speech = synthesiser(text, forward_params={"speaker_embeddings": speaker_embedding}) speech = (speech.numpy() * 32767).astype(np.int16) return (16000, speech) title = "Techiaith Finetune Microsoft/SpeechT5: Speech Synthesis" description = """ Lleisiau TTS microsoft_speech_T5_finetune_bu_tts_cy_en """ examples = [ ["Rhyfeddod neu ffenomenon optegol a meteorolegol yw enfys, pan fydd sbectrwm o olau yn ymddangos yn yr awyr pan fo'r haul yn disgleirio ar ddiferion o leithder yn atmosffer y ddaear.", "GGP (gwryw-gogledd-pro)"], ["Rhyfeddod neu ffenomenon optegol a meteorolegol yw enfys, pan fydd sbectrwm o olau yn ymddangos yn yr awyr pan fo'r haul yn disgleirio ar ddiferion o leithder yn atmosffer y ddaear.", "BGP (benyw-gogledd-pro)"], ["Rhyfeddod neu ffenomenon optegol a meteorolegol yw enfys, pan fydd sbectrwm o olau yn ymddangos yn yr awyr pan fo'r haul yn disgleirio ar ddiferion o leithder yn atmosffer y ddaear.", "BDP (benyw-de-pro)"], ] gr.Interface( fn=predict, inputs=[ gr.Text(label="Input Text"), gr.Radio(label="Speaker", choices=[ "GGP (gwryw-gogledd-pro)", "BGP (benyw-gogledd-pro)", "BDP (benyw-de-pro)", "Surprise Me!" ], value="GGP (gwryw-gogledd-pro)"), ], outputs=[ gr.Audio(label="Generated Speech", type="numpy"), ], title=title, description=description, examples=examples, ).launch()