Skip to content

By-ear pass: the talk<->music transitions — announce hand-over and the slow lift [spec 03-02 §6.1] #198

Description

@wine-fall

What it is

The two seams between talk and music were reworked because both sounded abrupt
by ear (user report, 2026-09-03). Everything deterministic about that rework is
unit-tested — the gain envelope on an offline render, the prompt contract text,
the Director's duck/lift call order. None of what the change was actually for
is assertable
: whether the song now arrives out of the talk instead of beside
it, and whether the envelope reads as a room settling rather than a switch
flipping. That is this pass.

The knobs under test are module constants with one home each, listed in
specs/spec03/03-02-ducking.md §6.1 — an audition changes one number in one
place and re-runs:

Knob Home Shipped value
UNDUCK_RAMP_S src/engine.ts 2.5 s (against the duck's RAMP_S 0.3 s)
announce length FIND_MUSIC_CONTRACT, src/prompts.ts 2-4 sentences, ~10-20 s spoken
CODA_RIDE_P src/director.ts 0.5
CODA_LEAD_MIN_S / CODA_LEAD_MAX_S src/director.ts 8 s / 12 s

How to run it: make dev with real voice and music (not STUB=1), and stay
through at least three songs — the first song of a session is aired on the
startup-primed pick, which has no prior line to hand over from, so the
hand-over criterion can only be judged from the second song on.

Spec

specs/spec03/03-02-ducking.md §1 #6 (the way into a track), §3.2 (the two
ramps), §5 #8 (acceptance), §6.1 (the by-ear constants table).

Done when

The user has listened and answered each box. A "no" becomes its own follow-up
issue (or a new value for the constant); it does not reopen the contract.

  • Announce length. 2-4 sentences / ~10-20 s is the right size for a way
    into a song — not a paragraph to sit through, not back to a label.
  • Hand-over. From the second song on, the announce picks up the thread
    of the line that was on air when the pick was fired, where there is one —
    and simply brings the song in where there is not. No "up next" formula,
    no title/artist/year rundown.
  • Slow lift. After the announce ends, the song coming back over 2.5 s
    reads as settling, not as a switch. Also judged after a typed reply
    over a song, which rides the same lift.
  • Born-ducked head. No audible full-volume blip at the top of a track
    before the announce opens.

The way out of a song (the coda beat, spec 04 §3.3-C):

  • Coda tone. The beat that follows a song reads as though it knew the
    song happened — without turning into a review. Saying nothing about the
    track and simply carrying on is a pass, not a miss.
  • Riding the outro. When the coda comes in over the track's tail (about
    half of tracks, 8-12 s before the end), it lands as a DJ talking over a
    fade — not as an interruption, and not so early it sits on the song.
  • The two exits together. Across several songs, the mix of "talks over
    the outro" and "waits for the song to end" reads as variety rather than
    inconsistency. If it reads as inconsistency, CODA_RIDE_P is the knob.

Also worth listening for: MUSIC_OUTLASTS_RULE is dropped for the coda cue
only, so the coda is the one beat allowed to speak about the song ending. If
any OTHER beat starts narrating songs starting or ending, that is a defect, not
a tuning question — file it separately.

Activity

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

    by-earUser-run sensory acceptance; not assertable in a test

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions