These are some notes on using Virtual Audio Cable posted on a mailing list. Posted here for archival in case the original link gets taken down.

Basic introduction to virtual Audio Cable and some of its applications:

This document is a basic overview of how to use Virtual Audio cable with some theory and tips at the bottom. Many people wish to mix computer audio, game sounds, music or other material together and place the result onto a chat session such as zoom/teamtalk/skype/teamspeak etc. Others wish to record and edit the audio output of other programs for various purposes. To do this you will need the full version of virtual Audio cable installed. You can purchase this here: https://vac.muzychenko.net/en/

I am far from the only one who uses VAC, other people have written software to help use it. Doug Lee has written a couple of tools over the years to ease cable usage, I link to his resources here but am unable to answer specific questions about them unless I have tried them myself. There are all sorts of goodies on http://www.dlee.org/ such as: The Audio director for controlling repeaters: https://www.dlee.org/audir/ Virtual Audio Cable Jaws scripts: https://www.dlee.org/vac/ Virtual Audio Cable NVDA add-on: https://www.dlee.org/vac/NVDA/

You might be able to simplify switching audio devices if you get yourself in a mess by using the following utility: https://soundswitch.aaflalo.me/

There is a free version of Virtual audio cable, however it is limited to 1 cable and 1 connected client. This means that the free version will allow you to route audio from a playing application to a teamtalk instance see below: however the more complex routing will be unavailable in the free version.

Please note you must completely uninstall any older version of Virtual Audio Cable before installing a new one or you may experience system instability and unpredictable behaviour that will be difficult to debug.

Once you have the zip downloaded: uncompress it into an empty folder preserving the paths inside the archive. The inbuilt Windows unzip functionality will do this if you extract to an empty folder or use a 3rd party utility such as 7zip.

You can get 7zip from http://www.7zip.org/

Run the setup utility and optionally read the help documentation before you install VAC. Make your way through the install however note the warning below.

Warning: If special care is not taken you may loose speech during the VAC install.

If you are using speech and screen reading software care must be taken when installing VAC or you may end up in a situation where you loose speech. If you have operational braille working then you can use this to recover from this however I will give you instructions on how to restore system operation in the case that you do not.

A tip from twitter user @simon818 is to rename your audio devices to names that all start with different letters before you install. To do this open the sound control pannel start run mmsys.cpl Find each device in the playback and the recording listview, select it and tab to properties. Add a unique string to the beginning of the friendly name shown on screen, so in my system I have Headphones realtek… and Empty Line-in 1-2 so if I hit h when selecting a card below it will select the right device.

When installing VAC the driver adds audio endpoints to the system. The default action when a new playback endpoint is added is to switch the default audio device to the newly added device. This allows say a USB headset to start working the first time it is plugged in. the problem here is that if your screen reader is set to use your default device, and the default device changes, you will most likely loose speech. Your speech will be redirected to one of the cables and as there is nothing connected to the other end you will hear silence. If you have sighted assistance it is possible to allow the setup utility to open the sound control pannel and restore the default device easily.

If speech is lost: there are a number of ways to avoid this and methods to fix it if it occurs.

If you set your screen reader to a specific soundcard, and stop it from using Microsoft Sound Mapper, it will not be impacted as badly if the system default audio device changes.

To do this: NVDA: Control NVDA s, pick your synthesizer if necessary then hit tab once to get to the soundcard list. Arrow up and or down to select the card you wish to put speech on. If the first letter is unique you can hit that letter in stead of arrowing around. Now tab to okay and hit space. If you want to save the settings hit NVDA-n, and cursor up to save configuration. Relaunch NVDA to make sure the change took. If you loose speech after the VAC install with NVDA simply relaunch it and speech will return.

Jaws: Press Jaws+j to focus the Jaws window. If Jaws is in the alt-tab order, hit alt-u and then o to activate the soundcard menu. If Jaws is running from the System tray hit u followed by o to activate the soundcard menu. Hit right-arrow to expand the menu and use your up and down arrows to select where you want the speech to be sent. Hitting enter will confirm your choice and Jaws will continue to use this soundcard unless it is changed or becomes unavailable. If your soundcards have unique start letters you can hit the letter after hitting right arrow without having to cursor to the device.

Narrator: If Narrator home shows up when you launch narrator simply tab through the dialofg until you find the “Select where I here Narrator’s voice” and select the soundcard you wish to use by default. Speech should then shift to that card, close the settings window when done.

Supanova: happy to take contributions for this section.

If you didn’t want to change the default sound card for any reason and you have lost speech after the VAC install proceed as follows:

