feat(charts): add chart creator foundation - #28
Merged
Conversation
Codewriter90x
added a commit
that referenced
this pull request
Aug 20, 2026
* chore(repo): establish staged release workflow (#29) * chore(legal): adopt MPL-2.0 community license (#36) * chore(legal): adopt MPL-2.0 community license * fix(release): embed MPL distribution notices * feat(charts): add chart creator foundation (#28) * feat(charts): add chart creator foundation * feat(songs): add portable htksong packages * feat(charts): import local audio for authoring * feat(charts): add note editing and local audio binding * feat(charts): add waveform and note expression editing * docs(legal): sync contributor agreement draft into develop (#39) * feat(gameplay): add Practice Lab section loops (#30) * feat(gameplay): add section performance error map (#40) * feat(gameplay): add Auto Tempo Coach (#31) * feat(settings): add guided audio latency sound check (#33) * feat(gameplay): add local ghost replay (#34) * feat(gameplay): add accessible reactive stage (#35) * chore(release): prepare 0.6.0 beta candidate * fix(ui): keep gameplay results controls readable * docs(release): record final beta validation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Adds Chart Creator to the real gameplay flow. A player can import a local WAV
or OGG backing track, enter verified timing metadata, record keyboard/CoreMIDI
hits against the existing DSP clock, review the take against a waveform, edit
individual notes, and export raw or quantized schema-v1 chart data.
The export also produces a portable chart-only
.htksongpackage. Copy thatsingle file into
Documents/HTKSongson another computer, use Refreshlibrary, then explicitly bind your own authorized WAV/OGG copy in-game.
Audio authoring flow
Documents/HTKSongsWaveform and note editor
AudioClipSchema v1 remains backward compatible:
velocityandarticulationareoptional. Legacy notes retain unknown velocity and a
defaultarticulationwildcard. Explicit articulations are preserved through JSON load, MIDI mapping,
hit matching, and instructional-kit zone highlighting.
Portable package and local audio binding
Version 1 contains exactly:
htksong-versionsong.jsonnotes.jsonImport is fail-closed for unknown entries, audio declarations, symbolic links,
duplicate/case-colliding names, unsupported versions, malformed ZIP/JSON/chart
data, oversized payloads and path traversal. Packages remain in the inbox after
import and refresh is idempotent.
An imported chart awaiting audio exposes Bind local audio. The game confirms
the song and selected basename, copies an authorized WAV/OGG into the direct
user-library song folder, validates it with the production loader, and updates
the manifest atomically. It never modifies the selected source file or portable
package and never persists an absolute machine path.
Architecture
Content boundary
Portable packages are chart-only. Source audio is never embedded, downloaded,
or redistributed. Local authoring and binding folders may contain the player's
private audio copy; a recipient must supply audio they are entitled to use.
Validation
Current limits
.htksongremains deliberately chart-only