English pronunciation can seem very difficult even for learners who understand the language well. Difficulties such as inconsistent phonetic spelling and unclear feedback can make learners afraid to speak. Many existing tools also require subscriptions or upload voice recordings to the cloud. We created Vaani to provide pronunciation practice that is specific,confidential, and completely free.
Vaani is an adaptive pronunciation coach that runs inside the browser. The user reads a passage,and Vaani analyzes the sounds in the recording. Each sound is labeled Matched,Practice, or Uncertain. Learners can compare their recording with a reference voice,evaluate highlighted words, and accept or reject Vaani's feedback. The website curates personalized exercise from 740 natural sentences based on the user's confirmed weak sounds. No accounts, voice uploads, or arbitrary percentage grades.
We built Vaani with React, TypeScript, Vite and Tailwind CSS. The browser's MediaRecorder API captures audio, which is converted to 16 kHZ. Transformers.js runs a local ONNX speech model as Web Worker, which produces sound probabilities roughly every 20 milliseconds. Vaani aligns the recording with the expected text and utilizes Goodness of Pronunciation scoring to compare each expected sound with its best alternative. A sound is flagged only when multiple checks agree with the pattern in at least two different words. Preferences and overall progress are stored locally with IndexedDB. After the first model download, the core app can work offline without a funded backend.
Our largest challenge was in fact preventing false positives. Microphones,background noise and connected speech can all affect model output. We noticed that our words blended naturally, for example, "would be" may sound more like a continuous phrase. Fixed silence-based word splitting was unreliable. WE addressed this with phoneme-level alignment, repeated evidence, accepted pronunciation variants, and an "uncertain" result when confidence on the subject was weak. Running the model using a browser also created various performance challenges because the initial model is around 360 MB. We used caching and a web worker to keep the interface responsive and allow offline use.
We learned that model confidence is not the same as verity. Trustworthy AI must explain its conclusions and leave the final judgment with the user. We also gained experience with browser audio processing, local machine-learning interference, and privacy-first design
Vaani: your voice, your design, your practice plan.
Built With
- canvas-api
- cmudict
- github
- hugging-face
- indexeddb
- kokoro-tts
- machine-learning
- mediarecorder-api
- node.js
- onnx-runtime-web
- pwa
- react
- service-workers
- speech-processing
- tailwindcss
- transformers.js
- typescript
- vercel
- vite
- wav2vec2
- web-audio-api
- web-speech-api
- web-workers
- webassembly
- workbox
Log in or sign up for Devpost to join the conversation.