Warning these are trial and error methods so locking the speech to a card before you begin is highly recommended.

NVDA: control NVDA s then hit tab to focus the sound card selection list. Home wil take you to the top of the list which is microsoft sound mapper. Hit down arrow once to select the first soundcard and hit enter. If this fails: hit control-NVDA-s, tab, home then down arrow twice to select the second sound card. Repeat with 3 down arrows and increase the number until you get sound back. You may wish to save NVDA settings once sound returns until you reset the default audio device back to the original setting.

NVDA usually remembers the last sound card so if you have selected one near the top you can often shortcut with NVDA-control-s down-arrow then enter.

JAWS: See the above text for how to select a soundcard in Jaws but note that whenever you hit right arrow to open the soundcard menu it defaults to Windows default sound card. Using successive down arrow presses at this point will allow you to select another audio device and enter to confirm. JAWS window, utilities then soundcard with a right arrow to try another permutation.

Once you have VAC installed:

Open the control pannel as administrator under the virtual audio cable submenu inside all programs. Change the edit spin box for the number of cables from 1 to 3 and hit set to create 3 cables.

You may require more or fewer cables however be warned if you set cables to too high a number, it can delay windows startup as each sound device is enumerated. Perhaps rethink your setup if you need more than 5 cables.

you can check your device list by running start run mmsys.cpl

If this works correctly you will see lines 1 through N where N is the number of cables. You can rename these devices if that makes things easier for you. in the device list. . If you have 3 cables you should see 3 end-points in the playback mixer and 3 end-points in the record mixer. See the technical section for an explanation of this.

quick and dirty teamtalk streaming method: If you just want to play stuff onto Teamtalk and you don’t require the complexity of mixing, simply use a second instance of teamtalk. When inside teamtalk do file new client instance. Configure the devices on the second instance to reference a cable as an input so microphone line 1 or similar. Unsubscribe it from all the audio on the server, and tell it to record from a line. then simply send your player application to that line. You might for example set winamp playback to line 1.

You may wish to configure a listen on that line to your output device so you hear the routed audio yourself. Note this will only work with the paid version of Virtual Audio Cable as an extra listen would violate the single client limitation of the free version. To unsubscribe the second instance find all the users in the channel and hit control 4 on them to not receive their audio. You can also globally mute the second instance if that is easier. Inside the second instance hit control shift m to mute voice coming back from the server, and control alt m to mute anyone streaming media files.

If you get serious about this sort of setup you can use a portable copy of Teamtalk with separate settings so that you are not constantly reconfiguring the second instance each time you want to use it. Making teamtalk portable is covered in the teamtalk help.

More complex mixing: Now to set up what you need to mix your microphone and game sounds together. You must access the sound control pannel aplet. Either do this from the task tray or hit start, type in sound, and down arrow to the soun selection under control pannel in the results list and press enter. Alternatively you can do windows r and key in mmsys.cpl

You will need to hook devices together with the “listen to this device” option so I’ll cover how to do this before detailing the hookups you will need. Note that listen to only works for recording devices so make sure you are looking for it under the recording tab.

Once the sound applet is open select the record tab. Find your Device you wish to listen to in the list view and tab to properties. Now select the listen tab. check the Listen to this device checkbox and tell it to send the output to the desired output device. Now hit the apply button.

I provide only a few examples on how to set some routing up, but ultimately you will wish to modify these configurations to suit your use cases.

Here are some setups you can use to get computer audio sounds and your voice into an audio chat application:

Note you tell the first device to listen to this device and set the output device to the second device:

no repeaters method: listen line 1 to line 3. listen line 2 to line 3. listen line 3 to speakers.

Essentially line1 and line 2 are mixed together and sent to line 3. Line 3 outputs to your output device so you can hear it.

You can listen to your microphone and send it to line 1 or 2, and send your winamp output to line 2 or 1, so basically feed media in on one line and vocals in on another. . If your audio chat application pulls from line 1 it gets the media output, line 2 gives you the microphone signal, and line 3 the mix. Note that your microphone will be audible through your output device so beware feedback.

It is also possible to send teamtalk output to line 1 in this setup, and have it fed into SPL or similar as well as hearing the teamtalk audio yourself. It is unclear how much system load these listens put on the windows audio subsystem so your milage may vary.

1 Repeater method: You use this method if you do not wish to hear your microphone on your output device.

Listen Microphone to Line2. Listen line 1 to line 2.

Use the audio repeater (MME) in the Vac menu to repeat line 1 to your speakers. You may wish to reduce buffers to 50ms or lower to minimize the lag.

