Everything written this session that has not been through the device: rounds 43 to 48 (each patch adversarially verified, 43's transient-notice expectation fixed), a partial round 49, the pipeline scripts, the Android Auto design and the icon comparison mock. Also the two harness changes that were never A/B'd — adaptive waits, which may only shorten a declared wait and never lengthen it, and a ship that runs the mock walk and the deploy at the same time. The A/B and its 255-step baseline are in handoff/tools; main stays at what the phone has actually walked.
17 lines
1.1 KiB
Plaintext
17 lines
1.1 KiB
Plaintext
The room also measures the recording. `lyrics_vocal_activity` is the
|
||
desktop's coarse vocal-band envelope — the centre channel band-passed to
|
||
180 Hz – 7.5 kHz, one value per 100 ms, read on a blocking thread — and it
|
||
draws as a strip under the head, so the singing ahead is visible while the
|
||
thumb waits for it. **Estimate the timing** lays every line across the
|
||
stretches the envelope says are sung, weighted by line length, through the
|
||
desktop's own generator (`src/lib/lyric-sync.js`, shared and unit-tested):
|
||
never an even spread over the duration, and a refusal rather than a guess
|
||
when the measurement shows nothing usable. The result is labelled an
|
||
estimate everywhere it shows — the hint under the line, the Save button —
|
||
the cursor goes back to the top so the taps correct it from there, and one
|
||
more tap on the button drops the whole thing back to an empty set (a rough
|
||
fill stamps every line at once, so Undo has nothing left to take back).
|
||
A streamed track has no finished file to measure, so the button says there
|
||
is no estimate for that one — the same rule the reduced-vocals copy follows,
|
||
and the same whole-file decode behind both.
|