Smart real-time microphone management and automatic switching for Windows
MicShift is a modern and lightweight system utility for Windows, developed in C# (.NET 10 & WPF). The program analyzes the audio signal level from your input devices in real-time and automatically switches the active communication microphone (for example, switching from a desktop microphone to a headset when you step away from your desk).
- Instead of the legacy audio stream capture method (NAudio
WaveInEvent), which led to exclusive access conflicts and device locking by other applications (Discord, OBS, etc.), MicShift uses modern WASAPI Core Audio APIs. - The signal level is read directly via the Windows
AudioMeterInformation.MasterPeakValueinterface. This ensures 100% reliability, prevents crashes, and operates with zero CPU overhead.
- The application supports fully featured dark and light interface themes.
- Color resources are extracted into separate dictionaries:
Themes/DarkTheme.xamlandThemes/LightTheme.xaml. - Theme switching happens instantly in the settings window without requiring an app restart.
- The UI is separated into logical tabs:
- Dashboard: The main panel featuring a status indicator, default device selection, animated audio level bars (VU meters), and an auto-switch toggle.
- Settings: Secondary program settings, including a toggle for popup HUD notifications, theme selection, and hotkey hints.
- Volume bars are animated with
QuadraticEasesmoothing to achieve fluid motion.
- Instead of standard, sluggish Windows notifications that linger and distract from work, MicShift features its own overlay window:
NotificationOverlayWindow. - Any actions (Mute hotkey trigger, microphone switch, mode change) instantly appear as a neat, semi-transparent banner in the bottom right corner of the screen above the taskbar, which smoothly fades out after 1.2 seconds.
- Minimizes to the system tray on Close/Minimize with the ability to restore via double-click on the icon.
- Global hotkeys, interceptable from any fullscreen games:
Ctrl + Alt + M— Quickly mute/unmute the active microphone.Ctrl + Alt + S— Cycle through the active microphones.
Project files are logically organized by directories:
- 📁
Services/— Services for auto-switching, global hotkeys, WASAPI monitoring, tray management, and configuration. - 📁
Views/— The main settings windowMainWindowand theNotificationOverlayWindowoverlay. - 📁
Themes/— Resource dictionaries for light and dark styling. - 📄
LICENSE— Text of the official MIT license.
| Key Combination | Action | Visual HUD |
|---|---|---|
Ctrl + Alt + M |
Mute/unmute microphone | Yes (mute status) |
Ctrl + Alt + S |
Cycle to the next microphone | Yes (new device name) |
When launched with arguments, the application runs in console mode, outputs information to PowerShell/CMD, and exits:
# List all active microphones
MicShift.exe --list
# Show the current default device
MicShift.exe --default
# Switch microphone by name (or part of the name) or GUID
MicShift.exe --switch "PD200X Podcast Microphone"
# Start the application immediately minimized to the tray
MicShift.exe --tray
# Show help
MicShift.exe --helpTo make MicShift start automatically with Windows in the system tray:
- Press
Win + R, typeshell:startup, and press Enter. - Create a shortcut for the
MicShift.exefile. - In the shortcut properties, add the
--trayargument at the very end of the "Target" field, separated by a space.- Example:
"C:\Program Files\MicShift\MicShift.exe" --tray
- Example:
To create an optimized executable file (Framework-Dependent):
dotnet publish MicShift.csproj -c Release -r win-x64 -p:PublishSingleFile=true -o ./publish(Note: The build configuration has been optimized to be Framework-Dependent to significantly reduce file size).
This project is licensed under the MIT License. For more details, see the LICENSE file.
