{"id":18898,"date":"2026-09-03T10:46:29","date_gmt":"2026-09-03T08:46:29","guid":{"rendered":"https:\/\/www.beseit.net\/?p=18898"},"modified":"2026-09-03T11:32:39","modified_gmt":"2026-09-03T09:32:39","slug":"piper-tts","status":"publish","type":"post","link":"https:\/\/www.beseit.net\/?p=18898","title":{"rendered":"Piper TTS a Deepin"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\"><strong><mark style=\"background-color:rgba(0, 0, 0, 0);color:#f00a0a\" class=\"has-inline-color\">Comanda per dir bon dia  amb la veu d&#8217;Ona:<\/mark><\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>echo \"hola bon dia\" | \/home\/Miquel\/piper\/piper -m \/home\/Miquel\/piper_linux_x86_64\/ca_ES-upc_ona-medium.onnx --output-raw | aplay -r 22050 -f S16_LE -t raw -<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">1. Extreure el fitxer correctament:<\/h3>\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=\"\">tar -xvf piper_linux_x86_64.tar.gz<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">2. Descarregar la veu en catal\u00e0 (dins de la carpeta que acabes de crear):<\/h3>\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=\"\">wget -P piper_linux_x86_64 https:\/\/huggingface.co\/rhasspy\/piper-voices\/resolve\/main\/ca\/ca_ES\/upc_ona\/x_low\/ca_ES-upc_ona-x_low.onnx\nwget -P piper_linux_x86_64 https:\/\/huggingface.co\/rhasspy\/piper-voices\/resolve\/main\/ca\/ca_ES\/upc_ona\/x_low\/ca_ES-upc_ona-x_low.onnx.json<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">3. Fer que l&#8217;ordinador parli:<\/h3>\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=\"\">echo \"hola bon dia\" | .\/piper_linux_x86_64\/piper -m .\/piper_linux_x86_64\/ca_ES-upc_ona-x_low.onnx --output-raw | aplay -r 22050 -f S16_LE -t raw -<\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83d\udccb Xuleta d&#8217;\u00das: Piper TTS (Catal\u00e0) a Deepin<\/h1>\n\n\n\n<h2 class=\"wp-block-heading\">1. COM usar-la des de la Terminal (Deepin)<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Si vas afegir la funci\u00f3 al teu <code>~\/.bashrc<\/code>, tens dues eines r\u00e0pides:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Escoltar directament:<\/strong><code>parla \"Hola Miquel, el sistema funciona perfectament.\"<\/code><\/li>\n\n\n\n<li><strong>Generar un fitxer d&#8217;\u00e0udio (sense reproduir-lo):<\/strong><code>cd ~\/piper-tts\/piper export LD_LIBRARY_PATH=. echo \"Text a guardar\" | .\/piper --model ca_ES-upc_ona-medium.onnx --output_file \/ruta\/del\/meu\/fitxer.wav<\/code><\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">2. COM usar-la des de PHP (Integraci\u00f3 Web)<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Com que treballes amb aplicacions PHP, pots generar \u00e0udio din\u00e0micament al servidor. Aqu\u00ed tens un exemple segur i net:<\/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=\"\">&lt;?php\n$text = \"Hola, aix\u00f2 \u00e9s una prova de veu generada des de PHP.\";\n$output_file = \"\/tmp\/tts_\" . uniqid() . \".wav\";\n\n\/\/ 1. Netejar el text per evitar injecci\u00f3 de comandes a la terminal\n$text_net = escapeshellarg($text);\n\n\/\/ 2. Construir la comanda (ajusta la ruta si el teu usuari no \u00e9s 'Miquel')\n$comanda = \"cd \/home\/Miquel\/piper-tts\/piper &amp;&amp; \" .\n           \"export LD_LIBRARY_PATH=. &amp;&amp; \" .\n           \"echo $text_net | .\/piper --model ca_ES-upc_ona-medium.onnx --output_file $output_file 2>\/dev\/null\";\n\n\/\/ 3. Executar\nshell_exec($comanda);\n\n\/\/ 4. Comprovar si s'ha creat i servir-lo (o retornar la ruta)\nif (file_exists($output_file)) {\n    header('Content-Type: audio\/wav');\n    header('Content-Disposition: attachment; filename=\"veu.wav\"');\n    readfile($output_file);\n    unlink($output_file); \/\/ Neteja el fitxer temporal despr\u00e9s d'enviar-lo\n} else {\n    echo \"Error generant l'\u00e0udio.\";\n}\n?><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><em>Nota: Assegura&#8217;t que l&#8217;usuari que executa PHP (ex: <code>www-data<\/code> o el teu usuari en entorn de desenvolupament) tingui permisos d&#8217;execuci\u00f3 a la carpeta <code>\/home\/Miquel\/piper-tts\/piper<\/code>.<\/em><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">3. ON i QUAN usar-la (Casos d&#8217;\u00fas pr\u00e0ctics)<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>\ud83c\udf93 Projectes d&#8217;aprenentatge d&#8217;idiomes:<\/strong> Com que t&#8217;interessa el suport multiling\u00fce, pots canviar el model <code>.onnx<\/code> (ex: a <code>en_US-amy-medium.onnx<\/code>) per generar \u00e0udio d&#8217;exemple per a estudiants de catal\u00e0, angl\u00e8s o basc.<\/li>\n\n\n\n<li><strong>\u267f Accessibilitat:<\/strong> Afegir un bot\u00f3 \u00abEscoltar resposta\u00bb a les teves aplicacions web per a usuaris amb discapacitat visual o dificultats de lectura.<\/li>\n\n\n\n<li><strong>\ud83d\udd14 Notificacions d&#8217;escriptori:<\/strong> Combinar-ho amb les notificacions de Deepin perqu\u00e8 l&#8217;ordinador et llegeixi alertes:<code>parla \"Atenci\u00f3: la c\u00f2pia de seguretat al servidor Synology ha finalitzat.\"<\/code><\/li>\n\n\n\n<li><strong>\ud83d\udee0\ufe0f Depuraci\u00f3 (Debugging):<\/strong> Fer que el servidor \u00abparli\u00bb quan un script PHP llarg acaba d&#8217;executar-se, aix\u00ed no has d&#8217;estar mirant la pantalla constantment.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">4. COM personalitzar la veu (Trucs avan\u00e7ats)<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Piper permet ajustar par\u00e0metres afegint-los a la comanda:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Fer-la parlar m\u00e9s r\u00e0pid:<\/strong> Afegeix <code>--length_scale 0.8<\/code> (valors m\u00e9s baixos = m\u00e9s r\u00e0pid).<\/li>\n\n\n\n<li><strong>Fer-la parlar m\u00e9s a poc a poc:<\/strong> Afegeix <code>--length_scale 1.2<\/code>.<\/li>\n\n\n\n<li><strong>M\u00e9s expressiva\/aleat\u00f2ria:<\/strong> Afegeix <code>--noise_scale 0.8<\/code> (el valor per defecte \u00e9s 0.66).<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\"><em>Exemple:<\/em><\/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=\"\">echo \"Vaig molt r\u00e0pid!\" | .\/piper --model ca_ES-upc_ona-medium.onnx --length_scale 0.8 --output_file rapid.wav<\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">5. RESOLUCI\u00d3 R\u00c0PIDA DE PROBLEMES<\/h2>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Problema<\/th><th>Soluci\u00f3<\/th><\/tr><\/thead><tbody><tr><td><strong>Error: <code>libpiper_phonemize.so.1: cannot open<\/code><\/strong><\/td><td>Est\u00e0s executant l&#8217;ordre fora de la carpeta o sense la variable d&#8217;entorn. Fes: <code>cd ~\/piper-tts\/piper &amp;&amp; export LD_LIBRARY_PATH=.<\/code><\/td><\/tr><tr><td><strong>No se sent cap so amb <code>paplay<\/code><\/strong><\/td><td>Prova a reproduir el fitxer <code>.wav<\/code> directament amb el reproductor d&#8217;\u00e0udio del Deepin (doble clic). Si se sent, el problema \u00e9s de configuraci\u00f3 de PulseAudio\/PipeWire, no de Piper.<\/td><\/tr><tr><td><strong>La veu sona molt rob\u00f2tica<\/strong><\/td><td>Assegura&#8217;t que est\u00e0s fent servir el model <code>medium<\/code> o <code>high<\/code>. Els models <code>x_low<\/code> s\u00f3n molt r\u00e0pids per\u00f2 sonen m\u00e9s artificials.<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">\ud83d\udca1 Proper pas opcional<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Si en el futur vols afegir una veu en <strong>angl\u00e8s<\/strong> o <strong>basca<\/strong> al mateix sistema, nom\u00e9s has de:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Descarregar el <code>.onnx<\/code> i <code>.json<\/code> de la nova llengua des del <a href=\"https:\/\/huggingface.co\/rhasspy\/piper-voices\/tree\/v1.0.0\">repositori de veus de Piper<\/a>.<\/li>\n\n\n\n<li>Posar-los a la carpeta <code>~\/piper-tts\/piper<\/code>.<\/li>\n\n\n\n<li>Canviar <code>--model ca_ES-upc_ona-medium.onnx<\/code> pel nom del nou fitxer a les teves comandes o scripts PHP.<\/li>\n<\/ol>\n\n\n\n<p class=\"wp-block-paragraph\">T&#8217;ha quedat clar amb aquest format? Si vols que adaptem la funci\u00f3 de bash o l&#8217;script de PHP per a algun cas concret dels teus projectes, digue-m&#8217;ho!<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Comanda per dir bon dia amb la veu d&#8217;Ona: 1. Extreure el fitxer correctament: 2. Descarregar la veu en catal\u00e0 (dins de la carpeta que acabes de crear): 3. Fer que l&#8217;ordinador parli: \ud83d\udccb Xuleta d&#8217;\u00das: Piper TTS (Catal\u00e0) a &hellip; <a href=\"https:\/\/www.beseit.net\/?p=18898\">Continua llegint <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":2,"featured_media":3167,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[207,1],"tags":[],"class_list":["post-18898","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\/18898","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=18898"}],"version-history":[{"count":4,"href":"https:\/\/www.beseit.net\/index.php?rest_route=\/wp\/v2\/posts\/18898\/revisions"}],"predecessor-version":[{"id":18904,"href":"https:\/\/www.beseit.net\/index.php?rest_route=\/wp\/v2\/posts\/18898\/revisions\/18904"}],"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=18898"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.beseit.net\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=18898"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.beseit.net\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=18898"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}