feat: Supertonic 3 TTS demo locale
- Demo Gradio con interfaccia web (B) - Server HTTP con API nativa e OpenAI-compatibile (C) - 31 lingue, italiano incluso - 99M parametri, CPU-only, ONNX Runtime
This commit is contained in:
commit
770843f9c0
5 files changed
+216
No files matched your search
@@ -0,0 +1,87 @@
|
||||
import os
|
||||
import uuid
|
||||
|
||||
import gradio as gr
|
||||
from supertonic import TTS
|
||||
|
||||
OUTPUT_DIR = "outputs"
|
||||
os.makedirs(OUTPUT_DIR, exist_ok=True)
|
||||
|
||||
# The first run downloads the Supertonic model assets automatically.
|
||||
tts = TTS(auto_download=True)
|
||||
|
||||
SUPPORTED_LANGUAGES = {
|
||||
"Italiano": "it",
|
||||
"Inglese": "en",
|
||||
"Spagnolo": "es",
|
||||
"Francese": "fr",
|
||||
"Tedesco": "de",
|
||||
"Portoghese": "pt",
|
||||
}
|
||||
|
||||
VOICES = ["M1", "M2", "M3", "M4", "M5", "F1", "F2", "F3", "F4", "F5"]
|
||||
|
||||
|
||||
def generate_audio(text: str, language_label: str, voice: str):
|
||||
"""Generate a local WAV file with Supertonic TTS."""
|
||||
if not text or not text.strip():
|
||||
return None, "Inserisci un testo prima di generare l'audio."
|
||||
|
||||
lang = SUPPORTED_LANGUAGES.get(language_label, "it")
|
||||
style = tts.get_voice_style(voice)
|
||||
|
||||
wav, _duration = tts.synthesize(
|
||||
text.strip(),
|
||||
voice_style=style,
|
||||
lang=lang,
|
||||
)
|
||||
|
||||
output_path = os.path.join(OUTPUT_DIR, f"supertonic_{uuid.uuid4().hex[:8]}.wav")
|
||||
tts.save_audio(wav, output_path)
|
||||
|
||||
return output_path, f"Audio generato correttamente: {output_path}"
|
||||
|
||||
|
||||
with gr.Blocks(title="Supertonic Local Demo") as demo:
|
||||
gr.Markdown(
|
||||
"""
|
||||
# Supertonic Local Demo
|
||||
|
||||
Mini pannello locale per generare audio con Supertonic TTS.
|
||||
|
||||
Scrivi un testo, scegli lingua e voce, poi genera un file WAV direttamente sul tuo PC.
|
||||
"""
|
||||
)
|
||||
|
||||
with gr.Row():
|
||||
with gr.Column():
|
||||
text_input = gr.Textbox(
|
||||
label="Testo",
|
||||
lines=8,
|
||||
value="Ciao, questo è un test vocale in italiano generato localmente con Supertonic.",
|
||||
)
|
||||
language_input = gr.Dropdown(
|
||||
choices=list(SUPPORTED_LANGUAGES.keys()),
|
||||
value="Italiano",
|
||||
label="Lingua",
|
||||
)
|
||||
voice_input = gr.Dropdown(
|
||||
choices=VOICES,
|
||||
value="M1",
|
||||
label="Voce",
|
||||
)
|
||||
generate_button = gr.Button("Genera audio")
|
||||
|
||||
with gr.Column():
|
||||
audio_output = gr.Audio(label="Audio generato", type="filepath")
|
||||
status_output = gr.Textbox(label="Stato")
|
||||
|
||||
generate_button.click(
|
||||
fn=generate_audio,
|
||||
inputs=[text_input, language_input, voice_input],
|
||||
outputs=[audio_output, status_output],
|
||||
)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
demo.launch(server_name="0.0.0.0")
|
||||
Reference in new issue
Block a user