Ear (toni del cinese)
Un piccolo modello AI che corregge la pronuncia dei toni del cinese
Cosa fa
Un creatore ha addestrato un piccolo modello vocale per correggere la sua pronuncia dei toni del cinese mandarino.
Come guadagna
Presentato su Hacker News dal suo creatore, che non dichiara incassi. Idee nostre per guadagnare con un progetto simile: abbonamento per chi studia una lingua, licenze per scuole di lingua.
Rendilo tuo
- Per gli stranieri che imparano l'italiano: doppie, accenti, vocali aperte e chiuse.
- Per gli italiani: la pronuncia inglese delle parole più usate al lavoro.
Le frasi da scrivere all'AI
1. Base del sito e grafica
Crea un'app web in italiano chiamata "Pronuncia Giusta": aiuta gli italiani a migliorare la pronuncia dell'inglese: si legge una frase ad alta voce, l'app capisce cosa ha sentito e mostra parola per parola cosa è stato pronunciato bene e cosa no, con l'audio corretto da ascoltare. Usa React, Vite, TypeScript e Tailwind CSS.
Pagine da creare:
1. Pagina iniziale con una demo e il prezzo
2. Esercizio: frase da leggere, pulsante per registrare, risultato colorato parola per parola
3. Suoni difficili per gli italiani: "th", "h" aspirata, vocali lunghe e corte
4. Progressi: precisione nel tempo, parole più sbagliate
5. Pagina Pro
Stile: chiaro e incoraggiante: sfondo bianco, blu #1D4ED8, verde #16A34A per le parole giuste, arancione #EA580C per quelle da migliorare, carattere "Inter", frase grande al centro. Nessuna immagine generica di stock.
Tutto deve funzionare perfettamente da telefono. Tutti i testi in italiano, chiari e senza parole tecniche.
2. Database, account e sicurezza
Collega il progetto a Supabase e attiva la registrazione con email e password.
Crea queste tabelle:
- "tentativi": frase, testo riconosciuto, parole sbagliate, precisione, data, collegati all'utente
- "frasi": testo, livello, suoni allenati
Regole di sicurezza obbligatorie:
- ogni utente vede solo i suoi tentativi
- l'audio registrato non si conserva: si salva solo il risultato
- il piano non si modifica dal browser
Usa esattamente il codice SQL che trovi nei "Dettagli tecnici" di questa scheda: eseguilo nel SQL Editor di Supabase prima di continuare, poi collega le pagine alle tabelle.
3. Cosa ha sentito l'app
L'utente legge la frase; l'audio va a un servizio di riconoscimento vocale per l'inglese, che restituisce il testo capito. Il sito confronta parola per parola il testo atteso con quello riconosciuto (allineamento con la distanza di Levenshtein, codice nei Dettagli tecnici) e colora le parole: verde se riconosciuta, arancione se capita come un'altra parola ("tree" invece di "three"), grigia se mancante.
Toccando una parola si ascolta la pronuncia corretta (sintesi vocale) e la propria. Le frasi sono costruite sui suoni difficili per chi parla italiano ("th", "h" aspirata, "ship/sheep").
È un aiuto pratico, non un giudizio da insegnante: "se l'app ti capisce, ti capiscono anche le persone".
4. Progressi e Pro
Progressi: precisione media per settimana, suoni più difficili, parole sbagliate più spesso con un esercizio dedicato.
Pro: frasi illimitate per livello e per situazione (colloquio, viaggio, riunione), ripasso delle parole sbagliate, e conversazioni guidate brevi.
5. Pagamenti con Stripe
Aggiungi un abbonamento a 4,99 € al mese. Gratis l'utente ha: 5 frasi al giorno. Con il piano Pro sblocca: frasi illimitate, situazioni di lavoro e viaggio, ripasso e conversazioni guidate.
A pagamento riuscito il webhook porta l'utente al piano Pro; se l'abbonamento viene disdetto o non rinnovato lo riporta al piano gratuito.
Per la sessione di pagamento e il webhook segui la guida "Pagamenti con Stripe" di Fattibile.
6. Controlli specifici di questo progetto
Oltre ai controlli della guida "Controllo finale", verifica in particolare:
1. Confronto: leggi apposta "tree" al posto di "three": la parola deve diventare arancione e mostrare cosa è stato capito.
Correggi quello che non va e scrivimi cosa hai cambiato.
Dettagli tecnici
Confronto parola per parola
Allinea le parole attese con quelle riconosciute usando la distanza di Levenshtein sulle parole: dice quali sono giuste, sostituite o mancanti.
type Esito = { attesa: string; sentita: string | null; stato: "giusta" | "diversa" | "mancante" };
const pulisci = (s: string) => s.toLowerCase().replace(/[^a-z' ]/g, "").split(/\s+/).filter(Boolean);
export function confronta(attesa: string, riconosciuta: string): Esito[] {
const a = pulisci(attesa), b = pulisci(riconosciuta);
// d[i][j] = modifiche minime per passare dalle prime i parole attese alle prime j sentite
const d = Array.from({ length: a.length + 1 }, (_, i) => Array.from({ length: b.length + 1 }, (_, j) => (i === 0 ? j : j === 0 ? i : 0)));
for (let i = 1; i <= a.length; i++)
for (let j = 1; j <= b.length; j++)
d[i][j] = Math.min(d[i - 1][j] + 1, d[i][j - 1] + 1, d[i - 1][j - 1] + (a[i - 1] === b[j - 1] ? 0 : 1));
// Ripercorre la tabella all'indietro per sapere cosa è successo a ogni parola
const esiti: Esito[] = [];
let i = a.length, j = b.length;
while (i > 0) {
if (j > 0 && d[i][j] === d[i - 1][j - 1] + (a[i - 1] === b[j - 1] ? 0 : 1)) {
esiti.unshift({ attesa: a[i - 1], sentita: b[j - 1], stato: a[i - 1] === b[j - 1] ? "giusta" : "diversa" });
i--; j--;
} else if (j > 0 && d[i][j] === d[i][j - 1] + 1) {
j--; // parola in più detta: si ignora
} else {
esiti.unshift({ attesa: a[i - 1], sentita: null, stato: "mancante" });
i--;
}
}
return esiti;
}
export const precisione = (e: Esito[]) => Math.round((100 * e.filter((x) => x.stato === "giusta").length) / e.length);
Pezzi comuni a tutti i progetti
Glossario
- Distanza di Levenshtein
- Il numero minimo di modifiche per trasformare una sequenza in un'altra: serve a capire quali parole non tornano.
- Riconoscimento vocale
- La tecnologia che trasforma la voce in testo scritto.