Prepare for open-source release under GPL-3.0-or-later; docs & test maintenance

- Add GPL-3.0 LICENSE and SPDX headers (GPL-3.0-or-later) to every source file
  (58 Kotlin, the C++ file, and the sample-pack HTML tool).
- README: state the GPL-3.0-or-later license (+ badge); fix stale "256 beats"
  -> "256 bars"; fix build instructions (the Gradle wrapper is committed);
  mention master recording and the sample-pack tool.
- DEVELOPER_HANDOVER: resync with the codebase — corrected the wrapper note,
  architecture diagram, full file map, the add-instrument/effect guide, Oboe
  (now default with fallback, not an opt-in toggle), moved SF2/XI to implemented,
  and added recently shipped features with an honest remaining/optional list.
- Fix a pre-existing broken unit test: SngFormatTest called the old
  SngFormat.import(text); the API is importInto(project, text). Tests compile
  and pass again.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
Reactorcoremeltdown
2026-07-17 09:47:29 +02:00
parent 3df4bb645a
commit a5fdc7b6c4
63 changed files with 955 additions and 42 deletions

View File

@@ -1,3 +1,6 @@
// SPDX-FileCopyrightText: 2026 Reactorcoremeltdown
// SPDX-License-Identifier: GPL-3.0-or-later
// Native Oboe (AAudio) output backend for Sizzletracker.
//
// Opens a low-latency mono float Oboe output stream. On each real-time data

View File

@@ -1,3 +1,6 @@
// SPDX-FileCopyrightText: 2026 Reactorcoremeltdown
// SPDX-License-Identifier: GPL-3.0-or-later
package com.reactorcoremeltdown.sizzletracker
import android.Manifest

View File

@@ -1,3 +1,6 @@
// SPDX-FileCopyrightText: 2026 Reactorcoremeltdown
// SPDX-License-Identifier: GPL-3.0-or-later
package com.reactorcoremeltdown.sizzletracker
import android.app.Application

View File

@@ -1,3 +1,6 @@
// SPDX-FileCopyrightText: 2026 Reactorcoremeltdown
// SPDX-License-Identifier: GPL-3.0-or-later
package com.reactorcoremeltdown.sizzletracker.audio
import com.reactorcoremeltdown.sizzletracker.model.AmbiencePresets

View File

@@ -1,3 +1,6 @@
// SPDX-FileCopyrightText: 2026 Reactorcoremeltdown
// SPDX-License-Identifier: GPL-3.0-or-later
package com.reactorcoremeltdown.sizzletracker.audio
import android.media.AudioAttributes

View File

@@ -1,3 +1,6 @@
// SPDX-FileCopyrightText: 2026 Reactorcoremeltdown
// SPDX-License-Identifier: GPL-3.0-or-later
package com.reactorcoremeltdown.sizzletracker.audio
import com.reactorcoremeltdown.sizzletracker.model.DelayDivisions

View File

@@ -1,3 +1,6 @@
// SPDX-FileCopyrightText: 2026 Reactorcoremeltdown
// SPDX-License-Identifier: GPL-3.0-or-later
package com.reactorcoremeltdown.sizzletracker.audio
import java.io.File

View File

