Virtual Audio Cable (VAC)
20+ years of experience. Connects audio apps together since 1998.
I want to use VAC with my applications XXX and YYY. How to configure it for my case?
There are no predefined recipes to use VAC together with given applications. VAC is a very common tool and its usage is simple if you understand its basic concepts. You definitely must understand the "interface", "endpoint", "client" and "format" terms, VAC principles and basic usage rules. This manual describes common rules, and you need to adapt these rules to your configuration. See also typical usage examples.
Please ask for a support only if you are sure your task is significantly different from most others and you have read the manual carefully but have not found an answer.
I bought VAC several months (years) ago. How can I upgrade to a newer version?
Upgrade policy and procedure are described here.
How to determine whether my system is fast enough and capable of real-time audio processing?
The best way to estimate internal kernel latency and real-time stablility, is to use LatencyMon utility.
Another useful tool is DPC Latency Checker that measures system timer event processing latency. For systems prior to Windows 8, it measures kernel latency quite well. Starting from Windows 8, it does not measure latency correctly so you may see 1500-2000 mcs bars even in low-latency system.
While running your audio processing configuration, use Windows Task Manager to see CPU usage. The "System" and "System interrupts" lines show system user-mode and kernel-mode load. Also use Windows Resource Monitor to see CPU/disk/network usage. Sysinternals Process Explorer may show CPU consumption for particular system/driver threads and DPCs.
To see details about CPU/motherboard, use HWiNFO, AIDA64, CPU-Z or similar tools.
You should test your system in both idle and fully loaded states. In case of using a virtualized environment, all tests should be performed in both host (base, running on the hardware) and guest (virtualized, running in a virtual machine) systems.
Working with VAC Control Panel, watch for system timer resolution (it may change dynamically), cable event periods and other runtime parameters. In KS version of Audio Repeater, watch for real-time statistics.
Some useful testing and configuration tips are described in the "Windows Tuning Tips for Audio Processing" article.
How to determine whether VAC driver and Audio Repeater are performing stably and uniformly?
In VAC Control Panel, open Cable Information/State Windows. For each cable, you see timer event periodicity details. The closer an average value to cable's interrupt/event period, the more uniformly VAC driver processes audio data. But the farther a maximum value from the specified period, the longer internal delays are produced by Windows kernel and drivers code.
In Audio Repeater KS application, watch for poll interval shown on the bottom, comparing average and maximum values with the requested one ("req"). Please note that Audio Repeater requests a period several times smaller than really required, to reserve some performance for the worst case. A period formally enough to maintain stable streaming is equal to buffering time divided by number of buffer parts.
How can I record my Skype conversations?
To record Skype conversations, you need to create relatively complex routing scheme. It requires clear understanding of Windows audio operation basics, VAC principles and learn other examples. In most cases, it is better to look for a special Skype recording application.
Here is an example of Skype recording.
How to route sounds over the network with VAC?
By itself, VAC cannot operate across separate systems. But it can be used together with network audio software like Skype, Audio over LAN, IP-Sound, RemAud etc.
Using such applications in two or more systems, you typically select a microphone audio endpoint as an audio input, and a speaker endpoint for output for each instance of network audio software. With such settings, when you speak into the microphone, the sound is received by the local instance of the network audio software, and sent to the remote instance over the network. The remote instance plays the sound to their speakers. When the remote party speaks into their microphone, the sound makes the same path in the opposite direction.
If you select VAC recording endpoint (for example, Line 1) as an input for the network audio software, the software will receive sounds from the appropriate Virtual Cable instead of the microphone. If you select the appropriate VAC playback endpoint as an output of other audio application, all sounds produced by this app will be sent to the remote party. But sounds coming from the remote party will still be played to your local speakers.
If you select a playback endpoint of another Virtual Cable (for example, Line 2) as an output for the network audio software, incoming sounds will be sent to VAC. Selecting the appropriate recording endpoint (in this example, Line 2) as an input of other audio application(s), you will route incoming sounds to this or these app(s).
Therefore, at least four combinations are possible on each side of the network:
You can even select endpoints of the same Virtual Cable for both input and output. In such case, remote sounds will be routed back to the input of the network audio software, and sent back to the remote party, creating an echo effect.
Please note that audio quality and stream stability depends on the network software. Also please note that any network audio software introduces a noticeable (tens or even hundreds of milliseconds) latency.
How to play sound on multiple audio adapters/speakers at the same time?
Just route your sound stream to Virtual Cable N and use several Audio Repeater instances to route from the same Virtual Cable N to each of your adapters. The stream will be copied to all output devices simultaneously. See this example for the details.
The same method can be used to play a stream simultaneously to different destination lines of a single adapter under Windows 6.x+ (for example, Speakers and S/PDIF) if simultaneous playback is supported by the adapter.
But please note you will not hear all these streams as a single, solid sound due to different digital audio paths inside the system. Due to the different latencies, there will be a phase shift, or even a noticeable delay between the streams. If the delay is short, it may be almost inaudible. Longer delays will create a "space effect:" like the reverberation. Even longer delays can make the sound unintelligible and unpleasant.
Additionally, sounds coming from different speakers will "slide apart" from each other due to the clock rate difference effect. Even if you turn on the cable clock adjustment feature in Audio Repeater, it can synchronize the cable only with a single hardware endpoint. It is impossible to compensate the clock rate difference between two or more audio endpoints that don't associated with VAC driver.
How to transfer a multichannel (5.1, 7.1 or similar) audio stream through a Virtual Cable?
Possibly you need to adjust the Speaker Configuration for this Virtual Cable first to match the channel distribution of your audio format.
In Windows 6.x+, you also need to choose appropriate default audio formats for both playback and recording cable devices.
How to quickly run Audio Repeater with certain settings?
Create a shortcut and/or a command/batch file or VBScript to invoke Audio Repeater with the specified settings (command-line options or a configuration file).
If you need to start Audio Repeater automatically after logging on, create an entry under the "Startup" tab of Task Manager in Windows 8 and later systems or place the shortcut to the "Programs - Startup" folder of the Start Menu in XP/Vista/Windows 7.
Please note that immediately after booting and logging in, the system still performs many service tasks in the background, which can consume significant performance resources. To minimize the chance of glitches, start the streaming with a slight delay (30-60 seconds).
How to remap audio channels (extract some channels from a stream or insert them to a stream)?
Use the channel scatter/gather feature. See also the example.
How to record from multiple Virtual Cables at the same time using multi-track recording software?
Recording from several cables is identical to a recording from several hardware devices/endpoints. You can even mix hardware device endpoints and Virtual Cable endpoints in your multitrack session. For example, you could use Adobe Audition (formerly Cool Edit Pro) to record Skype conversation placing your voice and your party's voice to separate tracks. Most multitrack recorders have a common, fixed format in each session; you can specify a proper format at new session creation.
How to find applications/services using VAC devices/endpoints?
In some cases, even all visible applications (including system tray ones) and system windows are closed, VAC Control Panel still shows that VAC devices/endpoints are in use. Analyzing VAC driver event log, you can find some of them, but not always all. You can perform the following steps to find processes that are using VAC driver interfaces:
Process list displayed by Process Explorer will always contain some "svchost.exe" entries. It is normal, any audio device is used by System Audio Services, they don't prevent the driver from being unloaded.
If the list contains "audiodg.exe", it means that VAC devices are used by System Audio Engine. Since the Engine works as a proxy for higher-level audio interfaces, it means that some applications are using VAC endpoints via such interfaces. Unfortunately, there is no easy way to find what applications are accessing high-level audio interfaces.
If the list contains other process names, it means that these processes are using VAC driver pins via Kernel Streaming interface.
How to disable test-signing mode?
You need to delete the "testsigning" value from the appropriate BCD configuration.
Most convenient way is to use a GUI BCD editor like VisualBCD.
To do it manually, open a console (command-line) window or TotalCommander, FAR Manager or similar tools) as administrator, and enter the following command:
bcdedit /deletevalue {current} testsigning
To enter the command correctly, don't type it manually, use Windows copy/paste feature.