feat: mic passthrough via VB-Audio Virtual Cable#1
Closed
xenstalker02 wants to merge 0 commit into
Closed
Conversation
e00fdd6 to
4d8bc5d
Compare
Owner
Author
|
Closing — feature/mic-passthrough-vbcable has been fully absorbed into master via rebase. The PR diff is now empty (feature branch is identical to master). A clean upstream PR has been opened at Nonary/Vibepollo#168 using a properly scoped branch (upstream-pr/mic-passthrough) based on Nonary's upstream/master. |
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.
Summary
Adds encrypted client microphone passthrough to the Windows host during a streaming session. Mic audio routes through VB-Audio Virtual Cable — no Steam Remote Play session required, always active.
How it works
0x3003packets over the existing encrypted control stream (SS_ENC_CONTROL_V2)CABLE Inputvia WASAPI (speaker_wasapi_t)CABLE Input→CABLE OutputautomaticallyCABLE Outputso Discord (set to Default) picks up the mic automaticallyNo manual Discord configuration needed. Encrypted sessions only — plaintext mic is refused.
Requirements (host)
Client
Pairs with xenstalker02/Vibelight — a Moonlight fork with SDL2 mic capture, Opus encoding, and stereo-to-mono downmix for PipeWire compatibility.
Relation to Logan's PR #1428 on ClassicOldSong/Apollo
Logan's implementation uses a dedicated UDP port negotiated via RTSP with
LiSendMicrophoneOpusDataEx(requires a fork of moonlight-common-c) and renders to Steam Streaming Microphone. That approach requires an active Steam Remote Play session to activate the loopback.This implementation reuses the existing encrypted control stream transport (no moonlight-common-c changes, no new UDP port) and VB-Cable (always-active loopback). Both approaches are valid — this one has fewer dependencies.
Files changed
src/stream.cpp— IDX_MIC_AUDIO_DATA handler, per-session Opus decoder, jitter buffer, FEC/PLC, session init/teardownsrc/platform/windows/audio.cpp—speaker_wasapi_tWASAPI render client,virtual_microphone(), VB-Cable device lookupsrc/config.h/src/config.cpp—mic_sink,mic_capture_deviceconfig optionsTesting
Validated end-to-end: mic packets received, decoded, written to CABLE Input, audible in Discord on host. Tested on LAN and over Tailscale. Per-session stats (packets, PLC, decode errors, latency) logged every 30s.