Skip to content

SetBeat v0.3.3 - a third edition: Vibes (Standalone, Full, Vibes)

Pre-release
Pre-release

Choose a tag to compare

@sultanmaliki sultanmaliki released this 24 Sep 05:01

v0.3.3 adds a third edition, Vibes, and this release publishes all three APKs. It also rolls up 0.3.1 and 0.3.2 (the silent-wave explanation), which were never released separately.

Which file do I download?

Edition File What you get Installs
Standalone setbeat-standalone-v0.3.3.apk Stopwatch and countdown, gestures, local video and audio with the negative-blend timer, playlists, background countdown alarm. No companion mode, no wave. Any phone, from a browser or file manager
Full setbeat-full-v0.3.3.apk Everything in Standalone plus companion mode (shows and controls what other music apps play) and the beat-reactive wave. The wave uses real audio when Android allows it, and says so plainly when it can't. Needs Google Play or adb on phones that apply the Play Protect block (below)
Vibes setbeat-vibes-v0.3.3.apk Everything in Full except the wave is not real: a procedural animation that always moves, whatever is playing. It never asks for Record audio because it reads nothing. Same as Full

Only one edition can be installed at a time (they share the app id and signing key, so installing one replaces another and keeps your data).

Why there are three editions

They all come from one fact: the wave can only read audio that passes through Android's software mixer, and many music apps play compressed audio (MP3, FLAC and so on) through a battery-saving hardware path that skips it. That happens over Bluetooth and straight out of the phone speaker, and it depends on the app and even the track. On the test phone the same wave read real audio one day and read zeros the next, with no change in the app.

  • Standalone exists because Google Play Protect blocks sideloaded installs of apps that ask for notification access in some markets (see 0.3.0). It avoids the problem by not having companion mode or a wave at all.
  • Full is the honest choice. Real audio when possible. When Android hands over nothing, a dismissible card says so and does not claim it's a Bluetooth problem unless Bluetooth is actually connected.
  • Vibes is the "I'd rather it always looks alive" choice. It is deliberately not a real visualizer, and it's a separate download so nobody gets a fake wave by surprise.

I tried to make the real wave work everywhere first. Android lets an app attach the visualizer to one specific track instead of the whole mix, which forces that track off the hardware path, but only if the music app announces its audio session (an optional convention). I built it and tested it against the two apps on the test phone by forcing real track changes: neither YouTube Music nor Mi Music sends the announcement, so it would have helped nothing here and I did not ship it. It might help with apps that follow the convention (VLC is one; I did not test it).

What changed since 0.3.0

  • 0.3.1: the wave now explains why it isn't reacting instead of sitting flat.
  • 0.3.2: that explanation checks the real audio output first (AudioManager.getDevices(), no extra permission) and only mentions Bluetooth when Bluetooth is connected.
  • 0.3.3: the Vibes edition; README, CONTRIBUTING.md, DECISIONS.md, PLAN.md and CHANGELOG.md updated. Full and Standalone behave as in 0.3.2.

Signing and checksums

All three are signed with SetBeat's own key, the same one as 0.3.0, so they update in place from 0.3.0. Certificate SHA-256 (must match):

23:79:00:8C:6B:C1:D0:15:77:63:FD:A5:D3:23:4B:51:3E:A5:78:55:1E:A9:5E:5D:8E:3B:17:5D:13:DF:B8:6A

File checksums (SHA-256, also in SHA256SUMS.txt):

4f8c131a589368396c3230f33cb5019de6b975f5f34a7e199041ab0ed87b35a6  setbeat-full-v0.3.3.apk
19be8d8b59602c2c92c654fb06b10121cf03aadec3bcdcc764abd339e3e24b72  setbeat-standalone-v0.3.3.apk
99e84effa75f9d3415e07a20ca286108efca9f1e54b4bd029485cd9d517922d9  setbeat-vibes-v0.3.3.apk

Versions before 0.3.0 used a shared debug key, so from those you must uninstall first (playlists and timer are removed).

How it was tested

  • 369 JVM unit tests (123 per edition) and lint, all passing, on every edition.
  • Rebuilt clean from the tagged commit; each APK checked with apksigner (v2 signature verifies, release key above), aapt2 (not debuggable; permissions below).
    • Standalone: no notification listener, no Record audio, no SMS or accessibility.
    • Full: notification listener + Record audio + Modify audio settings.
    • Vibes: notification listener, no Record audio or Modify audio settings.
  • On the test phone (Xiaomi, Android 16 / HyperOS):
    • Vibes: screenshots over several seconds show the wave building distinct rhythmic peaks, with none of the real-capture permission or hint cards. The release-signed 0.3.3 build installed and launched without a crash.
    • Full: the real wave path and the silent-wave card were checked live (including the wording with no Bluetooth connected) after the shared-code changes for Vibes.

Not verified

  • Standalone on a phone that actually applies the Play Protect block, still only checked by manifest inspection (only one test phone).
  • The exact 0.3.3 Full and Standalone APKs were not installed on a phone. Full was checked on-device at 0.3.1/0.3.2 and the code path is unchanged (the new flag is off in Full), and Standalone was last installed at 0.3.0. Both are covered by the unit tests, lint and manifest checks above.
  • The on-device gesture and timer test suites (34 and 33 tests) were last run for 0.3.0, not re-run for 0.3.1 to 0.3.3.
  • Vibes on other phones, and the real wave with players other than YouTube Music and Mi Music.
  • Still unverified from earlier: the countdown-finished notification and sound, rescheduling after a reboot, launcher icon shapes.
  • Not on Google Play, and R8/minification is still off (about 29 MB per APK).

Full diff: v0.3.0...v0.3.3