SteamVR

SteamVR

Not enough ratings
2-Way-Com [operator <-> VR user] using Voicemeeter Banana (bonus PTT & audio ducker)
By BOLL
This is a guide for you who an operator to be able to talk to the user that is in VR. Using the free donation-ware Voicemeeter Banana we set up local two-way communication. Bonus content is how to also set up a push-to-talk button and automatic audio ducking.
   
Award
Favorite
Favorited
Unfavorite
Introduction
This guide will help you setup the free donation-ware Voicemeeter Banana in a way so that you get two-way communication between the operator and the user in VR. This can be very useful when doing demonstrations.

There are two extra parts at the end which also helps you set up MacroButtons to get push-to-talk and audio ducking.

A few tips that will make your life easier before we start. Feel free to skip to the next section if you are used to managing your audio devices.

Rename your audio devices
To make it easier to recognize your devices in menus and lists it makes sense to name them appropriately, something you will recognize instead of something like USB audio device.

Open the start menu with the start button, write "Sound" and Sounds, Control Panel should appear, click it or press enter.

If it doesn't you can also access this window by right clicking the speaker symbol in the system tray and click Playback devices or Recording devices.

Make sure you are on the Recording tab. Hold up your Vive headset and talk into the microphone, in the list try to find the device that have a moving level meter, it should be your Vive. Doubleclick the device to open the properties window and give it a new name, the box with selected text, then click OK.

You can continue to do this for all your recording and playback devices. Keep in mind that they can lose their name if you change USB ports.
Install Voicemeeter Banana
To be able to do this we need to install what basically is a virtual mixer. It's a freely available app but it's distributed as donation-ware, which means that you are encouraged to give a donation if you found the app useful and you have the means to. I am in no way affiliated with this project, but I did donate to it :)

Pick your preferred installation type here: Voicemeeter Banana[vb-audio.pagesperso-orange.fr], scroll down to the Zip or EXE downloads.


Simply run through the installation and reboot when necessary. When you are done launch Voicemeeter Banana and you should see this:
Set up devices
In this section we will set up all the devices we are going to use. This presumes that you have a Vive and some other microphone and headphones/speaker setup connected, basically one hardware input and output that is not the Vive. Let's go!

OBS: As reference, I will use a Logitech G35 headset as my operator hardware.

In the top left corner you can see HARDWARE INPUT 1, 2 and 3. You need to set two of these:
  • Set HARDWARE INPUT 1 to the operator microphone.
  • Set HARDWARE INPUT 2 to the Vive microphone.


As a side note, we pick the WDM mode before MME because it has way less latency. You can read about this in the manual which comes with the program, look for Voicemeeter_UserManual.pdf.

Edit Oct 29th: Since writing this guide WDM has started crackling for me, I found that KS USB Device is actually the Vive as well, and it works fine! If you have crackling try that! MME also works but has horrible latency. Also, if you still have issues, set the Vive as your A1 device as that channel mandates the audio quality!

At this point we will use a VIRTUAL INPUT, this is how we will mix the game audio with the operators voice. Back in your Playback devices locate either VoiceMeeter Aux Input or VoiceMeeter Input and set it as your default device. Personally I use the prior for no special reason.

Now we go to the top right corner in Voicemeeter, here we find the HARDWARE OUT:
  • Set HARDWARE OUT A1 to the operator headphones/speakers.
  • Set HARDWARE OUT A2 to the Vive USB audio device.


This should be the entire device setup!
Connect inputs to outputs
We're almost done, but not quite yet! Now we're going to pipe incoming sound to outputs so we can actually hear something. Follow along.

Next to each fader for the inputs there are a number of output toggles: A1, A2, A3, B1, B2. We'll set the operator hardware to hear the VR user and vice versa. The VR user also gets the game audio, but you can also mirror this to the operator output if you like, more on that later.

Using the toggles, do the following:
  • Set HARDWARE INPUT 1 to A2, pipe the operator microphone to the Vive.
  • Set HARDWARE INPUT 2 to A1, pipe the Vive microphone to the operator headphones/speakers.
  • Set the virtual input you picked as your default audio output to A2.
It should look something like this:
It's not entirely necessary to remove A1 from HW INPUT 3 but I like it to be tidy.

Now we're done! This will pipe the operator microphone and the game audio to the Vive headset, meanwhile the Vive microphone will be piped to the operator headphones/speakers.
The End
To make sure nobody injures their hearing it's a good idea to test the volumes. Use the faders for the different inputs and outputs until it's comfortable for all parties. As a side note, you can for most devices go back into the playback and recording device properties and change their local gain levels, this will affect their volume in Voicemeeter. Make sure you listen back to the microphones though, some will distort at full gain.

OBS: The above is extra important as the virtual input we output the game audio to does not actually have a gain adjustment, if you change the system volume nothing happens until you reach zero or mute. This in turn means the volume fader in SteamVR does nothing, you will have to adjust the volume in Voicemeeter instead! I run Voicemeeter on system startup and am fine with this, but you can just leave the app off if you don't need it all the time.

Note: With the easy to manage output piping we actually no longer need to use the SteamVR audio options. Mine are now entirelly blank. To get mirroring I just add another HARDWARE OUTPUT device and pipe the game audio to that one! Super easy!