Note that setting repeater buffers too low will put a high realtime load on your machine and audio streams may breakup up or become unstable.

If you do not mind hearing the microphone in real time do the following:

listen Microphone to line 2. Listen line 1 to line 2 Listen line 2 to speakers. Reminder: you will hear the microphone and your sounds mixed to the output device.

Here is how the setup works: Anything you want to hear but you also want to show up in the final mix set that to output to line 1. This might include winamp, golf etc. The repeater allows line 1 to be sent to the speakers so you hear content from line 1.

Anything you do not need to hear but you want in the mix send it to Line 2.

You would send your microphone to line 2 if you do not wish to hear it it in real time.

You can leave the listens in place, unless they cause your system to lag. In this case disable the listens until streaming is required. When you need to use the setup start your audio repeater from line 1 to the speakers. Tell your chat application that the input is on Line2.

Note that VAC has both a Mic2 and Line2 device. Mic devices are mono, line devices are stereo. You can only have a cable working as either a line or microphone at any given time.

If your application does not allow you to set output device you can change the system default to line1. Careful here, because if you close the repeater by accident you will loose all system sounds and have to set your screen reader to another card to get it back. This can result in a loss of speech and can be tricky to recover from although if you know the hotkeys for your screen reader and how to switch sound devices you should be fine. Braille display can also help here. Avoid setting the system default to a cable unless you have no other option.

In recent builds of Windows 10 you can force certain apps to use a specific device by using the settings in the sounds dialog under system. This is often a better way to redirect a browser or similar application to use a cable.

Select line 1 if you just want game sounds, Select line 2 if you want microphone and game sounds. the recording application should pull from line 2 if you want both.

Technical corner: This section is here for those who want to build their own routing setups and wish to understand what is going on behind the scenes. It also contains some troubleshooting hints for tricky setups.

Virtual audio cable is exactly what it says it is. The software emulates a physical cable similar to those you would use when patching audio gear together. One end of the cable is record and the other end is playback. The software driver creates 2 audio end-points in Windows terminology a recording endpoint and a playback endpoint. You can record from the recording side, and play audio to the playback side. Audio that is sent to the playback side is transfered as efficiently as possible and can be received on the record side of the cable.

Virtual audio cable does not play audio itself, the driver only moves audio from one end of the cable to another and software must interact with these endpoints. If you play audio into one end of a cable or record audio from one end of a cable without the corresponding process on the other end you will receive silence.

Virtual Audio Cable supports multiple pins and all 3 windows audio methods, see the advanced section in the help file for details.

Listens? Audio repeaters, Windows audio session, KS: What gives? Virtual Audio Cable is just one component in the audio subsystem you may choose to build. You have to get audio in and out of the cables in whatever method you choose which will best serve your needs. for this reason experimentation is required. Programs that play audio can send audio into cables and programs that record audio from cables can receive the audio signals. Windows sound modes: cables support all the Windows audio modes including WSAPI wave out and direct sound. Note that unless you run WSAPI in shared or non-exclusive modes only one process can open an endpoint at a time. Also beware sample rates are not converted in WSAPI mode so watch this when configuring. Listens and repeaters: since at least windows 7 there has been an option to allow you to “listen to this device” and send the audio to a specific output device. You can use these listens to send audio from a physical device into your cable, or from a cable to another cable or physical device. Listens are configured on a recording device under the listen tab, and you tell windows where to send the output. Once you hit apply/ok in the audio control pannel audio data is transfered immediatedly from one device to another until you remove the listen. Listens are low latency with latency usually below 20ms. If listens are so good why don’t we use them for everything? There are 2 main reasons why listens are not used for all routing inside virtual cable setups. Firstly: you can only have one listen per recording endpoint. this means that only 1 listen can record from an audio device at any given time and that stream can be sent to another output device. If you set up a listen on your microphone you can only send the output to one other device. You are of course able to relay the signal from the second device wherever you want with whatever means you desire, see the 3 cables listen setup above. Once there is a listen on the microphone you can not set up another one.

the second reason listens are not used for everything is that it is required to open the sound control pannel every time you change the listen configuration. This is time consuming, and badly behaved audio drivers can reset devices when you close the audio control pannel possibly interrupting any streams or recordings you have running.

Easy repeater control: If you don’t mind a little command-line magic you might wish to look into the Audio director software by Doug Lee, https://www.dlee.org/audir/ It will allow you to set up repeaters and configure them, although loading and saving configuration may prove more flexible than Audir in some cases.

Audio repeaters what are they good for?

Included with the VAC software are 2 audio repeater programs, an audio Repeater MME and an Audio Repeater KS. I’ll explain how these work and what they are below. The help file that comes with VAC does contain all the details although it is sometimes rather technical in nature.

