← Tutte le idee Studio e formazione

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.