Aquest projecte proporciona una aplicació web lleugera per convertir text en veu en diferents idiomes, mitjançant tecnologies de Microsoft (Edge TTS) i Google (gTTS).
📁 Estructura del projecte
/edge_tts_clean/
│
├── app.py (o serve_gtts.py) ← Servidor Flask que processa les peticions web
├── generar_gtts.py ← Conversió de text a veu amb Google TTS (gTTS)
│
├── /audio/ ← Conté els fitxers d’àudio generats (tts.mp3)
│
├── /venv/ ← Entorn virtual Python (Flask, edge_tts, gtts, etc.)
│
├── index.php ← Interfície web: formulari per introduir text i seleccionar veu
│ (executa generar_gtts.py o generar_tts.py segons la veu escollida)
└── ...
Reservar una IP (també anomenat reserva DHCP o IP estàtica assignada per MAC) vol dir que el router sempre assignarà la mateixa IP al dispositiu (en aquest cas, el Synology) quan es connecti, basant-se en la seva adreça MAC.
🛠️ Com reservar la IP al router
🔍 Pas previ: Troba l’adreça MAC del Synology
Entra al DSM (http://192.168.0.49:5000).
Ves a Panel de control → Red → Interfaz de red → LAN 1 → Detalles.
Copia l’adreça MAC (ex: 00:11:32:AB:CD:EF).
🛜 A cada router (un per cada domicili):
🔧 Router 1 (xarxa 192.168.0.x)
Entra a la configuració del router (normalment http://192.168.0.1).
Ves a la secció DHCP o LAN Settings.
Busca una opció com “Reservar IP”, “Static DHCP”, “Address Reservation” o similar.
Afegeix:
MAC: la del Synology
IP: 192.168.0.49
Desa i reinicia el router si cal.
🔧 Router 2 (xarxa 192.168.1.x)
Quan estiguis a l’altre domicili, repeteix el procés:
Pots afegir variants com ca+f3 o en+m1 per canviar el timbre (masculí/femení) si vols més control.
🧪 4. Prova-ho
Ara, quan seleccionis una veu (en realitat, un idioma o variant) des del formulari, es passarà com a paràmetre a espeak-ng, que generarà l’àudio amb la veu corresponent.
🎯 Vols més personalització?
Puc ajudar-te a llistar totes les veus disponibles amb espeak-ng --voices
O afegir un selector de velocitat i to
O fins i tot fer que el sistema recordi l’última veu usada
Vols que et prepari un script per mostrar totes les veus disponibles al teu sistema?
Estr/00-sapi_tts/
├── exec_script_py.php ← Crida el Python
├── generar_tts.py ← Script Python que genera l'àudio
| des de Synology
├── index.php ← Interfície web
└── tts.mp3 ← Fitxer generatuctura
import sys
import os
# 🔧 Elimina rutes locals que poden interferir
sys.path = [p for p in sys.path if ".local" not in p and "urqtejmi" not in p]
print("🔍 sys.path netejat:")
for p in sys.path:
print(" -", p)
# 📦 Comprovació de la importació
try:
import gtts
print("📦 gtts importat des de:", getattr(gtts, '__file__', '❌ No definit'))
from gtts import gTTS
print("✅ gTTS importat correctament")
except Exception as e:
print("❌ Error important gTTS:", e)
raise
# 📄 Preparació del fitxer de sortida
base_dir = os.path.dirname(os.path.abspath(__file__))
output_path = os.path.join(base_dir, "tts.mp3")
# 📝 Recollir text i veu
text = sys.argv[1] if len(sys.argv) > 1 else "Text per defecte"
voice = sys.argv[2] if len(sys.argv) > 2 else "default"
print(f"▶ Text: {text}")
print(f"▶ Veu seleccionada: {voice} (no utilitzada per gTTS)")
print(f"▶ Fitxer a guardar: {output_path}")
# 🔊 Generar MP3
tts = gTTS(text=text, lang='ca')
tts.save(output_path)
exec_script_py.php
<?php
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
$textRaw = $_POST['text'] ?? '';
$voiceRaw = $_POST['voice'] ?? '';
$text = escapeshellarg($textRaw);
$voice = escapeshellarg($voiceRaw);
// ✅ Ruta al Python de l'entorn virtual
$python = '/volume2/web/00-sapi_tts/venv/bin/python';
// ✅ Comanda per executar el script Python
$command = "$python generar_tts.py $text $voice 2>&1";
// 🔁 Executa el script i captura la sortida
$output = shell_exec($command);
echo "<pre>📤 Comanda executada:\n$command\n\n📄 Sortida:\n$output</pre>";
// ❌ Si no s'ha generat l'àudio, redirigeix amb error
if (!file_exists("tts.mp3")) {
$error = "No s'ha pogut generar l'àudio. Sortida: $output";
header("Location: index.php?error=" . urlencode($error) . "&text=" . urlencode($textRaw) . "&voice=" . urlencode($voiceRaw));
exit();
}
// ✅ Si tot ha anat bé, redirigeix amb els valors conservats
header("Location: index.php?text=" . urlencode($textRaw) . "&voice=" . urlencode($voiceRaw));
exit();
}
?>
🛠️ Historial de passos per solucionar l’error amb gtts
1. Diagnòstic inicial
El teu script Python donava aquest error:
ImportError: cannot import name 'gTTS' from 'gtts' (unknown location)
El mòdul gtts semblava instal·lat, però gtts.__file__ retornava None.
2. Depuració del sistema
Vam comprovar que hi havia múltiples versions de gtts instal·lades:
Una a /usr/lib/python3.8/site-packages ✅
Una altra a ~/.local/lib/python3.8/site-packages ❌ (interferia)
Això va assegurar que el servidor web executés el Python correcte, amb el mòdul gtts funcional.
6. Èxit final
El fitxer tts.mp3 es va generar correctament.
El reproductor d’àudio es va mostrar a la pàgina.
El text “bona nit” es va convertir en veu 🎉
🔜 Què queda pendent?
La veu no sona com la del “Jordi” de Vocalizer: això és perquè gtts fa servir la veu de Google Translate, no veus locals com Vocalizer.
Si vols fer servir veus com la del Jordi, caldrà integrar motors com:
eSpeak NG
Festival
Vocalizer TTS (si tens llicència)
Microsoft Azure, Google Cloud TTS, etc.
Vols que demà explorem com fer servir una veu real com la del Jordi amb un motor TTS local o en el núvol? O vols que et prepari una comparativa de motors TTS amb veus catalanes?
/edge_tts
├── exec_script_py.php ← Script PHP que crida Python des de la web
├── generar_tts.py ← Genera l'àudio amb Edge TTS
├── generar_gtts.py ← Versió que utilitza Google TTS
├── generar_veu.py ← Alternativa o prova per generar veu
├── diagnostic_edge_tts.py ← Diagnòstic o comprovació del servei TTS
├── index.php ← Interfície web principal del projecte
├── tts.mp3 ← Fitxer d’àudio generat (resultat final)
├──
├── env_tts/ ← Entorn virtual Python dedicat a TTS
├── venv/ ← Possible entorn virtual duplicat
├── venv_web/ ← Potser creat per a la web; revisa si s’usa
└── edge_tts/ ← Pot contenir recursos o mòduls complementaris
Entorn
la carpeta té crear un entorn virtual amb una versió específica de Python especifica:
quan parlem davan d’un microfono hi ha un sortida electrica que es capaz de de fer parlar un altaveu. Com és diu el dispositu que converteix text en caracters ascii en senyal electrica capaç de emetre so per un altaveu?
El dispositiu o sistema que converteix text en caràcters ASCII en un senyal elèctric capaç de fer parlar un altaveu s’anomena sintetitzador de veu o sistema de Text-to-Speech (TTS).
🔊 Com funciona un sistema TTS?
📄 Entrada: Rep text (en format ASCII o Unicode).
🧠 Processament: Analitza el text, el divideix en paraules i fonemes, i aplica regles de pronunciació i prosòdia.
🎛️ Síntesi: Converteix els fonemes en senyals d’àudio mitjançant tècniques com la concatenació d’àudio pregravat o la síntesi neuronal.
🔌 Sortida: Genera un senyal elèctric que pot ser enviat a un altaveu per produir so audible.
🧩 Components clau:
Component
Funció
Motor TTS (Text-to-Speech)
Converteix text en àudio
DAC (Convertidor Digital-Analògic)
Transforma el senyal digital en senyal elèctric analògic per l’altaveu
Altaveu
Emiteix el so generat
En el cas de la pàgina que has obert, s’utilitza una veu com Microsoft Hedda a través de SAPI5, que és una interfície de Microsoft per a la síntesi de veu.
Vols que et mostri un exemple de com fer-ho amb codi o que t’expliqui com funciona dins d’un ordinador o dispositiu concret?
Quant isiomes diferents por arriba a parlar un sintetitzador?
Els sintetitzadors de veu moderns poden parlar fins a 100 idiomes o més, depenent de la plataforma i la tecnologia utilitzada. Per exemple:
🌍 Plataformes com Narakeet ofereixen:
🔊 800 veus sintetitzadores en
🗣️ 100 idiomes diferents, incloent-hi variants regionals com l’anglès dels EUA, Regne Unit, Austràlia, Índia, etc.
🧠 Sistemes com NVDA (lector de pantalla):
Inclouen sintetitzadors com eSpeak, que suporta més de 80 idiomes
🎙️ Exemples d’idiomes disponibles:
Anglès (diversos accents)
Espanyol (de molts països)
Català, Basc, Gallec
Francès, Alemany, Italià
Xinès (mandarí, cantonès, etc.)
Àrab (amb múltiples variants)
Hindi, Japonès, Coreà, Rus, etc.
Això vol dir que un bon sintetitzador pot llegir textos en gairebé qualsevol idioma parlat al món, i fins i tot adaptar-se a accents i dialectes locals.
Vols que et mostri com provar-ne un en català o en un altre idioma que t’interessi?
com es fa una veu sintetizadora?
Crear una veu sintetitzadora és un procés fascinant que combina lingüística, enginyeria de so i intel·ligència artificial. Aquí tens una explicació clara i detallada:
🧠 Com es fa una veu sintetitzadora?
Una veu sintetitzadora es construeix mitjançant un sistema de síntesi de veu o Text-to-Speech (TTS). Aquest sistema converteix text escrit en so audible que imita la parla humana.
🧩 Parts d’un sistema TTS
Segons la Viquipèdia, un sistema TTS es divideix en dues grans parts:
Part
Funció
Front-end
Converteix el text en una representació fonètica i prosòdica.
Back-end
Converteix aquesta representació en una ona de so sintetitzada.
🛠️ Etapes per crear una veu sintetitzadora
1. Normalització del text
Converteix abreviatures, números i símbols en paraules completes.
Ex: “Dr.” → “Doctor”, “12/07” → “dotze de juliol”.
2. Conversió a fonemes
El text es transforma en sons bàsics del llenguatge (fonemes).
Ex: “hola” → /ˈo.la/
3. Afegir prosòdia
Es defineix l’entonació, ritme i pauses per sonar natural.
4. Síntesi de la veu
Hi ha diversos mètodes per generar la veu:
Mètode
Descripció
Síntesi de formants
Genera veu mitjançant models acústics. So robòtic però flexible.
Síntesi concatenada
Utilitza fragments de veu humana gravada. So més natural.
Síntesi neuronal (deep learning)
Utilitza xarxes neuronals per generar veu molt realista. Ex: Tacotron, WaveNet.
🧪 Exemple pràctic: Microsoft Hedda
A la pàgina que tens oberta, s’utilitza la veu Microsoft Hedda mitjançant SAPI5, una interfície de Microsoft per a la síntesi de veu. Aquesta veu és generada per un sistema TTS que segueix els passos anteriors i produeix un fitxer d’àudio que pots escoltar.
🎤 Vols crear la teva pròpia veu?
És possible entrenar una veu personalitzada amb eines com:
🧪 Mozilla TTS (codi obert)
🧠 Google Cloud Text-to-Speech
🗣️ ElevenLabs (veu hiperrealista)
🧰 Festival o eSpeak (lliures i personalitzables)
Vols que et mostri com fer-ho pas a pas amb una d’aquestes eines?
en definitiva s’ha de crear. Es pot dir que un creador de veus sintetizades en podria crear infinites, encara que algunes no les esntedria ningú?
Exactament, Miquel! 🎙️
En definitiva, sí, un creador de veus sintetitzades pot generar infinites veus diferents, tot i que:
🔄 Algunes poden sonar naturals i comprensibles
🤯 Altres poden ser tan artificials o abstractes que ningú les entendria
🧪 Per què es poden crear infinites veus?
1. Paràmetres modificables
Un sintetitzador pot variar:
El timbre (veu greu o aguda)
La velocitat de parla
L’entonació i la prosòdia
L’accent o la pronunciació
L’idioma o fins i tot un idioma inventat
2. Veus experimentals
Amb eines com sintetitzadors neuronals (com Tacotron o VITS), es poden crear veus:
Amb sons no humans
Amb estructures fonètiques inventades
Amb emocions exagerades o distorsionades
3. Límit: la comprensibilitat
Una veu pot ser tècnicament “parlable”, però si no segueix les regles fonètiques d’un idioma conegut, no serà comprensible per cap persona.
🎨 Analogia artística
És com pintar: pots crear infinites combinacions de colors i formes, però no totes transmetran un missatge clar. Algunes seran art abstracte, d’altres retrats realistes.
Vols que et mostri com crear una veu “estranya” o experimental amb alguna eina lliure? O potser una veu en català amb un toc personalitzat?
no en referia solament al timbre, velocitat.. Es poden crear inclus veus que ara ja no existeixen, oi? inclus s’en poden inventar veus que encara no es parlen, oi?
Sí, Miquel, ho has clavat amb la teva intuïció: sí que es poden crear veus que no existeixen actualment, i fins i tot veus d’idiomes que encara no es parlen. És una de les capacitats més sorprenents de la síntesi de veu moderna i de la intel·ligència artificial generativa.
🧬 Crear veus que mai han existit
Sí, Miquel, tens tota la raó: els navegadors poden accedir a diferents veus segons el sistema operatiu, el motor de síntesi que utilitzen i les API disponibles. Però la bona notícia és que sí que es pot separar el sintetitzador del navegador i controlar les veus des del sistema operatiu o des d’un programa extern.
🧩 Per què cada navegador té veus diferents?
Els navegadors utilitzen l’API Web Speech Synthesis, que accedeix a:
🔧 Les veus instal·lades al sistema (com les de Windows, macOS o Linux)
🌐 O veus pròpies del navegador (com les de Google Chrome o Edge)
Això fa que:
Chrome pugui usar veus com “Google UK English Male”
Edge pugui accedir a veus com “Microsoft Zira” o “Microsoft Jordi” (via SAPI5)
Firefox depengui més del sistema operatiu
🖥️ Com separar el sintetitzador del navegador?
✅ Opció 1: Fer servir SAPI5 (Windows)
És l’API de síntesi de veu de Windows.
Pots controlar les veus disponibles, afegir-ne de noves i fer-les servir des de qualsevol aplicació (no només el navegador).
Pots escriure scripts en PowerShell, Python o C# per parlar amb qualsevol veu instal·lada.
✅ Opció 2: Fer servir un motor TTS extern
Balabolka (Windows): programa gratuït que et permet triar qualsevol veu TTS del sistema.
Festival o eSpeak (Linux): motors TTS independents.
RHVoice, MaryTTS, Mozilla TTS: opcions lliures i multiplataforma.
✅ Opció 3: Crear un servidor TTS local
Pots muntar un petit servidor web al teu ordinador que rebi text i retorni àudio.
Així, qualsevol navegador o aplicació pot enviar text i rebre la veu que tu decideixis.
Ex: amb Python + Flask + pyttsx3 o gTTS.
🎯 Beneficis de separar el sintetitzador
Control total sobre les veus disponibles
Possibilitat d’usar veus personalitzades o idiomes minoritaris
Independència del navegador i més coherència entre aplicacions
Si vols, et puc ajudar a:
Configurar un script que parli amb la veu que tu triïs