player bar: the track-change morph stops being a coin flip
Two independent fragilities each collapsed the shape→shape morph back to a grow-from-dots, which is why it only sometimes worked. The hold was 600ms against an arrival whose timing is DECODE time: the same track costs ~5ms once the session holds its waveform in memory but hundreds of ms to over a second on the first cold decode. 2000ms covers the cold case with room; fresh-stream searches take well past that, so the loading story still gets the lane. And the hold bailed on a bar-count mismatch — but the lane's width follows the song TITLE now, so switching between a long and a short name resizes the lane mid-gap and the guard threw the held shape away. Held and morphed heights are refitted to the new count instead (nearest neighbour — it is a moving start point, on screen for under a second). Four consecutive cached switches measured after the fix: minimum lane height 15.1 on every one (dots are ~2, the old dip hit ~5). Gapless playback is untouched — the hold and morph are pure painting, and the sink-append path never waits on the lane.
This commit is contained in:
1 parent
0bbdb1bb0e
commit
e2cfed081c
2 files changed
+39
-8
No files matched your search
@@ -58,8 +58,14 @@ export const ARRIVE_MS = 1000;
|
||||
* arrival — a local file, a cached stream — lands inside this window and
|
||||
* morphs shape→shape, one waveform transforming into the other; a slow load
|
||||
* falls to the dots-and-swell story when the hold expires. Without the hold,
|
||||
* the cleared lane always morphed up from the dots. */
|
||||
export const ARRIVE_HOLD_MS = 600;
|
||||
* the cleared lane always morphed up from the dots.
|
||||
*
|
||||
* 2000, up from 600: an arrival's timing is decode time, and the same track
|
||||
* costs ~5ms once the session has its waveform in memory but hundreds of ms
|
||||
* to over a second on the first, cold decode — a 600ms hold made the morph
|
||||
* a coin flip on exactly the tracks it was built for. Fresh-stream searches
|
||||
* take well past 2s, so the loading story still gets the lane. */
|
||||
export const ARRIVE_HOLD_MS = 2000;
|
||||
/** Resting/queued bars render the muted grey at this opacity — the rail's
|
||||
* pending dim, shared so the two lanes' dots match. */
|
||||
export const PENDING_ALPHA = 0.45;
|
||||
|
||||
Reference in new issue
Block a user