Repository navigation
Conversation
An audio clip can dip while someone on the main track speaks and come back up in the pauses: Off, -6, -12 or -18 dB in the inspector, the duck field (dB) for agents. The dips are placed from the transcripts' timing (0.15 s before speech, 0.5 s back up, pauses under a second stay down) and sent to the edit service as a volume envelope. The preview evaluates the same envelope, so what plays while editing is what exports, and the timeline shows each dip on the clip. Like captions, only the setting is stored, so the dips follow every trim, split and reorder.
The media service transcribes in the language it is asked for and does not detect the one spoken, so non-English footage with captions never set would be transcribed as English. The setting is the captions' language, which can be changed while captions are off.
Member
Author
|
Added: the ducking control now says which language it listens for ("Listens for speech in Italiano. Change it under Captions."). The media service transcribes in the language it is asked for and does not detect the spoken one, so without this, non-English footage in a project whose captions were never set would be transcribed as English and nothing would dip, with no visible reason. tsc, vitest (100) and build pass; checked on local dev. |
# Conflicts: # src/client/edit.tsx # src/server/edl.ts # src/server/export.ts
# Conflicts: # src/client/edit.tsx
# Conflicts: # src/client/edit.tsx
This was referenced Oct 9, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Music now dips while someone on the main track speaks and comes back up in the pauses, so the voice stays clear without hand-drawn volume changes.
What you get
"duck": 12(dB, 1 to 40) on an audio element; a depth that is none of the three shows as "Lowered by N dB".How it works
Not a compressor: a browser can't reproduce one, so preview and export would differ.
src/shared/duck.tsplaces the dips from the transcripts' timing instead, the way captions are placed:duckinto the edit service's volumeenvelope(keyframes, linear between them), and the preview evaluates the same function. Only the setting is stored, so the dips follow every trim, split and reorder.The transcript language is the captions' language, English when captions are off. Footage kept in the app's own storage has no transcript, so nothing dips under it.
Deploy order
Needs the edit service's
envelopefield, which is in review alongside this. Until it is live, exporting a project with ducking on is refused with a validation error; projects without it are unaffected.Verified
duck.test.tsfor spans, envelopes, the point cap and gain;duck-export.test.tsfor the document the export sends).wrangler devwith a seeded transcript (speech 2–5 s and 9–11 s): the dips draw in the right places, and while playing the music's volume reads 0.80, then 0.201 from 2.0 to 5.0 s and 9.0 to 11.0 s, then back up over 0.5 s. Off removes the field; −6 dB savesduck: 6; muting the speaking clip shows the muted hint.Not done: the Ask box can't set ducking (it has no audio-track operations yet), and there is no manual keyframe editing, although the service field supports it.