Tip: You can actually rename your faders, simple right click on the name and type in a new one. On the output sliders you click futher down or else you set the value instead, which is also possible elsewhere by right clicking. Below is a screenshot after making this setup and renaming all my faders!
Bonus: Push-to-Talk button
To not get the surrounding noise in the room to always get piped to the VR user it might be a good idea to use push-to-talk, meaning you have to hold down a button to broadcast your voice. This is for the operator to the VR user.

Included in the installation is VoicemeeterMacroButtons.exe, locate and run this or open Menu in the top right of Voicemeeter and click MacroButtons run on Voicemeeter start. This will launch the accessory app every time you launch Voicemeeter. Just uncheck it again if you feel it's not necessary. If the app did not appear, click the new icon in the tray.

This will launch an app containing a number of unset buttons, it should look more or less like this:

As a side note, you can change the number of visible buttons by resizing the window.

Let us configure a button, right click one of them and you should get a configuration window. Set the values listed below.
  • Set Button Name and Button Sub Name to something descriptive.
  • Set Button Type to Push Button.
  • Set Keyboard Shortcut to something that suits you, I used CTRL only.
  • Set Request For Initial State to "Strip(0).Mute=1;"
  • Set Request for Button ON to "Strip(0).Mute=1;"
  • Set Request for Button OFF to "Strip(0).Mute=1;"
The macros simply tell one of the faders to be muted and not muted, and 0 happens to be the first fader which is the operator microphone, meaning it will be muted unless this button is pressed. Voilà, we have a push-to-talk button! Now the operator can press CTRL at any time to talk to the VR user.

As reference I include the configuration window below:
Extra Bonus: Automatic audio ducking
Welcome to the cutting edge. Audio ducking means one fader will affect another, in this case the level of the operator microphone will affect the level of the game audio. Why is this useful? If we lower the game volume when the operator speaks it's much easier to hear for the VR user! Let's begin.
  • First shut down MacroButtons from the context menu by right clicking on the tray icon.
  • Download the 1.0.1.0 version of MacroButtons[vbaudio.jcedeveloppement.com] and replace the VoicemeeterMacroButtons.exe in your Voicemeeter folder. Rename the old one if you want to keep a backup.
  • Relaunch MacroButtons, either by double-clicking the executable or by toggling it in the Voicemeeter Menu.
Like with the push-to-talk button, right click a new button and set this up.
  • Set Button Type to 2 Positions.
  • Set Request for Initial State to "Strip(4).gain=0;"
  • Set Request for Button ON / Trigger IN to "Strip(4).fadeto=(-15,100);"
  • Set Request for Button OFF / Trigger OUT to "Strip(4).fadeto=(0,100);"
  • Set TRIGGER Enable checkbox to checked.
In this case Strip is already set to "in #1" which is the first hardware input, meaning the operator microphone. This is correct. What you want to do now is talk in that microphone and note where you are on the level meter.

Drag the green arrow to a bit before that. I usually keep the red arrow at the same spot, but you can move it a bit before the green one if you want a larger delay before the ducking stops.

The IN event triggers when the level goes above the green arrow and the OUT event triggers when the level goes below the red arrow. This is what makes the ducking work.

The Hold is time in milliseconds for which the IN state is locked and the trigger does not react to the OUT threshold. This is to prevent the trigger from flickering on and off while talking with short pauses.

You can edit any of the macros to change the amount of -dB to use for the ducking and adjust the fade times for transitions you think are comfortable. Reference: Strip(x).fadeto(db, duration);

If you want to turn the trigger off, just uncheck Enabled and it will not trigger.

As reference I include the configuration window below:
Thanks for reading
This ended up being way more text than I had imagined. Hopefully it can be of help to someone! I've found Voicemeeter to be so very useful that I felt I wanted to share. If something here confuses you or didn't work, please tell me in the comments so I can make updates/fix it! Cheers!

Edit: I realize people might comment on this, I do realize that you can simply do a VoIP call to the host machine from a different computer or a smartphone, that or just enable listening for an attached microphone, those are options I mentioned in the SteamVR forums. This slightly complex setup does give you a few more options though, and it might be as good a time as any to learn Voicemeeter! ;)
5 Comments
mad rabbit 16 Mar, 2019 @ 1:57am 
Great guide, thanks a heap!
ReViolent 26 Sep, 2018 @ 9:09am 
Late response but better late than never.

Thanks alot for this (Especially the audio ducking part).

I used it for lowering game sound when other people speak to through discord,
as the discord attenuation option doesn't really work that well for me.

And it's working brilliantly. Lowered the Hold to 300 though.
BOLL  [author] 25 Sep, 2017 @ 9:18am 
Cheers Pinks! :D Yeah I ended up writing way more than I had expected, it's easy to think something is easy and obvious, until trying to explain it to somebody. I still use VoiceMeeter every day both at home and at work, but I remember it taking many months until I actually knew what I was doing :)
Pinks McGee 25 Sep, 2017 @ 3:57am 
Thank you thank you thank you. You made this so easy to follow and cleared up a big problem I was having. Thanks for also explaining what the settings were doing instead of just telling us to do it. It made me understand the software much better. You rock.
procedure1 7 Jan, 2017 @ 9:50am 
Thanks for posting! I plan to try this.