{"id":19285,"date":"2026-10-01T16:06:12","date_gmt":"2026-10-01T14:06:12","guid":{"rendered":"https:\/\/www.beseit.net\/?p=19285"},"modified":"2026-10-02T17:53:29","modified_gmt":"2026-10-02T15:53:29","slug":"veuslang-text-%f0%9f%94%8a","status":"publish","type":"post","link":"https:\/\/www.beseit.net\/?p=19285","title":{"rendered":"Veus($lang, $text, &#8216;\ud83d\udd0a&#8217;)"},"content":{"rendered":"\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"206\" height=\"389\" src=\"https:\/\/www.beseit.net\/wp-content\/uploads\/2026\/10\/image-2.png\" alt=\"\" class=\"wp-image-19288\" srcset=\"https:\/\/www.beseit.net\/wp-content\/uploads\/2026\/10\/image-2.png 206w, https:\/\/www.beseit.net\/wp-content\/uploads\/2026\/10\/image-2-159x300-1.png 159w\" sizes=\"auto, (max-width: 206px) 100vw, 206px\" \/><\/figure>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"193\" height=\"384\" src=\"https:\/\/www.beseit.net\/wp-content\/uploads\/2026\/10\/image-1.png\" alt=\"\" class=\"wp-image-19287\" srcset=\"https:\/\/www.beseit.net\/wp-content\/uploads\/2026\/10\/image-1.png 193w, https:\/\/www.beseit.net\/wp-content\/uploads\/2026\/10\/image-1-151x300-1.png 151w\" sizes=\"auto, (max-width: 193px) 100vw, 193px\" \/><\/figure>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p class=\"wp-block-paragraph\"><strong><mark style=\"background-color:rgba(0, 0, 0, 0);color:#ea1f1f\" class=\"has-inline-color\">Alternativa amb speech-dispatcher<\/mark><\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">S\u00ed, i \u00e9s ben senzill! \ud83d\udc4c Tens dues vies per fer la mateixa funci\u00f3 <code>veus($lang, $tex)<\/code> sense Python:<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">1. Amb speech-dispatcher \u2192 espeak-ng (via <code>spd-say<\/code>)<\/h2>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">veus() {\n  spd-say -l \"$1\" \"$2\"\n}<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u00das: <code>veus ca \"Hola, aix\u00f2 \u00e9s una prova\"<\/code> o <code>veus en \"Hello world\"<\/code><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Si la vols dins de Python igual que ara, nom\u00e9s canvia la crida:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">import subprocess\n\ndef veus(lang, text):\n    subprocess.run([\"spd-say\", \"-l\", lang, text])<\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">2. Amb espeak-ng directament (sense daemon)<\/h2>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">veus() {\n  espeak-ng -v \"$1\" \"$2\"\n}<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">I en Python:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">import subprocess\n\ndef veus(lang, text):\n    subprocess.run([\"espeak-ng\", \"-v\", lang, text])<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Difer\u00e8ncia:<\/strong> la via 1 passa pel servei <code>speech-dispatcher<\/code> (m\u00e9s lent per\u00f2 unificat amb tot el sistema); la via 2 crida el motor directament (m\u00e9s r\u00e0pid i sense dependre de cap servei). Per a una funci\u00f3 pr\u00f2pia, la via 2 sol ser m\u00e9s pr\u00e0ctica.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">2. \u00c9s gratu\u00eft? Qui n&#8217;\u00e9s el propietari?<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Gratu\u00eft? S\u00ed<\/strong>, totalment. \u00c9s programari lliure sota llic\u00e8ncia <strong>GPL-3.0<\/strong> (codi obert, sense cap cost).<\/li>\n\n\n\n<li><strong>Propietari? Cap empresa.<\/strong><code>espeak-ng<\/code> \u00e9s un <strong>projecte comunitari de codi obert<\/strong>, sense propietari comercial:\n<ul class=\"wp-block-list\">\n<li>Va comen\u00e7ar com a <strong>eSpeak<\/strong>, creat per <strong>Jonathan Duddington<\/strong> (tamb\u00e9 sense empresa al darrere).<\/li>\n\n\n\n<li><code>espeak-ng<\/code> \u00e9s el <strong>fork comunitari<\/strong> mantingut per voluntaris, amb <strong>Reece H. Dunn<\/strong> com a mantenidor principal.<\/li>\n\n\n\n<li>S&#8217;allotja a GitHub (<code>espeak-ng\/espeak-ng<\/code>).<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Per tant, \u00e9s lliure, gratu\u00eft i obert: el pots usar, modificar i redistribuir sense pagar res a ning\u00fa. \ud83c\udf89<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Perfecte! Doncs quan acabis les teves coses pendents, aqu\u00ed hi serem. \ud83d\ude0a<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">I s\u00ed, tens tota la ra\u00f3: <strong><code>espeak-ng<\/code> directe \u00e9s m\u00e9s r\u00e0pid<\/strong> perqu\u00e8 salta el daemon (<code>speech-dispatcher<\/code>) i parla amb el motor cara a cara. La difer\u00e8ncia es nota sobretot en frases curtes o si fas moltes crides seguides.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Queda anotat per quan vulguis:<\/strong><\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>\u2705 Calibre natiu a <code>\/opt\/calibre<\/code> amb acc\u00e9s al TTS<\/li>\n\n\n\n<li>\u23f3 Funci\u00f3 <code>veus($lang, $tex)<\/code> amb <code>espeak-ng<\/code> directe (substituint Python)<\/li>\n\n\n\n<li>\u23f3 Post del blog amb tota la documentaci\u00f3 (incloent les observacions a, b, c, d)<\/li>\n<\/ol>\n\n\n\n<p class=\"wp-block-paragraph\">Quan tornis, ho enllestim! \ud83d\ude80<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Alternativa amb speech-dispatcher S\u00ed, i \u00e9s ben senzill! \ud83d\udc4c Tens dues vies per fer la mateixa funci\u00f3 veus($lang, $tex) sense Python: 1. Amb speech-dispatcher \u2192 espeak-ng (via spd-say) \u00das: veus ca \u00abHola, aix\u00f2 \u00e9s una prova\u00bb o veus en \u00abHello &hellip; <a href=\"https:\/\/www.beseit.net\/?p=19285\">Continua llegint <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":2,"featured_media":3167,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[193,1],"tags":[],"class_list":["post-19285","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-polidic","category-bloc-de-notes"],"_links":{"self":[{"href":"https:\/\/www.beseit.net\/index.php?rest_route=\/wp\/v2\/posts\/19285","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.beseit.net\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.beseit.net\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.beseit.net\/index.php?rest_route=\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.beseit.net\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=19285"}],"version-history":[{"count":2,"href":"https:\/\/www.beseit.net\/index.php?rest_route=\/wp\/v2\/posts\/19285\/revisions"}],"predecessor-version":[{"id":19313,"href":"https:\/\/www.beseit.net\/index.php?rest_route=\/wp\/v2\/posts\/19285\/revisions\/19313"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.beseit.net\/index.php?rest_route=\/wp\/v2\/media\/3167"}],"wp:attachment":[{"href":"https:\/\/www.beseit.net\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=19285"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.beseit.net\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=19285"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.beseit.net\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=19285"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}