Spaces:
Running
Running
File size: 3,963 Bytes
d3ddd31 ed3c017 d3ddd31 ed3c017 d3ddd31 |
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 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 |
import gradio as gr
import edge_tts
import asyncio
import os
# https://speech.platform.bing.com/consumer/speech/synthesize/readaloud/voices/list?trustedclienttoken=6A5AA1D4EAFF4E9FB37E23D68491D6F4
SUPPORTED_VOICES = {
'Vivienne': 'fr-FR-VivienneMultilingualNeural',
'Denise': 'fr-FR-DeniseNeural',
'Eloise': 'fr-FR-EloiseNeural',
'Remy': 'fr-FR-RemyMultilingualNeural',
'Henri': 'fr-FR-HenriNeural'
}
# Modification de voix
def changeVoice(voices):
example = SUPPORTED_VOICES[voices]
example_file = os.path.join(os.path.dirname(__file__), "example/"+example+".mp3")
return example_file
# Text to Speech
async def textToSpeech(text, voices, rate, volume):
output_file = "output.mp3"
voices = SUPPORTED_VOICES[voices]
if (rate >= 0):
rates = rate = "+" + str(rate) + "%"
else:
rates = str(rate) + "%"
if (volume >= 0):
volumes = "+" + str(volume) + "%"
else:
volumes = str(volume) + "%"
communicate = edge_tts.Communicate(text,
voices,
rate=rates,
volume=volumes,
proxy=None)
await communicate.save(output_file)
audio_file = os.path.join(os.path.dirname(__file__), "output.mp3")
if (os.path.exists(audio_file)):
return audio_file
else:
raise gr.Error("La création a échoué!")
return FileNotFoundError
# Effacer le texte et rendu
def clearSpeech():
output_file = os.path.join(os.path.dirname(__file__), "output.mp3")
if (os.path.exists(output_file)):
os.remove(output_file)
return None, None
with gr.Blocks(css="style.css", title="Text To Speech") as demo:
gr.Markdown("""
# Text-to-Speech FR
Conversion texte en audio vocal avec edge-tts
""")
with gr.Row():
with gr.Column():
text = gr.TextArea(label="Entrez votre texte", elem_classes="text-area")
btn = gr.Button("Convertir en audio vocal", elem_id="submit-btn")
with gr.Column():
voices = gr.Dropdown(choices=[
"Vivienne", "Denise", "Eloise", "Remy",
"Henri"
],
value="Vivienne",
label="Modèle de voix",
info="Choix du modèle vocal FR (France)",
interactive=True)
example = gr.Audio(label="Exemple",
value="example/fr-FR-VivienneMultilingualNeural.mp3",
interactive=False,
autoplay=False,
elem_classes="example")
voices.change(fn=changeVoice,inputs=voices,outputs=example)
rate = gr.Slider(-100,
100,
step=1,
value=0,
label="Vitesse de parole",
info="Accélérer ou ralentir la voix",
interactive=True)
volume = gr.Slider(-100,
100,
step=1,
value=0,
label="Volume",
info="Augmenter ou baisser le volume audio",
interactive=True)
audio = gr.Audio(label="Rendu audio",
interactive=False,
elem_classes="audio")
clear = gr.Button("Effacer", elem_id="clear-btn")
btn.click(fn=textToSpeech,
inputs=[text, voices, rate, volume],
outputs=[audio])
clear.click(fn=clearSpeech, outputs=[text, audio])
if __name__ == "__main__":
demo.launch()
|