Metadata-Version: 2.4
Name: slackwater-tempo
Version: 0.1.0
Summary: Tempo-first engine: because tempo is the first-class citizen that everything else depends on. As is life.
Author-email: Casey DiGennaro <casey@digennaro.com>
License: MIT
Keywords: tempo,midi,groove,clock,slackwater,lucineer
Classifier: Development Status :: 3 - Alpha
Classifier: Intended Audience :: Developers
Classifier: License :: OSI Approved :: MIT License
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Topic :: Multimedia :: Sound/Audio :: MIDI
Requires-Python: >=3.10
Description-Content-Type: text/markdown
Provides-Extra: dev
Requires-Dist: pytest>=7.0; extra == "dev"
Requires-Dist: pytest-asyncio>=0.21; extra == "dev"

# slackwater-tempo

> In MIDI, the tempo is the first class citizen that everything else depends on; as is life.

A tempo-first engine for the Slackwater unified framework. Built on the insight that tempo is not speed — it is the *character of time*.

## Modules

- **`tempo.TempoMap`** — BPM tracking with smooth transitions (accelerando/ritardando), time signatures, beat scheduling callbacks
- **`groove.GrooveEngine`** — Swing, push/drag micro-timing, game-state tempo presets (Adagio, Andante, Allegro, Presto)
- **`energy.EnergyAdapter`** — Observes player behavior and maps it to BPM with smooth 5-10s transitions
- **`clock.BeatClock`** — Shared clock that all agents sync to

## Install

```bash
pip install -e ".[dev]"
```

## Test

```bash
python3 -m pytest tests/ -v
```

## Philosophy

Every system has a tempo. The question is whether it was composed or inherited from a metronome.
