Categories: Uncategorized

Using VoiceMeeter macro buttons to change VATSIM audio routing

In a prior post I walked through how to use VoiceMeeter to route your VATSIM audio using VectorAudio (or TrackAudio). In that post the audio is always routed to your headset, which is fine if it’s busy.

But what if it’s dead and you don’t want to wear your headset? Wouldn’t it be nice if you could quickly re-route the audio to your PC speakers?

VoiceMeeter macro buttons to the rescue! Create a new macro button and configure it like this:

Make sure the button type is set to 2 Positions. You can assign any keyboard shortcut you like, or none at all. ALT+F11 works well with CRC and STARS as it doesn’t appear to be mapped to anything.

For the Request for Initial State and Request for Button OFF scripts use this:

strip(2).A1 = 0;
strip(2).A2 = 1;
strip(3).A1 = 0;
strip(3).A2 = 1;

For the Request for Button ON script use this:

strip(2).A1 = 1;
strip(2).A2 = 0;
strip(3).A1 = 1;
strip(3).A2 = 0;

That’s it! You now have a button you can toggle on to route your VATSIM audio to PC speakers, and toggle off to have the audio go back to your headset.


Categories: VATSIM

Using VoiceMeeter MacroButtons to auto-duck audio in VATSIM

This post assumes you have already followed the initial setup steps covered in the routing audio with VoiceMeeter Potato, Discord, and VectorAudio post.

Step 1: Enable MacroButtons startup in VoiceMeeter

In the Menu select Run MacroButtons on Voicemeeter start. This will bring up the MacroButtons window.

Resize the window so there are two buttons visible.

Step 2: Create a macro to mute channels on incoming VATSIM audio

Right click on the first button and configure it as follows:

Make sure to check the Enable checkbox in the trigger section.

This configuration will listen for audio coming in on channel 3 (VATSIM – Primary) and while that trigger is active will mute the Discord and VATSIM – Secondary channels. Once the incoming audio stops the other two channels will be unmuted. You can use the green and red arrows to adjust the incoming audio levels required to trigger mute and unmute respectively.

Note that the scripts use origin 0 for indexing the channels while the trigger uses origin 1. That’s why it is in #3 to select VATSIM – Primary as the trigger source but 1 and 3 to select input 2 and input 4 for muting. Confusing? Yes.

If you also want to mute desktop audio you can add strip(0).mute = 0; and strip(0).mute = 1; to the scripts as well.

Step 3: Create a macro to mute channels on outgoing VATSIM audio

The macro created in step 2 will only detect incoming audio. To apply the same auto-ducking when transmitting right click on the second button and configure it as follows:

Set the Keyboard Shortcut dropdown to match the PTT key you use in VectorAudio. The scripts are the same as the macro configured in step 2.

Other variations

This basic framework opens up all sorts of possibilities. Instead of completely muting audio you can use the fadeto command to reduce the audio of specific channels:

strip(1).fadeto = (-15.0, 100);

and then the reverse to bring it back up after transmission is complete:

strip(1).fadeto = (0.0, 200);

You can also mix and match, for example mute the secondary VATSIM audio completely but only fade the Discord audio.

Many more options are available, basically whatever you can control via the VoiceMeeter UI you can also set via macros. See the VoiceMeeter user manual for all the details.

You can also use macros to mute and unmute these sources in OBS, which is super handy if you are streaming primary and secondary VATSIM audio and want to focus on the primary position radio traffic when it’s active.


Categories: VATSIM

Routing audio with VoiceMeeter Potato, Discord, and VectorAudio

With VoiceMeeter Potato and VectorAudio it is possible to route Discord, VATSIM audio, and desktop audio independently and control each app’s audio via macros. It’s a powerful way to do things like auto-mute Discord when VATSIM audio happens, listen to multiple VATSIM frequencies at once but auto-duck frequencies when the one you’re controlling has audio traffic, route some audio to your headset and other audio to your PC speakers, etc.

Here’s how to get the basics set up. After this setup is complete check out how to auto-duck using VoiceMeeter MacroButtons and how to mute and unmute OBS sources with VoiceMeeter MacroButtons.

Step 1: Install and license VoiceMeeter Potato and the VAIO Extension

Grab the beta build from the Discord, install it, then reboot your computer. Rebooting is really important. Don’t skip that step.

After rebooting, license the VAIO Extension by going to Menu > VAIO License Extension… and following the license flow. You must license the VAIO Extension to get access to make this work. It’s totally worth it. Help support amazing software by giving the developer some money.

Additionally go to the Menu in VoiceMeeter and enable Run on Windows Startup.

Step 2: Configure each application’s audio output

The goal is to get all the different apps to feed in to VoiceMeeter on separate inputs. Here’s a table of how everything should be mapped:

ApplicationOutput device
WindowsVoicemeeter In 1 (VB-Audio Voicemeeter VAIO)
DiscordVoicemeeter In 2 (VB-Audio Voicemeeter VAIO)
VectorAudio Headset DeviceVoicemeeter In 3 (VB-Audio Voicemeeter VAIO)
VectorAudio Speaker DeviceVoicemeeter In 4 (VB-Audio Voicemeeter VAIO)

Here’s what it looks like in Windows:

Here’s what it looks like in Discord:

And here’s what VectorAudio should look like:

Step 3: Enable and name virtual inputs in VoiceMeeter

Run VoiceMeeter Potato and click the little down arrows next to each of the first four input devices in the left section of the screen. Then right click on the Stereo Input label for the first four input channels and rename them to match the sources mapped to those inputs:

InputName
Input 1Desktop
Input 2Discord
Input 3VATSIM – Primary
Input 4VATSIM – Secondary

When you are done the input section of VoiceMeeter should look like this:

If you don’t have the little arrows at the top of each input device it means you didn’t license the VAIO Extension as mentioned in step 1.

Step 4: Configure VoiceMeeter outputs

This is where you tell VoiceMeeter to actually output the audio it receives. In my case I have two outputs: my PC speakers and my headset.

In the top right of the VoiceMeeter window select the A1 button and pick your speakers from the WDM (WASAPI) section. Then select the A2 button and pick your headphones from the WDM (WASAPI) section.

If you don’t see separate speaker and headphone devices you may need to run the Realtek audio manager app to set the option that splits the speaker and headphones into two separate devices.

Step 5: Route the audio

At this point you have four different audio inputs and two different audio outputs. The inputs can now easily be routed to the audio output you want by selecting the appropriate output button under each input. In my case I have the desktop audio routed to A1 (speakers) and all the other audio routed to A2 (headphones):

You can use any of the volume or EQ controls to independently modify the audio from each of the input sources. For example, you could put the VATSIM audio entirely in your right ear and the Discord audio in your left ear… but auto-ducking is better, and how to do that will be in the next blog post.

Step 6: Tell VectorAudio where to send each frequency’s audio

By default every RX frequency you add in VectorAudio will route to your primary output. To route frequencies to the secondary output you need to click the 1 SPK button on the frequency after you have activated RX. Here’s an example showing SEA_TWR routed to the primary output and KSEA_ATIS, SEA_DEL, and SEA_GND routed to the secondary output:


Recording a timelapse with OBS and Adobe Media Encoder

I wanted to record a timelapse of a long streaming session (four hours long) but didn’t want to record four hours of video to my drive just to throw out a ton of the frames. After a bit of digging I found a post in the OBS forums that gave me a head start on figuring this out. Here’s how I did it.

Step 1: Configure OBS video settings

In Settings > Video configure the output resolution as you want, then set the framerate to Integer FPS Value and the number of frames you want to capture per second. In my case I did 1. If you want even slower than that you can use the Fractional FPS Value setting.

In Settings > Output > Recording set up your output file options as you want. In my case I simply switched to MPEG-4 (.mp4) as the recording format. I left everything else the same.

Step 2: Stream and record

This is the easy part. Do your stream and record the video. Don’t forget to hit Start Recording in OBS or you’ll be really sad after!

When you’re done and hit Stop Recording be patient. It can take a minute or so for the recording to stop.

Step 3: Re-encode in Adobe Media Encoder

Since we recorded at 1fps the video file seems to be as long as the entire stream. Instead we want it to be 60 fps with all the existing frames used, no interpolation.

Adobe Media Encoder can do this. Load the recorded file in to Adobe Media Encoder, right click on it, and select Interpret Footage…. Make sure you right click on the video, not on the encoder settings beneath it.

In the resulting dialog select Assume this frame rate and then enter your desired frame rate (in my case 60fps).

Hit OK then apply whatever output encoding format you want and export. Voila! Your video just became seconds instead of minutes.


Model matching for VATSIM tower view in MSFS

Here’s how I set up model matching for use with VATSIM tower view in MSFS2020. Honestly, it’s the same model matching I use for flying on VATSIM too. It works well.

Step 1: Install FSLTL

Grab it from the FlyByWire installer. Install it.

Step 2: Get the MSFS default aircraft rules

FSLTL is great for people flying airliners for real airlines. It is not designed for GA aircraft or people flying MSFS default aircraft under non-airline callsigns.

To fix that download the custom rule sets by Marcus Griep. This includes rules for standard, deluxe, and premium MSFS aircraft, as well as common GA aircraft from Carenado, India Foxtrot Echo, and Kitfox. I don’t bother using the rules for Cape Air or the Mega Pack.

Step 3: Get my GA matching supplement rules

I used Model Matching Magic to make an additional rule file that covers some other GA aircraft and tries to at least get *something* to match for certain aircraft types. Download my custom rule set and put it somewhere safe.

Step 4: Add the rules to vpilot

Order matters. The list should be:

Step 5: Enjoy!

That’s it. Now you have great model matching for tower view or flying on VATSIM.


Categories: VATSIM

Splitting Discord and VATSIM audio with Voicemeeter Potato

This post is no longer current. See the new post on how to do this with the latest VoiceMeeter Potato beta and VectorAudio.

If you fly or do ATC on VATSIM chances are you’re also in Discord. You’re either chatting with your friends while flying or having a few laughs with CTR while fixing flight plans working GND.

It’s fun… until someone is talking on Discord and audio comes through on VATSIM. Now you’ve missed your new heading from approach or some poor pilot called for clearance and you have to go “Uhhh, sorry, say again?”

What if you could split the audio so Discord is only in your left headset ear and VATSIM audio was in your right headset ear? Or even better, what if Discord would just automatically mute whenever VATSIM audio happens? Well either one is possible with Voicemeeter Potato, a bizzarely named piece of magical software. This post will show you how to do it.

Step 1: Install Voicemeeter Potato

Download Voicemeeter Potato. Make sure it’s the Potato version, not Standard or Banana.

Make sure to reboot your computer after installing. Yes, you really have to reboot.

VoiceMeeter provides three separate input devices that we’ll use in later steps. One will receive Discord audio, one will receive audio from VATSIM, and the third will handle all other system audio.

Step 2: Configure Discord

Open Discord settings and select Voice & Video. Change the output device to VoiceMeeter Input (VB-Audio VoiceMeeter VAIO):

Step 3: Configure Audio for VATSIM/vPilot/xPilot/etc.

Whatever app generates the audio from VATSIM needs to get updated to use the Voicemeeter Potato output device.

If you’re running Audio For VATSIM select Settings and change the Headset Device to VoiceMeeter AUX Input (VB-Audio VoiceMeeter AUX VAIO):

If you’re running vPilot select Settings then Audio and change the Output Device to VoiceMeeter AUX Input (VB-Audio VoiceMeeter AUX VAIO):

I’ve never used xPilot but I assume its audio settings are similar to vPilot. Regardless of where your VATSIM audio comes from you should change it to use VoiceMeeter AUX Input (VB-Audio VoiceMeeter AUX VAIO) for the output device.

Step 4: Set up the VoiceMeeter Potato basic settings

Run VoiceMeeter Potato. The screen will be large and overwhelming. Don’t panic.

In the top right select the Menu button and pick System tray and Run on Windows Startup:

In the top right third of the screen click on the A1 button and select the WDM output that corresponds to your primary PC speakers. This is the channel all audio except Discord and VATSIM will flow to. In my case it’s my external speakers so A1 looks like this:

Next click on the A2 button and select the WDM output that corresponds to your headset. This is the channel Discord and VATSIM audio will flow to. In my case it’s a second output jack on my PC’s front panel so A2 looks like this:

With the output devices configured the next step is to tell VoiceMeeter what inputs to send to the output devices. In the middle of the VoiceMeeter window are three virtual inputs: VoiceMeeter VAIO (this will be Discord audio), VoiceMeeter AUX (this will be VATSIM audio) and VAIO 3 (this is all other audio). Map them to the appropriate output devices by setting the A1 and A2 buttons for each input appropriately:

At this point you should stop and test that the audio is working correctly. Get in a Discord voice chat and on VATSIM and verify that you are hearing Discord and VATSIM audio through your headset, and all other audio is going through your speakers.

Now for the fun part: splitting audio to different channels or auto-ducking.

Option 1: Split audio to two different headset channels

To put the Discord audio in your left ear and VATSIM audio in your right ear you change the balance of the two input channels by dragging the red dot to the left (for the VAIO input) and to the right (for the AUX input):

Hop on Discord and VATSIM and verify this works.

Option 2: Auto-duck other sources on VATSIM audio transmissions

Instead of splitting audio to two different channels you can use VoiceMeeter to automatically mute all other audio whenever there’s VATSIM audio traffic. This is done with two VoiceMeeter macros.

From the Menu in the top right enable Run MacroButtons on Voicemeeter start:

This should open the MacroButtons window with a single button showing. Resize the window so you have two buttons visible.

Setting up auto-ducking when receiving VATSIM audio

Right click on the first button and configure it as follows:

strip(6) is a reference to the Voicemeeter AUX virtual input that receives VATSIM audio. The trigger at the bottom also references the Voicemeeter AUX input (even though it says in #7. Yes, it is confusing.) Whenever audio is detected on that input channel the macro will fire and put the AUX input in solo mode, muting all other system audio. When the audio stops the macro will wait 500ms and then re-enable all the other audio channels.

You can use the red and green arrow to fine-tune the audio level required to trigger the start and stop action.

Setting up auto-ducking when transmitting on VATSIM

This step assumes you have a keyboard push to talk key configured for VATSIM audio.

Right click on the second macro button and configure it as follows:

Change the Keyboard Shortcut setting to match the keyboard key you push to talk on VATSIM.

It is possible to do it via a HID device button as well (such as a joystick), however I haven’t done that and don’t know how the HID Device Button section works. See the VoiceMeeter manual for more info if you want to use a joystick button instead.

That’s it! Hop on Discord and VATSIM and verify this works. All system audio should mute whenever you receive or send VATSIM audio then unmute when the transmission is done.

Other variations

Don’t want to mute *all* audio when VATSIM audio happens and just want to mute Discord? Change the macros to do strip(5).mute = 1 and strip(5).mute = 0 for the on and off requests respectively. strip(5) references the Voicemeeter VAIO virtual input and mutes/unmutes just that channel.

Don’t want to completely mute Discord audio? Use strip(5).fadeto = (-15.0, 100); and strip(5).fadeto = (0.0, 200); for a subtle fade in and out.

Don’t want to completely mute system audio but still want to mute Discord audio? Combine the two approaches to mute Discord and fade system audio:

strip(5).mute = 1
strip(7).fadeto = (-15.0, 100);

then unmute and unfade:

strip(5).mute = 0
strip(7).fadeto = (0, 200);

strip(7) references the VAIO 3 virtual input which is carrying all other system audio.

Many more options are available, basically whatever you can control via the VoiceMeeter UI you can also set via macros. See the VoiceMeeter user manual for all the details.