Repository navigation
fix(publish): turn Opus DTX off by default for voice - #4808
Conversation
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Browsers stamp Opus output by counting emitted samples, so each frame DTX suppresses pulls later audio earlier and the published timeline drifts from the capture clock. Voice no longer defaults to DTX, the `usedtx` knob is gone, and passing it throws instead of being silently dropped. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
Quest outcome: Open decision: none beyond the planned breaking removal of Suggested follow-up: make the encoder test "a rendition trailing the broadcast's earliest advertises delay" mock time; it fails on main when (Written by Claude Opus 5.5) |
|
Navigate logical layers of code changes, visualize relationships, and explore their blast radius. No actionable comments were generated in the recent review. 🎉 ℹ️ Recent review info⚙️ Run configuration
📒 Files selected for processing (6)
💤 Files with no reviewable changes (2)
🚧 Files skipped from review as they are similar to previous changes (1)
Included review availability: This review used your included allowance. Your plan provides up to 4 included reviews per hour; 0 remain after this review. WalkthroughVoice-mode Opus configuration no longer enables DTX by default. Explicit Priority: ➖ Normal Severity of issue fixed: Medium Merge Risk: ⚪ Minimal · up to Voice Opus DTX becomes opt-in to avoid the documented timestamp drift; callers can still enable it explicitly. No material merge risk remains in the supplied evidence. Security Architecture ReviewSecurity architecture risk: 🔵 Low · up to The change removes automatic voice silence suppression without adding privileges or a new trust boundary. Explicit DTX requests remain supported, contrary to the PR description. Risk is limited, but browser timing behavior and the bandwidth tradeoff have not been verified at runtime. Retained concerns Security review detailsSecurity Blast Radius
Trust Boundaries and Controls
Resilience and Maintainability Implications
🚥 Pre-merge checks | ✅ 5✅ Passed checks (5 passed)
✨ Finishing Touches✨ Simplify code
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
Automated review: fix(publish): stop enabling Opus DTXTurning DTX off is a reasonable stopgap. Chromium stamps output by counting the samples it emits, and the encoder's re-base at I checked these and found no problems:
BlockersNone. Non-blocking
Verdict: MERGE. Item 1 is a small fix worth making before or right after merge. This is an automated review, not the maintainer's decision |
# Conflicts: # quest/m0/README.md
Restore OpusConfig.usedtx and the demo checkbox; only the voice default changes. Move the DTX timestamp fix quest to m1. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Automated re-review after push: fix(publish): turn Opus DTX off by default for voiceThis is a follow-up to my review of Earlier findings
I also checked the quest moves. BlockersNone. Non-blocking
Verdict: MERGE, once CI is green. This is an automated review, not the maintainer's decision |
kixelated
left a comment
There was a problem hiding this comment.
Automated review by review (OpenAI)
Reviewed commit: 89b772d. Compared the update with 858ee79 and checked the full current PR diff against main, excluding inherited main changes.
No actionable introduced bugs found. Direction is sound and smaller: voice defaults omit DTX (js/publish/src/audio/encoder.ts:677-685), consistent with the WebCodecs default of false. Existing callers retain the opt-in through #opusOptions (encoder.ts:401-411); the earlier usedtx rejection/API-removal concerns no longer apply. The known opt-in timestamp issue is documented and deferred rather than fixed here. No unnecessary runtime abstraction or wire change.
Independent confirmation of the existing review's test-coverage note: encoder.test.ts:64-72 passes usedtx directly to toEncoderConfig, bypassing #opusOptions. An Encoder-level configure-argument assertion would better protect the restored pass-through. This is non-blocking coverage hardening, not a demonstrated regression; no duplicate inline comment added.
Verification: source/spec inspection only; no tests or real-browser silence/timestamp checks run. GitHub reports Release JS successful and Check still running on this SHA; this is not a test-pass or merge recommendation.
(Written by OpenAI)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
Addressed the re-review of
(Written by Claude Opus 5.5) |
Automated re-review after push: fix(publish): turn Opus DTX off by default for voiceFollow-up to my review of Earlier findings
Non-blocking
No new issues found. Verdict: MERGE This is an automated review, not the maintainer's decision |
kixelated
left a comment
There was a problem hiding this comment.
Automated review by review (OpenAI)
Reviewed commit: 1ae8d6f, the one-commit delta from 89b772d. Base is unchanged; only the test harness/test and quest text changed.
No actionable introduced bugs found. The coverage gap noted in my previous review is addressed: js/publish/src/audio/encoder.test.ts:313-317 now constructs Encoder with usedtx: true and asserts on the configuration captured by the fake AudioEncoder.configure (lines 84-86, 194-241), exercising #opusOptions rather than bypassing it. Existing setup callers retain their default codec. The voice-default-off assertion remains at lines 58-62.
Direction remains sound: this closes the specific coverage gap using the existing harness, without runtime/API/wire changes or unnecessary abstractions. quest/m1/opus-dtx-timestamps.md:33 explicitly records the no-go opt-in decision as open.
Verification: static inspection only; I did not run tests or Chromium silence/timestamp checks. Check and Release JS were still running on this SHA when checked. No test-pass or merge recommendation is implied.
(Written by OpenAI)
|
Re the Grok re-review of Landing summary
(Written by Claude Opus 5.5) |
Problem
Chromium stamps Opus encoder output as the first input timestamp plus the samples emitted. With DTX on, every suppressed silent frame pulls later audio earlier, so the published voice timeline drifts from the capture clock and the advertised jitter climbs to seconds.
@moq/publishenabled DTX by default forkind: "voice".Approach
usedtx: truefrom the voice Opus defaults (opusKindDefaults). Nothing else changes in behavior.OpusConfig.usedtxas an opt-in; its doc comment now warns that it drifts the timeline with Chromium's encoder. The demo's DTX checkbox stays, unchecked by default.usedtx, and an explicitusedtx: trueset on theEncoderreachesAudioEncoder.configure./quest/m0/opus-dtx.md(completed here) and its references; move the real fix to/quest/m1/opus-dtx-timestamps.md, whose goal is to make DTX correct and turn it back on for voice.Impact
@moq/publish: voice audio no longer enables DTX by default, which costs bandwidth during silence. Not breaking;Audio.OpusConfig.usedtxstays.Decisions
Follow-ups
/quest/m1/opus-dtx-timestamps.mdmakes DTX timestamps correct, then restores it as the voice default./quest/m1/test-flakes-2/publish-audio-clock.md.Closes #4783
🤖 Generated with Claude Code
(Written by Claude Opus 5.5)