Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
18 commits
Select commit Hold shift + click to select a range
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
32 changes: 21 additions & 11 deletions INSTALLATION.txt
Original file line number Diff line number Diff line change
Expand Up @@ -70,20 +70,29 @@ Skip this section if you already have a suitable virtual audio driver.
1. Download VB-CABLE from https://vb-audio.com/Cable/ and extract its archive.
2. Run the appropriate VB-CABLE setup as administrator and install the driver.
3. Restart Windows if the installer requests it.
4. In MicMixer, select "CABLE Input (VB-Audio Virtual Cable)" as the
"Virtual cable output".
4. In MicMixer, open Settings > Devices and set "Send the mix to" to
"CABLE Input (VB-Audio Virtual Cable)".
5. In your voice chat, game, streaming software, or another receiving app, select
"CABLE Output (VB-Audio Virtual Cable)" as its microphone/input device.

MicMixer plays the mix into CABLE Input; the cable passes it on to CABLE Output,
which other apps use as a microphone.

Basic MicMixer setup
--------------------
1. Select your physical microphone under "Normal mic".
2. Select your voice-modified microphone, or choose "No modded mic".
3. Select your virtual device under "Virtual cable output".
4. Click "Enable" to start routing.
5. If you use a modified microphone, choose a global hotkey. Holding it switches
from the normal microphone to the modified microphone.
6. Play music from MicMixer's library or capture a running application when you
On the first start, MicMixer opens a setup guide that recognizes an installed
virtual cable, explains how to install VB-CABLE if there is none, and walks
through the steps below. Run it again from Settings > General. By hand:

1. Click "Settings" and open "Devices".
2. Select your physical microphone under "Normal mic".
3. Under "Voice changer", choose "Off", "Voice changer app" (and its microphone),
or "MicMixer voices".
4. Set "Send the mix to" to your virtual cable, then click "Save".
5. Click "Enable" in the main window to start routing.
6. If you use a modified microphone, choose a hotkey in Settings > Hotkey.
Holding it switches from the normal microphone to the modified microphone.
7. Play music from MicMixer's library or capture a running application when you
want music mixed into the same virtual microphone channel.

If music is heavily reduced in the receiving app, try
Expand All @@ -103,6 +112,7 @@ No plug-in, network setup, or additional integration software is required.

