{"id":16599,"date":"2025-07-12T17:59:15","date_gmt":"2025-07-12T15:59:15","guid":{"rendered":"https:\/\/www.beseit.net\/?p=16599"},"modified":"2025-07-12T18:38:24","modified_gmt":"2025-07-12T16:38:24","slug":"edge-google-tts-web-app","status":"publish","type":"post","link":"http:\/\/www.beseit.net\/?p=16599","title":{"rendered":"Edge &amp; Google TTS Web App"},"content":{"rendered":"\n<h1 class=\"wp-block-heading\">Edge &amp; Google TTS Web App<\/h1>\n\n\n\n<p>Aquest projecte proporciona una aplicaci\u00f3 web lleugera per convertir text en veu en diferents idiomes, mitjan\u00e7ant tecnologies de Microsoft (Edge TTS) i Google (gTTS).<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">? Estructura del projecte<\/h2>\n\n\n\n<pre class=\"wp-block-code\"><code>\/edge_tts_clean\/\n\u2502\n\u251c\u2500\u2500 app.py (o serve_gtts.py)      \u2190 Servidor Flask que processa les peticions web\n\u251c\u2500\u2500 generar_gtts.py               \u2190 Conversi\u00f3 de text a veu amb Google TTS (gTTS)\n\u2502\n\u251c\u2500\u2500 \/audio\/                       \u2190 Cont\u00e9 els fitxers d\u2019\u00e0udio generats (tts.mp3)\n\u2502\n\u251c\u2500\u2500 \/venv\/                        \u2190 Entorn virtual Python (Flask, edge_tts, gtts, etc.)\n\u2502\n\u251c\u2500\u2500 index.php                     \u2190 Interf\u00edcie web: formulari per introduir text i seleccionar veu\n\u2502                                 (executa generar_gtts.py o generar_tts.py segons la veu escollida)\n\u2514\u2500\u2500 ...<\/code><\/pre>\n\n\n\n<p><\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<pre class=\"wp-block-code\"><code>(venv_web) root@Synology_sec:\/volume1\/web\/edge_tts_clean# dir\ntotal 48\ndrwxrwxr-x+ 1 urqtejmi http    176 Jul 12 16:33 .\ndr-xr-xr-x+ 1 root     root   1780 Jul 12 12:32 ..\ndr-xr-xr-x+ 1 urqtejmi users     0 Jul 12 12:37 app\ndr-xr-xr-x+ 1 urqtejmi users   420 Jul 12 13:56 audio\n-r-xr-xr-x+ 1 urqtejmi users   603 Jul 12 12:36 estructura.php\n-r-xr-xr-x+ 1 urqtejmi users   531 Jul 12 16:34 generar_gtts.py\n-r-xr-xr-x+ 1 root     root  15984 Jul 12 13:37 hola.mp3\n-r-xr-xr-x+ 1 urqtejmi users  3344 Jul 12 17:07 index.php\n-r-xr-xr-x+ 1 urqtejmi users  3723 Jul 12 15:48 serve_tts.py\n-r-xr-xr-x  1 urqtejmi users   420 Jul 12 13:35 setup.sh\n-rwxrwxr-x+ 1 http     http  10224 Jul 12 17:10 tts.mp3\ndr-xr-xr-x+ 1 root     root     56 Jul 12 13:31 venv\ndr-xr-xr-x+ 1 urqtejmi users     0 Jul 12 12:37 web\n(venv_web) root@Synology_sec:\/volume1\/web\/edge_tts_clean#<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">\u2728 Caracter\u00edstiques<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Conversi\u00f3 de text a veu en catal\u00e0, castell\u00e0, angl\u00e8s i franc\u00e8s<\/li>\n\n\n\n<li>Suport per a veus de Microsoft Edge i Google<\/li>\n\n\n\n<li>Interf\u00edcie web simple (Flask) amb selector de veu<\/li>\n\n\n\n<li>Opcionalment integrable amb PHP (<code>index.php<\/code>)<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">\u2699\ufe0f Requisits<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Python 3.9<\/li>\n\n\n\n<li>Entorn virtual creat amb <code>python -m venv venv<\/code><\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Paquets necessaris:<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>pip install flask edge-tts gtts\n<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">? Execuci\u00f3<\/h2>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Activa l&#8217;entorn virtual:<\/li>\n<\/ol>\n\n\n\n<pre class=\"wp-block-code\"><code>source venv\/bin\/activate\n<\/code><\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li>Inicia el servidor:<\/li>\n<\/ol>\n\n\n\n<pre class=\"wp-block-code\"><code>python serve_gtts.py\n<\/code><\/pre>\n\n\n\n<ol start=\"3\" class=\"wp-block-list\">\n<li>Accedeix a l&#8217;aplicaci\u00f3 web:<\/li>\n<\/ol>\n\n\n\n<pre class=\"wp-block-code\"><code>http:&#47;&#47;&lt;IP-del-servidor&gt;:8000\n<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">? Veus disponibles<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Catal\u00e0<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>gtts-ca<\/code> \u2192 Google TTS (Catal\u00e0)<\/li>\n\n\n\n<li><code>ca-ES-JoanaNeural<\/code> \u2192 Microsoft Edge TTS<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Castell\u00e0<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>es-ES-ElviraNeural<\/code><\/li>\n\n\n\n<li><code>es-ES-AlvaroNeural<\/code><\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Angl\u00e8s<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>en-US-JennyNeural<\/code><\/li>\n\n\n\n<li><code>en-GB-RyanNeural<\/code><\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Franc\u00e8s<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>fr-FR-DeniseNeural<\/code><\/li>\n\n\n\n<li><code>fr-FR-HenriNeural<\/code><\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">? Fitxers clau<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>serve_gtts.py<\/code>: Aplicaci\u00f3 Flask que gestiona la interf\u00edcie i genera l&#8217;\u00e0udio.<\/li>\n\n\n\n<li><code>generar_tts.py<\/code>: Utilitza <code>edge-tts<\/code> per generar veu.<\/li>\n\n\n\n<li><code>generar_gtts.py<\/code>: Utilitza <code>gtts<\/code> per generar veu.<\/li>\n\n\n\n<li><code>index.php<\/code>: Versi\u00f3 alternativa amb PHP per entorns web que ho requereixin.<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">? Notes de seguretat<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Valida les entrades si s&#8217;exposa p\u00fablicament.<\/li>\n\n\n\n<li>Revisa permisos d&#8217;escriptura a la carpeta <code>audio\/<\/code>.<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">? Desenvolupat a<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Synology NAS (amb Python i entorns virtuals)<\/li>\n\n\n\n<li>Acc\u00e9s LAN via IP local (p. ex. <code>http:\/\/192.168.0.49:8000<\/code>)<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">? Llic\u00e8ncia<\/h2>\n\n\n\n<p>Projecte privat per a finalitats educatives o de prova. No distribu\u00efble com a servei comercial sense llic\u00e8ncies de veus.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">\u270f\ufe0f Contacte<\/h2>\n\n\n\n<p>Per a preguntes o ampliacions: [Afegeix les dades de contacte si cal]<\/p>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Edge &amp; Google TTS Web App Aquest projecte proporciona una aplicaci\u00f3 web lleugera per convertir text en veu en diferents idiomes, mitjan\u00e7ant tecnologies de Microsoft (Edge TTS) i Google (gTTS). ? Estructura del projecte \u2728 Caracter\u00edstiques \u2699\ufe0f Requisits Paquets necessaris: &hellip; <a href=\"http:\/\/www.beseit.net\/?p=16599\">Continua llegint <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":2,"featured_media":3168,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[185],"tags":[],"class_list":["post-16599","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-veus"],"_links":{"self":[{"href":"http:\/\/www.beseit.net\/index.php?rest_route=\/wp\/v2\/posts\/16599","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/www.beseit.net\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/www.beseit.net\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/www.beseit.net\/index.php?rest_route=\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"http:\/\/www.beseit.net\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=16599"}],"version-history":[{"count":2,"href":"http:\/\/www.beseit.net\/index.php?rest_route=\/wp\/v2\/posts\/16599\/revisions"}],"predecessor-version":[{"id":16602,"href":"http:\/\/www.beseit.net\/index.php?rest_route=\/wp\/v2\/posts\/16599\/revisions\/16602"}],"wp:featuredmedia":[{"embeddable":true,"href":"http:\/\/www.beseit.net\/index.php?rest_route=\/wp\/v2\/media\/3168"}],"wp:attachment":[{"href":"http:\/\/www.beseit.net\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=16599"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/www.beseit.net\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=16599"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/www.beseit.net\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=16599"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}