Categories: VATSIM

Using VoiceMeeter MacroButtons to mute and unmute audio sources in OBS

This post assumes you have already followed the initial setup steps covered in the routing audio with VoiceMeeter Potato, Discord, and VectorAudio post and then set up MacroButtons for auto-ducking.

Auto-ducking is great, but what if you also want to stream the audio via OBS and mute accordingly? In my case I stream both my position’s radio communications (typically tower) as well as other controllers on above or below me (typically ground or departure). I want to mute the other positions whenever there’s radio traffic on my frequency.

Here’s how to do it.

Step 1: Add the audio sources to OBS

In the sources pane click the + button and select Audio Input Capture. Name the input VATSIM – Primary and set the device to Voicemeeter out B1 (VB-Audio Voicemeeter VAIO).

Create a second Audio Input Capture source, name it VATSIM – Secondary and set the device to Voicemeeter out B2 (VB-Audio Voicemeeter VAIO).

Step 2: Route the VATSIM audio in VoiceMeeter

In VoiceMeeter click the B1 button for the VATSIM – Primary input and the B2 button for the VATSIM – Secondary input. This will route input 3 to B1 and input 4 to B2 in addition to sending those inputs to your headset.

VoiceMeeter should look like this:

At this point you can test and make sure that audio from VectorAudio flows out to your stream.

Step 3: Add mute and unmute hotkeys in OBS for the VATSIM – Secondary source

Click Settings and go to the Hotkeys tab. Use the filter box to filter for mute, then scroll until you find the fields for VATSIM – Secondary. Assign a hotkey for Mute and Unmute. (As tempting as it is to use Push-to-mute I never could get that to work).

When you’re done it should look like this:

If you are using extended function keys (F13 and higher) it is a giant pain to actually get OBS to know about them since you have to actually press the key. I worked around this by mapping a button on my StreamDeck to send the function key using the Super Macro Keystroke PTT command.

Step 4: Update the MacroButtons to send the mute and unmute keys

Right click on the Auto-duck – receive button in the VoiceMeeter macro button app. Add the script commands to send your mute key on trigger in and unmute key on trigger out:

Then right click on the Auto-duck – transmit button and add the same script commands:

Other variations

While this specifically shows auto-muting the VATSIM – Secondary source in OBSyou could do any number of other things in OBS, provided there’s a mappable hotkey for it. Basically just send the hotkey from VoiceMeeter MacroButtons and then trigger whatever action you want in OBS. Nice!


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:


Replacing the bad thermal paste on an XFX Speedster MERC310 AMD Radeon RX 7900XT

I bought an XFX Speedster MERC310 AMD Radeon RX 7900XT for my new PC to use with Microsoft Flight Simulator 2020. Every time I ran MSFS2020 the card fans would spin up to max speed and sound like a jet plane taking off.

I did some research and found out that basically every one of these cards shipped with bad thermal paste causing abnormally high temperatures. In my case the temps looked like this in AMD Adrenaline when I was sitting parked at a gate:

Apparently, a delta that large between GPU and GPU hotspot is very wrong, and a hotspot temp that occasionally touched 100C is also very wrong.

Here’s how to fix it by applying a sheet of PTM7950.

Step 0: Open a support ticket with XFX

They need to understand how prevalent this issue is. Open a support ticket with them. Include your GPU temps. They will reply back and say you have two options: RMA the card or replace the paste yourself. If you are in the US you can replace the paste yourself without voiding your warranty.

If you choose to RMA the card then stop here. If you want to replace your paste keep reading.

Step 1: Unscrew all the screws

There are 11 screws to remove. Remove them.

Step 2: Pull the card apart

This was kinda scary to be honest. It takes a bit of force to pull the card apart because it’s stuck together with the old thermal paste and some thermal pads. Pull and it will come apart. Be careful not to damage the cable connecting the heatsink/fans to the circuit board.

Some of the thermal pads on the VRAM and VRMs will probably rip. There’s nothing you can do about it.

