Reactorcoremeltdown c8acc3827d Add master recording, landscape layout, and a batch of FX/UX improvements
Recording & audio:
- Master-bus WAV recorder: arm + FX-tail + SAF output folder on the mixer
  toolbar; allocation-free capture (ring buffer -> writer thread).
- Oboe is now the default backend; falls back to AudioTrack only on init
  error and shows a popup. Removed the manual engine toggle.
- Arpeggiator: fixed loop-boundary slip (phase-continuous), monophonic
  (no chord/voice pile-up), and a per-bar reset toggle.
- AmbienceReverb: 8-line FDN (was 16) to fit the real-time budget; per-bus
  soft-clip limiter; per-channel non-finite guard on the master sum.

UI / layout:
- Responsive landscape layouts: side nav rail; tracker grid beside the
  arrangement/keyboard; toolbox tiles beside a wider keyboard; two-column
  mixer strips; collapsed transport toolbar.
- Two-column instrument/effect editors; reverb controls paged with dot
  pagination.
- Arrangement: per-lane mute toggles; center-follow scrolling.
- Tracker toolbar: BLK dropdown, SKIP moved by OFF/KBD, glyph edit buttons.
- Sampler: normalize button, per-pad volume snap, single CLEAR.
- Import error popups; content validation on all file loaders.
- App themes: import/export/delete/dropdown library (stock themes protected).

Persistence & QoL:
- Persist keyboard MIDI channel/octave; remember loaded project in the
  settings dropdown; New Project button.

Cleanup:
- Removed dead code and fixed audio-thread allocation hot spots
  (per-sample iterators, Math.random on the RT thread, etc.).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-16 11:25:23 +02:00

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).

platform language ui

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 — 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.ktinput/InputAction.ktui/AppViewModel.ktaudio/AudioEngine.kt.

Project format

Songs use a human-readable .sng text format (see io/ProjectIo.kt), aligned in spirit with the desktop Sizzletracker; a byte-exact compatibility shim is a listed TODO in the handover doc.

License

TBD by the project owner.

Description
No description provided
Readme GPL-3.0 3.1 MiB
Languages
Kotlin 96.2%
HTML 2.1%
C++ 1.6%
CMake 0.1%