Primo capitolo: la torcia nella fessura del bastione mostra il palio e due occhi gialli
- le impronte portano a una fessura nel bastione; con la torcia si vede un angolo del palio (l'omino con la maglia rossa del quadro vero, già descritto sul manifesto) e due occhi gialli: fine del primo capitolo - la soluzione passa per indovinello, oratorio e catena del ghiacciolo; tragitti calcolati dalle uscite - il Trebbio ha un indizio per ogni tappa della torcia - tools/pronuncia.json: le parole che XTTS legge male, riscritte solo per la voce («celo» → «ce l'ho») - voci delle battute nuove Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01ApqNBvNbNCwXqR2RLo8QJh
This commit is contained in:
@@ -0,0 +1,18 @@
|
||||
// Come la voce deve leggere una battuta: le parole di tools/pronuncia.json che XTTS sbaglia in italiano
|
||||
// («celo» delle figurine diventa «cielo») si riscrivono come vanno lette. Solo per la voce: il fumetto resta com'è.
|
||||
import { readFileSync } from 'node:fs';
|
||||
|
||||
export const rules = JSON.parse(readFileSync(new URL('./pronuncia.json', import.meta.url), 'utf8'));
|
||||
|
||||
// Ogni parola intera (né pezzo di un'altra, né dopo un apostrofo), senza badare alle maiuscole;
|
||||
// se nel testo cominciava con la maiuscola, la tiene.
|
||||
export function spoken(text, list = rules) {
|
||||
let out = text;
|
||||
for (const [written, said] of Object.entries(list)) {
|
||||
if (written.startsWith('_')) continue;
|
||||
const word = written.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
|
||||
const capital = m => m[0] !== m[0].toLowerCase();
|
||||
out = out.replace(new RegExp(`(?<![\\p{L}'’])${word}(?![\\p{L}])`, 'giu'), m => capital(m) ? said[0].toUpperCase() + said.slice(1) : said);
|
||||
}
|
||||
return out;
|
||||
}
|
||||
Reference in New Issue
Block a user