{"id":19062,"date":"2026-09-13T17:08:58","date_gmt":"2026-09-13T15:08:58","guid":{"rendered":"https:\/\/www.beseit.net\/?p=19062"},"modified":"2026-09-15T08:32:01","modified_gmt":"2026-09-15T06:32:01","slug":"veus-de-speech-dispatcher-de-firefoc","status":"publish","type":"post","link":"https:\/\/www.beseit.net\/?p=19062","title":{"rendered":"Veus de speech-dispatcher de firefox"},"content":{"rendered":"\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=\"\">grep -n \"AddModule\" \/etc\/speech-dispatcher\/speechd.conf<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Miquel@Miquel-PC:<del>$ grep -n \u00abAddModule\u00bb \/etc\/speech-dispatcher\/speechd.conf<br>248:# Each AddModule line loads an output module.<br>249:# Syntax: AddModule \u00abname\u00bb \u00abbinary\u00bb \u00abconfiguration\u00bb \u00ablogfile\u00bb<br>258:#AddModule \u00abespeak\u00bb \u00absd_espeak\u00bb \u00abespeak.conf\u00bb<br>259:#AddModule \u00abespeak-ng\u00bb \u00absd_espeak-ng\u00bb \u00abespeak-ng.conf\u00bb<br>260:#AddModule \u00abfestival\u00bb \u00absd_festival\u00bb \u00abfestival.conf\u00bb<br>261:#AddModule \u00abflite\u00bb \u00absd_flite\u00bb \u00abflite.conf\u00bb<br>262:#AddModule \u00abivona\u00bb \u00absd_ivona\u00bb \u00abivona.conf\u00bb<br>263:#AddModule \u00abpico\u00bb \u00absd_pico\u00bb \u00abpico.conf\u00bb<br>264:#AddModule \u00abespeak-ng-mbrola-generic\u00bb \u00absd_generic\u00bb \u00abespeak-ng-mbrola-generic.conf\u00bb<br>265:#AddModule \u00abespeak-mbrola-generic\u00bb \u00absd_generic\u00bb \u00abespeak-mbrola-generic.conf\u00bb<br>266:#AddModule \u00abswift-generic\u00bb \u00absd_generic\u00bb \u00abswift-generic.conf\u00bb<br>267:#AddModule \u00abepos-generic\u00bb \u00absd_generic\u00bb \u00abepos-generic.conf\u00bb<br>268:#AddModule \u00abdtk-generic\u00bb \u00absd_generic\u00bb \u00abdtk-generic.conf\u00bb<br>269:#AddModule \u00abibmtts\u00bb \u00absd_ibmtts\u00bb \u00abibmtts.conf\u00bb<br>270:#AddModule \u00abcicero\u00bb \u00absd_cicero\u00bb \u00abcicero.conf\u00bb<br>271:#AddModule \u00abkali\u00bb \u00absd_kali\u00bb \u00abkali.conf\u00bb<br>272:#AddModule \u00abmary-generic\u00bb \u00absd_generic\u00bb \u00abmary-generic.conf\u00bb<br>273:#AddModule \u00abbaratinoo\u00bb \u00absd_baratinoo\u00bb \u00abbaratinoo.conf\u00bb<br>274:#AddModule \u00abrhvoice\u00bb \u00absd_rhvoice\u00bb \u00abrhvoice.conf\u00bb<br>275:#AddModule \u00abvoxin\u00bb \u00absd_voxin\u00bb \u00abvoxin.conf\u00bb<br>280:#AddModule \u00abdummy\u00bb \u00absd_dummy\u00bb \u00ab\u00bb<br>287:# AddModule \u00abtesting\u00bb<br>290:# must use one of the names of the modules loaded with AddModule.<br>349:#AddModule \u00abpiper\u00bb \u00absd_generic\u00bb \u00ab\/etc\/speech-dispatcher\/modules\/piper-generic.conf\u00bb<br>Miquel@Miquel-PC:<\/del>$<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Aspecte<\/th><th><strong>Firefox<\/strong><\/th><th><strong>Microsoft Edge<\/strong><\/th><\/tr><\/thead><tbody><tr><th>Motor de veu<\/th><td>Usa <em>speech\u2011dispatcher<\/em> del sistema (Linux)<\/td><td>Usa el motor intern de Chromium (Google TTS) o el del sistema si est\u00e0 disponible<\/td><\/tr><tr><th>Configuraci\u00f3<\/th><td><code>\/etc\/speech-dispatcher\/speechd.conf<\/code><\/td><td>No t\u00e9 fitxer de configuraci\u00f3 propi; gestiona les veus via l\u2019API <code>speechSynthesis<\/code><\/td><\/tr><tr><th>Idiomes disponibles<\/th><td>Depenen dels m\u00f2duls carregats (<code>espeak-ng<\/code>, <code>pico<\/code>, <code>festival<\/code>, etc.)<\/td><td>Depenen de les veus instal\u00b7lades al sistema o integrades al navegador<\/td><\/tr><tr><th>Comanda per veure veus<\/th><td><code>spd-say -L<\/code> o <code>espeak-ng --voices<\/code><\/td><td><code>speechSynthesis.getVoices()<\/code> des de la consola del navegador<\/td><\/tr><tr><th>Integraci\u00f3 amb TTS<\/th><td>Firefox \u2192 <em>speech\u2011dispatcher<\/em><\/td><td>Edge \u2192 motor Chromium (pot usar <em>speech\u2011dispatcher<\/em> si el sistema ho exposa)<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p class=\"wp-block-paragraph\">Per defecte, el Festival s&#8217;instal\u00b7la en aquestes ubicacions est\u00e0ndard (sistema Debian):<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Contingut Ruta<br>Executable principal \/usr\/bin\/festival<br>Veus (dades) \/usr\/share\/festival\/voices\/<br>Llibreries i suport \/usr\/lib\/festival\/<br>Configuraci\u00f3 global \/etc\/festival.scm<br>Config del m\u00f2dul speech-dispatcher \/etc\/speech-dispatcher\/modules\/festival.conf<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p class=\"wp-block-paragraph\">Molt bona observaci\u00f3, Miquel \ud83d\udc4f<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">El que has mostrat \u00e9s la <strong>configuraci\u00f3 del servei<\/strong> <em><strong>speech\u2011dispatcher<\/strong><\/em> del teu sistema Linux, que \u00e9s el motor que Firefox (i altres aplicacions) fan servir per convertir text en veu. Per\u00f2 <strong>Microsoft Edge no utilitza<\/strong> <em><strong>speech\u2011dispatcher<\/strong><\/em> directament \u2014 t\u00e9 un comportament diferent:<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\ud83e\udde9 <strong>Difer\u00e8ncia clau entre Firefox i Edge (en Linux)<\/strong><\/h3>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Aspecte<\/th><th><strong>Firefox<\/strong><\/th><th><strong>Microsoft Edge<\/strong><\/th><\/tr><\/thead><tbody><tr><th>Motor de veu<\/th><td>Usa <em>speech\u2011dispatcher<\/em> del sistema (Linux)<\/td><td>Usa el motor intern de Chromium (Google TTS) o el del sistema si est\u00e0 disponible<\/td><\/tr><tr><th>Configuraci\u00f3<\/th><td><code>\/etc\/speech-dispatcher\/speechd.conf<\/code><\/td><td>No t\u00e9 fitxer de configuraci\u00f3 propi; gestiona les veus via l\u2019API <code>speechSynthesis<\/code><\/td><\/tr><tr><th>Idiomes disponibles<\/th><td>Depenen dels m\u00f2duls carregats (<code>espeak-ng<\/code>, <code>pico<\/code>, <code>festival<\/code>, etc.)<\/td><td>Depenen de les veus instal\u00b7lades al sistema o integrades al navegador<\/td><\/tr><tr><th>Comanda per veure veus<\/th><td><code>spd-say -L<\/code> o <code>espeak-ng --voices<\/code><\/td><td><code>speechSynthesis.getVoices()<\/code> des de la consola del navegador<\/td><\/tr><tr><th>Integraci\u00f3 amb TTS<\/th><td>Firefox \u2192 <em>speech\u2011dispatcher<\/em><\/td><td>Edge \u2192 motor Chromium (pot usar <em>speech\u2011dispatcher<\/em> si el sistema ho exposa)<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\">\ud83d\udd27 En el teu cas<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Veig que tens activat el m\u00f2dul:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Codi<\/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=\"\">AddModule \"piper\" \"sd_generic\" \"\/etc\/speech-dispatcher\/modules\/piper-generic.conf\"\n<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Aix\u00f2 vol dir que el teu <em>speech\u2011dispatcher<\/em> usa <strong>Piper<\/strong>, un motor de veu neuronal molt m\u00e9s natural que <em>espeak-ng<\/em>. Firefox pot aprofitar-lo si est\u00e0 ben configurat, per\u00f2 Edge normalment <strong>no el fa servir<\/strong> \u2014 ell usa les seves pr\u00f2pies veus integrades.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\ud83d\udde3\ufe0f Si vols que Edge parli amb les mateixes veus que <em>speech\u2011dispatcher<\/em><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Pots provar d\u2019executar Edge amb la variable d\u2019entorn seg\u00fcent (nom\u00e9s en Linux):<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">bash<\/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=\"\">export SPEECHD_ADDRESS=unix_socket:\/run\/speech-dispatcher\/speechd.sock\nmicrosoft-edge\n<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Aix\u00f2 for\u00e7a Edge a intentar comunicar-se amb <em>speech\u2011dispatcher<\/em>. No tots els sistemes ho suporten, per\u00f2 en Deepin o Debian pot funcionar.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Vols que t\u2019expliqui com verificar si Edge est\u00e0 realment usant <em>speech\u2011dispatcher<\/em> o el seu motor intern? Et puc mostrar una prova r\u00e0pida amb JavaScript per comprovar-ho.<\/p>\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<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Objectiu<\/th><th>Acci\u00f3<\/th><\/tr><\/thead><tbody><tr><th>Que speech\u2011dispatcher trobi Ona<\/th><td>Posar el model al host (ja ho tens)<\/td><\/tr><tr><th>Que speech\u2011dispatcher cridi Piper dins Docker<\/th><td>Crear wrapper <code>\/usr\/local\/bin\/piper-docker<\/code><\/td><\/tr><tr><th>Que Piper usi Ona<\/th><td>Editar <code>piper-generic.conf<\/code> amb <code>PIPER_VOICE=\/home\/Miquel\/tts-server\/...<\/code><\/td><\/tr><tr><th>Que Firefox parli amb Ona<\/th><td>Reiniciar speech\u2011dispatcher<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Aqu\u00ed tens, Miquel, <strong>un post complet, estructurat i llest per publicar al teu bloc<\/strong>, explicant la integraci\u00f3 de <strong>Piper (veu Ona)<\/strong> amb <strong>speech\u2011dispatcher<\/strong> en Linux, incloent l\u2019\u00fas de models fora del contenidor Docker.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">He escrit el post com si fos per <em>Beseit i una mica de xirigol<\/em>: clar, pr\u00e0ctic, amb passos verificables i sense misteris.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83d\udfe6 Integrar Piper (veu Ona) amb Speech\u2011Dispatcher en Linux<\/h1>\n\n\n\n<h3 class=\"wp-block-heading\">Funcionant amb models fora del Docker i accessible per Firefox, Orca i aplicacions TTS del sistema<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Durant molt de temps, fer servir veus neuronals en Linux ha estat complicat: motors antics com <em>espeak-ng<\/em> o <em>festival<\/em> no ofereixen la qualitat que molts usuaris necessiten. Amb l\u2019arribada de <strong>Piper<\/strong>, un motor TTS neuronal lleuger i de gran qualitat, la situaci\u00f3 ha canviat radicalment.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">En aquest article explico <strong>com integrar Piper (i concretament la veu catalana Ona)<\/strong> amb <strong>speech\u2011dispatcher<\/strong>, de manera que Firefox, Orca, LibreOffice i qualsevol aplicaci\u00f3 que utilitzi TTS del sistema pugui parlar amb una veu natural.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">A m\u00e9s, ho fem en un escenari real: <strong>el model Ona est\u00e0 dins un contenidor Docker<\/strong>, per\u00f2 speech\u2011dispatcher necessita acc\u00e9s directe al model. Aqu\u00ed tens la soluci\u00f3 completa.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83d\udfe5 El problema: speech\u2011dispatcher no pot veure dins Docker<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Speech\u2011dispatcher nom\u00e9s pot accedir a <strong>fitxers del sistema host<\/strong>. Si el model de Piper (per exemple <code>ca_ES-upc_ona-medium.onnx<\/code>) est\u00e0 dins Docker, speech\u2011dispatcher <strong>no el pot carregar<\/strong>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Per tant:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u274c No podem apuntar directament a <code>\/models\/...<\/code> dins Docker<\/li>\n\n\n\n<li>\u274c No podem fer servir <code>PIPER_VOICE<\/code> amb un cam\u00ed intern del contenidor<\/li>\n\n\n\n<li>\u2714\ufe0f Necessitem que el model estigui <strong>accessible des del host<\/strong><\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Afortunadament, Piper permet executar el motor des de Docker, per\u00f2 el <strong>model ha d\u2019estar fora<\/strong>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83d\udfe6 Soluci\u00f3 correcta (i la que funciona)<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>1) Col\u00b7locar el model Ona al sistema host<\/strong><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">En el nostre cas, el model ja \u00e9s accessible:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Codi<\/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=\"\">\/home\/Miquel\/tts-server\/ca_ES-upc_ona-medium.onnx\n<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Perfecte: speech\u2011dispatcher ja pot veure aquest fitxer.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>2) Crear un \u201cwrapper\u201d perqu\u00e8 speech\u2011dispatcher pugui cridar Piper dins Docker<\/strong><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Creem un script que executi Piper dins el contenidor:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Codi<\/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=\"\">sudo nano \/usr\/local\/bin\/piper-docker\n<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Contingut:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">bash<\/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=\"\">#!\/bin\/bash\ndocker exec -i piper piper \"$@\"\n<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Fem executable:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Codi<\/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=\"\">sudo chmod +x \/usr\/local\/bin\/piper-docker\n<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Ara tenim un \u201cbinari virtual\u201d que speech\u2011dispatcher pot cridar com si fos Piper.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>3) Configurar el m\u00f2dul Piper de speech\u2011dispatcher<\/strong><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Editem:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Codi<\/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=\"\">sudo nano \/etc\/speech-dispatcher\/modules\/piper-generic.conf\n<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">I configurem:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Codi<\/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=\"\">PIPER_BINARY=\"\/usr\/local\/bin\/piper-docker\"\nPIPER_VOICE=\"\/home\/Miquel\/tts-server\/ca_ES-upc_ona-medium.onnx\"\n<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Opcionalment, podem ajustar altres par\u00e0metres:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Codi<\/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=\"\">PIPER_RATE=1.0\nPIPER_VOLUME=1.0\nPIPER_PITCH=1.0\n<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>4) Activar el m\u00f2dul Piper a speech\u2011dispatcher<\/strong><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Al fitxer principal:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Codi<\/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=\"\">sudo nano \/etc\/speech-dispatcher\/speechd.conf\n<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Assegura que tens:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Codi<\/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=\"\">AddModule \"piper\" \"sd_generic\" \"\/etc\/speech-dispatcher\/modules\/piper-generic.conf\"\n<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">I que no tens altres m\u00f2duls en conflicte (espeak, pico, festival\u2026).<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>5) Reiniciar el servei<\/strong><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Codi<\/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=\"\">sudo systemctl restart speech-dispatcher\n<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>6) Provar la veu Ona<\/strong><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Codi<\/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=\"\">spd-say -l ca \"Hola Miquel, s\u00f3c la veu Ona.\"\n<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Si sona natural i clara \u2192 <strong>ja ho tens integrat<\/strong>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83d\udfe9 Resultat final<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Amb aquesta configuraci\u00f3:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Firefox<\/strong> parla amb Piper (veu Ona)<\/li>\n\n\n\n<li><strong>Orca<\/strong> parla amb Piper<\/li>\n\n\n\n<li><strong>LibreOffice<\/strong> pot llegir documents amb Ona<\/li>\n\n\n\n<li><strong>Qualsevol aplicaci\u00f3 GTK o Qt que utilitzi TTS del sistema<\/strong> tamb\u00e9<\/li>\n\n\n\n<li>El model Ona es mant\u00e9 <strong>fora del Docker<\/strong>, per\u00f2 el motor Piper s\u2019executa <strong>dins Docker<\/strong><\/li>\n\n\n\n<li>Tot funciona de manera transparent i estable<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83d\udfe6 Notes finals<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Microsoft Edge en Linux <strong>no usa speech\u2011dispatcher<\/strong> per defecte; usa el motor TTS de Chromium.<\/li>\n\n\n\n<li>Firefox s\u00ed que usa speech\u2011dispatcher, per aix\u00f2 \u00e9s el navegador ideal per aquesta integraci\u00f3.<\/li>\n\n\n\n<li>Si vols que Edge tamb\u00e9 utilitzi Piper, cal un ajust extra amb variables d\u2019entorn, per\u00f2 no sempre funciona.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Si vols, Miquel, puc preparar-te:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>el <strong>fitxer complet piper-generic.conf<\/strong> llest per copiar\u2011enganxar<\/li>\n\n\n\n<li>un <strong>script d\u2019instal\u00b7laci\u00f3 autom\u00e0tica<\/strong><\/li>\n\n\n\n<li>o un <strong>post de seguiment<\/strong> explicant com fer que Edge tamb\u00e9 utilitzi TTS del sistema<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Nom\u00e9s digues qu\u00e8 vols afegir al bloc.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Miquel@Miquel-PC:$ grep -n \u00abAddModule\u00bb \/etc\/speech-dispatcher\/speechd.conf248:# Each AddModule line loads an output module.249:# Syntax: AddModule \u00abname\u00bb \u00abbinary\u00bb \u00abconfiguration\u00bb \u00ablogfile\u00bb258:#AddModule \u00abespeak\u00bb \u00absd_espeak\u00bb \u00abespeak.conf\u00bb259:#AddModule \u00abespeak-ng\u00bb \u00absd_espeak-ng\u00bb \u00abespeak-ng.conf\u00bb260:#AddModule \u00abfestival\u00bb \u00absd_festival\u00bb \u00abfestival.conf\u00bb261:#AddModule \u00abflite\u00bb \u00absd_flite\u00bb \u00abflite.conf\u00bb262:#AddModule \u00abivona\u00bb \u00absd_ivona\u00bb \u00abivona.conf\u00bb263:#AddModule \u00abpico\u00bb \u00absd_pico\u00bb \u00abpico.conf\u00bb264:#AddModule \u00abespeak-ng-mbrola-generic\u00bb \u00absd_generic\u00bb \u00abespeak-ng-mbrola-generic.conf\u00bb265:#AddModule \u00abespeak-mbrola-generic\u00bb &hellip; <a href=\"https:\/\/www.beseit.net\/?p=19062\">Continua llegint <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":2,"featured_media":3169,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[207,1],"tags":[],"class_list":["post-19062","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-deepin-linux","category-bloc-de-notes"],"_links":{"self":[{"href":"https:\/\/www.beseit.net\/index.php?rest_route=\/wp\/v2\/posts\/19062","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=19062"}],"version-history":[{"count":6,"href":"https:\/\/www.beseit.net\/index.php?rest_route=\/wp\/v2\/posts\/19062\/revisions"}],"predecessor-version":[{"id":19084,"href":"https:\/\/www.beseit.net\/index.php?rest_route=\/wp\/v2\/posts\/19062\/revisions\/19084"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.beseit.net\/index.php?rest_route=\/wp\/v2\/media\/3169"}],"wp:attachment":[{"href":"https:\/\/www.beseit.net\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=19062"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.beseit.net\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=19062"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.beseit.net\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=19062"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}