Metadata-Version: 2.4
Name: raganotate
Version: 0.6.8
Summary: Full-Stack Carnatic Music Notation Engine — Lyrics to Playable Audio
Author-email: Jags <info@revsmartasia.com>
License: AGPL-3.0-or-later
Project-URL: Homepage, https://github.com/jags111/RagaNotate
Project-URL: Bug Tracker, https://github.com/jags111/RagaNotate/issues
Project-URL: Changelog, https://github.com/jags111/RagaNotate/blob/main/CHANGELOG.md
Project-URL: Documentation, https://github.com/jags111/RagaNotate/blob/main/README.md
Keywords: carnatic,music,notation,raga,gamaka,tala,indian-classical,midi,audio,huggingface,ai
Classifier: Development Status :: 3 - Alpha
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: License :: OSI Approved :: GNU Affero General Public License v3 or later (AGPLv3+)
Classifier: Operating System :: OS Independent
Classifier: Topic :: Multimedia :: Sound/Audio :: MIDI
Classifier: Topic :: Multimedia :: Sound/Audio :: Analysis
Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
Requires-Python: >=3.10
Description-Content-Type: text/markdown
Provides-Extra: midi
Requires-Dist: MIDIUtil>=1.2.1; extra == "midi"
Provides-Extra: audio
Requires-Dist: numpy>=1.24; extra == "audio"
Requires-Dist: scipy>=1.10; extra == "audio"
Requires-Dist: soundfile>=0.12; extra == "audio"
Provides-Extra: ai
Requires-Dist: datasets>=2.14; extra == "ai"
Requires-Dist: tokenizers>=0.15; extra == "ai"
Provides-Extra: ai-full
Requires-Dist: datasets>=2.14; extra == "ai-full"
Requires-Dist: tokenizers>=0.15; extra == "ai-full"
Requires-Dist: transformers>=4.35; extra == "ai-full"
Provides-Extra: svg
Requires-Dist: svgwrite>=1.4; extra == "svg"
Provides-Extra: dev
Requires-Dist: pytest>=7.4; extra == "dev"
Requires-Dist: pytest-cov>=4.1; extra == "dev"
Requires-Dist: black>=23; extra == "dev"
Requires-Dist: ruff>=0.3; extra == "dev"
Requires-Dist: mypy>=1.5; extra == "dev"
Provides-Extra: notebook
Requires-Dist: jupyter>=1.0; extra == "notebook"
Requires-Dist: ipython>=8.0; extra == "notebook"
Provides-Extra: all
Requires-Dist: MIDIUtil>=1.2.1; extra == "all"
Requires-Dist: numpy>=1.24; extra == "all"
Requires-Dist: scipy>=1.10; extra == "all"
Requires-Dist: soundfile>=0.12; extra == "all"
Requires-Dist: datasets>=2.14; extra == "all"
Requires-Dist: tokenizers>=0.15; extra == "all"
Requires-Dist: svgwrite>=1.4; extra == "all"

# raganotate

Python library for **RagaNotate** — parse, encode, and export Carnatic music
notation with Just Intonation tuning, gamaka feature vectors, and tala awareness.

Part of the [RagaNotate](https://github.com/jags111/RagaNotate) ecosystem
(Electron desktop app · TypeScript library · this Python library — one canonical notation format).

## Install

```bash
pip install raganotate            # core — zero dependencies, pure stdlib
pip install raganotate[midi]      # + MIDI export (MIDIUtil)
pip install raganotate[ai]        # + HuggingFace dataset encoding
pip install raganotate[all]       # everything except large models
```

## Usage

```python
from raganotate import parse
from raganotate.swara import swara_hz
from raganotate.tala import get_tala

nodes = parse("| S R G M | P D N S' |")
hz = swara_hz("G", octave="madhya", sa_hz=240.0)   # JI frequency, Sa = 240 Hz
tala = get_tala("Misra Chapu")                      # 7 aksharas (3+4)
```

## Modules

| Module | Purpose |
|--------|---------|
| `parser` | ASCII notation → node objects |
| `swara` | 16 swarasthanas, JI frequency engine |
| `gamaka` | Gamaka types + ML feature vectors |
| `tala` | Suladi Sapta + Chapu talas, beat clock |
| `raga_grammar` | Raga scale validation |
| `midi_generator` | MIDI export with JI pitch bends |
| `ai_encoder` | Notation → AI-ready token sequences |
| `lyrics_mapper` | Lyrics ↔ notation syllable alignment |

## Notation format

See [SPEC.md](https://github.com/jags111/RagaNotate/blob/main/SPEC.md) for the full
standard: 16 swarasthanas, octave markers (`.s` / `S` / `S'`), duration markers
(`;` `:` `::`), gamaka symbols (`~` `^` `v` `*`), and tala angas.

## License

AGPL-3.0-or-later — see [LICENSE](https://github.com/jags111/RagaNotate/blob/main/LICENSE).
