{"id":19201,"date":"2026-09-23T19:06:46","date_gmt":"2026-09-23T17:06:46","guid":{"rendered":"https:\/\/www.beseit.net\/?p=19201"},"modified":"2026-09-23T19:06:46","modified_gmt":"2026-09-23T17:06:46","slug":"enviar-una-peticio-amb-text-a-un-servei-del-synology-i-que-aquest-generi-automaticament-un-fitxer-veu-wav-amb-la-veu-ona-i-el-guardi-a-la-carpeta-compartida-volume1-web-piper-ona-veu","status":"publish","type":"post","link":"https:\/\/www.beseit.net\/?p=19201","title":{"rendered":"Enviar una petici\u00f3 amb text a un servei del Synology i que aquest generi autom\u00e0ticament un fitxer veu.wav amb la veu \u00abOna\u00bb i el guardi a la carpeta compartida \/volume1\/web\/piper-ona-veu\/."},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">Perfecte, Miquel. \u00c9s una molt bona idea deixar-ho aqu\u00ed i reprendre-ho amb calma m\u00e9s tard.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Aqu\u00ed tens un <strong>resum t\u00e8cnic exacte<\/strong> del punt on ens hem quedat, perqu\u00e8 quan tornis puguis copiar i engan\u00e7ar aquesta informaci\u00f3 (o simplement llegir-la) i continuem sense perdre el fil.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">\ud83d\udccb RESUM DE LA SITUACI\u00d3 (Per continuar m\u00e9s tard)<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>\ud83c\udfaf Objectiu final:<\/strong><br>Enviar una petici\u00f3 amb text a un servei del Synology i que aquest generi autom\u00e0ticament un fitxer <code>veu.wav<\/code> amb la veu \u00abOna\u00bb i el guardi a la carpeta compartida <code>\/volume1\/web\/piper-ona-veu\/<\/code>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>\u2705 El que JA funciona:<\/strong><\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>El contenidor <strong><code>piper<\/code><\/strong> est\u00e0 engegat i funcionant correctament. (Vam haver d&#8217;arreglar un error de permisos fent <code>sudo chmod -R 777 \/volume1\/docker\/piper<\/code>). Ara est\u00e0 \u00abReady\u00bb i escoltant internament al port <code>10200<\/code>.<\/li>\n\n\n\n<li>La carpeta de dest\u00ed <code>\/volume1\/web\/piper-ona-veu\/<\/code> est\u00e0 creada i accessible.<\/li>\n<\/ol>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>\u274c El que hem descartat:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>El contenidor <strong><code>flask-tts<\/code><\/strong> (port 5050). Hem descobert que intenta parlar amb <code>piper<\/code> mitjan\u00e7ant HTTP senzill, per\u00f2 <code>piper<\/code> utilitza el protocol <em>Wyoming<\/em>. Aix\u00f2 provoca un error de connexi\u00f3 (Error 500). El deixarem de banda.<\/li>\n\n\n\n<li>L&#8217;\u00fas de Python directament al sistema operatiu del Synology per fer de \u00abpont\u00bb, ja que el Python del NAS no t\u00e9 <code>pip<\/code> ni les llibreries necess\u00e0ries instal\u00b7lades.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>\u23f8\ufe0f El punt d&#8217;aturada (On ens hem quedat):<\/strong><br>Est\u00e0vem creant un <strong>nou contenidor Docker propi anomenat <code>tts-wrapper<\/code><\/strong> per fer de pont. La seva funci\u00f3 seria:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Escoltar peticions JSON al port <strong>5051<\/strong>.<\/li>\n\n\n\n<li>Connectar-se directament al contenidor <code>piper<\/code> (a trav\u00e9s de la xarxa Docker <code>flask_default<\/code>) utilitzant la llibreria de Python <code>wyoming<\/code>.<\/li>\n\n\n\n<li>Rebre l&#8217;\u00e0udio i guardar-lo a <code>\/data\/veu.wav<\/code> (que est\u00e0 mapejat a <code>\/volume1\/web\/piper-ona-veu\/veu.wav<\/code>).<\/li>\n<\/ol>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>L&#8217;\u00faltima acci\u00f3:<\/strong> Vam intentar construir i engegar aquest contenidor (<code>docker build<\/code> i <code>docker run<\/code>), per\u00f2 el contenidor no es va crear o va fallar silenciosament a l&#8217;arrencar (per aix\u00f2 sortia \u00abNo such container\u00bb).<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">\ud83d\udccc DADES CLAU PER QUAN TORNIS<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>IP del Synology:<\/strong> <code>192.168.1.49<\/code><\/li>\n\n\n\n<li><strong>Xarxa Docker on estan els contenidors:<\/strong> <code>flask_default<\/code><\/li>\n\n\n\n<li><strong>Carpeta del projecte del wrapper:<\/strong> <code>\/volume1\/docker\/tts-wrapper\/<\/code> (ha de contenir <code>app.py<\/code> i <code>Dockerfile<\/code>).<\/li>\n\n\n\n<li><strong>Carpeta de sortida de l&#8217;\u00e0udio:<\/strong> <code>\/volume1\/web\/piper-ona-veu\/<\/code><\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">\ud83d\ude80 PR\u00d2XIMS PASSOS (Quan reprenguis la sessi\u00f3)<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Connecta&#8217;t per SSH al Synology.<\/li>\n\n\n\n<li>Comprova que els fitxers <code>app.py<\/code> i <code>Dockerfile<\/code> existeixen a <code>\/volume1\/docker\/tts-wrapper\/<\/code>.<\/li>\n\n\n\n<li>Torna a intentar la construcci\u00f3 amb <code>sudo docker build -t tts-wrapper \/volume1\/docker\/tts-wrapper<\/code> i <strong>llegeix amb atenci\u00f3 l&#8217;\u00faltima l\u00ednia<\/strong> per veure si hi ha algun error de compilaci\u00f3 (a vegades els Synology amb processadors ARM o antics necessiten una imatge base de Docker lleugerament diferent).<\/li>\n\n\n\n<li>Si falla el build, t&#8217;ho dius i ajustem el <code>Dockerfile<\/code>. Si t\u00e9 \u00e8xit, l&#8217;engeguem i fem la prova final amb <code>curl<\/code>.<\/li>\n<\/ol>\n\n\n\n<p class=\"wp-block-paragraph\">Descansa, Miquel! Quan vulguis continuar, nom\u00e9s has de dir \u00abreprenem\u00bb i ens posem directament amb el Pas 2 d&#8217;aquesta llista. Fins ara has fet una feina de diagn\u00f2stic excel\u00b7lent! \ud83d\udcaa<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Perfecte, Miquel. \u00c9s una molt bona idea deixar-ho aqu\u00ed i reprendre-ho amb calma m\u00e9s tard. Aqu\u00ed tens un resum t\u00e8cnic exacte del punt on ens hem quedat, perqu\u00e8 quan tornis puguis copiar i engan\u00e7ar aquesta informaci\u00f3 (o simplement llegir-la) i &hellip; <a href=\"https:\/\/www.beseit.net\/?p=19201\">Continua llegint <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-19201","post","type-post","status-publish","format-standard","hentry","category-bloc-de-notes"],"_links":{"self":[{"href":"https:\/\/www.beseit.net\/index.php?rest_route=\/wp\/v2\/posts\/19201","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=19201"}],"version-history":[{"count":1,"href":"https:\/\/www.beseit.net\/index.php?rest_route=\/wp\/v2\/posts\/19201\/revisions"}],"predecessor-version":[{"id":19202,"href":"https:\/\/www.beseit.net\/index.php?rest_route=\/wp\/v2\/posts\/19201\/revisions\/19202"}],"wp:attachment":[{"href":"https:\/\/www.beseit.net\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=19201"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.beseit.net\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=19201"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.beseit.net\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=19201"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}