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>
21 lines
778 B
CMake
21 lines
778 B
CMake
# Native build for the Oboe (AAudio) low-latency output backend.
|
|
cmake_minimum_required(VERSION 3.22.1)
|
|
project(sizzle_native)
|
|
|
|
# Oboe ships as a prefab package inside the com.google.oboe:oboe AAR; AGP exposes
|
|
# it here when `buildFeatures { prefab = true }` is set in build.gradle.kts.
|
|
find_package(oboe REQUIRED CONFIG)
|
|
|
|
add_library(sizzle_native SHARED native_audio.cpp)
|
|
|
|
target_link_libraries(sizzle_native
|
|
oboe::oboe
|
|
log)
|
|
|
|
# Align ELF load segments to 16 KB so the library works on Android 15+ devices
|
|
# using 16 KB memory pages (and passes Google Play's requirement). NDK r27+ does
|
|
# this by default; on r26 we set it explicitly. -Bsymbolic is unrelated; the key
|
|
# flag is max-page-size.
|
|
target_link_options(sizzle_native PRIVATE
|
|
"-Wl,-z,max-page-size=16384")
|