Files
sizzletracker-android/README.md
Reactorcoremeltdown 3cef1b4e85 Initial commit: Sizzletracker Android music tracker
A retro, grid-based music tracker for Android (Kotlin + Jetpack Compose,
single Activity) with four equally-capable input methods (touch, keyboard,
gamepad, MIDI) and four tabs: tracker, mixer, toolbox, settings.

Highlights:
- Tracker: Canvas-drawn 4-track pattern grid over an 8-lane arrangement roll,
  with a glyph cache and draw-phase state reads so the playhead and edits
  redraw without per-frame recomposition.
- Audio: sample-accurate sequencer feeding a shared AudioEngine, driven by
  either a Kotlin AudioTrack loop or native Oboe/AAudio via JNI (16 KB-aligned
  native libs). media3 MediaSession for lock-screen/headset transport.
- Toolbox: 16 instrument/effect slots with a 2-octave audition keyboard;
  single-tap select, double-tap edit, long-press clear.
- Note entry: long-press cell popups (piano keyboard / value steppers) plus
  keyboard/gamepad stepping that resumes from the last note/channel entered.
  Velocity capped at 0x7F, channel at 16.
- Selection/clipboard (cut/copy/paste/delete) and .sng import/export
  compatible with the reference desktop tool.
- A `profile` build type (non-debuggable, debug-signed) for realistic
  on-device performance testing.
- Developer handover documentation under docs/.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-13 22:15:13 +02:00

61 lines
2.4 KiB
Markdown

# Sizzletracker (Android)
A retro, grid-based **music tracker** for Android — monospace UI, pixel icons,
demoscene-style pattern editing — playable equally with **touch, keyboard,
gamepad, and MIDI** (USB or Bluetooth).
<p>
<img alt="platform" src="https://img.shields.io/badge/platform-Android%208%2B-0b0d0e">
<img alt="language" src="https://img.shields.io/badge/kotlin-2.0-7cfc9a">
<img alt="ui" src="https://img.shields.io/badge/UI-Jetpack%20Compose-f2c14e">
</p>
## Features at a glance
- **Tracker tab** — 4-track pattern grid (note / velocity-hex / MIDI-channel per
track), beat & bar coloring, tap-to-focus + drag-to-edit with haptics and
scale-aware note entry; plus an 8-lane arrangement piano-roll (up to 256 beats)
with A/B loop regions.
- **Mix tab** — 4 channels, each with an instrument + 4 FX slots, MIDI channel,
volume, mute/solo.
- **Toolbox tab** — 16 slots for instruments (NES synth, sampler, SF2/XI) and
effects (arp, transposer, LFO, tape delay, reverb, filters, 10-band EQ,
bitcrusher). Every device has an auto-generated editor and text presets.
- **Setup tab** — `.sng` project save/load, color themes (with import/export),
gamepad bindings, and searchable/collapsible MIDI bindings.
- **Background playback** with a media notification (Play/Pause/Stop).
- **Two-thread design** — Compose UI on the main thread, a sample-accurate sound
engine on its own high-priority thread.
## Build & run
Open the project in **Android Studio** (2024.1+), let it create the Gradle
wrapper if prompted, and Run on an **API 26+** device or emulator.
CLI (after the wrapper exists — `gradle wrapper --gradle-version 8.9`):
```
./gradlew assembleDebug
```
## Where to start reading
See **[docs/DEVELOPER_HANDOVER.md](docs/DEVELOPER_HANDOVER.md)** — a from-scratch
tour written for a developer new to Android: architecture, the file map, the
"one action / one song / two threads" model, how to add an instrument or input,
and an honest **implemented-vs-TODO** list.
Fastest orientation in code:
`model/Project.kt``input/InputAction.kt``ui/AppViewModel.kt`
`audio/AudioEngine.kt`.
## Project format
Songs use a human-readable `.sng` text format (see `io/ProjectIo.kt`), aligned in
spirit with the desktop
[Sizzletracker](https://github.com/reactorcoremeltdown/sizzletracker); a byte-exact
compatibility shim is a listed TODO in the handover doc.
## License
TBD by the project owner.