Skip to content
loreggiaPublic

About

Micser is a modular audio routing application for Microsoft Windows and Linux.

Topics

Resources

Stars

17 stars

Watchers

1 watching

Forks

Latest commit

 

History

971 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Micser

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

micser CI

Showcase

Loopback/Night Mode/Output Loopback / Night Mode template / Output

Single channel routing Single channel routing

Themes Different light and dark themes (including high-contrast options)

Installation

Grab the latest release from the Releases page.

  • Windows: download either Micser-win-Setup.exe for the installer (installs for the current user) or Micser-win-Portable.zip for 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-0 on Debian and Ubuntu) and fusermount. 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.

Features

  • 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.

Building

Requirements

  • .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 in package.json are 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

Commands

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:check

Running for development

With 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

Packaging

./scripts/pack.ps1 -Version 0.1.0   # Velopack packages in artifacts/releases: Setup.exe on Windows, Micser.AppImage on Linux

Pushing a tag vX.Y.Z builds the release on GitHub Actions and publishes it as a GitHub release, which installed copies update from.

Driver

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 checks

Plugins

Audio 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.

Architecture

The architecture is described in docs/Architecture.md.

The previous WPF version is commit 9386ea4 in the history of main.

Credits

This project uses the following libraries and tools:

Engine and shell

Web UI

Driver

Development and tests

About

Micser is a modular audio routing application for Microsoft Windows and Linux.

Topics

Resources

Stars

17 stars

Watchers

1 watching

Forks

Releases

Used by

Contributors

Languages