Skip to content

ABeat v0.3.0

Choose a tag to compare

@github-actions github-actions released this 21 Oct 12:00
  • Lead melody: with stems, the analysis finds one melody line through the song, whoever carries it: a singer, a violin, a synth. Stems can't tell (Demucs often puts violin and synth leads in the vocal stem), so CREPE pitch on the vocal and other stems decides which one leads, moment by moment, or that nothing does (drum breaks, pads), and basic-pitch gives that stem's notes. It is the new melody layer (weight 0.8): its notes carry the melody's pitch and held length, so arcs, angle leans and the melody lights follow one line instead of whichever stem was loudest. The timeline shows it tinted by the stem carrying it (pink vocals, teal other). Adds ~2 min per song on a 4-core CPU, cached with the stems; the app and CLI always run it (the worker alone skips it with --melody off).

  • Official (v4) maps line up again: their beat timing in BPMInfo.dat is now read, so the Human version of OST songs (Lindsey Stirling, Queen, Linkin Park, Coldplay and more) no longer drifts off the timeline and the comparison scores mean something (Heavy Weight F1 0.15-0.21 -> 0.59-0.76). v4 maps show their mappers instead of "ABeat by CHDS".

  • Lead melody, checked against tapped melody: where the voice and the violin play equally loud, neither used to count as the lead and those stretches came out melody-free. A stem as loud as the other now counts fully: Heavy Weight's tapped melody is caught 58 % of the time (was 55 %; 62 % on the violin), and the melody finds more of the notes in human maps (recall 0.37 -> 0.40).

  • Settings saved before a new onset layer existed get its default weight instead of switching it off.

  • Light colours: the scene no longer wears the note colours all song. Cover palettes give the left/right lights their own hues (each saber hue turned 45° away from the other saber, or a third cover hue), and the boost colours are now the saber colours, used as an accent: boost is on for two bars on drops and at the start of the loudest sections instead of for whole sections.

  • The lights no longer cut to black two beats after the last note: the stage holds in the last section's colour through the outro, dims with the music's loudness and fades out as the music stops (classic lights, group lights and the environments' basic lights); laser speeds settle low.

  • Runway and floor lights stay lit like in curated maps: the environment survey now learns how much of the playing time maps keep each light group lit (lit, from the cached maps), and groups kept lit at least half the time glow in the section colour between flashes, over about that share of the song, loudest sections first. Runways were lit 25-55 % of the playing time in most environments (curated 70-94 %), now 71-97 %; runways mappers only flash (Rock Mixtape, Panic 2.0, The Second) keep flashing.

  • No more long walls framing an empty intro or outro: the 6-beat side walls of calm sections now start 4 beats after the first note and end 4 beats before the last, and only frame stretches that have notes. A third of all long walls in generated maps sat before the first note or after the last (2.6 per difficulty; curated maps 0.13).

  • Taps drive the map: your tap-along runs now tell the generator where you want notes. They are lined up with the song first: each run's latency is found (Heavy Weight +60 ms, Lighter +70 ms) and taps move onto the nearby onset of the song; the two runs only mark moments, not hands, and a moment both runs tapped becomes a double. A new tap priority slider (default 1) sets how strongly taps claim notes: at 1 every tap goes before any untapped sound of its bar, and bars with more taps get extra notes up to the difficulty's limit; 0 ignores them. On four tapped songs Expert+ now has a note on 94-99 % of the taps (was 42-64 %). The Tap panel shows the latency found, and the timeline the aligned taps. Without taps nothing changes. CLI: --taps taps.json, --tap-priority.

  • The manual and README match the code again: difficulty profiles (NJS, jump distance, densities, gaps, dot cost), flow weights (no pitch weight; figure, move, stackAccent, burst and the new hand roles), default settings (all difficulties, environment Auto, crouch walls off, rhythm walls, cover colours), Auto-regenerate being off by default, environments beyond Default/Pyro, wall colours on the timeline, and that note rows never follow the pitch.

  • Every generator setting explains itself on hover: what it does, what its value means and its default (sliders, switches, difficulties, modes, speed limits, flow weights, onset layers), plus the Auto/Defaults buttons and the player's speed and follow controls.

Desktop app

Run it from an empty folder (it creates its folders next to itself). To upgrade, just
replace the executable with the new one
(macOS: replace ABeat.app); your songs, maps and the
installed runtime stay where they are.

  • Windows (x64): ABeat-*-windows-x64.exe, a portable app; no installation needed.
  • Linux (x86_64): ABeat-*-linux-x86_64.AppImage. Make it executable (chmod +x) and run it.
  • macOS (Apple Silicon): ABeat-*-macos-arm64.dmg. The app is not notarized, so on first
    start choose Open in System Settings → Privacy & Security, or run
    xattr -dr com.apple.quarantine /path/to/ABeat.app.

The app keeps data/, models/ and runtime/ next to itself (in the app data folder when that
place is read-only, such as /Applications). The first start installs the analysis runtime
(1-5 GB, shown in the app). Docker: docker pull jncchds/abeat:0.3.0.