This is what the GPU looks like after pulling apart the card. Note some of the thermal pads ripped.

This is what the heatsink looks like after pulling apart the card:

Step 3: Remove the old thermal paste

You only need to remove the thermal paste from the GPU and heat sink. Don’t do anything with the thermal pads, leave them alone. I used 99% isopropyl alcohol, some Q-tips, and some lint free towels, to clean things up as best I could. Here’s what it looks like after:

Step 4: Apply the PTM7950 to the GPU

I put the finger cots that came in the kit on then used some scissors to cut a piece of the PTM7950 to slightly larger than the GPU. With a pair of small tweezers I peeled back the protective film from one side of the pad then stuck it on the GPU. With the included brush I made sure the pad was evenly adhered to the GPU.

After that I used the tweezers to pull up the top piece of protective film. This was the result:

Step 5: Put it back together

Put the heatsink/fan back on top of the board aligning it as best you can. Then screw in the seven small screws to hold things together.

Finally screw in the four larger screws with springs to firmly connect the heatsink to the GPU. XFX recommends doing this in a cross pattern, top-left/bottom-right/top-right/bottom-left, a quarter to a half turn per screw, to ensure even pressure is applied.

Step 6: Enjoy

That’s it. Put the card back in your PC, fire it up, and watch your temps magically be fixed. In my case the new temps when parked at an airport in MSFS2020 were:

With the Quiet curve applied in AMD Adrenaline the card is pretty much always quiet when flying now.

If you decide to do this yourself keep in mind that I’m not an expert. Until this card I’d never once replaced the thermal paste on a card before.


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.


Fixing “error creating overlay mount” in Docker on Windows

Are you getting this cryptic error from Docker Desktop on Windows when trying to start your containers?

server error – error creating overlay mount to /var/lib/docker/overlay2/2f46169556/merged: invalid argument

Is your Docker Desktop app taking forever to start?

I wasted two days on this problem, searching for anything online that could fix it. Nothing worked. Then I realized the problem: the drive that holds my Docker data was full.

To fix:

  1. Free up space on the drive
  2. Stop Docker Desktop (may require rebooting to do so)
  3. Get rid of the existing Docker data by running these two commands:
    wsl –unregister docker-desktop
    wsl –unregister docker-desktop-data
  4. Restart Docker Desktop
  5. Re-create all your containers

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.


ATmega32u4 or RP2040? Which to use for a custom PCB?

RP2040.

Here’s why:

The only little gotcha is the RP2040 runs at 3V3 instead of 5V, which means you may need to use a level shifter with certain ICs (most notably the MAX7219) for safe operation.


Categories: MobiFlight

Arduino Nano and Mega with CH340 chips connection issues

Got an Arduino Nano or Arduino Mega? Did it work fine for years and now doesn’t work with Windows 11? Did you just get new ones from Amazon and tried to connect it to Windows 11 only to find it doesn’t work?

It’s not you. It’s the CH340 chip and a new Windows 11 driver not playing well together.

How do I know I have an affected Nano?

Look on the back of the Nano for the big rectangular chip. Is it blank, like in this photo? If the answer is yes then you have a Nano made with what is likely a counterfeit CH340 chip and it is affected by this problem.

A counterfeit CH340 chip, identified by the lack of letters on the package.

For comparison here is what a presumably genuine CH340 chip looks like on a Nano that does not have connection issues:

EXIF_HDL_ID_1

What driver version causes the problem?

Driver version 3.8.2023.2, released 02/11/2023, is when the problem started. With this driver installed these Nanos cannot be connected to via the COM port.

Is there a driver version that works?

Yes. Version 3.5.2019.1, released 01/30/2019, works fine. It’s available several places online. One good source is SimHub’s copy.

Be aware that Windows Update will aggressively attempt to install the newer version of the driver. SimHub has released a tool that will automatically install the correct driver version and then tell Windows Update not to update it going forward.

What else can I do?

