Skip to content

app: sound and the reading play receptions the instant they land, so bursts clump, cues click and the mix clips #709

Open

Description

@khagele

Component: app

What happens

Three things Kasper hears (27 September):

  • Clicks. A cue starts at ac.currentTime (app/src/sound.js:608) with no margin. When the audio thread is already past that instant, the start of the attack is lost.
  • Clipping. The master bus has no limiter. Cues, the bed and the music sum, and past 0 dBFS they distort.
  • Clumps. BLE frames land in batches. Measured over 30 days on the ingestor DB (feat(app): make every recorded reception audible, one instrument per type (+ sound tweaks) #470), 39.2% of consecutive receptions per hunter share a timestamp, in groups of up to 40 (sound.js:125-131). The coalescer lets one cue through per 60 ms, so a clump of 40 sounds as one, and the reading shows it in one step.

Decided (Kasper, 27 September)

  1. A limiter on the master bus.
  2. Cues scheduled 20 to 50 ms ahead of currentTime instead of on it.
  3. A playout buffer of 1 s. The sound, the HUD, the ticker, the map's pulse and the float readout get each reception 1 s after it lands. A clump is spread at the cue gap (60 ms), closer when that does not fit in the second, so the delay never grows past 1 s. Capture, the store and MQTT keep the real rx_at. A fixed second, not a setting.

Activity

  1. khagele commented on Sep 27, 2026

    @khagele
    ContributorAuthor

    Refined (Kasper, 27 September). The clumps are not the problem: a mockup that spread them over the second sounded no different. What Kasper hears is a lot of ticking, like buffering, over Bluetooth right after start, while the map loads and the companion syncs, and it stops by itself. That fits the output buffer running dry under load: the AudioContext had no latencyHint, so it got the smallest buffer. The linked PR asks for the playback buffer. The playout buffer and the limiter are dropped. This issue closes once a drive confirms the ticking is gone.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions