Micser is a modular audio routing and effect application for Windows and Linux.
The application consists of:
- an audio engine that runs as a background process in the user's session and exposes a local HTTP API
- a web UI (React) for routing audio graphically using widgets, hosted in a small tray application (Avalonia, with WebView2 on Windows
and WebKitGTK on Linux)
- the UI closes when minimized to the system tray to minimize memory usage
- virtual audio cables with a configurable number of devices: on Windows a driver (WIP, still requires an extended validation code signing certificate), on Linux PipeWire devices that the engine creates itself
Loopback / Night Mode template / Output
Different light and dark themes (including high-contrast options)
Grab the latest release from the Releases page.
- Windows: download either
Micser-win-Setup.exefor the installer (installs for the current user) orMicser-win-Portable.zipfor the portable version. - Linux: download
Micser.AppImage, make it executable (chmod +x Micser.AppImage) and start it. It needs PipeWire, WebKitGTK 4.1 (libwebkit2gtk-4.1-0on Debian and Ubuntu) andfusermount. The app menu entry and starting at login can be turned on in the settings ("Desktop"). On GNOME, the tray icon needs the AppIndicator extension.
Both update themselves from the GitHub releases.
- Graphical routing: connect inputs, effects and outputs by dragging between their connectors; any output can feed several inputs and vice versa. The audio keeps running while the UI is closed.
- Single channel routing: show a module's channels to route each channel on its own, e.g. the channels of an audio interface that has them all on one device. Effects can be set to a fixed channel layout (mono, stereo, quad, 5.1, 7.1 or up to 64 channels).
- Modules:
- device input, loopback input (capture what a device plays) and device output
- gain
- equalizer with peaking, shelf and pass bands and a preamp, which can import Equalizer APO configurations (e.g. AutoEQ headphone corrections)
- high-pass and low-pass filter, compressor, limiter, noise gate, ducker (with a sidechain input), delay, pitch shifter and stereo tools (swap, mono, width, balance, polarity)
- voice changer that shifts pitch and formants separately or aims at a target pitch, with breath, wobble and robot, whisper, alien, radio, monotone and snap-to-notes effects, and presets (male to female and back, child, old person, monster, chipmunk, robot, whisper, alien, radio)
- spectrum analyzer, and frequency response graphs for the equalizer and the filter
- every module has a volume and mute, which can follow the system volume, so the volume keys also control routes into virtual cables and other devices; effects can be bypassed
- knobs take typed values such as "2.5k", and info buttons explain each module and setting
- Subgraphs and templates: group modules into subgraphs that can be collapsed, muted and bypassed as a whole, and save them as templates to reuse. Built-in templates: "Footstep boost", "Night mode", "Music ducking" and "Voice chat mic". Subgraphs created from a template can be updated when it changes.
- Virtual audio cables to route audio between applications (built in on Linux, the Windows driver is still WIP).
- Plugins add new modules and their widgets (see Plugins).
- Configuration export and import, e.g. as a backup or to move to another computer.
- Themes: default, blue, purple and high contrast, each light or dark, or following the system.
- Languages: English and German.
- Automatic updates from the GitHub releases, with release notes in the app, and an optional start at login.
- .NET SDK 10.0.403 or later (see
global.json) - Node.js 26 and npm 12 (npm enforces both; Node 26 ships npm 11, so
npm install -g npm@12); with Volta, the versions pinned inpackage.jsonare used - Windows: WebView2 Runtime (included in Windows 11)
- Linux: PipeWire and WebKitGTK 4.1 to run the engine and the shell; PowerShell for
scripts/pack.ps1
dotnet build Micser.slnx
dotnet test --solution Micser.slnx
npm run setup # npm install, then local dotnet tool install (git hooks via Husky.Net)
npm run build # production build of the web UI (before dotnet publish of the engine, which serves it)
npm run lint
npm run format:checkWith the Aspire CLI, aspire start runs the engine and the web UI with a dashboard for logs and traces; the shell can be started from the dashboard. Without Aspire:
dotnet run --project src/Engine # engine on http://127.0.0.1:5080
npm run dev # web UI on http://localhost:5173, proxies /api and /hubs to the engine
dotnet run --project src/Shell -- --ui http://localhost:5173 # optional: the tray app showing the dev UI./scripts/pack.ps1 -Version 0.1.0 # Velopack packages in artifacts/releases: Setup.exe on Windows, Micser.AppImage on LinuxPushing a tag vX.Y.Z builds the release on GitHub Actions and publishes it as a GitHub release, which installed copies update from.
The virtual audio cable driver (src/Vac) is not part of Micser.slnx. It needs Visual Studio with the Windows Driver Kit component and the Spectre-mitigated libraries; the WDK itself comes from NuGet.
./scripts/build-vac.ps1 -Platform x64,ARM64 # test-signed driver packages in src/Vac/bin
./scripts/codeql-vac.ps1 # Microsoft's CodeQL driver checksAudio modules are provided by plugins. Each plugin consists of a .NET project and a web package with the widgets for its modules. The main modules (device input/output, gain, compressor, ...) are provided by src/Plugins/Main, which also serves as an example of how to implement a plugin.
Plugins outside this repository build against the SDK packages, released with each version of Micser:
Micser.Audio (NuGet) for the modules and
@micser/web-sdk (npm) for the widgets.
The architecture is described in docs/Architecture.md.
The previous WPF version is commit 9386ea4 in the history of main.
This project uses the following libraries and tools:
Engine and shell
- NAudio (audio I/O on Windows, resampling)
- PipeWire (audio I/O and virtual cables on Linux)
- ASP.NET Core and SignalR (engine API)
- Serilog (logging)
- OpenTelemetry .NET (telemetry in development)
- Avalonia and Avalonia WebView (shell: tray, window, dialogs)
- WebView2 and WebKitGTK (the shell's web view on Windows and Linux)
- Velopack (installer and updates)
Web UI
- React
- Fluent UI React
- React Flow (
@xyflow/react, routing graph) - TanStack Query
- i18next and react-i18next
- markdown-to-jsx (release notes)
- Vite
- Orval (API client generation)
Driver
- Windows Driver Samples (the VAC driver is based on SimpleAudioSample)
- Windows Driver Kit and CodeQL (driver build and checks)
Development and tests
- Aspire (development orchestration)
- TUnit and NSubstitute (.NET tests)
- Vitest and Playwright (web and end-to-end tests)
- TypeScript, ESLint and Prettier
- CSharpier (C# and MSBuild formatting) and Husky.Net (pre-commit hook)