Only buy Nanos that have CH340 chips with writing on them. If you order from Amazon and get boards without the lettering return them as defective, get your money back, and order another brand that has proper CH340 chips on them. Check the one star reviews for people complaining in 2023 about the boards not working. Nanos from DORHEA are known bad and do not work, for example, and the recent reviews reflect that.


Categories: MSFS2020

What’s the deal with the Working Title CJ4 mod now?

Note: Microsoft pushed SU15 pre-release out to beta testers on February 24th which includes a new plug-in model for the FMS. This means any add-ons that use the FMS will break, specifically the dementedmonkey web application. Until those add-ons have access to the documentation for the new plug-in model you’ll either need to disable them or revert back to the SU14 release.

In January 2023 Microsoft/Asobo released “AAU1”, a massive overhaul of several default planes in Microsoft Flight Simulator 2020, including a complete rewrite of the CJ4.

People still seem to be confused by this update and often come to the Working Title Discord with questions. Here are answers to the common ones.

Do I still need to install the mod from the Working Title website?

No.

The plane was re-written from the ground up and all future updates ship directly with MSFS2020.

There is no need to install a mod anymore to get the latest and greatest. You should uninstall any Working Title CJ4 mod you may have in your community folder.

How do I install and find the Working Title CJ4 in flight sim then?

It is the default CJ4 in Microsoft Flight Simulator 2020 now. If you run MSFS2020 you have it, the “AAU1” update is downloaded automatically.

Simply search for “CJ4” in the plane list. The one that shows up is the one you want.

How do I know I have the re-written, latest and greatest, version?

Turn on the avionics. Look at the co-pilot’s MFD and verify it has a dedicated section for CAS messages at the top of the display (the two white rectangles):

They “rewrote” it so… is it better? What’s new with the plane?

Yes, it is better. The release notes for Aircraft & Avionics Update 1 give a good overview of all the improvements:

The Cessna Citation CJ4 avionics have been heavily upgraded to bring an authentic CJ4 avionics experience:

What happened to Simbrief data import?

It was removed, but as of Sim Update 13 (released September 28, 2023) it is back. You can find it under IDX > ROUTE MENU on the FMC. See the Navigraph blog post for full details on how to set it up.

What happened to Navigraph Charts integration?

It’s gone. Navigraph has previously stated they don’t want to deal with forking the code to add chart support, which is understandable. Here is one comment on it from Navigraph. HOWEVER! As of SU15 pre-release there is a plug-in model for the CJ4 which should allow 3rd parties like Navigraph to add features without having to copy the entire code, which is a promising development.

What happened to ground power?

It was removed, but as of Sim Update 13 (released September 28, 2023) it is back. You can find it under IDX > USR SETTINGS. You still need to be parked at a gate that supports ground power for it to work.

Note that real world pilots rarely use ground power with the CJ4. They just start the engines instead.

What happened to the checklists?

The focus for the rewrite of the CJ4 was on avionics and flight model. The checklist feature was, unfortunately, cut due to time. The Working Title team has said it will be coming back though and they even posted a preview of it to the Discord! There is no announced release date for it, and it was not included in Sim Update 13.

What happened to the passenger briefing sounds?

They weren’t included in the rewrite due to rights reasons. Other sounds, like the 500′ callout, are supported because they reuse default sounds included in MSFS 2020.

My liveries don’t work anymore. What’s going on?

Most liveries have updated at this point to work with the rewritten CJ4. If you find one that isn’t working it is likely because it completely overrides the panel.cfg file, which is a no no. You can resolve the issue by replacing the livery’s panel.cfg file with the one from Working Title.

Why does the plane refuse to take off until well after the Vr speed?

Nobody knows. This doesn’t happen for everyone, and it doesn’t happen all the time. There is no known workaround, all you can do is keep holding back on the yoke until the plane decides to take off.

Why isn’t TOD/VNAV working?

VNAV works fine but does require some extra steps to get configured the first time. See my blog post on configuring VNAV for how to get it up and running.

I’m getting white screens. What’s going on?

You can resolve white screens by checking the following: