2026-05-13 21:27:19 +02:00
# Lockstep Player
Android prototype: music playback adapts to running pace (accelerometer + native DSP).
**Docs (read these first):**
| Doc | Contents |
|-----|----------|
| [SPECS.md ](SPECS.md ) | Product intent, MVP scope, **libpasada ** DSP responsibilities, Oboe/JNI/MP3 FD assumptions, **jukebox ** submodule role |
| [DESIGN.md ](DESIGN.md ) | Android architecture decisions, foreground run service, JNI/state machine (`init` / `play` / `pause` / `resume` / `stop` / …), open UI questions |
2026-05-14 00:44:43 +02:00
**App module:** [`app/` ](app/ ) — Jetpack Compose shell (`MainActivity` ); **Now Playing ** View preview: [`app/src/main/res/layout/activity_now_playing.xml` ](app/src/main/res/layout/activity_now_playing.xml ) (open → **Design ** / **Split ** ). Icons in [`app/src/main/res/drawable/` ](app/src/main/res/drawable/ ).
2026-05-30 19:47:58 +02:00
**API:** [`lockstep-2-api/` ](lockstep-2-api/ ) — `api.py` contains the Python API that is deployed on the server behind api.lockstep.at
2026-05-14 00:44:43 +02:00
Build: open the repo root in Android Studio (bundled JDK **17 ** ), or run `.\gradlew.bat :app:assembleDebug` — on Windows the wrapper picks * * `%ProgramFiles%\Android\Android Studio\jbr` ** when `JAVA_HOME` is unset (see `gradlew.bat` ). On macOS / Git Bash, `gradlew` falls back to Android Studio’ s **jbr ** under `/Applications/…` or `/c/Program Files/…` .
2026-05-13 21:27:19 +02:00
Submodule: [`jukebox/` ](jukebox/ ).