
PROJECT
| Mahima Sudarshan | AUTHOR | ACTIVE |
| Varsha Shubhashri.M | COORDINATOR | ACTIVE |

Presented by: Mahima Format: Web application (React + Firebase)
RAGA (Abhyaas Buddy) is a web application that stands in for live human instrumentalists during the practice ("riyaz"/"abhyaas") sessions of Indian classical vocalists. Music, as the project frames it, is a blend of lyrics, notes, tunes, register, and rhythm — and in both the Hindustani and Carnatic traditions, vocalists are normally accompanied by instrumentalists on stage. RAGA recreates that accompaniment digitally, following the vocalist's shruti (pitch) and taal (rhythm) while layering on practice-tracking features such as drift detection, pitch detection, practice streaks, and gamification.
RAGA was scoped around two core objectives:
The project was scoped and delivered across three phases:
| Phase | Scope |
|---|---|
| Phase 1 | Shruti & taal selector, tempo control, drift detection, practice-session control, and user accounts. Pitch detection was added as a bonus feature not originally scoped in the proposal. |
| Phase 2 | All 72 Melakarta ragas, gamification, and practice streaks. Violin, harmonium, full real-time tempo following, and a mobile app were listed as future scope in the original proposal. |
| Phase 3 | Gamaka following and a student–teacher interface, planned as future scope. |
Google-based sign-in gates the app; a user's practice history, favourites, and settings are all tied to their account (backed by Firebase Authentication).
The main practice screen lets a vocalist pick their shruti (tonic/Sa, across all 12 semitones) and taal, and start/stop/pause a live session from a persistent bottom control bar. Ten seconds after the play button is clicked, the app starts to record the user's practice session, and as soon as the stop button is clicked the recording is automatically downloaded
A Laya (tempo) selector — Vilambit (slow), Madhya (medium), Drut (fast) — plus a fine-grained BPM slider (30–200 BPM) drives the tabla/mrudangam playback rate.
Once playing, the tanpura drone and the taal-keeping percussion (tabla for Hindustani, mrudangam for Carnatic) both play back pitch-shifted and tempo-shifted from a single recorded sample, in sync with the selected shruti and taal.
Every completed session (≥10 seconds) is logged to Firestore with its shruti, taal, laya, tradition, duration, and date, and surfaced in a sortable history table. This also displays the number of times the user went off tune, and indicates if the recording is downloaded.
Users can save a named combination of shruti + taal + laya + tradition and reload it with one click for future sessions.
Drift detection listens to the vocalist's onsets via the microphone (RMS-energy-based onset detection), estimates their singing tempo from the intervals between onsets, and compares it against the current taal's BPM in four steps:
If the vocalist drifts more than ~5 BPM from the target, RAGA nudges them to slow down or speed up.
Pitch detection is built on the YIN algorithm, a well-known pitch/fundamental-frequency estimator, implemented in four stages:
with the core relationship:
frequency = sample rate ÷ period (in samples)
The detected frequency is converted to a semitone offset from the selected Sa, mapped to a swara name (Sa, Komal Ri, Chatushruti Ri, etc.), and — once a raga is selected — validated against that raga's arohana/avarohana to flag whether the sung note is actually "in raga."
Beyond raw history, RAGA computes a practice streak, total sessions, longest session, and unique ragas/taals practiced, and awards 12 achievement badges (e.g., First Note, Week Warrior for a 7-day streak, Raga Explorer for 5 different ragas, Both Traditions for practicing Hindustani and Carnatic, and more) to gamify consistent abhyaas.
Phase 2 adds full coverage of Carnatic music's 72 Melakarta parent scales, browsable through an interactive Katapayadi chakra wheel — a 12-segment circular UI grouping the 72 ragas into their 12 traditional "chakras," each covering 6 ragas.
The Melakarta numbering-to-scale derivation follows the classical Katapayadi encoding: Ri–Ga combinations are keyed off which chakra a raga falls in (0–5), and Dha–Ni combinations off its position within that chakra (0–5); Madhyam (M1 vs M2) flips at raga 37. Selecting any raga surfaces its Arohana/Avarohana and individual swarasthana values.

Phase 1 shipped a working end-to-end practice companion: tanpura + tabla/mrudangam accompaniment, shruti/taal/tempo controls, session tracking, favourites, and both drift and pitch detection — wrapped in a warm, classical-music-inspired UI.
---The interface leans into an ornamental, classical-instrument-inspired visual language — deep browns and golds, Cinzel serif headings, diya/percussion motifs — applied consistently across login, practice, history, favourites, raga explorer, progress, and settings screens.
Phase 2 (planned in proposal, partly carried forward):
Phase 3:
The presentation describes what RAGA does; the underlying repository shows how it's built:
react-scripts), react-router-dom v7 for client-side routing across Practice, History, Favourites, Raga, Progress, and Settings screens.Sessions, Favourites, and per-user Settings documents.Tone.js drives tanpura and tabla/mrudangam sample playback, with playbackRate computed on the fly to combine a pitch shift (semitone offset from the recorded sample's shruti) with a tempo shift (target BPM ÷ recorded sample BPM).Web Audio API (AnalyserNode + RMS energy) onset detector runs client-side, comparing the vocalist's estimated singing tempo against the selected taal's BPM.@tensorflow/tfjs and aubiojs are present as project dependencies for future/experimental pitch-related work.melakarta.js module encodes all 72 Melakarta ragas with their Katapayadi chakra/position mapping, arohana/avarohana, and swarasthana logic; badges.js encodes the 12 gamification badges and the streak/session statistics engine.Cinzel (headings) + Noto Sans (body) typography, and ornamental section dividers throughout the UI.