Fix audio falling back to echo in the full app (format not published)
In the full app the host creates the audio ring only when the operator toggles audio mirroring on -- after injection. So the hook registers the game's primary render stream while the ring is still null, and register_render_client_locked skips publishing the format (nothing to publish to). When the ring later attaches via set_audio_ring, the already-registered stream's format was never re-published: format_valid stayed 0, the host's wait_for_format timed out, and it fell back to loopback (the echo) -- on every game, including Phantom Brave. The in-process probe created the ring before injecting, so it never reproduced this. Fix: the hook stores the primary stream's format and republish_audio_format() publishes it whenever a ring is attached but has no format yet -- called from set_audio_ring and once per worker tick (the tick also covers the host re-initializing the ring on a mirror re-toggle, which clears format_valid). coop_audio_probe now creates the ring ~1.5 s AFTER injecting by default (ring_delay_ms arg) to match the app's ordering. Verified against Phantom Brave: the log shows "primary stream set ... no ring yet" at inject, then "republish_audio_format: published 48000Hz/2ch/32bit" when the ring attaches, and the host-shaped consumer then drains real audio with zero overruns. All four tests still pass. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -81,7 +81,11 @@ All phases below are implemented and verified.
|
||||
|
||||
### Remaining verification
|
||||
|
||||
Producer-side capture is proven; these still need a human / full setup to confirm:
|
||||
The full-app capture path now works: the hook publishes the captured format to the
|
||||
ring whenever the host attaches it, so toggling **Mirror game audio** switches to
|
||||
**Source: Hooked (no echo)** instead of falling back to loopback (verified with
|
||||
`coop_audio_probe` reproducing the app's inject-then-create-ring ordering against
|
||||
Phantom Brave). These still need a human / full setup to confirm:
|
||||
|
||||
- **Hooked audio over RPT, end-to-end.** Run the host, inject, tick **Mirror game
|
||||
audio**, and confirm **Source: Hooked (no echo)**, the game goes locally silent,
|
||||
|
||||
Reference in New Issue
Block a user