AutoVolume is a Windows-focused C++ audio utility for making playback loudness more consistent on a real Windows machine.
The repository currently has two explicit product tracks:
- User-mode mixer-control prototype
- observes the default playback output with WASAPI loopback
- performs near-real-time loudness analysis
- recommends or applies conservative control through Windows audio APIs
- this is the practical public-release path today
- Experimental APO / inline
dBFSpath- targets a host-specific endpoint-effect APO (
EFX) - aims to keep Windows master/session mixer state unchanged during APO validation
- currently intended for advanced test users, not ordinary one-click public installs
- targets a host-specific endpoint-effect APO (
For the Chinese version of this overview, see README.zh-CN.md.
- Container builds with CMake + MSVC and smoke tests are in place.
- The user-mode package already has install/uninstall scripts and is suitable for GitHub Releases.
- The APO package now includes test-signing support, binding diagnostics, runtime-config hot reload, fixed-gain validation, loudness mapping, and a guided test-environment flow.
- Distribution of the APO package to other machines still follows a test-environment model rather than a formally signed public-driver model.
src/audio/: endpoint, loopback, session, and loudness logicsrc/apo/: experimental APO runtime and configuration logicsrc/tools/: APO packaging and host validation toolstests/: smoke coverage for config, packaging, cleanup, and test-signingdocs/: user-facing build and package notes
Container-based development remains the default:
cmake -S . -B build-container -G Ninja
cmake --build build-container
ctest --test-dir build-container --output-on-failureRelease build:
cmake -S . -B build-release -G Ninja -DCMAKE_BUILD_TYPE=Release
cmake --build build-releaseSee docs/build.md for more detailed build and packaging notes. The Chinese version is docs/build.zh-CN.md.
Build the public user-mode package:
.\make-dist.cmdOutput:
dist\AutoVolume\
It currently includes:
Install-AutoVolume.cmdInstall-AutoVolume.ps1Uninstall-AutoVolume.cmdUninstall-AutoVolume.ps1run-auto-volume.cmdbuild-release\autovolume_console.exe
This install flow only writes to the current user's profile under %LocalAppData%\Programs\AutoVolume, creates current-user Start Menu entries, and does not touch APO, drivers, certificates, or system boot policy.
Build the experimental test-signed APO package:
.\make-testsigned-apo-package.cmdOutput:
dist\AutoVolumeApoPackage\
Important scripts:
Verify-AutoVolumePackage.ps1Prepare-AutoVolumeApoTestEnvironment.ps1Reset-AutoVolumeApoTestEnvironment.ps1Setup-AutoVolumePostRebootValidation.ps1Run-AutoVolumePostRebootValidation.ps1Inspect-AutoVolumeApoBinding.ps1Verify-InstalledAutoVolumeApo.ps1Set-AutoVolumeApoRuntimeConfig.ps1Test-AutoVolumeApoFixedGain.ps1
Recommended advanced-user flow:
- Run
Verify-AutoVolumePackage.ps1 - Preview
Prepare-AutoVolumeApoTestEnvironment.ps1 - Apply it in elevated PowerShell if the preview looks correct
- Reboot and let the one-shot task install and verify
- Use
Reset-AutoVolumeApoTestEnvironment.ps1 -Applywhen you want to remove the test environment again
This route is meant for advanced users who accept certificate import, testsigning, reboot-based setup, and host-specific diagnostics.
The repository now includes:
.github/workflows/ci.yml- builds on
windows-latest - runs
ctest - assembles a user-mode distribution artifact
- builds on
.github/workflows/release.yml- manual GitHub Release workflow
- reads release.md as the release body
- publishes the user-mode zip by default
- can optionally publish a host-parameterized test-signed APO zip
release.mdis the draft body for the next GitHub Release.- Any commit that changes user-visible behavior, packaging, workflows, or release assets should also update
release.md. - The Release workflow blocks if
release.mdstill contains the template placeholder. - After a successful release, the workflow resets
release.mdback to the template. - Release notes should be maintained in both Chinese and English sections.
- Windows per-session volume remains scalar, not a true dB API.
- Endpoint/master volume can be controlled in dB terms through
IAudioEndpointVolume. - The user-mode prototype is not the final inline
dBFSarchitecture. - A package being present in Driver Store is not proof that the APO is active on the current playback endpoint.
- Build and package notes: docs/build.md