@@ -1,3 +1,6 @@
// SPDX-FileCopyrightText: 2026 Reactorcoremeltdown
// SPDX-License-Identifier: GPL-3.0-or-later
package com.reactorcoremeltdown.sizzletracker.audio
/**

View File

@@ -1,3 +1,6 @@
// SPDX-FileCopyrightText: 2026 Reactorcoremeltdown
// SPDX-License-Identifier: GPL-3.0-or-later
package com.reactorcoremeltdown.sizzletracker.audio
import android.annotation.SuppressLint

View File

@@ -1,3 +1,6 @@
// SPDX-FileCopyrightText: 2026 Reactorcoremeltdown
// SPDX-License-Identifier: GPL-3.0-or-later
package com.reactorcoremeltdown.sizzletracker.audio
import java.nio.ByteBuffer

View File

@@ -1,3 +1,6 @@
// SPDX-FileCopyrightText: 2026 Reactorcoremeltdown
// SPDX-License-Identifier: GPL-3.0-or-later
package com.reactorcoremeltdown.sizzletracker.audio
import kotlin.math.exp

View File

@@ -1,3 +1,6 @@
// SPDX-FileCopyrightText: 2026 Reactorcoremeltdown
// SPDX-License-Identifier: GPL-3.0-or-later
package com.reactorcoremeltdown.sizzletracker.audio
import java.nio.ByteBuffer

View File

@@ -1,3 +1,6 @@
// SPDX-FileCopyrightText: 2026 Reactorcoremeltdown
// SPDX-License-Identifier: GPL-3.0-or-later
package com.reactorcoremeltdown.sizzletracker.audio
/**

View File

@@ -1,3 +1,6 @@
// SPDX-FileCopyrightText: 2026 Reactorcoremeltdown
// SPDX-License-Identifier: GPL-3.0-or-later
package com.reactorcoremeltdown.sizzletracker.audio
/**

View File

@@ -1,3 +1,6 @@
// SPDX-FileCopyrightText: 2026 Reactorcoremeltdown
// SPDX-License-Identifier: GPL-3.0-or-later
package com.reactorcoremeltdown.sizzletracker.input
import android.content.Context

View File

@@ -1,3 +1,6 @@
// SPDX-FileCopyrightText: 2026 Reactorcoremeltdown
// SPDX-License-Identifier: GPL-3.0-or-later
package com.reactorcoremeltdown.sizzletracker.input
import android.view.InputDevice

View File

@@ -1,3 +1,6 @@
// SPDX-FileCopyrightText: 2026 Reactorcoremeltdown
// SPDX-License-Identifier: GPL-3.0-or-later
package com.reactorcoremeltdown.sizzletracker.input
/**

View File

@@ -1,3 +1,6 @@
// SPDX-FileCopyrightText: 2026 Reactorcoremeltdown
// SPDX-License-Identifier: GPL-3.0-or-later
package com.reactorcoremeltdown.sizzletracker.input
/**

View File

@@ -1,3 +1,6 @@
// SPDX-FileCopyrightText: 2026 Reactorcoremeltdown
// SPDX-License-Identifier: GPL-3.0-or-later
package com.reactorcoremeltdown.sizzletracker.input
import kotlinx.coroutines.flow.MutableSharedFlow

View File

@@ -1,3 +1,6 @@
// SPDX-FileCopyrightText: 2026 Reactorcoremeltdown
// SPDX-License-Identifier: GPL-3.0-or-later
package com.reactorcoremeltdown.sizzletracker.input
import android.view.KeyEvent

View File

@@ -1,3 +1,6 @@
// SPDX-FileCopyrightText: 2026 Reactorcoremeltdown
// SPDX-License-Identifier: GPL-3.0-or-later
package com.reactorcoremeltdown.sizzletracker.input
import android.content.Context

View File

@@ -1,3 +1,6 @@
// SPDX-FileCopyrightText: 2026 Reactorcoremeltdown
// SPDX-License-Identifier: GPL-3.0-or-later
package com.reactorcoremeltdown.sizzletracker.io
import com.reactorcoremeltdown.sizzletracker.model.ToolboxSlot

View File

@@ -1,3 +1,6 @@
// SPDX-FileCopyrightText: 2026 Reactorcoremeltdown
// SPDX-License-Identifier: GPL-3.0-or-later
package com.reactorcoremeltdown.sizzletracker.io
import com.reactorcoremeltdown.sizzletracker.audio.SampleStore

View File

@@ -1,3 +1,6 @@
// SPDX-FileCopyrightText: 2026 Reactorcoremeltdown
// SPDX-License-Identifier: GPL-3.0-or-later
package com.reactorcoremeltdown.sizzletracker.io
import com.reactorcoremeltdown.sizzletracker.model.Cell

View File

@@ -1,3 +1,6 @@
// SPDX-FileCopyrightText: 2026 Reactorcoremeltdown
// SPDX-License-Identifier: GPL-3.0-or-later
package com.reactorcoremeltdown.sizzletracker.io
import com.reactorcoremeltdown.sizzletracker.model.Project

View File

@@ -1,3 +1,6 @@
// SPDX-FileCopyrightText: 2026 Reactorcoremeltdown
// SPDX-License-Identifier: GPL-3.0-or-later
package com.reactorcoremeltdown.sizzletracker.io
import android.content.Context

View File

@@ -1,3 +1,6 @@
// SPDX-FileCopyrightText: 2026 Reactorcoremeltdown
// SPDX-License-Identifier: GPL-3.0-or-later
package com.reactorcoremeltdown.sizzletracker.io
import com.reactorcoremeltdown.sizzletracker.model.Arrangement

View File

@@ -1,3 +1,6 @@
// SPDX-FileCopyrightText: 2026 Reactorcoremeltdown
// SPDX-License-Identifier: GPL-3.0-or-later
package com.reactorcoremeltdown.sizzletracker.io
import java.io.File

View File

@@ -1,3 +1,6 @@
// SPDX-FileCopyrightText: 2026 Reactorcoremeltdown
// SPDX-License-Identifier: GPL-3.0-or-later
package com.reactorcoremeltdown.sizzletracker.io
import androidx.compose.ui.graphics.Color

View File

@@ -1,3 +1,6 @@
// SPDX-FileCopyrightText: 2026 Reactorcoremeltdown
// SPDX-License-Identifier: GPL-3.0-or-later
package com.reactorcoremeltdown.sizzletracker.io
import com.reactorcoremeltdown.sizzletracker.ui.theme.RetroPalette

View File

@@ -1,3 +1,6 @@
// SPDX-FileCopyrightText: 2026 Reactorcoremeltdown
// SPDX-License-Identifier: GPL-3.0-or-later
package com.reactorcoremeltdown.sizzletracker.model
/**

View File

@@ -1,3 +1,6 @@
// SPDX-FileCopyrightText: 2026 Reactorcoremeltdown
// SPDX-License-Identifier: GPL-3.0-or-later
package com.reactorcoremeltdown.sizzletracker.model
/**

View File

@@ -1,3 +1,6 @@
// SPDX-FileCopyrightText: 2026 Reactorcoremeltdown
// SPDX-License-Identifier: GPL-3.0-or-later
package com.reactorcoremeltdown.sizzletracker.model
/**

View File

@@ -1,3 +1,6 @@
// SPDX-FileCopyrightText: 2026 Reactorcoremeltdown
// SPDX-License-Identifier: GPL-3.0-or-later
package com.reactorcoremeltdown.sizzletracker.model
/**

View File

@@ -1,3 +1,6 @@
// SPDX-FileCopyrightText: 2026 Reactorcoremeltdown
// SPDX-License-Identifier: GPL-3.0-or-later
package com.reactorcoremeltdown.sizzletracker.model
/**

View File

@@ -1,3 +1,6 @@
// SPDX-FileCopyrightText: 2026 Reactorcoremeltdown
// SPDX-License-Identifier: GPL-3.0-or-later
package com.reactorcoremeltdown.sizzletracker.model
/**

View File

@@ -1,3 +1,6 @@
// SPDX-FileCopyrightText: 2026 Reactorcoremeltdown
// SPDX-License-Identifier: GPL-3.0-or-later
package com.reactorcoremeltdown.sizzletracker.model
/**

View File

@@ -1,3 +1,6 @@
// SPDX-FileCopyrightText: 2026 Reactorcoremeltdown
// SPDX-License-Identifier: GPL-3.0-or-later
package com.reactorcoremeltdown.sizzletracker.playback
import android.os.Looper

View File

@@ -1,3 +1,6 @@
// SPDX-FileCopyrightText: 2026 Reactorcoremeltdown
// SPDX-License-Identifier: GPL-3.0-or-later
package com.reactorcoremeltdown.sizzletracker.playback
import android.content.Context

View File

@@ -1,3 +1,6 @@
// SPDX-FileCopyrightText: 2026 Reactorcoremeltdown
// SPDX-License-Identifier: GPL-3.0-or-later
package com.reactorcoremeltdown.sizzletracker.ui
import androidx.activity.compose.BackHandler

View File

@@ -1,3 +1,6 @@
// SPDX-FileCopyrightText: 2026 Reactorcoremeltdown
// SPDX-License-Identifier: GPL-3.0-or-later
package com.reactorcoremeltdown.sizzletracker.ui
import androidx.compose.runtime.getValue

View File

@@ -1,3 +1,6 @@
// SPDX-FileCopyrightText: 2026 Reactorcoremeltdown
// SPDX-License-Identifier: GPL-3.0-or-later
package com.reactorcoremeltdown.sizzletracker.ui
import android.content.res.Configuration

View File

@@ -1,3 +1,6 @@
// SPDX-FileCopyrightText: 2026 Reactorcoremeltdown
// SPDX-License-Identifier: GPL-3.0-or-later
package com.reactorcoremeltdown.sizzletracker.ui
import androidx.compose.foundation.background

View File

@@ -1,3 +1,6 @@
// SPDX-FileCopyrightText: 2026 Reactorcoremeltdown
// SPDX-License-Identifier: GPL-3.0-or-later
package com.reactorcoremeltdown.sizzletracker.ui.components
import androidx.compose.ui.text.TextLayoutResult

View File

@@ -1,3 +1,6 @@
// SPDX-FileCopyrightText: 2026 Reactorcoremeltdown
// SPDX-License-Identifier: GPL-3.0-or-later
package com.reactorcoremeltdown.sizzletracker.ui.components
import androidx.compose.foundation.background

View File

@@ -1,3 +1,6 @@
// SPDX-FileCopyrightText: 2026 Reactorcoremeltdown
// SPDX-License-Identifier: GPL-3.0-or-later
package com.reactorcoremeltdown.sizzletracker.ui.components
import androidx.compose.foundation.background

View File

@@ -1,3 +1,6 @@
// SPDX-FileCopyrightText: 2026 Reactorcoremeltdown
// SPDX-License-Identifier: GPL-3.0-or-later
package com.reactorcoremeltdown.sizzletracker.ui.mixer
import androidx.activity.compose.rememberLauncherForActivityResult

View File

@@ -1,3 +1,6 @@
// SPDX-FileCopyrightText: 2026 Reactorcoremeltdown
// SPDX-License-Identifier: GPL-3.0-or-later
package com.reactorcoremeltdown.sizzletracker.ui.settings
import android.content.Context

View File

@@ -1,3 +1,6 @@
// SPDX-FileCopyrightText: 2026 Reactorcoremeltdown
// SPDX-License-Identifier: GPL-3.0-or-later
package com.reactorcoremeltdown.sizzletracker.ui.theme
import android.app.Activity

View File

@@ -1,3 +1,6 @@
// SPDX-FileCopyrightText: 2026 Reactorcoremeltdown
// SPDX-License-Identifier: GPL-3.0-or-later
package com.reactorcoremeltdown.sizzletracker.ui.toolbox
import androidx.compose.foundation.Canvas

View File

@@ -1,3 +1,6 @@
// SPDX-FileCopyrightText: 2026 Reactorcoremeltdown
// SPDX-License-Identifier: GPL-3.0-or-later
package com.reactorcoremeltdown.sizzletracker.ui.toolbox
import androidx.compose.foundation.layout.Arrangement

View File

@@ -1,3 +1,6 @@
// SPDX-FileCopyrightText: 2026 Reactorcoremeltdown
// SPDX-License-Identifier: GPL-3.0-or-later
package com.reactorcoremeltdown.sizzletracker.ui.toolbox
import androidx.compose.foundation.layout.Column

View File

@@ -1,3 +1,6 @@
// SPDX-FileCopyrightText: 2026 Reactorcoremeltdown
// SPDX-License-Identifier: GPL-3.0-or-later
package com.reactorcoremeltdown.sizzletracker.ui.toolbox
import androidx.activity.compose.rememberLauncherForActivityResult

View File

@@ -1,3 +1,6 @@
// SPDX-FileCopyrightText: 2026 Reactorcoremeltdown
// SPDX-License-Identifier: GPL-3.0-or-later
package com.reactorcoremeltdown.sizzletracker.ui.toolbox
import androidx.activity.compose.rememberLauncherForActivityResult

View File

@@ -1,3 +1,6 @@
// SPDX-FileCopyrightText: 2026 Reactorcoremeltdown
// SPDX-License-Identifier: GPL-3.0-or-later
package com.reactorcoremeltdown.sizzletracker.ui.toolbox
import android.content.Intent

View File

@@ -1,3 +1,6 @@
// SPDX-FileCopyrightText: 2026 Reactorcoremeltdown
// SPDX-License-Identifier: GPL-3.0-or-later
package com.reactorcoremeltdown.sizzletracker.ui.tracker
import androidx.compose.foundation.Canvas

View File

@@ -1,3 +1,6 @@
// SPDX-FileCopyrightText: 2026 Reactorcoremeltdown
// SPDX-License-Identifier: GPL-3.0-or-later
package com.reactorcoremeltdown.sizzletracker.ui.tracker
import androidx.compose.foundation.Canvas

View File

@@ -1,3 +1,6 @@
// SPDX-FileCopyrightText: 2026 Reactorcoremeltdown
// SPDX-License-Identifier: GPL-3.0-or-later
package com.reactorcoremeltdown.sizzletracker.ui.tracker
import androidx.compose.foundation.background

View File

@@ -1,3 +1,6 @@
// SPDX-FileCopyrightText: 2026 Reactorcoremeltdown
// SPDX-License-Identifier: GPL-3.0-or-later
package com.reactorcoremeltdown.sizzletracker.io
import com.reactorcoremeltdown.sizzletracker.model.Arrangement
@@ -28,7 +31,7 @@ class SngFormatTest {
@Test
fun parsesReferenceExample() {
val p = SngFormat.import(reference)
val p = SngFormat.importInto(Project(), reference)
assertEquals(120f, p.tempoBpm, 0.001f)
assertEquals(TimeSignature.FOUR_FOUR, p.timeSignature)
@@ -64,7 +67,7 @@ class SngFormatTest {
p.arrangement.set(0, 0, 0)
p.arrangement.set(0, 1, 0)
val restored = SngFormat.import(SngFormat.export(p))
val restored = SngFormat.importInto(Project(), SngFormat.export(p))
assertEquals(140f, restored.tempoBpm, 0.001f)
assertEquals(TimeSignature.FIVE_FOUR, restored.timeSignature)