Android App for writing tunes, record, loop, arrange, edit and learn!
  • Kotlin 99%
  • HTML 1%
Find a file
2026-05-02 01:31:21 +04:00
apk-download Add live recording dialog 2026-05-02 01:31:21 +04:00
app Add live recording dialog 2026-05-02 01:31:21 +04:00
design Initial Tunio project scaffold 2026-04-30 05:55:29 +04:00
docs Add library summary state 2026-05-01 15:55:43 +04:00
gradle Add tune detail playback tests 2026-04-30 06:47:45 +04:00
reference Add library summary state 2026-05-01 15:55:43 +04:00
scripts Initial Tunio project scaffold 2026-04-30 05:55:29 +04:00
.gitignore Persist tune library with Room 2026-04-30 06:03:41 +04:00
build.gradle.kts Initial Tunio project scaffold 2026-04-30 05:55:29 +04:00
CHANGELOG.md Add live recording dialog 2026-05-02 01:31:21 +04:00
CONTINUATION.md Add live recording dialog 2026-05-02 01:31:21 +04:00
FEATURELOG.md Add feature log with noise reduction proposal 2026-05-01 04:19:39 +04:00
gradle.properties Initial Tunio project scaffold 2026-04-30 05:55:29 +04:00
gradlew Initial Tunio project scaffold 2026-04-30 05:55:29 +04:00
gradlew.bat Initial Tunio project scaffold 2026-04-30 05:55:29 +04:00
README.md Add live recording dialog 2026-05-02 01:31:21 +04:00
settings.gradle.kts Initial Tunio project scaffold 2026-04-30 05:55:29 +04:00
VERSION Add live recording dialog 2026-05-02 01:31:21 +04:00

Tunio

Tunio is a local-first Android tune-writing app for musicians, initially designed around melodeon tune writing. It is a sketchbook for quick recording, tune organisation, multiple takes, A/B/C sections, trim and loop practice, speed control without pitch change, and simple arrangement of sections.

Tunio is not a DAW. The v1 direction is fast capture and practical tune management, with all recordings and metadata stored locally on the device.

Current Version

0.1.066

Current Feature State

  • Android Kotlin/Compose project skeleton.
  • Package name: com.loud.tunio.
  • Foreground content respects the Android status-bar inset while the background remains full-screen.
  • Compose tune library scaffold backed by Room persistence.
  • Create tune action using automatic Tune A1, Tune B1, ... naming through the domain/repository layer.
  • Tune rename support while keeping stable internal tune IDs.
  • Tune library summary state includes last-worked ordering, a continue-working card, take counts, favourite counts, total duration, best-take duration, and latest-take references for the next UI pass.
  • Tunio-branded adaptive launcher icon resources.
  • Tune detail scaffold backed by metadata flows for recordings, sections, and arrangements.
  • Initial domain model and Room database scaffold for tunes, recordings, sections, arrangements, arrangement items, and exports.
  • Local .m4a voice-note recording into app storage with metadata saved to Room.
  • Short failed recordings are cleaned up without creating metadata.
  • Playback for saved original recordings with Media3/ExoPlayer.
  • Recording rows show friendly take labels and durations while keeping stable filenames available behind details.
  • Recording rows support persistent custom take names while keeping source filenames immutable.
  • Recording rows use decoded signed min/max waveform peaks when available, with a visual fallback while extraction is unavailable.
  • Recording details show waveform readiness/unavailable status for test diagnosis.
  • Waveform extraction is cached in memory for the app process to avoid repeated decoding during a session.
  • Scrollable tune detail workspace with top transport, slot-based arrangement targets, and a newest-first take library.
  • Secondary detail controls are tucked behind row-level actions to keep the working screen calmer.
  • Arrangement playback speed slider without pitch change.
  • Playback completion resets the visible play state.
  • Recording opens a focused modal with live elapsed time, a stop control, and a real microphone-level waveform while capture is active.
  • Basic A/B/C section creation over a full source recording.
  • Basic section play and loop practice.
  • Basic section start/end adjustment in 1-second steps.
  • Section rows use source waveform handles for metadata-only range editing when waveform levels are available.
  • Basic arrangement creation from current sections.
  • Arrangement creation is disabled until sections exist.
  • Basic arrangement playback across section items.
  • Basic arrangement item repeat-count editing.
  • Arrangement transition gaps between parts, adjustable from 0.0s to 1.0s in 100ms steps.
  • Basic arrangement item reordering.
  • Arrangement play and loop controls are available from the top transport.
  • Arrangement starts with one full-width A slot; B/C/D can be added as optional parts.
  • Arrangement slots use a two-column layout; selecting a slot again exits selection mode.
  • Tapping empty arrangement-panel space exits take-selection mode.
  • Populated slots open edit on tap and require long-press to arm take replacement.
  • Selected slots can be cleared or removed with confirmation.
  • Main slots are waveform-first; part repeat controls live only in the part edit dialog.
  • Main slots show a dense resampled trimmed waveform range, while the edit dialog can show the full source waveform or a fitted trim view.
  • Arrangement slots and the part edit dialog show a playhead during playback.
  • Waveform previews use denser 360-bucket signed peak data for more DAW-like shapes, with arrangement slots preserving min/max peaks when resampling short clipped sections.
  • Part edit dialog supports draggable waveform trim handles with 50ms non-destructive snapping, persistent per-section Fit view, hold-only locked-handle zoom trimming, looped preview playback, and 1x/2x repeat selection.
  • Recording favorites are persisted and keep starred takes at the top of the take list.
  • Recording rows show label, duration, waveform, and Play/Stop by default; rename, section creation, and dev details are behind a per-row More toggle.
  • Section creation uses an intentional Add section action inside More rather than always-visible A/B/C buttons.
  • Section and arrangement delete actions are wired through the UI behind Fine tune and Edit toggles with a two-tap confirm pattern.
  • Empty states for Recordings, Sections, and Arrangement panels guide the first-time workflow with musician-friendly copy.
  • Metadata cleanup hooks exist for sections and arrangements; delete controls are now visible in the UI without being dangerously prominent.
  • Focused tests for playback, recording failure, waveform extraction/cache/status, section range, and arrangement metadata behavior.
  • Legacy section fine-tune controls remain secondary; the primary test path is the arrangement slot and part edit workflow.

Current Testable Slice

The current debug build is ready for a focused on-device test of the arrangement workspace: create a tune, record takes, favorite useful takes, tap an arrangement slot, choose a take, confirm the part assignment, trim the part range, test hold-only zoom trimming, set 1x/2x repeat, add transition gaps where needed, and play or loop the arrangement.

Local APK Download

When the development server is running from /opt/tunio, use:

http://10.26.21.3:8080/apk-download/

Direct APK path:

http://10.26.21.3:8080/app/build/outputs/apk/debug/app-debug.apk

Build

Expected build command:

./gradlew assembleDebug

The project includes a Gradle wrapper and is configured for Android SDK 35.

Install Debug APK

After a successful debug build:

adb install -r app/build/outputs/apk/debug/app-debug.apk

Local-First Rule

Tunio v1 has no cloud services, accounts, analytics, subscriptions, ads, or tracking. All data lives on the device.

Non-Destructive Audio Rule

Original recordings must never be overwritten or physically trimmed. Sections, loops, trims, and arrangements are metadata that reference original audio files by stable IDs and time ranges.