The audio repeater software which ever you choose to use basically acts as a relay between audio devices. the repeater takes chunks of audio and sends them to an output device if one is selected. Think of it as a set of people carrying buckets of audio from one place to another.

repeaters have a number of configurable parameters and the 2 types of repeater have slightly different options. Audio repeater MME: This uses high level windows sound calls to relay audio from one device to another. this means that format conversion, and other Windows audio processing may happen on the sound stream when it is relayed. Think of this repeater as opening cables using direct sound methods. If one device is at 44100 samples per second and another is at 48000 samples per second, MME will insure that windows does an in kernel sample rate conversion for you. Note that the algorythm to do this is optimized for speed so if you can avoid sample rate conversions you definitely should. There are a number of options in the Audio Repeater MME window you can configure: the first combo box sets the input audio device. It defaults to the Microsoft Sound Mapper or the default windows audio device for recording. The second combo box sets the output device which is where the audio is sent.

If you hit control c when you have an audio endpoint selected the name of the endpoint will be copied to the clipboard. This allows you to use them in batch files or command-line scripts provided you quote them to protect them from the shell more below.

The 3rd field is the sample rate in samples per second. The fourth field is the bits per sample. The 5th field is the total buffer in milliseconds. It defaults to 500MS which will delay sound through the repeater by at least half a second. The 6th field is how many parts the buffer is devided into. setting this >15 will generally not improve the repeater in any notable way. The more parts you split the buffer into potentially the more stable the stream will be. Experimentation will be required to find the best settings for these parameters. The 7th field is the priority of the repeater. Under windows 7 and later the repeater will try to make sure it sets the priority itself however you can override this. Setting real time priority can potentially freeze windows so be warned.

Folowing the priority is a start button. Hitting this button will start the repeater process and it will begin copying audio from input to output device. After the start button you can specify the number of channels for the repeater. the default is stereo, If your microphone is mono and shows up as such you can set mono here to put it in the center of the stereo field on stereo chat programs.

There are load and save buttons which allow you to save your repeater configuration to a text file so you can easily restore them without having to constantly set all options.

Interestingly enough the text files saved by the save button are an excellent start for writing batch files that start and manage repeaters. If you remove carridge returns from the file and tidy up the options possibly adding /min you can start an audio repeater setup from a batch script and have them all minimized. As mentioned above you can control C on an endpoint in a repeater and get the exact name for your batch file.

If you plan to automate a lot of repeaters you should look into audir see below.

After the help button which does what you expect it would there is a prefill percentage which tells the repeater how full the source buffer should be before copying begins. it defaults to 50%. Note that your stream will be delayed by the prefill percentage as you won’t get audio in the output stream until the prefill is complete. Finally there is a resync percentage which will stop sending audio to the output side of the repeater if the source buffer falls below a certain percentage. this defaults to 20% Note that when a resync happens there is a glitch in the audio stream so if your system can handle it best to minimize them when possible.

Be warned that once you start a repeater running the screen display may become quite verbose. this results in a lot of speech and for progress bars to be chimed in NVDA. Minimize your repeater to silence this verbage. You may also want Doug’s Jaws script or NVDA add-on to help with this problem.

KS repeater: This repeater uses low level windows calls to transfer audio between devices. As a result no sample rate conversion is performed and there are other limitations which I mention below. When using the KS repeater it opens the pin on the audio devices in exclusive mode to limit latency and increase efficiency. Virtual cables support multiple pins so it is possible to have multiple things opening these devices at the same time, however note that once the KS Repeater has a pin open nothing else can use it until the Repeater is closed. Other drivers may not support multiple pins so opening a device with the KS repeater may prevent it from being used by other software. this means that if you send sound to the same card as your speech and the driver has a pin limitation, you may loose speech once the KS Repeater becomes active. See the VAC help file for more information on the KS Repeater. It should also be noted that KS endpoint names differ from MME ones so use the names given in the KS repeater if using it and do not share repeater configuration files between repeater types.

Unless you know what you are doing you should probably stick with MME Repeaters or listens until you have done enough experimentation to understand how your system behaves.

I am using a professional sound interface and a cable and my microphone is on one side in Teamtalk help?

If you are using stereo on teamtalk and your input source is mono it will show up on one side of the stereo image. to fix this use an audio repeater in stead of a listen. In the audio repeater shift tab and set the repeater to be mono before selecting the input and output devices. this will put your source back in the center of the stereo field.

Any comments or additions: please email khoath@gmail.com or message khoath on twitter.