More help
---------
The app contains a VB-CABLE setup guide and contextual explanations for its
audio and music settings. Full documentation is available at:
The setup guide in Settings > General explains the virtual cable and every
device choice.
Full documentation is available at:
https://github.com/benjibutten/MicMixer
126 changes: 102 additions & 24 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ can switch live, mid-session.
[**Download for Windows**](https://github.com/benjibutten/MicMixer/releases/latest)
· Windows 10/11 x64 · self-contained, no .NET install · Apache-2.0

![The MicMixer main window: device selection, global hotkey, push-to-talk, secondary output, and the built-in music player.](docs/assets/micmixer-main.png)
![The MicMixer main window: a status card that shows whether you are heard and where the mix goes, and the built-in music player.](docs/assets/micmixer-main.png)

## What it's for

Expand All @@ -30,7 +30,8 @@ can switch live, mid-session.
## Quick setup

1. Install a virtual audio cable such as [VB-CABLE](https://vb-audio.com/Cable/).
2. In MicMixer, select your real mic and **CABLE Input** as the virtual output.
2. Start MicMixer and follow the setup guide that opens, or in **Settings › Devices**
select your real mic, set **Send the mix to** to **CABLE Input**, and click **Save**.
3. In FiveM, Discord, or your chat app, select **CABLE Output** as its microphone.
4. Click **Enable**. Use the linked guides below for push-to-talk and music rules.

Expand All @@ -55,6 +56,10 @@ The rest of this document is the detailed reference.
- Supports setups without a modified microphone.
- Supports a configurable release delay before switching back to the normal mic.
- Provides push-to-talk for the complete outgoing mix, including music.
- Provides an optional noise gate that keeps the mic silent between phrases, so
the virtual cable carries true silence instead of room noise.
- Provides matching volume controls for the normal mic and the processed voice,
from mute up to a 2× boost.
- Optionally lets music bypass push-to-talk, so the music keeps playing into the
virtual cable while the voice stays gated.
- Provides a monitor-only preview mode that keeps music out of the virtual cable
Expand All @@ -71,7 +76,11 @@ The rest of this document is the detailed reference.
optional outgoing level meter.
- Serves the same overlay as a local web page for streaming software with browser
source support, so viewers see the mic and music status even when only the game is captured.
- Uses a responsive, resizable window layout and remembers its size and state.
- Includes a built-in setup guide that recognizes an installed virtual cable and
walks first-time users through devices and the hotkey.
- Shows a problem card in the main window whenever a saved device is missing or
something else differs from the saved setup.
- Uses a resizable window layout and remembers its size and state.
- Runs in the system tray and redirects additional launches to the existing instance.
- Can start automatically with Windows, hidden in the system tray.
- Writes rotating logs for troubleshooting.
Expand Down Expand Up @@ -128,36 +137,88 @@ and logs are covered by the [privacy policy](https://benjibutten.github.io/MicMi

## Basic setup

1. Install [VB-CABLE](https://vb-audio.com/Cable/).
2. Restart Windows if requested by the VB-CABLE installer.
3. Start `MicMixer.exe`.
4. Select your physical microphone under **Normal mic**.
5. Select a modified microphone, such as **Voicemod Virtual Audio Device**, or
choose **None**.
6. Select **CABLE Input (VB-Audio Virtual Cable)** under **Virtual cable output**.
Start `MicMixer.exe`. On the first start, a **setup guide** opens inside the app.
It explains what MicMixer does and how a virtual cable works, recognizes an
installed VB-CABLE, Virtual Audio Cable or Voicemeeter (or walks you through
installing VB-CABLE if none is found), and helps you pick your microphone, the
cable, your monitoring device and the hotkey. **Finish** saves the choices and
can start routing right away. Run it again any time from **Settings › General**.

To set up by hand instead:

1. Install [VB-CABLE](https://vb-audio.com/Cable/) and restart Windows if the
installer asks.
2. In MicMixer, open **Settings › Devices**.
3. Select your physical microphone under **Normal mic**.
4. Under **Voice changer**, choose **Off**, **Voice changer app** (then select its
microphone, such as **Voicemod Virtual Audio Device**), or **MicMixer voices**.
5. Under **Virtual cable**, set **Send the mix to** to **CABLE Input (VB-Audio Virtual Cable)**.
6. Click **Save**.
7. In your voice chat, game, or streaming app, select **CABLE Output** as the microphone.
8. Click **Enable**.
8. Click **Enable** in the main window.

A virtual cable is a pipe with two ends: MicMixer plays the mix into CABLE
*Input*, and every other app picks CABLE *Output* as its microphone.

If the selected output does not look like a virtual cable, MicMixer displays a
warning. Click **Enable** again to continue with another cable driver or an
intentional non-cable output.

## Main window and settings

The main window holds what you use during a session: a status card, the music
player, and orange problem cards. Everything you set up once lives in a separate
**Settings** window with the pages Devices, Hotkey, Noise gate, Overlay,
Secondary output, Music folders and General.

![MicMixer settings, Devices page: where your sound goes, normal mic, modified voice and the virtual cable.](docs/assets/micmixer-settings.png)

- The status card shows whether you are heard (gray Stopped, green Live, blue
Modified voice, red Muted), what the hotkey does right now, and where the mix
goes.
- Settings changes apply immediately, but are kept for the next start only after
**Save**. **Discard changes** returns to the saved settings.
- While routing is on, the microphones, the virtual cable and the secondary output
are locked because they are in use; a banner at the top of the settings window
says so and offers **Stop routing**.
- The saved settings are the reference for the problem cards. When a saved
device is not connected, the secondary output is misconfigured or fails, or
settings are changed but not saved, the main window shows one card per problem
with a button to the settings page that fixes it.
MicMixer never replaces a saved device with a stand-in without saying so, and
starting routing never overwrites the saved devices.
- Music card controls (volumes, monitoring on/off, the music routing toggles,
source mode), the voice changer and its voice, and music folders are saved as
they change.

## Hotkey and push-to-talk

Click **Change** under **Global hotkey**, then press the keyboard key or mouse
In **Settings › Hotkey**, click **Change**, then press the keyboard key or mouse
button that should select the modified mic while routing is active:

- Hotkey held: the modified mic is routed.
- Hotkey released: the normal mic is routed.
- Release delay above `0 ms`: the modified mic remains active until the delay ends.
- **None**: the hotkey is disabled unless push-to-talk is enabled.
- **External microphone / Voicemod**: select the existing voice-changer output device.
- **Local voice profile** (experimental): processes the physical microphone using a private local profile. Select a profile, create or edit one in the voice designer, or delete one you no longer want. **Processed voice volume** adjusts the wet output from 0–100% while routing is active.
The **Voice changer** decides what the hotkey switches to. Switch it from the row
under the status card in the main window, or in **Settings › Devices**. It takes
effect immediately; if routing is on, routing restarts for a moment.

- **Off**: the hotkey is disabled unless push-to-talk is enabled.
- **Voice changer app**: for apps such as Voicemod that create their own microphone
device. Select that device in **Settings › Devices**.
- **MicMixer voices** (experimental): MicMixer changes your voice itself, from your
physical microphone, with no other app. Pick a voice next to the switch, or create,
edit and delete your own voices in **Settings › Devices**. Its **Volume** slider there
adjusts the processed voice only, from 0 to 200%, while routing is active.
- **Volume** under the normal mic adjusts only the normal mic, on the same 0–200%
scale. 100% sends it exactly as captured. MicMixer never lowers the normal mic
on its own; raise this if it sounds quieter than your modified voice, or lower
the modified voice next to it.

Push-to-talk reverses the idle behavior: while the hotkey is not held, the virtual
cable receives silence. Neither microphone audio nor music is sent.

- It also works with **None**, in which case the hotkey gates the normal mic.
- It also works with the voice changer **Off**, in which case the hotkey gates the normal mic.
- With a modified mic selected, holding the hotkey both opens the gate and selects it.
- The release delay applies to push-to-talk as well.
- Local music monitoring is not muted by push-to-talk.
Expand All @@ -167,6 +228,20 @@ cable receives silence. Neither microphone audio nor music is sent.
only the microphone: the music keeps flowing into the virtual cable as long as
it plays. See [Music routing](#music-routing).

**Noise gate** mutes the mic whenever its level stays below the threshold, so
the cable carries true digital silence between phrases instead of room noise
and hum. Apps that use voice activation on the cable
then stop treating you as talking the moment you stop speaking, even while the
push-to-talk key is still held.

- The gate opens within a few milliseconds and stays open for a quarter second
after the level drops, so short pauses do not chop words.
- The bar under the slider shows the mic level on the same scale: set the
threshold so the bar passes the knob while you talk and stays below it while
you are quiet. The label next to it tells whether the gate is open or closed.
- It applies to the normal and the modified mic alike and works together with
push-to-talk. Music is not affected.

## Music sources

MicMixer can use its built-in MP3 library or capture audio from another application.
Expand Down Expand Up @@ -195,8 +270,8 @@ When multiple folders are configured:
- Each track has a colored folder badge; hover over it to see the full path.
- Folder chips beside the search field filter the visible tracks.
- The download destination can be selected separately.
- Folders can be added or removed from the folder menu; at least one folder remains
configured.
- Folders are added or removed in **Settings › Music folders**; at least one folder
remains configured.

Music can play while routing or local monitoring provides an audio clock. If neither
is active, playback pauses instead of appearing to play without advancing.
Expand Down Expand Up @@ -236,9 +311,10 @@ in external capture mode as well.
amber hint below the toggle states exactly where the music goes while the mode
is active. Monitor-only overrides the ignore-push-to-talk toggle.

The status panel and the overlay always reflect the outcome: when push-to-talk
mutes the mic while music still flows, the status reads "Mic muted (push-to-talk)
— music transmitting", and the overlay's music circle shows the current destination.
The status card and the overlay always reflect the outcome: when push-to-talk
mutes the mic while music still flows, the pill reads **Mic muted** and the status
line adds "music is still transmitting", and the overlay's music circle shows the
current destination.

## Secondary output

Expand Down Expand Up @@ -268,7 +344,7 @@ Warnings:
microphone. Prefer a device you cannot hear, or headphones.
- **The capture source includes everything on that device.** Any other application playing
audio to the same device ends up in the recording.
- The secondary output can never use the same device as **Virtual cable output**;
- The secondary output can never use the same device as the virtual cable (**Send the mix to**);
MicMixer blocks that combination because the mix would play twice on the cable.
- If the saved secondary device is missing at startup, MicMixer leaves the
selection empty and refuses to start the secondary output until you explicitly
Expand Down Expand Up @@ -309,7 +385,7 @@ Exclusive fullscreen applications may prevent desktop overlays from being visibl

When streaming software captures a game as an individual process, desktop
overlays may not be part of the captured image, so viewers never see the overlay
indicator. Enable **Stream overlay** in the routing settings and MicMixer serves
indicator. Enable **Serve the stream overlay** in **Settings › Overlay** and MicMixer serves
the same overlay as a local web page (`http://127.0.0.1:4573/` by default)
that can be added as a browser source and layered on top of the game. The
page mirrors the desktop overlay exactly — states, level rings, equalizer bars,
Expand Down Expand Up @@ -347,7 +423,9 @@ Runtime logs roll at 5 MB, rotate daily, and are retained for 14 days.
producing audio and refresh the application list.
- If a download fails, check the internet connection and inspect the logs under
`%LocalAppData%\MicMixer\logs`.
- If an audio device was disconnected, refresh the device list and select it again.
- If an audio device was disconnected, reconnect it and click **Refresh devices**
in Settings › Devices. The main window shows a card for every saved device
that is not connected.
- If the secondary output shows "device was not found", reconnect the device or
select a new one explicitly; MicMixer intentionally never auto-picks a
replacement secondary device.
Expand Down
Loading
Loading