Repository navigation
feat(audio): native Core Audio backend behind a config flag (#91) - #97
Merged
Merged
Conversation
First step of replacing the bundled NirSoft tools: audio outputs are listed, switched, enabled and their volume/mute set through Core Audio (MMDevice API, IPolicyConfig, IAudioEndpointVolume) instead of SoundVolumeView. - Off by default: "NativeAudio": true in config.json turns it on, so nothing changes for users until it is verified on real hardware. - Both backends produce SoundVolumeView's friendly ID, so the saved output and the restore backup keep working when switching either way (AudioNaming, tested). - Session menu volume goes through AudioService instead of calling SoundVolumeView. - Settings rebuild keeps the flag; manual checklist in docs/TESTING.md. Co-Authored-By: Claude Opus 5.5 <[email protected]>
Contributor
There was a problem hiding this comment.
✅ No new issues found.
Reviewed changes
- Native backend — Reviewed the Core Audio COM interop for endpoint enumeration, switching, visibility, volume, and mute.
- Backend integration — Reviewed config flag loading and saving, device ID mapping, restore and auto-switch paths, and the session volume controls.
- Verification — Reviewed the manual hardware checklist and pure naming tests.
GPT Luna | 𝕏
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
First step of #91: replaces SoundVolumeView with Windows Core Audio for everything audio does today.
/scommaCSV listingIMMDeviceEnumerator(active, disabled, unplugged outputs)/SetDefault … allIPolicyConfig::SetDefaultEndpointfor console, multimedia and communications/EnableIPolicyConfig::SetEndpointVisibility/GetPercent,/SetVolume,/Mute,/UnmuteIAudioEndpointVolume"NativeAudio": trueinconfig.jsonturns it on; the log showsaudio=native. Nothing changes for users until this is verified on hardware.{adapter}\Device\{endpoint}\Render), so the saved output and the restore backup work with either backend. The naming lives inAudioNaming(pure, tested).AudioServiceinstead of calling SoundVolumeView directly.Not verified yet
Written on macOS. CI builds it on Windows, but none of it has run on a real PC. The manual checklist is in
docs/TESTING.md("Áudio nativo"). Kept as a draft until it passes.Main risk: if the adapter/endpoint names Windows reports differ from what SoundVolumeView printed for some device, its saved ID won't match and that one output shows as not found. The checklist's second item covers it.
🤖 Generated with Claude Code