|
import gradio as gr |
|
from gtts import gTTS |
|
import io |
|
import os |
|
import librosa |
|
import soundfile as sf |
|
|
|
def text_to_speech(text, language_accent, pitch): |
|
lang, tld = language_tld_map[language_accent].split(',') |
|
|
|
|
|
tts = gTTS(text, lang=lang, tld=tld) |
|
tts.save('gtts.wav') |
|
|
|
|
|
y, sr = librosa.load('gtts.wav') |
|
|
|
|
|
new_y = librosa.effects.pitch_shift(y=y, sr=sr, n_steps=pitch) |
|
|
|
sf.write("generated_gtts.wav", new_y, sr) |
|
|
|
|
|
return 'generated_gtts.wav' |
|
|
|
|
|
language_tld_map = { |
|
"English_Australia": "en,com.au", |
|
"English_United_Kingdom": "en,co.uk", |
|
"English_United_States": "en,com", |
|
"English_Canada": "en,ca", |
|
"English_Nigerian": "en,com.ng", |
|
"English_Ireland": "en,ie", |
|
"English_South Africa": "en,co.za", |
|
"French_Canada": "fr,ca", |
|
"French_France": "fr,fr", |
|
"Mandarin_China_Mainland": "zh-CN,com", |
|
"Mandarin_Taiwan": "zh-TW,com", |
|
"Portuguese_Brazil": "pt,com.br", |
|
"Portuguese_Portugal": "pt,pt", |
|
"Spanish_Mexico": "es,com.mx", |
|
"Spanish_Spain": "es,es", |
|
"Spanish_United_States": "es,com" |
|
} |
|
|
|
|
|
iface = gr.Interface(fn=text_to_speech, |
|
inputs=[gr.Textbox(lines=10, label="Enter your text here:"), |
|
gr.Dropdown(choices=list(language_tld_map.keys()), label="Select Language & Accent:", value="English_United_Kingdom", type="value"), |
|
gr.Number(label="Pitch (0 = no variations, negative pitch makes it more masculine, + pitch makes it more feminine):", value=0)], |
|
outputs=[gr.Audio(label="Audio")], |
|
allow_flagging="never") |
|
|
|
iface.launch(queue=True) |