A Windows desktop application that allows you to route and duplicate audio from any application to any output device without changing Windows settings or application configurations.
- β‘ Ultra-Low Latency: Optimized for movie streaming and gaming with as low as 10-20ms latency
- π Admin Mode Support: Run with elevated privileges for better performance and priority
- ποΈ Configurable Latency: Choose from Ultra Low, Low, Normal, or High stability modes
- Zero Configuration: Works without modifying Windows audio settings or application settings
- Flexible Audio Routing: Select any input device to capture from and route to any output device
- Application-Level Context: Track which application's audio you're routing
- Multiple Routes: Create multiple audio routes simultaneously
- Volume Control: Adjust volume independently for each route
- Real-Time Management: Routes are temporary and cleared when the application closes
- Auto-Discovery: Automatically detects running applications with active audio sessions and available devices
- Modern UI: Clean, intuitive interface similar to Windows Volume Mixer
Audio Router uses WASAPI (Windows Audio Session API) Loopback Capture to:
- Capture audio output from your selected input device (any playback device on your system)
- Buffer and process the audio stream
- Apply independent volume control
- Forward it to your selected output device
- Maintain all routes in real-time without modifying system settings
- Windows 10 or Windows 11
- .NET 8.0 Runtime or SDK
- Administrator privileges recommended for best performance (optional - can run in normal mode)
- Admin mode enables HIGH process priority
- Better audio thread scheduling
- Reduced audio dropouts
-
Install .NET 8.0 SDK
-
Clone the repository:
git clone <repository-url>
cd AudioRouter- Build the project:
dotnet build AudioRouter.sln --configuration Release- Run the application:
dotnet run --project AudioRouter/AudioRouter.csprojCreate a standalone executable that doesn't require .NET runtime:
dotnet publish AudioRouter/AudioRouter.csproj -c Release -r win-x64 --self-containedThe executable will be in AudioRouter/bin/Release/net8.0-windows/win-x64/publish/
-
Launch the Application: Run AudioRouter.exe
-
Select Source Application:
- The left panel shows all applications currently playing audio
- Click on the application you want to route (this helps you track what you're routing)
- Use "Refresh Applications" if your app isn't listed
-
Select Input Device (Capture From):
- Choose which audio device to capture from
- This is typically the device that's playing the audio you want to route
- Defaults to your system's default playback device
-
Select Output Device (Route To):
- Choose the target output device from the dropdown
- This is where the audio will be duplicated/forwarded to
-
Select Latency Mode β‘:
- Ultra Low (~10-20ms): Best for movies, gaming, real-time streams
- Low (~30-50ms): Good balance of latency and stability
- Normal (~50-100ms): Stable for most use cases
- High (~100-200ms): Maximum stability for problematic systems
-
Start Route:
- Click "
βΆοΈ Start Audio Route" - The route appears in the "Active Routes" panel on the right
- Click "
-
Adjust Volume (Optional):
- Use the slider next to each active route to control its volume
- Volume is independent from system volume and application volume
- Check Status: Look for the "β‘ ADMIN MODE" badge in the top-right corner
- Enable Admin Mode: Click "π Run as Admin" button if not already running as admin
- Benefits:
- High process priority for better audio performance
- Reduced audio dropouts and glitches
- Better thread scheduling for real-time audio
- Essential for ultra-low latency mode
- View Active Routes: All active routes are displayed in the right panel
- Adjust Volume: Use the slider (π) for each route
- Stop a Route: Select a route and click "βΉοΈ Stop Selected Route"
- Refresh Lists: Click the refresh buttons to update applications or devices
-
Routes are automatically stopped if:
- The source application is closed
- The target device is disconnected
- An error occurs during routing
-
All routes are cleared when you close Audio Router
-
For best results, ensure your source application is actively playing audio when creating a route
AudioRouter/
βββ Models/
β βββ AudioSession.cs # Represents an audio session (application)
β βββ AudioDeviceInfo.cs # Represents an audio output device
β βββ AudioRoute.cs # Represents an active audio route
βββ Services/
β βββ AudioSessionManager.cs # Discovers active audio sessions
β βββ AudioDeviceEnumerator.cs # Lists available output devices
β βββ AudioRouterEngine.cs # Captures and routes audio
β βββ RoutingManager.cs # Manages multiple routes
βββ Converters/
β βββ VolumeConverter.cs # Converts volume between UI and model
βββ MainWindow.xaml/cs # Main UI
- WPF (Windows Presentation Foundation): Modern UI framework
- NAudio: Audio processing library
- WASAPI Loopback Capture: Captures audio from applications
- WASAPI Out: Outputs audio to devices
- Volume Sample Provider: Per-route volume control
- .NET 8.0: Latest .NET framework
- Captures all audio from the selected input device (not per-application isolation)
- Cannot route audio from applications using exclusive mode
- Requires audio to be actively playing through the selected input device
- Small latency (~50ms) may be noticeable in some scenarios
- The application selection helps you track routes but doesn't filter audio by process
- Ensure the application is actively playing audio
- Click "Refresh Applications"
- Verify the application is using the default audio device
- Check that the source application is playing audio
- Verify the route shows π’ (active)
- Adjust the route's volume slider
- Ensure the target device is set as a playback device (not disabled)
- Reduce buffer size (requires code modification)
- Close other audio-intensive applications
- Update your audio drivers
- The source application may have stopped playing audio
- The target device may have been disconnected
- Check the status bar for error messages
Edit AudioRouterEngine.cs line 67:
BufferDuration = TimeSpan.FromSeconds(2), // Increase for stability, decrease for lower latencyEdit AudioRouterEngine.cs line 79:
new WasapiOut(outputDevice, AudioClientShareMode.Shared, false, 50); // 50ms latency- Built with .NET 8.0 and C# 12
- Uses MVVM pattern for UI data binding
- Asynchronous audio processing with Task-based API
- Event-driven architecture for route management
To add new features, consider these extension points:
- Custom audio effects: Insert between
BufferedWaveProviderandVolumeSampleProvider - Per-application capture: Implement process-specific WASAPI capture
- Audio visualization: Subscribe to the
DataAvailableevent - Presets/Profiles: Serialize
AudioRouteobjects
Contributions are welcome! Please:
- Fork the repository
- Create a feature branch
- Make your changes
- Submit a pull request
This project is licensed under the MIT License - see the LICENSE file for details.
- NAudio - Excellent audio library for .NET
- Microsoft WASAPI documentation
- Windows Audio Session API (WASAPI)
This software is provided as-is without any warranty. Use at your own risk. The authors are not responsible for any audio issues, system crashes, or other problems that may arise from using this software.