Virtual Audio Cable - user manual

How to use this manual

In addition to reading topics, feel free to use powerful keyword search feature, the "Search" tab (available only in Windows, not on the website). Having a question or a problem, enter one or some related words, and corresponding pages will be displayed.

Of course, search feature will not help if you enter a mind-oriented question, like "how can I ...?". It simply finds manual pages containing given keywords. For example, "trial", "compatibility", "skype" and so on.

What is Virtual Audio Cable

The Virtual Audio Cable (VAC) software implements an idea of a physical interconnection cable applied to Windows audio applications. Like traditional audio devices (disk player, FM receiver, equalizer, amplifier etc.) are connected together by the electric (analog or digital) cables, Windows audio applications can be connected together by VAC.

VAC contains Windows WDM/KS virtual device driver that creates a set of virtual audio devices named Virtual Cables. Each Virtual Cable has a pair of audio endpoints, input and output. These endpoints are internally connected to each other, so all digital audio data sent (played) to the output endpoint by "source" application are implicitly transferred to the input endpoint and can be retrieved (recorded) by another (destination) application.

A Virtual Cable is similar to an ordinary audio adapter (a sound card) with its input and output externally connected between each other. Since a real adapter usually has a DAC (digital-to-analog converter) and ADC (analog-to-digital converter) in its signal path, an unneeded double digital-to-analog and analog-to-digital conversions are performed in case of such connection. Only rare and/or expensive adapters have a digital input and output that can be connected to transfer a signal clearly. VAC does such transfer itself, without any additional audio hardware.

Each pin of each Virtual Cable is multi-client, allowing multiple applications to open multiple streams on the same pin at the same time. In the WDM/KS terms, it means each cable pin can be instantiated several times. All sounds (audio streams) coming to the playback pin are mixed together, and each client connected to the recording pin will get an individual copy of a signal via its recording/capture stream. Mixing and distributing are performed on the cable basis only, different cables are completely independent from each other.

Being a KS filter, VAC driver component represents a lowest-level audio layer that can be effectively used by any upper-level layer (KS-aware applications, WASAPI, DirectSound and MME subsystems, ASIO wrappers and so on).

A small utility, Audio Repeater, is included into the package to perform various useful tasks.

What you can do with VAC

  • Connect two or more audio applications into a chain where each next application receives an audio signal produced by a previous application. For example, you can connect a player application to a sound processors and then connect a processor to an analyzer or a meter application to investigate the audio signal.
  • Intercept the digital audio signal from applications playing it to WASAPI, MME/Wave, DirectSound or KS Audio endpoints. For example, you can connect a browser to Audacity and record any portion of the sound played by a webpage, in real time, without quality loss. Or you can use it to route input and output signals to/from Skype from/to some recording/playback applications.
  • Record bitperfect digital audio data produced by applications that don't create WAV files, sending audio only to MME/Wave, WASAPI, DirectSound or WDM/KS Audio device in real time.
  • Digitally mix several audio sources together and route resulting audio stream to a recording application.
  • Digitally distribute (share) an audio stream among several recording applications.
  • Convert audio data from one format to another in real time.
  • Remap audio channels (scatter channels to a stream or gather channels from a stream).
  • Bring multi-client feature to any audio device that has not such feature.

VAC allows to interconnect almost all audio applications: audio/video players, software synthesizers, sound processors, audio editors, music sequencers, VoIP applications, instant messengers, speech recognition software etc. There are almost no limitations to use a Virtual Cable endpoints instead of other audio device ones.

What you cannot do with VAC

  • Secretly intercept an audio signal coming from/to any another audio device unless a Virtual Cable is explicitly inserted into the signal path.
  • Transfer an audio data/signal over a network (but it can be done by some audio networking software, while VAC can help to link such software to local audio applications).
  • Render a MIDI sequence to an audio signal.

However, VAC can help you with these tasks if you use some third-party applications/drivers. For example, you can use a software synthesizer (for example, built-in Windows GS Synthesizer) that renders a MIDI sequence to an audio stream, and then use a Virtual Cable to receive this stream and route it to a recording application. And you can use a network application to transfer an audio stream over a network using a Virtual Cable to supply this application with a recorded data and/or to route its playback data.

How to start

  • Read the first page, then read about VAC principles and features.
  • Be aware of the compatibility issues.
  • Install the software.
  • Read about simple usage ways.
  • Try some examples.
  • Read about advanced usage issues.

If you experience troubles, first try to find solutions in Troubleshooting, FAQ and How To sections.

If your problems are related to audio distortions, it is reasonable to check if your system is suitable for real-time audio streaming, with LatencyMon analyzer. If it displays a warning about significant internal delays, try to perform some tuning steps described here.

Please note that VAC is not a self-sufficient, easy-to-use application with an intuitive interface. VAC is a wide purpose and powerful tool that works efficiently only if used properly. In particular, it is not for beginners. However a beginner can successfully use VAC, especially having detailed instructions, there is a risk of unexpected behavior due to improper usage.

VAC is not a harmful tool; using it improperly, you cannot damage and/or lose someting, you simply will not get what you need. So please take care by reading instructions and following them.

If you want to use several cables at the same time, it is highly recommended to make a drawing graphically representing signal routing scheme you want to implement. The drawing should contain all signal sources and destinations, as well as transfer directions between them.

If this manual does not cover your issue, please contact the support.


Virtual Audio Cable - Principles

Principles

It is like an electric cable

A Virtual Cable behaves like a real electric cable. In a traditional modular audio system, you need to connect the output of each sound source (deck, pickup, receiver, guitar or synthesizer) to the input of each sound destination/target (amplifier, equalizer, gate, processor, speakers, headphone) by a separate electric cable (wire). If one component's input is connected to other component's output, the first can receive an audio signal from the second. Otherwise, it cannot.

Computer sound system works very similar. There are two kinds of objects that can be sound sources or destinations: applications that generate, play or record various sounds (Foobar2000, AIMP, WinAMP, Skype, Audacity, Audition etc.) and audio devices (sound adapters/cards). Applications do transfer sounds using device's endpoints; a simplest sound adapter has one recording (capture/input) and one playback (render/output) endpoint. From a recording endpoint, applications can record sounds, and they can play sounds to a playback endpoint.

Some audio devices have multiple recording/playback endpoints, or a single recording/playback endpoint only. For example, USB microphone adapter has a single recording endpoint and USB speakers adapter has a single playback endpoint.

In native Windows audio subsystem, there is no way to internally connect an application producing a sound to another application to record and/or process this sound. For example, you cannot directly transfer sounds from Skype to Audacity. You need a full-duplex sound adapter/card with its line output jack connected to its own input jack, and there will be two digital/analog transforms, affecting sound quality and volume level, and there will be high latency (recorded sound arrives about 100-300 ms later than original sound was played).

Cable and application interconnection

For the user, VAC looks like a set of real full-duplex sound adapters (cards) with their digital outputs hardwired to their digital inputs, making a loopback. Each input/output pair is called a Virtual Cable. Like a typical sound adapter, each Virtual Cable has two endpoints: playback and recording.

Source applications connect to playback endpoints and produce (play) their sounds. VAC driver immediately transmits sounds coming to each playback endpoint to the corresponding recording endpoint of the same Virtual Cable. Finally, destination applications receive sounds from the recording endpoints.

Recording and playback sides

Keep in mind that a Virtual Cable is unidirectional. Only the playback side can accept audio signal/data from applications, and only the recording side can produce it to be received by applications. From the application's point of view, the playback side is a "data sink" and the recording side is a "data source".

At a beginning level, you can imagine a Virtual Cable as a kind of a pipe. When you direct a sound into your pipe end, other party can hear it from another end. But due to Windows audio principles, the pipe is unidirectional. That is, you can send a sound only to the playback end, and receive it only from the recording end.

Transfer sounds between audio devices/endpoints

As the VAC driver transmits sounds between applications, so the Audio Repeater application transmits sounds between audio devices/endpoints:

Full independency

You can use VAC even without a real sound adapter (card) in your system. But there will be no audible sounds, only digital audio streams and/or files inside your computer.

Remember that VAC does not produce any sounds (except of trial voice reminder), it only transmits sounds produced by applications. With VAC only, as with simple electric cable alone, you will hear nothing. You need a complete audio signal path, i.e. source and target applications to transfer sounds, and a real sound adapter (card), either internal or external, to hear these sounds, or to record them from the real world. You must also make proper connections between your sound system components, otherwise your goals will not be achieved. Such connections are made by selecting the appropriate audio endpoints in audio applications' settings, and/or by changing default audio endpoint assignment.

Possible usage methods

Using VAC driver and Audio Repeater application, you can route an audio stream coming from any audio endpoint to many applications at the same time, sharing a real audio source. You can also mix audio streams from several applications together, routing the result to any audio endpoint.


Virtual Audio Cable - Features

Features

  • Windows 10.x, 6.x and 5.x platforms (32-bit and 64-bit). May work in Win2000 but not tested.
  • Up to 256 virtual cable devices (some systems limit number of MME devices).
  • 1..20 milliseconds per processing event (nterrupt).
  • 1..100 pin instances.
  • Almost any of fixed point PCM audio formats (1000..384000 samples per second, 8..32 bits per sample, 1..32 channels). Floating point formats are not supported. If you want to use more than 8 channels, please read about compatibility issues.
  • Almost no sound latency with maximal interrupt frequency.
  • RT Audio support with notification events, packet mode, clock and position registers. Clock registers are bound to Virtual Cables so all streams in each cable are coherent.
  • Unlimited number of Kernel Streaming clients connected to each pin.
  • Signal mixing (with saturation) between output pin clients.
  • PCM format conversion (sampling rate, bits per sample, number of channels).
  • Volume control features (both attenuation and boost).
  • Channel scattering/gathering mode (channel remapping).
  • Control Panel application to configure cables and watch their state.
  • Audio Repeater application that transfers from any recording to any playback device.

Compatibility issues

There are some compatibility issues preventing VAC from working correctly in particular cases and/or configurations.

New Windows versions

This product is designed to support as many Windows versions as possible. If a new Windows version is released after releasing last version of the product, the product most likely supports it. Just download free trial version and try.

Free version limitations

Free version may be suitable for simplest audio routing schemes.

  • Supports only a single cable.
  • Maximum sampling rate is 48000.
  • Maximum bits per sample is 16.
  • Maximum number of channels is 2.
  • Minimum milliseconds per event is 3.
  • No multi-client support (only a single pin instance and a single stream at each cable side).
  • No worker thread control support (only a single worker thread with default priority).
  • No stream format limiting control support (only Cable Range mode).
  • No channel mixing mode control (channel remap/scatter/gather operations are not supported).
  • No source line control support (no Mic and S/PDIF lines, only Line In).
  • No position and clock register support.

Trial version limitations

Trial version supports all the features available in full version, except the following:

  • A female voice repeatedly reminds that it is a trial.

Trial version of VAC allow you to see all features of the full version. To prevent professional usage, it adds a voice reminder (-6 dB level) to an audio signal. Voice reminder is not applied 30 minutes since driver startup (Windows boot or VAC driver restart without rebooting the system), then it is applied at a regular basis, every several seconds. If you need additional several 30 reminder-free minutes to perform some testing, restart the driver and run your tests immediately. Before driver restart, you need to close all applications that may work with audio endpoints (including web browsers), and launch them again after restarting the driver.

Please note that voice reminder is just added to Virtual Cable audio signals, not replaces them. If you are recording from a Virtual Cable and hear nothing except voice reminder, it definitely means there is no useful signal in the cable because it is not supplied with a signal, and you should check audio application's settings. Vice versa, if you have installed trial version, recorded from a Virtual Cable when voice reminder is audible, but there is no reminder in the recording results, it definitely means that you have recorded from a wrong endpoint, not from a Virtual Cable.


Virtual Audio Cable - Compatibility issues

Compatibility issues

Remote access

Windows has only a limited audio device support in native Remote Desktop Session (RDS) connection, so Virtual Cable devices may not be accessible via RDS/RDP connections.

If target (remote) system is a workstation (Windows 2000 Pro, XP, Vista, Win 7-10), Remote Desktop Session is established as a direct/console session too. A local user, if any, is forcibly logged out and you are logged in instead, having his/her local desktop. To access Virtual Cable devices via MME/DirectSound interfaces and control VAC driver from the Remote Desktop connection, you should specify "Play on remote computer" or "Leave at remote computer" for the "Remote audio" or "Remote computer sound" on the "Local resources" tab in the Remote Desktop connection dialog.

When you request a connection, a simplified form of this dialog is present, containing only computer and user names. To view the "Local resources" tab, expand the dialog by clicking the "Show options" or "Options" item.

If target system is a server (Windows 2000/2003/2008 Server etc.), it creates a separate logon session by default. A local user is not disturbed by a remote connection. Only a default local audio device is redirected to the new session. There is no way to use and control other local audio devices in such connection. To access them, you should connect to a "console" session like workstation systems do. It is possible using mstsc command with the "/console" option. In XP SP3, and Windows 6.x, the /console option is replaced with /admin.

If the host runs 2003 Server system and there is no "RDP Audio" playback device in a remote session, please check Terminal Services configuration at the server (Start - Services - Control Panel - Administrative Tools - Terminal Services Configuration). At left pane, click Connections, right-click RDP-TCP at right pane and click Properties. Open Client Settings tab and make sure that Audio mapping in Disable the following group is not checked.

In Server 2008 and later server versions of Windows, there is no way to connect to a console session via RDS/RDP. To see local audio devices, you should use desktop sharing software.

See Windows Help for details.

The restrictions above are related only to most popular MME/DirectSound/WASAPI interfaces. Using Kernel Streaming interface, you can access remote WDM audio devices from any session type.

Please note that in most cases there will be no audio signals passed over the network between local and remote computers. Even when you use a KS application that sees Virtual Cable devices, all audio operations are performed on a remote computer, no audio data are transmitted to or from a local computer. It is similar to a situation if you are using VAC on a computer without a hardware audio adapter.

Even if all local audio endpoints (including Virtual Cable ones) are accessible in a Remote Session, Windows behavior can prevent you from keeping audio running after the session is disconnected.

Virtualized environment

As a kernel-mode driver, VAC may not work in some virtualized environments.

Partial virtualization is enough to run most user-mode software (Web and other network servers, remote desktops, distributed calculations) in a virtualized environment. For user-mode applications, virtualization software maintains several separate environments. But there is only a single system's kernel so in most cases you cannot install a kernel-mode driver like VAC on such environment. The system may warn you, in some cases the installation may be successful, however the driver is not actually loaded.

If the environment is virtualized partially (at user-mode level), you cannot install VAC under it. But if you have full access to the host machine, you can install VAC for the entire host, and then all virtualized environments will be able to use VAC.

In a fully virtualized environment, you have a completely separate OS, with its own kernel, so you can separately install and use VAC on each virtual machine of this type.

Please note that any virtualized environment always has higher internal delays (latency) and introduces higher overhead than the same environment working on real hardware. To ensure that the performance of the environment is sufficient for stable streaming, run latency tests in both host and guest systems.

Maximum number of channels supported by the driver

VAC driver supports up to 32 audio channels. Maximum number of supported channels can be changed in driver parameter section of VAC Control Panel.

Windows (tested up to Windows 10 builds released in 2018) correctly supports up to 8 channels only. Increasing the number above 8 may cause system problems. For example, Audio Properties Applet hangs and then crashes if "Levels" tab is opened for a playback endpoint that supports more than 8 channels.

Therefore, default number is set to 8. If you have audio software that supports more than 8 channels, you can try to increase the number as desired, but please be careful.


Virtual Audio Cable - System requirements

System requirements

VAC system requirements are very simple:

  • Any hardware configuration (CPU, memory size etc.) enough for Windows OS.
  • Microsoft Windows 5.x or later 32-bit or 64-bit operating system.
  • For a virtualized environment, please see compatibility issues.
  • For a remote connection, please see compatibility issues.

But these requirements are enough only to run VAC and get it working in basic audio setups, like recording audio streams coming from web pages. To have stable and low-latency audio streaming, your system must meet real-time performance requirements.

If you experience signal distortions while operating with real-time audio streams, it is strongly recommended to check your system for real-time audio streaming suitability, and perform a tuning if necessary.


Virtual Audio Cable - Installation

Installation

Please make sure that you are going to install the proper version/build. All package file are versioned, named "vac460", "vac415full", and so on. Trial version packages have no suffix, free version packages have the "free" suffix, full version packages have the "full" one.

If you downloaded a self-installing EXE file, just skip the next chapter.

Unpacking installation files

If you downloaded a ZIP archive, you need to unpack it. You can do it using Windows internal ZIP pseudo-folder support, simply "entering into" the package, selecting all files and folders, and then copying them to an empty folder. But don't try to run the installer right inside a ZIP pseudo-folder, it will not work.

Alternatively, you can unpack the package using 7-Zip, IZArc or similar unpackers.

Please take care to preserve subfolder structure of the package. It is not recommended to unpack the package to an encrypted and/or network folder and/or disk, use a plain disk/folder is possible.

Creating an empty folder to unpack the installation package, use a simply named folder that does not contain unusual characters in the path.

Running the installer

  • If you have other VAC 4 version installed, It is recommended to uninstall it before running the installer. Previous major versions of the VAC (1.xx, 2.xx, 3.xx) will not interfere with VAC 4 and you don't need to uninstall them if you want to use several different versions. VAC 4 installer tries to check for an existing VAC 4 installation, and prompts to run the uninstaller, but partially broken installations may prevent the installer from performing these actions properly.
  • Consult the system default device issues section.
  • If UAC is not enabled in your Windows 6.x system, explicitly log to the Administrator account.
  • Run the self-installing EXE or the setup.exe file from the unpacked folder, and follow the instructions displayed.

If you have some previous major (2.xx or 3.xx) version of VAC installed, make sure you have chosen different installation folder and Start Menu folder. Different major versions of VAC can coexist on the same system but they need to be installed to different places.

If you are installing under Windows 5.x system and there is at least one WDM audio device in your system, VAC installer uses a lightweight installation mode that is silent and you will see no system warning messages. But if your system has no WDM audio devices or you are running Windows 6.x, installer performs a compatible-mode installation. In such case, the system may warn you that the driver has no WHQL signature. The system may also warn that product publisher is Muzychenko Evgenii Viktorovich and ask whether you trust it. Let the system install the driver.

Under 64-bit Windows 6.x, kernel-mode drivers require a publisher's digital signature to be loaded. VAC driver is signed by a certificate issued to Muzychenko Evgenii Viktorovich.

After successful installation, you will receive a confirmation dialog. If there were no errors, Windows restart is not required. VAC becomes functional immediately after the installation completes. If Windows cannot safely replace system files during installation, a reboot is required to make VAC active.

Performing the installation, Setup application creates a log file in Administrator's temporary folder. This file reflects all operations performed by the installer. If the installation succeeds, log file is moved to the installation directory and renamed to "install.log". Saved log file may be needed if some problems will appear further. If the installation fails, the installer prompts you to keep the log file in a temporary folder. If you experience a problem with installation, please keep the file and attach it to your support request.

Checking the result

As a result of the successful installation, a new system-wide device named Virtual Audio Cable appears in the Sound/Multimedia device group of the Device Manager.

In Windows 5.x, the driver exposes a set of audio (waveform) endpoints named Virtual Cable N (N is cable number). Unlike previous versions of the VAC, In and Out endpoints have the same names, as usual in modern Windows versions. It is easy to distinct them because all applications place input and output device names to different lists.

In Windows 6.x, due to endpoint mechanism, Virtual Cable devices are named differently: "XXX N (Virtual Audio Cable)" where "XXX" stands for a source line name and "N" stands for a cable number. The endpoint idea is useful for real audio devices having multiple input lines but is meaningless for a Virtual Cable device that has only a single audio path. But some applications like MSN Messenger try to locate a particular source line (for example, microphone or line input) input so VAC supports them, exposing fake "inputs lines". By default, only a single source line is exposed, named "Line" (an "analog line input"). At a cable playback end, VAC also exposes the "Line" endpoint (an "analog line output"). So, by default, there will be a single input and a single output waveform audio pin for each Virtual Cable.

Totally, VAC can expose up to three source lines from each cable: Microphone input ("Mic"), line input ("Line") and S/PDIF input ("S/PDIF"). See the Configuration chapter for details.

If you don't see Virtual Cable devices in audio device/endpoint lists, this may be related to a known issue (for example, an inappropriate remote connection or virtualized environment).

The setup process also creates the "Virtual Audio Cable" (unless you modified this name) folder in the Start Menu. It contain shortcuts to Audio Repeater, VAC Control Panel and other useful links. If the All Users menu (Start Menu folders for all users at this computer) is available, VAC folder is created here. Otherwise, the folder is created for the currently logged user.

Now you can begin using VAC.

Checking default endpoint assignment

Immediately after successful installation, check default device/endpoint settings because Windows may automatically change them upon new audio device installation. If Windows automatically sets Virtual Cable endpoint(s) as default playback one(s), all system sounds, sounds from the browsers and some other sounds will be routed to VAC, and you won't hear them until restore your preferred settings manually.

Advanced setup mode

Setup utility works for an ordinary user by default. In this mode, any abnormal situation will abort the installation process. If you are an experienced user and can understand some abnormal situations (for example, when file being created is aready present), you can select the "I am an advanced user" checkbox. In such case, you will be prompted if some files, devices and/or services already exists and may be overwritten. Use this feature with extreme care. In general, there are no need to overwrite anything during normal installation process. You need an advanced mode only if you have incorrectly uninstalled VAC or tried to install it over the already installed one.

When the general installation mode fails, you can try the advanced mode.

First, locate a file system folder and Start Menu folder where VAC files and shortcuts are installed, and delete them. Start the setup utility and check the "I am an advanced user" item. When prompted to overwrite existing files and replace service and/or device descriptors, answer Yes/Ok.

At first phase, the installer may be unable to replace all objects needed, and installation process may abort again. In such case, reboot the system and run the installation in advanced mode again. If prompted for overwriting some files, answer Yes. At this second phase, installation must succeed. If it aborts again, request a support.


Virtual Audio Cable - Simple cable usage

Simple cable usage

To use a cable simplest possible way, first run VAC Control Panel application and make sure that there are 1-3 cables and they are configured with typical parameters:

  • Maximum instances - 20
  • Milliseconds per interrupt - 5..7
  • Sampling rate range - 22050..48000
  • Bits per sample range - 8..16
  • Number of channels range - 1..2
  • Stream format limiting - Cable range
  • Volume control - disabled
  • Channel mixing - enabled
  • PortCls usage - disabled
  • Speaker type pin - disabled
  • Capture/render port types - Auto

Don't close VAC Control Panel, it will help you later.

Run any audio producing application (a player, a tone generator, an audio editor) that allows you to specify a playback/render device directly and choose Virtual Cable 1 endpoint (usually named "Line 1 (Virtual Audio Cable)"). Instead of starting an audio application, you can use embedded "Test" feature in Audio Properties applet.

Start the playback and make sure that the application really plays to Virtual Cable 1. VAC Control Panel must show 1 or 2 new playback streams for the first cable, and cable signal level indicator should be shown.

At this moment, you should hear nothing, it is normal. It is like plugging an electric cable to the speakers/headphone output of a computer or a phone, leaving other cable end unconnected. If you hear the sound played, it means the application directs it to your hardware audio device connected to speakers/headphones, not to the Virtual Cable.

If a sound is really played to the Virtual Cable 1, run Audio Repeater application. Choose Virtual Cable 1 endpoint (usually named "Line 1 (Virtual Audio Cable)") as a recording source (Wave In). Then choose a playback endpoint of your hardware audio device (connected to speakers or headphones) as a destination (Wave Out).

Activate audio transfer clicking Start button in Audio Repeater. Now you must hear the sound played by the application started first (or the Windows test sound) and VAC Control Panel application must show a new recording/capture stream. It means that audio data are transferred from the playing application to Virtual Cable 1, and then Audio Repeater transfers them further to the hardware audio device. So you have created a full audio path containing Virtual Cable 1.

You may hear a slight quality loss in comparison with a direct playback to the audio card. It may occur due to a format conversion. To improve sound quality, you need to play with client and cable audio formats. See advances usage topics section for details.

To record a signal transferred via the Virtual Cable, run any recorder application. Choose Virtual Cable 1 recording endpoint and start recording. VAC Control Panel may show a new recording/capture stream indicating that a recorder application has connected to Virtual Cable 1. If recording is performed via System Audio Engine, no additional recording streams will be shown.

To hear the signal during recording, you need to keep Audio Repeater active. Otherwise, the signal is transferred from the playing application to the recording application only. Starting audio transfer in the Audio Repeater, you create another connection to the recording side of Virtual Cable 1, splitting signal's strem into two identical streams.

You can connect any number of playing/recording applications to each end of every Virtual Cable.

Remember that VAC itself only transfers audio data internally from its playback side to its recording side within each Virtual Cable. VAC does not route sounds to/from your hardware audio devices and doesn't intercept signals that are not explicitly routed to Virtual Cables. In other words, VAC has no relation to other audio devices, except explicitly established connections.

To configure driver and cable parameters, use the VAC Control Panel application.

If you have troubles using VAC, try to look at examples/troubleshooting sections and FAQ/How to... lists.

More complicated tasks

Virtual Cables can be used much more complicated ways. See the advances usage topics section.


Virtual Audio Cable - Advanced cable usage

Advanced cable usage

This section describes advanced usage methods. You need to understand VAC principles and simple usage rules before attempting to use advanced features.

Choosing most appropriate PortCls interfaces and KS protocols

Prior to 4.50, VAC supported only WavePci PortCls port/miniport interface. This interface allows to achieve good performance and low latency but PortCls is intended for mainstream hardware drivers and has some problems with non-typical behavior implementation.

Since 4.50, VAC implements all three PortCls port/miniport interfaces: WaveCyclic, WavePci and WaveRT. In general, WaveCyclic is most simple and reliable, WaveRT is newest and most efficient, and WavePci has less latency than WaveCyclic.

These internal interface types affect not only internal communications between VAC and PortCls modules and their efficiency. WaveCyclic and WavePci both implement "old", "standard" or "legacy" KS streaming protocol between KS filter and KS client, while WaveRT implements "RT Audio", "looped" or "realtime" streaming protocol.

Port/miniport types can be chosen in VAC Control Panel, for each cable side independently. Driver restart is required for port type changes to take effect. So carefully watch for two-letter abbreviations, "WC", "WP" and "WR" at the right that indicate actually used port/miniport types.

In Vista and later, WaveRT port/miniport are fully supported by PortCls and RT Audio protocol is fully supported by System Audio Engine. However, RT Audio may not be supported by some audio applications offering "KS interface support". If an application cannot access Virtual Cable pins set to WaveRT mode, try to switch appropriate cable side to WavePci or WaveCyclic.

Vice versa, some new audio applications may support only RT Audio protocol so you might need to use WaveRT interface for the appropriate cable side.

Applications that work via WASAPI, MME, DS and other high-level interfaces

In general, use the following rules to choose PortCls interfaces:

  • In Vista and later OSes, prefer WaveRT for best performance.
  • If some applications cannot access Virtual Cable endpoints, use WavePci as a balanced solution (for these endpoints only).
  • In case of stream stability problems, try WaveCyclic as a simplest and most compatible interface.

Capture (recording) and render (playback) cable sides function independently. So you should choose PortCls interfaces and KS protocols for each side separately.

Choosing most appropriate client interface

As a KS filter, VAC driver presents a pair of render and capture pins for each cable. Using these pins, Windows audio subsystem builds higher-level audio layers (see Audio layering issues). So, each Virtual Cable presents at least three audio interfaces: WDM/KS, DirectSound and MME (Wave), with a pair of recording/playback endpoints in each layer. In Windows 6.x, there will be a fourth interface, WASAPI.

The following list shows audio interfaces in the order of increasing efficiency:

  • WDM/KS
  • WASAPI in the exclusive mode or DirectSound with hardware acceleration (in Windows 5.x only)
  • WASAPI in the shared mode, MME or DirectSound (in all versions of Windows).

To get higher performance and less latency, use a lowest-level possible interface type. To get higher compatibility and less problems, use a highest-level possible interface type.

Using WDM/KS or WASAPI in the exclusive mode, keep in mind that they does not support pin instance sharing. More than one connection to a specific pin is available only if a driver supports multiple pin instances. VAC supports them but not all other audio drivers do.

Using WDM/KS interface, please note that it contains a huge set of features (properties) but some audio drivers, especially third-party ones, are tested only with a limited set of them. Some properties are not documented well so driver developers may not be able to meet all the requirements. Incorrect driver behavior may cause application malfunction or even system crash. Trying a new application, new audio device or new driver version, first test them a little in a minimal environment, prior to performing an important work.

Adjusting DirectSound hardware acceleration level

Since Windows 6.x, DirectSound hardware acceleration is not supported.

In Windows 5.x, VAC can be used via the DirectSound interface much more effectively if its hardware acceleration feature is utilized. To enable Windows to utilize it, you must adjust the hardware acceleration level for the VAC device.

Stream and cable format limiting

Due to audio layering specifics, audio applications have no full control over audio formats actually used by devices for playback or recording, except of exclusive mode access. In Windows 5.x, recording operation always requests a specified format from the driver, but playback operations in Windows 5.x try to request a most wide format supported by the device for System Audio Engine.

For example, if a DirectSound application requests playback at 48000/24/2, DirectSound subsystem first requests 44100/16/2 from System Audio Engine. If a Virtual Cable is free and this format is within the cable format range, 44100/16/2 will be chosen for the cable format. A second render stream will be created with 48000/24/2 but the cable format cannot be changed when a cable is used. Therefore, VAC will perform a format conversion from 48000/24/2 to 44100/16/2 and signal quality will degrade. To minimize format conversion, you could limit a cable format, or a stream format, or both of them.

Cable format limiting is useful to specify most convenient format range for both cable sides. For example, if you want to use 48000/16/2 at one side and 44100/24/2 at another side, you could set cable format range to 44100-48000/16-24/2-2. It prevents the cable format from locking at low sampling rate and/or bitness due to implicit pin instance allocation for System Audio Engine.

By default, cable format range is restricted to very common range for better compatibility. If you want to use wider range, you can extend the format range using the VAC Control Panel.

DirectSound and MME subsystems often can try some consecutive formats if the driver does not allow them to use their preferred format parameters. A driver cannot suggest to higher-level layers to use a particular parameters but it can reject some formats and allow some others. So you could use various stream format limiting modes:

  • None - there is no stream format limiting over the common driver features. So a new stream can be created using any format supported by the driver. A format conversion will be performed in most cases.

  • Cable range (default) - a new stream can be created only if its format is inside the cable format range. A format conversion is performed in some cases.

  • Cable format - a new stream can be created only if its format exactly matches the current cable format. If a cable is free, the "cable range" mode is used for a first stream (see format selection rules for details). Therefore, no format conversions are performed because all cable streams have the same format. This mode is similar to previous (2.x, 3.x, 4.00 betas) versions behavior.

As an extreme case, you can set the same lower and upper ranges for each cable format parameter and specify stream format limiting mode to the "cable format". Therefore, only a particular format (for example, 96000/24/2) will be allowed for client streams. If both side clients are able to choose such format, no conversion will be performed. All audio data will be transferred through the cable unchanged, with no quality loss.

But don't forget that layered scheme prevents applications from having full control over their audio activity. Some implicit format conversion may occur in System Audio Engine and there is no way to easily check it.

Format conversion issues

VAC supports format conversion. But due to mixing purposes, VAC cannot directly convert from a playback client's format to a recording client's format. Instead, VAC first converts data from various playback client formats to the cable format, then mixes client data using the cable format. Finally, VAC converts mixed data from the cable format to various recording client formats.

The cable format parameters are selected when a first playback or recording client connects to a given Virtual Cable. Sampling rate, bits per sample and number of channels are chosen from the cable format range to as close as possible to client's format parameters.

For example, if a client requests 44100/16/2 and the cable format range is 22050-48000/8-32/1-8, cable format is set to 44100/16/2 (equal to client's format). If cable format range limits sampling rate to 22050-32000, cable sampling rate will be set to 32000 (the highest possible value). If it is limited to 48000-96000, resulting value will be 48000 (the lowest possible value).

If you don't know which format is used by a particular application for playback or recording , run VAC Control Panel. It shows current cable formats for each cable.

For multichannel (4.1, 5.1, 7.1 etc.) formats, don't forget to adjust default endpoint formats for shared-mode access (Windows 6.x) or speaker configuration (Windows 5.x).

If cable channel mixing is enabled and cable/client formats have different number of channels, only typical channel conversion schemes for 1, 2, 4, 6 and 8 channels are implemented. In other combinations, all source channels are mixed together and then distributed to all destination channels.

To remap channels, extract particular channels from a stream or add them, use channel scatter/gather feature.

Try to minimize format conversion chances. A conversion is performed by the main CPU and takes significant CPU resources, so it may noticeably slow your applications. When used by many clients at a same time, it may even hang your system because the conversion is performed by kernel-mode threads that usually have higher priority than most system and user application's threads.

Volume control issues

VAC supports volume control (attenuation or boosting). For each playback or recording stream, volume and pan can be controlled via appropriate interface methods. For the entire cable, a main volume, pan and mute can be controlled, either via an audio mixer interface or the Windows Audio Mixer Control application.

To use cable volume control features, you must enable Volume Control in the cable configuration parameters.

Volume control limits are -40..+12 dB.

To control cable volume parameters, use Windows Volume/Mixer Control tool:

  • In Windows 6.x and later, right-click speaker icon in the system tray, select Open Volume Mixer then click the arrow under device name/icon and select a desired device. Clicking on device icon opens device properties applet; advanced controls can be found on the Levels tab. Another way is to customize a fast volume control window by selecting Volume Control Options from the speaker icon context menu and then use a single click to open the fast control window.
  • For Windows 5.x: click Start - Programs - Accessories - Entertainment - Volume control. Another way is right-clicking the speaker icon and choosing Open Volume Control. In Windows Audio Mixer Control window, open Options menu and select Properties. In Mixer Device item, select a proper Virtual Cable device and click OK. The Mixer will switch to show Virtual Cable N volume controls. The first group, "Volume Control" represents the main cable controls. "Wave" group adjusts waveform stream volume and "SW Synth" group adjusts a system-created software MIDI synthesizer channel volume. Other controls are shown for compatibility purposes and don't affect cable operations.

VAC supports both recording (source) and playback (destination) volume controls. But among recording volume controls, only selected source line's controls affect cable volume.

Like format conversion, volume control takes some CPU resources and affects sound quality. Use it only when really needed.

Clock correction feature

When a Virtual Cable is used in a path containing another audio device (a hardware device, a software device other than Virtual Cable and even another Virtual Cable device), clock difference effect occurs. To minimize it, adjust cable clock correction multiplier until cable internal clock speed becomes closest to another device clock.

Mixing, format conversion and sound quality

Mixing of output streams is implemented with a saturation (clipping). If the amplitude value exceeds a maximal range defined by the sample bitness, it is clipped to the maximal value.

VAC uses relatively simple linear resampling algorithm and does not use dithering or other advanced smoothing features. Therefore, conversion results may sound worse than an original signal. To prevent quality degradation, you need to pay attention to a format matching. Ideally, all three formats (playback client's format, cable format and recording client's format) should be the same.

If all formats are equal and cable volume control is disabled, VAC performs no conversion, all samples are copied directly, and only mixing is performed if there are more than one playback clients. In such case, no quality degradation occurs (a bitperfect transfer is performed). If you play a WAV file to the playback side and simultaneously record data from the recording side, recorded data will be equal to played data, except of possible leading and/or trailing silence.

But such perfect results can be achieved only if all used formats are the same, volume control is disabled and audio data path is clearly understandable. In Windows 6.x, it is hard to clearly understand audio data path unless WDM/KS interface is used.

Start recording first

Due to layering issues, Windows 5.x audio subsystem in shared mode propagates only recording audio format on a first device connection, when a common pin instance is created for System Audio Engine. If a first connection issued to a Virtual Cable device is a playback request, shared format selection will be more complex and less predictable. So in Windows 5.x, it is better to start a recording operation with Virtual Cable before you start a playback operation on the same cable. It will fix the cable format and further playback operations will not change it.

An "operation" stands for an actual recording/playback process, not running an application. Some applications have a special button and/or menu command to start an operation. But some other applications can start an operation when they want. For example, Skype starts them when a peer connection is established.

In Windows 6.x, you can explicitly choose a default format for shared mode operations.

To watch the cable format evolutions, use the VAC Control Panel.

Don't start KS clients first

System Audio Engine, due to its bug, cannot create KS stream if there are active instances of the pin being instantiated. So if you start a KS recording or playback client before starting higher-level clients (MME, WASAPI etc.), System Audio Engine will not create its own pin instance, failing a playback/recording request to the appropriate higher-level client.

So if you mix KS and higher-level interface clients with the same Virtual Cable, start at least one of playback and/or recording higher-level interface client first, allowing System Audio Engine to allocate first pin instance of the appropriate (playback and/or recording) cable side. Then you can start as many KS clients as set in maximum number of pin instances.

Speaker/channel configuration for multichannel formats

To properly transfer multichannel audio data, you must configure the Speaker Configuration for a particular Virtual Cable. Virtual Cable's Speaker Configuration must match the channel distribution of the audio format. To adjust Speaker Configuration, do the following:

  • Open Audio Properties applet.
  • On the Playback tab, select the appropriate Virtual Cable endpoint.
  • If the Configure button is enabled, click it and select the appropriate configuration.
  • Additionally, open endpoint properties dialog and select a default format on the Advanced tab.

Starting from Windows 6.x, the Configure button is not available for cables with disabled speaker-type pins (default setting). You can enable speaker pin type for some cables but all these cables will have the same "Speakers" playback endpoint name so it would be hard to distinguish between them.

Remapping (scattering/gathering) channels in multichannel streams

Mixing cable client streams to cable sound and distributing cable sound among client streams, VAC processes audio channels by three possible ways:

  • Convert a source channel set to a destination channel set using common summation/distribution schemes. For example, to convert two stereo channels to a single mono channel, left and right channels are summed together. This mode is used if the Channel Mixing is enabled for the cable.
  • Scatter a set of less number of channels to a set of more channels. Channels packed adjacently in the source stream frame are distributed (scattered) as suggested by source channel distribution mask.
  • Gather a set of less number of channels from a set of more channels. Channels placed in source stream frame as specified by destination channel distribution mask are compacted (gathered) to be adjacently packed in the destination stream frame.

Scatter/gather modes are used if the Channel Mixing is disabled for the cable. Internal cable mixing buffer in the cable format always has all channels placed sequentially. So scattering can be performed either from a playback stream having less channels than in cable format, or to a recording stream having more channels than in cable format. Vice versa, gathering can be performed either from a playback stream having more channels than in cable format, or to a recording stream having less channels than in cable format.

For example, the stream has stereo format (two channels) and mask 0x410 (BL+SR) while cable format has 7.1 format (eight channels). If the stream is a playback one, two stream channels will be scattered to eight cable channels: left stream channel will be mixed to BL cable channel, and right stream channel will be mixed to SR cable channel. If the stream is a recording one, two stream channels will be gathered from eight cable channels: left stream channel will be taken from BL cable channel, and right stream channel will be taken from SR cable channel.

In other words, there can be two data transfer paths: from audio application (source) to Virtual Cable (destination), or from Virtual Cable (source) to audio application (destination). If source stream has less channels than destination stream, scattering occurs. If source stream has more channels than destination stream, gathering occurs.

Please note that channel reordering is not supported. Scattered/gathered channels are always packed in the same order as source channels.

Scattering/gathering is performed only if cable and stream channel masks are overlapped (bitwise AND is non-zero). Otherwise, direct transfer is performed (first source channel copied to first destination channel and so on).

Most applications don't allow to explicitly specify channel distribution masks; instead, they assign a standard mask based on the number of channels. To use scatter/gather feature, you need to use KS version of Audio Repeater or develop your own application accessing Virtual Cable pins via WDM/KS interface.

You can watch how channels are repositioned using cable and stream signal level indicators.

See the example demonstrating scatter/gather feature usage.

Using PortCls data processing engine

For performance and stability reasons, VAC uses its own stream data processing engine in WavePci mode, partially bypassing the code provided by the standard Windows PortCls driver. But VAC internal data processing engine does not cover all possible KS features so there may be some problems with it. In case of such problems, you can disable internal VAC engine and use PortCls' one. In such case, you may need to restrict system threads affinity to partially avoid known PortCls problems.

WaveRT and WaveCyclic port/miniports do not require such workaround.

Creating many Virtual Cables

Before increasing number of cables over 5-10, please read about system limitation and overhead issues.

Using format attribute policies

To get rid of format support problems caused by Windows bugs, you can use format attribute policies. By default, VAC driver supports format attributes and signal processing modes only for Windows 8.1 and later systems, and only for WaveRT port/miniport types. In some strange cases, explicit policy can be defined.

Format attribute policies can be configured globally or per-cable. Per-cable policy other than default takes precedence over any global policy. If default per-cable policy (or no policy) is specified, global policy is used. If a non-default policy is applied to the cable, it is used for both capture and render sides. If default policy is applied, each side chooses its own actual policy.

VAC driver must be restarted to change format attribute policies. Actual policies chosen for cable sides are shown in driver event log.


Virtual Audio Cable - Driver and cable configuration

Driver and cable configuration

VAC driver has many configuration parameters. Some of them concern the entire driver and others are cable-specific, their value can be different for each cable.

Full version of VAC can be configured to create any valid number of Virtual Cables. Trial version is restricted.

Use the VAC Control Panel to easily configure driver and cable parameters.

VAC driver parameter tree is stored in the registry under the following key:

HKLM\SOFTWARE\EuMus Design\Virtual Audio Cable\4

Driver parameter values are stored immediately under this key, cable-specific parameter values are stored under "\Cable N" subkeys. All parameters are specified as DWORD values unless explicitly specified. If a value is absent or zero, it means a default/automaric settings unless stated explicitly. Value names are the following (literally, all spaces are meaningful, but case insensitive):

Driver parameters

  • Number of cables (1..256).
  • Maximum worker threads (0..32 in 32-bit systems, 0..64 in 64-bit systems).
  • Maximum worker thread priority (0..31).
  • Maximum number of channels (1..32) supported by the driver, for all Virtual Cables.
  • Event log level (0..9).
  • Timer resolution in percents of event period (10..100).
  • Number of cables to restrict KMixer thread affinity - number of cables beginning from which VAC will restrict affinity of System Audio Engine worker threads. If actual number of cables is greater or equal than this value, thread affinity will be restricted to run only on a first (number zero) CPU/core. It eliminates concurrent PortCls request processing in WavePci mode and will solve some problems like this. This parameter is ignored if PortCls engine is not used.
  • Number of cables to restrict client thread affinity - number of cables beginning from which VAC will restrict thread affinity of any client process (including System Audio Engine). It may be useful to solve problems like this. This parameter is ignored if PortCls engine is not used.
  • Format attribute support policy - code of global format attibute policy: 0 - default, 1 - process, 2 - ignore.

Cable parameters

  • Maximum instances (1..100).
  • Milliseconds per interrupt (1..20).
  • Minimum sampling rate (1000..384000).
  • Maximum sampling rate (1000..384000).
  • Minimum bits per sample (8..32).
  • Maximum bits per sample (8..32).
  • Minimum number of channels (1..8).
  • Maximum number of channels (1..32).
  • Stream format limiting (0 - "None", 1 - "Cable range", 2 - "Cable format").
  • Volume control (0 or not present - disabled, nonzero - enabled).
  • Source line types mask - a bit mask that represents cable source line set. Bit 0 (value 1) means a microphone line, bit 1 (value 2) means an analog line connector, and bit 2 (value 4) means a digital line connector. You can combine them by the addition (1+2=3, Mic and Line inputs). This source line set means which lines are exposed by the cable's topology filter. Default value is 7 (all three line types).
    Don't change this parameter unless really needed.
    Under Windows 6.x, you need to restart System Audio Service or even reboot the system after changing this parameter. Driver restart is not enough to propagate it.
  • Connected source lines mask - a bit mask that represents currently connected source lines. Unlike the "Source line types mask" parameter, this bit mask means which exposed lines are reported as "connected" (plugged in) and must be a subset of the line types mask (all bits set in this value must be also set in the "Source line types mask" value). Default value is 2 (only the Line Input is connected).
  • Clock correction - cable clock correction ratio multiplied by 1000000000 (10E9). Default value is 1000000000 that represents 1.0 ratio. Note: VAC versions prior to 4.11 use a different multiplier format that is not accepted by later versions so a default value is loaded if an old-format multiplier is found.
  • Enable channel mixing (0 - disabled, nonzero or not present - enabled).
  • Use standard PortCls engine (0 or not present - disabled, nonzero - enabled). Applicable to WavePci mode only.
  • Enable speaker pin type (0 or not present - disabled, nonzero - enabled).
  • PortCls capture port type, PortCls render port type - PortCls port/miniport types for capture (recording) and render (playback) pins (0 - auto, 1 - WaveRT, 2 - WavePci, 3 - WaveCyclic).
  • Disable cable signal level (0 or not present - cable signal level calculation/display is enabled, nonzero - disabled).
  • Disable stream signal level (0 or not present - stream signal level calculation/display is enabled, nonzero - disabled).
  • Restrict client thread affinity (0 or not present - disabled, nonzero - enabled).
  • Restrict KMixer thread affinity (0 or not present - disabled, nonzero - enabled).
  • Format attribute support policy - code of per-cable format attibute policy: 0 - default, 1 - process, 2 - ignore.

Almost all of these parameters can be controlled by VAC Control Panel and are explained there. Some parameters that are rarely used, can be added, modified or deleted manually. For this, you can use standard Windows tools (RegEdit application, or "reg" console command) or helper scripts provided in the "tools" subfolder of VAC installation package. All these tools must be ran under an administrative account.

After creating, modifying or deleted some parameters manually, you need to restart VAC driver to propagate them.

When parameter value is changed by VAC Control Panel, its value is automatically copied to the HKLM\SYSTEM\ CurrentControlSet\Services\EuMusDesignVirtualAudioCableWdm\Parameters key to allow driver boot-time access. If you create/change a parameter under "Software" branch manually, you should ensure its creation/changing under "System" branch. Otherwise, the driver will be incorrectly configured on a next boot because there is no access to the "Software" branch at a boot time.

However you could propagate parameter change to "System" branch by hand, it's better to simply restart the driver that propagates parameter values automatically.

Saving and restoring VAC driver configuration

You can save VAC driver configuration by simply exporting the "Software" registry subtree (the main key with all subkeys) mentioned above, using interactive RegEdit utility or the following console command (can be issued from a non-privileged account):

reg export "HKLM\SOFTWARE\EuMus Design\Virtual Audio Cable\4" "%HOMEPATH%\documents\vaccfg.reg"

This command exports VAC driver configuration subtree to the "vaccfg.reg" file located in your "My Documents" folder.

To restore VAC driver configuration, first close VAC Control Panel if it is open, and delete both "Software" and "System" settings subtrees, using "delsettings" command file located in VAC installation folder (usually "C:\Program Files\Virtual Audio Cable"). Locate VAC installation folder in File Explorer, right-click "delsettings" and select "Run as administrator".

Then import previously saved .reg file, using RegEdit or the following console command executed under an administrative account:

reg import "%SystemDrive%\users\<user>\documents\vaccfg.reg"

replacing the "<user>" with actual user account name under which settings were exported.

After that, open VAC Control Panel and restart the driver to propagate boot-time parameters.

You can create as many configurations as you want, keeping them in different files.

To reset all VAC driver settings to their defaults, just delete configuration subtrees without importing any configuration.

Please be careful with registry manipulations, any mistake would cause serious system malfunction.

Please don't confuse VAC driver settings shown in VAC Control Panel with Audio Repeater application settings that can be specified in its command line.


Virtual Audio Cable - System preferred device issues

System default (preferred) device/endpoint issues

Why system default device may be arbitrarily changed

Please note that your system default audio device can be changed in result of VAC installation. VAC installer itself never changes default device settings but there is no way to prevent Windows from changing default device/endpoint automatically.

Prior to Vista, it may occur if you had not previously assigned this device explicitly. If a default device was assigned explicitly, it remains unchanged. Otherwise, Windows selects a default device automatically, and there is no easy way to predict which device will be used.

Starting from Vista, a default endpoint always exists. But some Windows versions (especially Windows 10) may automatically assign a newly installed endpoint as the default. So you might have an endpoint of your preferred permanent audio device set as default, but after VAC installation Windows may select one of Virtual Cable endpoints instead, and you have to manually restore your preferred settings.

To set a default endpoint, open Audio Properties applet. Then find a property page (tab) that displays Playback and Recording settings and select particular devices from the lists.

In XP, you must always select each device from a list and click OK or Apply, even the selection already shows this device. Windows creates default device registry record only if the device is set explicitly. If a device record is not present, Windows picks a device by its own rules, and displays it in Audio Properties page. If you will install/uninstall another audio device, Windows may pick some other device in the future. Starting from Vista, if a desired endpoint is already marked as default one, you don't need to perform any actions.

Using a Virtual Cable as a system default device

If playing and/or recording application does not allow to specify a recording/playback device directly, try to set Virtual Cable N as a system default device (Wave Mapper) using Audio Properties Applet.

Keep in mind that a system default playback device is used by Windows to play system event sounds when you open/close a menu, run/exit an application, when message boxes appear on the screen. If you set a system default playback device to the Virtual Cable, these sounds are directed to this cable. You will not hear them but they will be passed via the Virtual Cable to its recording clients. If you don't want these sounds to be passed via the Virtual Cable, disable them in the Sounds tab by setting a sound scheme to "No sounds". You will be prompted to save a current scheme to re-enable it in the future.

Some poorly designed applications always use a first available device and cannot be configured at all. In Windows 2000, to ensure that Virtual Cable 1 is a first device, you should disable all other audio devices. Don't remove audio cards or uninstall their drivers, just disable their functions in the Device Manager. This may allow you to achieve your goal but you would not hear any sound until you re-enable hardware audio.

In Windows XP and later, a device assigned as a system default always becomes a first-enumerated in MME, DirectSound and WASAPI interfaces.

Using different default devices for different applications

Starting from release 1803, Windows 10 offers per-application device/endpoint selection (Windows Sound Settings - App volume and device preferences). To change defaut sources/targets, the application should be running, otherwise it may not be shown in the selection list.

Open App volume and device preferences now (Win10 1803 and later only)

Please note that this feature may not work properly due to just partial implementation. In particular, it does not work for applications using MME interface.

In Windows 5.x, default audio device is set at per-user basis so you can assign different Virtual Cable devices as default devices for different user accounts. For all applications started under a certain account, default recording/playback devices will be mapped to appropriate Virtual Cables.

In Windows 6.x, default devices are set at per-system basis so you cannot use this technique.

To create additional user accounts at your computer, log in to the Administrator account, open the "User accounts" applet in Windows Control Panel and create one or more user accounts. If you usually work under a limited (non-administrative) account, create limited accounts too, otherwise create administrative accounts because not all applications, especially old, can work properly under a limited account. Once each account is created, set a password for it.

Another way to manage user accounts is using Administrative Tools - Computer Management item in Windows Control Panel. User accounts can be controlled in User Accounts and Groups - Users item. Creating a new account, specify a password, uncheck "User must change password at next logon" and check "Password never expires".

Once additional accounts are created, log in under them using Fast User Switching feature or logoff/logon sequence, and set different Virtual Cable devices as playback and/or recording devices, as needed.

To start an application under a given account, use "Run as..." item from a shortcut context menu. Open the Start Menu, locate application shortcut as usual, but use right-click instead of left-click. A context menu will appear. Left-click at "Run as..." item, select "The following user" and enter account name and password. If both were entered correctly, application will be started under given account and use different preferences than it uses under your usual working account.

To start applications automatically from a command (batch) file, use the runas console command. See Windows Help and Support for details.

To avoid unneeded complexity, use additional accounts only for applications that don't allow to select any available audio device and use only a default one.

Please note that each user account has its own preferences: desktop themes, sound settings, application working directories, temporary files etc. For example, if an application uses a working directory, creating project files in it, such directory may be different under different user accounts. So you may need to specify these preferences manually if the application works under an account different from your usual working account.


Virtual Audio Cable - Audio layering issues

Audio layering issues

VAC driver component, being a WDM/KS driver, is at the lowest level in Windows audio subsystem. Most applications don't connect directly to it. Instead, they use higher-level WASAPI, MME, DirectSound and other interfaces provided by the System Audio Engine. The Engine translates applications requests to the drivers. Using such intermediate layers, an application cannot have a full control over all audio parameters. So there are some special issues and limitations. At a glance, they might look quite complex but they are easy to understand in practice.

Driver's pin allocation

WDM/KS audio drivers, like DirectShow filters, create KS filters that are represented by a numbers of pins. If an application or the system needs to record or play audio, it creates an instance of the specified pin. Such pin instance is associated with a data stream, and instance owner (the application or System Audio Engine) becomes a client of the driver.

Applications that use WDM/KS or DirectSound/WASAPI in exclusive mode, request a separate pin instance. If there is an available pin instance, such request succeeds, otherwise it fails. Most modern audio drivers support only a single pin instance. Therefore, several KS-aware applications can record/play simultaneously only if there are more than one pin instances supported by the particular device driver.

To allow simultaneous playback/recording possibility, System Audio Engine uses its own pin instance when the pin is accessed via WASAPI, MME, DirectSound or other higher-level interface in shared mode. When an application connects to an endpoint in shared mode, such connection request is implicitly served by System Audio Engine. If the Engine is already connected to the appropriate pin (owns a dedicated pin instance), this existing instance is shared among all applications. Otherwise, the Engine tries to create a pin instance to share. If there are no free instances, application's request is failed.

If an exclusive-mode access is requested by an application through System Audio Engine but no shared-mode connections for the appropriate pin exist (no common pin instance allocated for the Engine itself), the Engine creates its common pin instance first to allow further shared-mode connections (but there is a known bug). If the driver is single-client and supports only a single pin instance, there will be no available instances to satisfy the exclusive-mode access request. In such case, the request is either rejected or satisfied in shared-mode, depending of the parameters.

Therefore, if there are not enough available pin instances, Windows prefers shared-mode access for compatibility purposes. But direct KS access requests don't go through System Audio Engine so they can allocate the last (or even single) available pin instance. If such direct low-level request is made before a first higher-level request, System Audio Engine will be unable to create its common (shared) instance and all further higher-level requests, regardless of shared or exclusive mode, will fail.

Vice versa, if the last (or single) available pin instance has been allocated by System Audio Engine, further direct KS access requests will fail.

Format selection for System Audio Engine

Creating a pin instance to serve shared mode connections, System Audio Engine needs to choose an audio format for it. Format selection is based upon application's format specified in its connection request, set of formats supported by the pin and some other rules.

In Windows 10x and 6.x, pin format is determined by the default endpoint format specified for all shared mode connections.

In Windows 5.x, the following rules are used:

  • MME playback: sampling rate is equal to requested, bits per sample is preferably 16 and number of channels is preferably 2 (stereo).

  • DirectSound playback: sampling rate is equal to a first matching from driver's set, bits per sample is preferably 16 and number of channels is preferably 2 (stereo).

  • MME recording and DirectSound capture: format is the same as requested except some incompatible cases (weird sampling rates, number of channels is greater than 8 etc.).

If possible pin format parameters are strongly restricted and System Audio Engine cannot use 16 bits and 2 channels, other bitness and/or number of channels can be used.

Stream and client counting

All shared-mode connections to a recording or playback device are established through System Audio Engine that uses a single common pin instance. So if your applications use shared-mode access, you will see only a single playback and/or a single recording stream in VAC Control Panel. It is because all of these applications are not VAC driver clients. They are clients of System Audio Engine. VAC even knows nothing about their existence and streaming activity; all their requests are server by System Audio Engine.

A pin instance created for System Audio Engine is often "sticky" and persists several seconds after all applications have closed their connections to Virtual Cable endpoints. You can see this in the VAC Control Panel.

Only exclusive-mode connection allows the application to become VAC client, create its own pin instance and an associated data stream. For each exclusive-mode connection, an additional stream is counted by the recording/playback stream counter.

You can experiment with various applications and formats and watch number of clients/streams in the VAC Control Panel.

Windows audio subsystem components and some applications may access VAC driver and its pins for property requests, creating no pin instance. Such connections are counted in the Driver Clients field of VAC Control Panel.

How cable format is selected

For each Virtual Cable, VAC maintains the cable format. The cable format is a common format for all cable clients (data streams). All render (output) data are converted to the cable format, mixed and then distributed among all capture (input) clients, being converted to their particular formats.

VAC selects the cable format when a Virtual Cable becomes active (gets its first client stream). As described above, there may be implicit, hidden clients like System Audio Engine whose might request a connection with a format different from the format specified by the application.

For example, default format for Virtual Cable 1 playback endpoint is set to 48000/16/2. The application requests an exclusive-mode connection through System Audio Engine, specifying 96000/24/2. Prior to satisfy this request, System Audio Engine requests a pin instance to be used for shared-mode access, specifying the default device format (48000/16/2), and VAC fixes it as the cable format. Then the Engine requests another pin instance solely for the application, specifying 96000/24/2. But the cable format remains 48000/16/2, so VAC will downsample 96000 to 48000 and cut 24-bit samples to 16-bit ones. Therefore, a default format assigned to an endpoint for shared-mode access can affect exclusive-mode access to the same endpoint.

Similarly, improper cable format range may cause quality problems in Windows 5.x. For example, is the range is set to 22050-96000/8-32/1-8, System Audio Engine creates its own common pin instance with 96000/32/8 and cable format is set to the same. If most applications use formats like 44100/16/2, 48000/16/6 or like them, there will be many unnecessary format conversions.

To prevent such issues, choose cable format range to be possibly close to your favorite format set. See format limiting rules for details.

Selecting cable format based on a first stream format, VAC driver tries to inherit stream format's channel distribution mask. But if number of channels in stream and cable formats are different (for example, if stream format limiting mode set to "None"), channel mask in cable format is set to a uniform one. Uniform channel mask contains the appropriate number of contiguous "1" bits starting from least significant bit (bit 0). For example, uniform mask for eight channels will always be 0xff. Due to this technique, creating a stereo stream on a cable having number of channels range "1..1" and stream format limiting mode "None", will set cable channel mask to "1" instead of usual "4" (FC).

Endpoint arrangement issues

In MME interface, endpoints are accessed by their numbers. Initially, audio application should enumerate all playback and/or recording endpoints to get their names, and then use the appropriate numbers to access desired endpoints for playback and/or recording.

As you connect or disconnect a removable audio device, change default endpoint settings, or even connect/disconnect hardware inputs/outputs (microphone, headphones, line input/output, HDMI plugs etc.), System Audio Services may rearrange endpoints of the appropriate type (playback and/or recording). In such case, some (or even all) MME endpoint numbers may change. Most MME applications (including Audio Repeater) enumerate endpoints only on startup, and then use only numbers to access them. If endpoint arrangement is changed, a wrong endpoint may be accessed on the next playback and/or recording attempt.

To avoid such problems, ask the application to re-enumerate audio endpoints, if possible. Otherwise, close the application and run it again.

Other issues

Windows 6.x systems have a common bug that prevents System Audio Engine from creating its common capture (recording) pin instance for shared-mode access if there are some active (allocated) pin instances (streams). For example, it occurs if you have started recording using KS interface (KS version of Audio Repeater, ASIO4ALL or something like) and then try to start recording using a higher-level interface (MME, DS, WASAPI) in shared mode. As a workaround, start the higher-level interface first, then start KS recording..


Virtual Audio Cable - DirectSound issues

DirectSound issues in Windows 5.x

Target device testing

Before using a target device, an application or DirectSound subsystem itself often performs some testing, repeatedly opening the device with various audio formats to see which of them are supported. Such testing is usually performed at Windows boot, at DirectSound application startup and at DirectSound device selection.

Most devices can be successfully opened in any time with any audio format they support. But a Virtual Cable can restrict possible stream format range and reject open requests that specify "bad" formats. Due to that, some DirectSound applications may fail to select this cable or may unable to start at all. You might need to stop all cable activity to allow such applications to initialize properly. Or you might even need to set less restrictive format range and/or stream format limiting mode before starting this application and restore appropriate values again when application finishes its initialization.

Using hardware acceleration

In Windows 5.x, DirectSound offers a hardware acceleration feature that allows to utilize some internal audio device capabilities. One of these capabilities allow a multistream playback and recording. It means that a device can process multiple audio streams at a same time and its driver can create multiple pin instances in parallel. Multistream feature allows several applications to use a device simultaneously without a special sharing support in software. Each application creates one or more streams and a device processes all of them appropriately. For example, if an internal hardware DSP can resample and mix several streams, it reduces main CPU load and allow applications to be more flexible in audio format selection.

Although VAC has no proprietary hardware and uses only main CPU resources, it reports a hardware acceleration support to allow Windows audio subsystem to create multiple pin instances (streams). When an application creates a hardware-accelerated DirectSound buffer, Windows audio subsystem requests a new pin instance from the driver. At a driver side, a new audio stream is created (number of active streams is displayed by the VAC Control Panel). Having several audio streams, VAC converts their formats to the cable format and then mixes together.

Each cable can create as many pin instances as specified by the maximum instances configuration parameter. If there are no available instances, DirectSound fails to create a hardware-accelerated buffer. For an ordinary buffer, DirectSound can create a new stream in System Audio Engine layer. In such case, System Audio Engine will convert and mix these streams instead of the VAC. So you can control how application's audio data will be processed.

Sometimes you can control application's ability to use hardware acceleration features. For example, WinAMP and Foobar2000 players have checkboxes for it.

Hardware acceleration level

Windows 5.x DirectSound subsystem uses each hardware acceleration feature only if a current maximum hardware acceleration level allows it. There are four acceleration levels: None, Basic, Standard and Full. Each next level allows DirectSound subsystem to utilize more of device/driver internal capabilities and process audio data more efficiently. So higher acceleration levels are better but they may cause some incompatibilities so Windows provides lower levels to achieve better compatibility.

A maximum allowed hardware acceleration level can be set to any of these four values for each DirectSound device independently. Applications using DirectSound interface can utilize no more acceleration features than the maximal device level allows.

A multistream feature is available only on a highest (Full) acceleration level. For each new device, maximal level is set to the Standard value. Therefore, to utilize all device capabilities, you must manually set it to the Full value.

You can change maximal acceleration level for VAC devices using Audio Properties applet. Open the Audio tab, select any Virtual Cable N device in Sound Playback listbox and click Advanced button. On the Advanced Audio Properties page, open Performance tab, select desired acceleration level and then click OK. On the Sounds and Audio Properties page, click Cancel (if you will click OK here, your default device will be changed).

Windows 6.x and higher implements no DirectSound hardware acceleration. All audio processing is performed by main CPU.

Working if channel mixing disabled

If channel mixing is disabled, hardware-accelerated playback may produce undesirable effects. For example, if you play a mono stream to a two-channel cable, DirectSound first creates a shared stereo stream with channel mask 3 (FL+FR), then creates a separate hardware-accelerated mono stream with channel mask 4 (FC). Since these masks don't overlap, VAC does not perform scatter/gather conversion and copies mono channel directly to cable's left channel.


Virtual Audio Cable - Control Panel application

Control Panel application

VAC Control Panel is an application that allows to view VAC driver/cable operating modes and to configure their parameters. Almost all configurable parameters can be set with the VAC Control Panel.

Don't confuse VAC Control Panel with the Windows Control Panel, they are independent at all.

You can start VAC Control Panel from the Start menu, opening the program folder where you have installed VAC (by default, "Virtual Audio Cable").

VAC Control Panel shows all available Virtual Cables and their parameters/statuses, together with global driver parameters and status.

Most control elements produce tooltips (hints) briefly describing their purpose if you hover on them. To see meaning of a list column, hover on column header. To get more detailed information, click the question mark button near to upper right corner of the window (mouse cursor will change to question mark), and click on the appropriate control element or area.

Driver parameter section

This section combines global driver parameters not specific to a particular cable.

  • Cables - number of cables created by the driver. Has its own Set button. Changing this value causes driver restart.

  • The Worker threads group controls driver worker thread usage policy. Has its own Set button. Number of cables cannot be changed while at least one cable is in use.

    • Up to - maximum number of worker threads running by VAC driver. In Auto mode, one working thread per physical CPU/core is created (a single thread on a single-core CPU, two threads on a dual-core CPU or a two-CPU board, and so on). You may need to limit number of worker threads if you create many (several dozens of) streams and want to lower CPU load but don't need to minimize latency as possible. In such case, you can limit number of worker threads by n-1 or n-2 (n is a number of physical CPUs/cores) to free 1-2 CPUs/cores for other tasks. In hyper-threading systems, you can set number of worker threads larger than a number of physical CPUs/cores, up to a number of logical CPUs. Some systems can work more efficiently in such case but please make sure that your system really can. Otherwise, you may lower the performance instead of raising it.
    • Prio - worker threads scheduling priority. In Auto mode, they have a priority between a normal thread priority in the system (15) and a maximum possible priority (31). The higher is the priority, the more aggressive VAC uses CPU resources, preempting other user and system threads carrying out other tasks. Use priority value 31 with an extreme care: if the interrupt interval is very low (1-2 ms), number of worker threads is not limited and several threads intensively communicate with VAC driver using short (several milliseconds) data buffers, it may produce very high load on all available CPUs/cores and even freeze your system totally.

  • Log level - event logging importance level (0..9). The less is the level, the more verbose the log is. Logged events are places to the Log list.

  • Max NC - maximum number of audio channels supported by driver. This is a global setting that affects all cable data ranges. Both driver and System Audio Service will be restarted to propagate the new limit. Before changing the limit, please read about compatibility issues.

  • Set - a button to set the above parameters.

  • Clients - global driver client counter. Counts all driver clients, not only audio stream owners. Each time as the driver interface is accessed (opened) by the system and/or an application, a new client arrival is registered. Some applications and/or system components may hold driver interface instances without stream creation; you could see client counter change as they start or exit.

  • Streams - global audio stream counter. Counts all audio streams associated with all cables.

  • Timer res - system timer resolution (a tick duration) in microseconds, requested by the driver. Actual timer resolution is displayed on the bottom.

  • Trial reminder - status of trial version voice reminder (silent or audible).

  • Native mode - status of Native Mode (special custom versions only).

  • Restart - driver restart button. Restarts the driver, causing the driver to terminate, unload, reload and reinitialize. See this for details.

  • Reset counters - reset overflow/underflow counters for all cables.

Cable parameter section

This section combines individual cable parameters.

  • Format range (SR, BPS, NC) - sampling rate, bits per sample and number of channels ranges for the cable format range.

  • Connected source lines - currently connected source lines. Checked source lines are exposed lines are reported as "connected" (plugged in). Connected lines must be a subset of the "Source line types mask" configuration parameter.

  • Max inst - maximum number of pin instances (number of times the pin can be instantiated). A first pin instance is always reserved for System Audio Engine. Other instances are available for client applications. A driver that provides more than one pin instance is considered "hardware-accelerated" and can be used in extended DirectSound or Exclusive Mode WASAPI playback. See the DirectSound issues chapter for details. Changing this value causes driver restart.

  • Ms per int - a number of milliseconds per software timer events (interrupts). 20 ms per interrupt means 50 interrupts per second, 10 ms per interrupt means 100 interrupts per second, and so on. It represents a frequency with which audio data portions are transferred from playback cable side to its recording side (many applications use the "latency time" term). The more events per second, the less latency time, the more system overhead. Typical audio cards use 5-15 milliseconds per interrupt; DirectSound subsystem uses 10 ms as a default.

  • Stream fmt limit - stream format limiting mode.

  • Volume control - state of the cable volume control mode. Enable to allow to change cable and stream volume levels.

  • Clock corr ratio - clock correction ratio value, in percents. If the value is 100%, cable clock rate exactly matches a sampling rate value of the cable format. If the correction value is more than 100%, cable clock goes faster, otherwise it goes slower. For example, if the value is 100.25, cable clock goes 0.25% faster; if the value is 99.98, cable clock goes 0.02% slower. Clock correction precision is 0.0000001%.
    You can change clock correction value even if a cable is active (has streams), changes will be reflected immediately.

  • Capture/render port - PortCls port/miniport type used for cable side pins. Auto selects WaveRT if available, and WavePci otherwise. Actual port type is displayed at the right: WR, WP or WC.

  • Enable channel mixing - controls channel mixing mode. Leave enabled to use standard channel conversion, disable to use channel scatter/gather (remapping) mode.

  • Use PortCls - controls PortCls engine usage in WavePci mode. Enable to use a standard and reliable but non-optimal stream data interchange engine. WaveCyclic and WaveRT types are not affected by this setting.

  • Enable spk pin - set "Speakers" type for playback end filter's pin. Changing this value causes driver restart. Please note that all cables with this option enabled will have the same playback endpoint name.

  • Set - a button to apply specified parameter values to all selected cables. Most cable parameters cannot be changed if the cable is in use (has clients).

  • Reset counters - a button to reset overflow/underflow counters for selected cables.

  • Cable Info - a button to open/close Cable State Windows for selected cables. Double-click on a cable row can be used instead.

Cable list

This section shows all available cables and their most important parameters/states.

  • Cable - cable number, starting from 1. These numbers are the same as recording/playback device numbers like "Virtual Cable N" or "Line N (Virtual Audio Cable)". A red exclamation point inside a triangle, displayed left to cable number, indicates that the cable has problems.

  • Ms per int - number of milliseconds between timer events (interrupts).

  • SR/BPS/NC ranges - format range.

  • Stm fmt limit - stream format limiting mode.

  • Vol ctl - state of the cable volume control mode.

  • Ch mix - channel mixing mode.

  • PortCls - PortCls engine usage mode (meaningful only for WavePci pins).

  • Current format - current cable format, represented by a single sting: Type/SR/BPS/NC(CM), where:

    Type - format type: PCM - old PCM (WAVEFORMATEX), ExtPCM - modern extensible PCM (WAVEFORMATEXTENSIBLE).

    SR - current sampling rate.

    BPS - current number of bits per sample. If sample container size is greater than required to store actual number of bits per sample (for example, 4 bytes for 22 bits), container size in bytes is shown in parentheses after number of bits.

    NC - current number of channels.

    CM - channel configuration mask (hexadecimal).

    For example:

    • 48000/16/2(3) - 48000 samples per second, 16 bits per sample (in two-byte container), two channels (standard stereo);

    • 96000/24(4)/6(3f) - 96000 samples per second, 24 bits per sample (in four-byte container), six channels (old speaker configuration with two back speakers);

    • 96000/24/6(60f) - 96000 samples per second, 24 bits per sample (in three-byte container), six channels (new speaker configuration with two side speakers).

  • Rc stms, Pb stms - number of recording (capture) and playback (render) streams.

  • Signal - peak signal level (amplitude) indicators (logarithmic). Are shown in a standard channel sequence (FL-FR-FC-LF-BL-BR-FLC-FRC-BC-SL-SR). To have a larger view, use Windows Magnifier Tool (Accessories - Ease of Access). Signal levels are displayed only if not disabled by cable parameters.

  • Oflows, Uflows - number of data overflows/underflows (summary for all cable streams).

Cable list is updated several times per second, showing actual cable states.

Double-click on a cable row acts as the Cable Info button.

Event log

A drop-down list under the cable list contains VAC driver event log.

An event is registered in driver's log if event importance is equal or greater than log importance level. To log all possible events, set importance level to 0. To log error events only, set importance level to 9.

Events are constantly retrieved from the driver while Control Panel application is running. If Control Panel is not running, newer events may overwrite older ones in driver's internal memory.

Each audio stream listed in the log has an unique identifier. The stream gets an unique ID on creation, its client process and thread IDs are also registered.

For stream creation and some other actions, VAC driver indicates the process that requested the action. For each process, the driver shows its executable file name (file extension is stripped), process identifier (PID) and thread identifier (TID), as shown in Windows Task Manager, Sysinternals Process Explorer and similar tools.

The "Save log" button allows to save event log to a file (it could help to report problems). The log is saved in UTF-16 format.

The "Clear log" button can be used to clear event lists in both VAC driver and Control Panel application. It can be useful if Control Panel is kept running for a log time (days/weeks) and event list consumes a large amount of system memory.

Other controls and values

  • QPC freq - main system performance counter (often referenced by QueryPerformanceCounter function name) frequency, in megahertz.
  • Sys timer res - actual system timer resolution in microseconds. Represents current timer resolution that may not be equal to the resolution requested by VAC driver (for example, other software can change system timer resolution in parallel).
  • Privacy Settings - open Microphone Privacy Settings window. Despite of the name, actually controls the accessibility of all audio input devices (Line Input, Stereo Mix etc.). If the application detects that input device access is disabled by the privacy settings, it draws a red border around this button.
  • Sound Settings - open Sound Settings window.
  • Audio properties - open Audio Properties applet.

  • Restart Audio Service - a button to restart System Audio Service.

Please note that even if cables are visible in VAC Control Panel, they may be inaccessible to audio applications in remote sessions.

If current cable format parameters (sampling rate, bits per sample and number of channel) are shown for a particular cable, it means the cable is in use (has clients). Also, number of playback and recording streams (pin instances) are shown.

The number of playback/recording streams means how many input/output pin instances are created. Usually it is equal to a number of input/output clients but first rendering pin instance is internally used by System Audio Engine (see audio layering issues section). Additionally, an single application can create multiple pin instances.

Since Windows audio subsystem reserves a first pin instance for System Audio Engine, you may see some Virtual Cable is still in use within several seconds after playback is stopped. It is because audio subsystem keeps a mixing thread running several seconds after all other pin instances are closed.

Current cable format can help if you don't know which audio format is used by a particular application or are not sure are cable endpoints really used or not.

The OFlows ans UFlows columns show cable data overflow/underflow counters. An overflow is registered if a recording client does not provide free data storage (a buffer) within an appropriate time, and some audio data to be recorded are lost (there is a drop-out). An underflow is registered if a playback client does not provide filled data storage (a buffer) within an appropriate time, and some audio data to be played back are late (there is a gap).

Overflows/underflows are registered for a cable client but counted for entire cable. If a cable has several clients while some of them behave well and provide their buffers fast enough but some others fail to provide buffers fast enough, recording client overflows affect only their own data but playback client underflows affect entire cable and data of all recording clients. If a playback client experience underflows, the cable will not receive a solid data stream from this client and resulting mixed cable stream will be incomplete. On the contrary, recording clients receive a mixed cable stream so if a client experience overflows, only its own data will be incomplete.

If overflows/underflows occur only at stream start/stop, you can ignore them. It happens, for example, if an application first starts a rendering/playback stream then begins to provide data buffers and/or first stops to provide data buffers then stops a stream. Such behavior is not desirable but it is not an error.

If the cable is accessed in shared mode, there may be some issues with overflow/underflow counters. System Audio Engine does not pause its shared stream when all client streams are paused. Instead, it simply stops providing memory buffers to the driver (VAC) if there are no running client streams.

For example, if you run an audio player, start playback to a high-level audio endpoint provided by System Audio Engine from VAC's low-level pin, while there are no other playback streams in the system, System Audio Engine becomes VAC driver client, creating a playback stream, and begins providing audio data buffers. If you pause the player, System Audio Engine does not pause its pin instance provided by VAC, it just stop providing data buffers. Since VAC does not know why its client does not provide data buffers, it registers buffer overflows and increments the counter continuously. If such situation occurs with audio recording, underflow counter is continuously incremented.

Please don't confuse cable's overflows/underflows with Audio Repeater's overflows/underflows.

Changing driver/cable parameters

To change number of cables, select appropriate value in the Number of cables field and click Set button next to this field. Before changing number of cables, it is strongly recommended to close all audio applications. Also, many audio applications query a list of available devices only on startup and they would not work properly until restarted.

Please note that changing number of cables or some other parameters requires driver restart, so it is a privileged operation.

To change worker thread and/or event log parameters, select the appropriate values and click the second Set button in the group.

To change parameter values for a single cable, select particular cable row in the list, change values in selection/edit fields, and click Set button. Make sure that the selected cable is not used (the format parameter in the list is blank).

To change parameter values for multiple cables, hold Ctrl key while selecting individual rows or hold Shift key to select several adjacent rows. In multi-selection mode, a field filled with a value or a cleared/checked box mean that the parameter value is equal for all selected cables. An empty field or a greyed box mean that this parameter values are different for some cables. If you leave (or make) some fields empty and/or some boxes greyed before clicking Set, these parameters will not be affected.

Cable information/state window

Cable state windows for selected cables can be opened by clicking on the Cable Info button above the cable list. For each selected cable, a separate state window is opened (or closed if as already open). Each window shows current cable state and cable stream list.

Most control elements produce tooltips (hints) briefly describing their purpose if you hover on them. To see meaning of a list column, hover on column header. To get more detailed information, click the question mark button near to upper right corner of the window (mouse cursor will change to question mark), and click on the appropriate control element or area.

Cable state data:

  • Event period - timer event (interrupt) statistics. Displays minimal, maximal and average values in microseconds. Average value should be close to the "Ms per int" parameter value multiplied by 1000. Minimal and maximal values may significantly differ due to internal system processing instability. Average value noticeably greater than both "Ms per int" and "Sys timer res" indicate CPU and/or internal kernel timing overload.

  • CPU usage - estimated average CPU usage by all cable streams. CPU usage calculation is rough, it does not exactly represent real CPU usage shown in Windows Task Manager.

  • Frames transferred - number of audio data frames transferred over the cable.

  • Actual SR - actual sampling rate (data transfer rate) of the cable.

  • Mux source - currently selected (multiplexed) source line (Mic, Line or S/PDIF).

Stream list items:

  • Id - unique stream identifier. A red exclamation point inside a triangle, displayed left to the Id, indicates that the stream has problems.

  • Process - identifier of a process that created the stream. For KS interface clients, represents client process ID. For higher-level interface clients, always represents System Audio Engine process ID.

  • Thread - identifier of a thread that created the stream (the same rules as for process ID).

  • Type - stream type (render or capture).

  • Format - stream audio format. May differ from cable format.

  • Modes - stream processing modes.

  • State - stream state in KS terms: Stop - stopped, Acquire - prepared, Pause - suspended, Run - active (running).

  • Signal - signal levels in stream channels. Displayed if not disabled by cable parameters.

  • Buf dur - circular audio buffer duration (in milliseconds) for RT streams

  • MS buf - amount (in duration terms) of audio frames buffered. For render streams, this is the amount of audio data provided by the client and available for mixing to Virtual Cable. For capture streams, this is the amount of client-provided buffer available for writing audio data from Virtual Cable. The more frames are buffered, the more tolerant the stream is to load fluctuations but the more latency is introduced.

  • Life time - stream life time. Counts time since stream creation.

  • Run time - stream run time. Counts time spent in running state.

  • Fms transferred - number of audio frames transferred since stream creation.

  • Actual SR - actual sampling rate (data transfer rate) in the stream.

  • Oflows, Uflows - number of stream overflows/underflows.

  • CPU - roughly estimated CPU usage by stream processing.

System limitations and overhead

Windows 2000 limits number of MME devices to 8 while Windows XP/2003 increase this limit to 32. So MME applications that use waveIn/waveOut functions won't see more than 32 cables in Windows XP/2003 and more than 8 in Windows 2000. To use more cables you need either to use DirectSound or WDM/KS interfaces or switch to VAC 3 because it is a legacy MME driver.

Windows 6.x systems don't limit number of MME/DirectSound endpoints.

Don't create more cables than really needed. Having many audio devices in your system, especially in Vista and later versions, you may experience excessive system overhead due to the slow endpoint building process.

Cable list update in the Control Panel is slow when there are many cables. Audio application startup also may take a long time due to device initialization.

Moreover, creating too many (100 and more) cable devices can cause other audio devices to disappear. Use this feature with care.

Also don't set Milliseconds per interrupt to a small (1..2 ms) value unless really needed. Very small values significantly increase system time interrupt frequency and overhead. On a slow machine, you may experience performance degradation instead of raising it.

Don't enable cable volume control features unless really needed. If you don't need a volume control, keep it disabled to improve sound quality and minimize CPU load.

Restarting the driver

After changing number of cables and/or maximum instance count, VAC driver must be restarted to apply changes. The Control Panel tries to automatically restart the driver. You also can manually restart the driver using the Restart button (for example, to prolong a silent period in trial version).

To restart the driver, VAC Control Panel needs to be started with administrative privileges.

Additionally, driver restart is possible only if there are no active streams (no cables are currently used by client applications). So you need at least to stop all recording/playback using Virtual Cable devices. It is strongly recommended to close all applications that may access audio endpoints (including web browsers) before restarting the driver.

If you have configured a Virtual Cable device as a default playback device and system event sounds are enabled, it may prevent VAC driver from being restarted dynamically. To be able to restart the driver dynamically, either disable system sounds or change default playback device to a hardware audio adapter.

If Control Panel cannot automatically restart the VAC driver, number of cables and/or maximum instances count will be changed after Windows restart.

Restarting System Audio Service

In some rare cases, when System Audio Service seems to work incorrectly (some endpoint cannot be accessed, audio applications reports unexpected errors etc.), you can restart it without rebooting Windows. To do that, stop all audio streams and close all audio applications. Then click Restart Audio Service button. This action requires administrator rights.

Caution: this function works only if the appropriate system services (Windows Audio and Windows Audio Endpoint Builder) have no third-party dependencies. Otherwise, this function may fail. To restart System Audio Service in such case, use either the Services page of the Computer Management Console, or the "Restart-Service" PowerShell cmdlet, with the -Force option. Both tools must be started with administrator rights.

Opening System Sound Settings page (Windows 10 only)

By clicking the "Sound settings" button, you can open Windows Sound Settings page.

Opening System Sound Privacy Settings page (Windows 10 only)

By clicking the "Privacy settings" button, you can open Windows Sound Privacy Settings page.

Opening System Audio Properties applet

By clicking the "Audio properties" button, you can open Audio Properties Applet.


Virtual Audio Cable - Audio Repeater Application

Audio Repeater Application

Audio Repeater is a simple application that transfers a real-time audio stream from any recording endpoint to any playback one. Audio Repeater can be used with VAC to transport audio data from a real sound card to a Virtual Cable, monitor a signal going through a Virtual Cable with a real sound card, transport audio data from between two Virtual Cables etc.

There are two versions of the application: plain (MME) and Kernel Streaming.

Plain (MME) version

Plain version of Audio Repeater uses MME interface to access high-level audio endpoints. It means that playback to Virtual Cables goes via System Audio Engine layer in shared mode, so Audio Repeater cannot fully control actual audio format used for System Audio Engine pin instance creation (see audio layering issues). To access via KS interface, use Kernel Streaming version.

To supply a Virtual Cable with a real audio signal, choose a sound adapter (card) endpoint (microphone, line input or other) in the Wave In field of the Audio Repeater, and choose a Virtual Cable's endpoint in the Wave Out field. To monitor an audio signal transferred through the Virtual Cable, choose Virtual Cable's endpoint in the Wave In field and the sound adapter (card) endpoint (speakers, headphone or other) in the Wave Out field.

In simple cases, you can use the Listen feature (available since Win7) instead of Audio Repeater.

You can leave "None" in the Wave Out field. In such case, Audio Repeater will only record from the endpoint specified in Wave In field, without playing the recorded data. It can be useful for visual signal level monitoring if you don't need to pass the signal further.

In MME, endpoint name length is limited to 31 characters so you will not always see full endpoint names.

Before starting transfer with the Audio Repeater, select format parameters possibly close to formats used by other applications connected to this Virtual Cable. To eliminate redundant format conversions, pay attention to the audio layering issues.

The Channel config parameter specifies a typical channel configuration (mono, stereo, surround etc.) or a custom mode that allows you to select any channel combination.

Transfer is started as you click the Start button. Audio Repeater opens both audio endpoints and maintains a continuous data stream between them.

Gauge indicators under channel configuration checkboxes show peak signal levels in appropriate channels. Indicators are logarithmic. Levels below -6 dB are displayed in green, from -6 to -3 dB - in yellow, and levels above -3 dB are displayed in red.

MME buffer queue indicators

The Queue gauges show the percentage of data buffer parts held in buffer queues. If a gauge goes to the right, it means that data amount if the queue is increased, and vice versa. In the most stable state, both queues are near to the full state (100%, indicators on the right).

The longer is transfer time, the larger the difference between queue sizes can be, and the higher is stream interruption probability. Side activity, such as disk read/write, application launch, high CPU load can affect stream stability.

Indicator color shows queue status: green - normal, yellow/brown - short, red - critically close to the resynchronization point.

Overflow and underflow counters

There are two counters, Overflows and Underflows. Overflows counter is incremented when Audio Repeater has no free buffer parts for recorded data (input queue gauge comes to the left). Underflows counter is incremented when Audio Repeater has no buffer parts to play back (output queue gauge comes to the left).

Overflows and underflows can occur as a result of a clock difference effect, heavy system load (when Audio Repeater does not receive enough CPU time) etc.

Using Virtual Cable endpoints in Audio Repeater, please note that these application's overflows and underflows are opposite to cable's overflows and underflows. For example, when Audio Repeater has no free buffer to pass to cable's recording end, it registers an underflow (there are no data). On the contrary, the cable has data but cannot give them because there are no buffer parts so the cable registers an overflow (there is no room for data).

Queue exhaust and overflows/underflows may occur due to different timing event periods. Each audio device has its own time period to notify the driver and/or client application about streaming progress. For example, if the device issues a notification event each 15 milliseconds and you have specified total buffering time of 40 milliseconds in 8 parts (5 ms each), every notification will indicate that 3-4 parts are recorded/played. It is a significant portion of the entire buffer so the streaming will be rough and unstable. You will need to increase buffering time and/or number of buffer parts to smoother the stream. Unfortunately, only Virtual Cables allow to specify a timing event period; other devices don't expose this information and you should determine it by experiment.

Clock and sampling rate indicators

Clock fields near the overflow/underflow counters show clock rates for each side relative to another side. If clocks of both sides have the same rate, "100%" is shown. If one side clock is faster than other side clock, the value is over 100%, otherwise it is below 100%.

Clock rate values may help to specify the clock difference value for a Virtual Cable.

Please note that clock rates are calculated cumulatively, so give them some time to settle. If there are a significant number of overflows/underflows, clock rates may be calculated incorrectly. Increase buffering duration and/or number of buffer parts to increase the precision. Wait for some time for the readings to stabilize.

Near Clock fields, there are SR fields, showing actual sampling rates measured in the streaming.

Choosing proper buffering parameters

To optimize audio transfer, you can vary the buffering time (total buffer) and number of buffer parts (data blocks). The total buffering time (in milliseconds) specifies how much audio data/space is reserved to compensate for transmission/execution rate fluctuations. The larger is buffering time, the more robust is the transfer, the less is chance of sound interruption due to task switching, disk operations etc. But the larger is the buffering time, the larger is latency value, and the larger is a delay between incoming and outgoing audio data. Typical buffering times are from 50-70 to 150-200 ms. Values less than 30 ms often cause stream breaks due to internal buffering in System Audio Engine.

The number of buffer parts defines how many parts the buffering memory is divided into. The more buffer parts are used, the smoother is the transfer, especially if the total buffering time is small, and the more precise the prefill/resync features work. But large number of parts raises system overhead and use of more than 15..20 parts may not make data transfer smoother.

To avoid sound interruptions, each audio buffer part should contain at least 3..7 ms of audio. Therefore, having 100 ms total buffering time, you can divide it into 8-12 parts but for 20 ms, it is not recommended to use more than 4 parts.

The "pre-fill to" field specifies amount of any queue to pre-fill before starting data transfer. As the transfer is started initially, input queue is filled to 100% (all buffer parts are queued), and data transfer starts as the specified amount of output queue is filled with recorded data. Pre-filling adds the appropriate latency but allows to keep queues away from exhausting (overflows or underflows). For small (50-200 ms) buffering, use 70-80%. For larger buffering, use 90-100% to start with both queues filled up (both indicators are on the right). Specifying zero disables queue pre-filling.

The "resync at" field specifies amount of any queue to maintain filled by resynchronization. If queue size drops below the amount, data transfer is paused until the queue is filled up to amount specified in the "pre-fill to" field. Each resynchronization causes a single glitch (a break in audio stream) but avoids continuous glitches produced by queue exhausting. Specifying zero disables queue resynchronization.

If total buffer duration and/or number of buffer parts are small (less than 5-10 ms and/or less than 4-6 parts), resynchronization feature may work incorrectly, causing resynchronizations when they aren't required. With such small parameters, it is better to disable the feature (set the percentage to zero).

The Priority field controls priority of the Audio Repeater process. The higher is priority value, the smoother a process is executing, the less time is rest for another processes. Most processes have Normal priority value, Audio Repeater has Normal value by default.

By default, Realtime priority is available only for users with administrative privileges. Be careful setting this priority value because it can cause Windows to freeze. If you want to use this priority under a limited user account, enable the "Increase scheduling priority" policy for this account (or for a group), using local security policy editor from an administrative account. The editor can be accessed from the "Administrative tools" folder in Windows Control Panel or by typing "secpol.msc" in the Start-Run dialog.

Under Windows 6.x and above, Audio Repeater registers its worker thread in MMCSS to maintain its priority. If polling interval is 5 ms or greater, the "Audio" task class is used. Otherwise, the "Pro Audio" task class is used. Therefore, under Windows 6.x and above, you don't need to set priority manually.

Please note that clock difference effect can be lowered but cannot be eliminated at all. Therefore don't rely on Audio Repeater as a robust audio transfer tool. A Virtual Cable can do a robust, smooth and long-time transfer between two applications but there is no way to establish a robust transfer between two Windows audio endpoints. You can try to minimize a clock difference effect by using VAC clock correction feature.

Recording (input) endpoint privacy

Starting from 1803 release, Windows 10 introduces the "Microphone privacy settings", that in fact affects all recording/input endpoints. If Audio Repeater encounters an error that is usually associated with a disabled recording endpoint access, it prompts to open system's privacy settings window.

Format descriptor selection

When opening a wave endpoint, Audio Repeater uses WAVEFORMATEX format descriptor if sample size if 16 bits or less and number or channels is 1 or 2. If sample size is greater than 16 bits and/or number of channels is greater than two, Audio Repeater opens the endpoint with modern WAVEFORMATEXTENSIBLE descriptor.

Saving and restoring settings

The Load Config and Save Config buttons allow to load or save application configuration. Save Config button creates an UTF-16 encoded file with command-line option set compatible with the /Config option. Load Config reads a file encoded in ANSI, UTF-8 or UTF-16 and interprets it as a command-line option set.

Command line options

Audio Repeater accepts several command-line options, allowing to pre-configure it:

/Input: <str> | Input (capture, recording) endpoint name
/Output: <str> | Output (playback, rendering) endpoint name
/SamplingRate: <num> | Sampling rate (samples per second)
/BitsPerSample: <num> | Bits per sample
/Channels: <num> | Number of channels
/ChanCfg: <str> | Channel configuration
/BufferMs: <num> | Total buffering length in milliseconds
/Buffers: <num> | Number of buffer parts
/Prefill: <percent> | Percent of each queue size to pre-fill before starting
/ResyncAt: <percent> | Percent of each queue size to pause until pre-filled
/Priority: <str> | Process priority
/WindowName: <str> | Name of application instance window
/AutoStart | Start audio transfer automatically
/CloseInstance: <str> | Close the specified Audio Repeater instance by its window name
/Config: <str> | Read options from the specified file.

Option names are case-insensitive. <Num> means a number, <str> means a string. Specify option values exactly as you see them in Audio Repeater window, even they are cut. Endpoint names must be specified exactly as they are shown in Audio Repeater Input and Output menus. Don't specify names shown in Device Manager or in Sound/Multimedia applet.

You can set focus to "Wave in" or "Wave out" fields and press Ctrl-C to copy endpoint name to the clipboard. Then you can paste it to a command line or batch file.

If a string contains spaces or other special characters, enclose it in double quotemarks ("). To avoid name matching problems, leading/trailing spaces are stripped, space groups between words are replaced with a single space. To insert a quotemark, specify two consecutive quotemarks in the string.

If you want to enter a command line from a console and a string contains national characters that don't exist in a console code page, create a command (batch) file, placing the command line into it, and insert CHCP command before the command line. See Windows Help and Support for CHCP command description. Save this file in UTF-8 encoding to allow the command interpreter (cmd.exe) to recognize it.

With /Input and /Output options, you can specify endpoint numbers as #n, where n is a number in Audio Repeater endpoint list, starting from zero. This number is one greater than internal MME numbers because MME uses numbers starting from zero for usual endpoints, and -1 for the default endpoint. Audio Repeater uses 0 for the default endpoint, and numbers starting from 1 for others.

The custom channel configuration option has the following format:

/ChanCfg:custom=<num>

where <num> is a hexadecimal channel mask as defined for the KSAUDIO_CHANNEL_CONFIG.

For example, to configure Audio Repeater with "Virtual Cable 1" as input endpoint, "USB Speakers" as output one, sampling rate 48000, 16 bits per sample, two channels (stereo), command line parameters should be the following (a single, continuous line):

/Input:"Virtual Cable 1" /Output:"USB Speakers" /SamplingRate:48000 /BitsPerSample:16 /Channels:2

/CloseInstance option has a special meaning. Instead of specifying a parameter for a newly started Audio Repeater instance, it instructs to close an existing instance that has a specified window name (specified earlier by /WindowName option). If used, it must be the only option in command line. If a named window exists (even if hidden), the window close message is sent to it. The option can be used to close any application window, not only Audio Repeater's.

/Config option instructs to read contents of a file with the specified path and interpret it as option list. A file may contain other /Config options, and so on. Options read from the file are processed as if they were specified instead the /Config option. Semicolon can be used to add a comment to the end of line, or to "comment out" entire lines or their trailing parts.

Automation

You can create a shortcut for Audio Repeater or invoke it from a batch (command) file to achieve better automation. See Windows Help and Support center for details (type "create shortcut" in the Search field to see how to create and edit shortcuts, type "batch files" to see how to use batch files).

To create a shortcut, locate either Audio Repeater executable file in VAC installation directory or default Audio Repeater shortcut in VAC folder in the Start Menu. Command-line parameters should be appended (space separated) to the executable file path in the "Target" field.

In a batch file, use Start command (type "start /?" in the Windows Command Prompt window for explanation) to start several instances simultaneously.

To run Audio Repeater instances automatically after a logon, place shortcuts to the Startup folder of the Start Menu. See Windows Help and Support for details.

Minimizing to tray icon

Audio Repeater supports tray minimizing. To restore, left-click the icon. To open a context menu, right-click the icon.

To start Audio Repeater minimized to the tray, use either the start command with /min option (see "start /?" for details) or a shortcut with the "Minimized" running mode.

Kernel Streaming version

This Audio Repeater version is intended to access low-level waveform audio endpoints via through high-performance and low-latency Kernel Streaming (WDM/KS). It looks and works like standard MME version but has some important differences.

Using KS version, please note it accesses waveform pins directly, not using System Audio Engine or other intermediate layers. It means no format conversion is performed by System Audio Engine, only device and/or its driver format conversion features will work, if any.

Additionally, KS version allocates a pin instance directly, so if device driver does not allow multiple pin instances, this pin cannot be used simultaneously by several applications and/or Windows itself. As long you keep opened a pin in KS version, you will be unable to open another instance of the same pin, even via other Windows audio interfaces.

See audio layering issues for details.

Therefore, don't use KS version unless clearly understand how it works and how it differs from the basic MME version.

KS pin names

Each entry of "Wave in" and "Wave out" lists represents a single KS pin. Since most KS filters don't provide names for their render/capture pins, filter names are shown instead. If a filter has more than a single render/capture pin, pin number prefix is added to a name to distinguish different pins.

Please note that KS device/pin names are usually different from MME endpoint names. For example, Virtual Cable pin names are Virtual Cable N for both capture (recording) and render (playback) sides. If you run KS version in a command file, copy device name from KS version, not from MME one.

KS version allows to specify input and output channel configurations separately. This feature can be used with VAC cable channel scatter/gather feature or for other channel mapping purposes. See the example of scatter/gather feature usage.

KS buffer queue indicators

Queue indicators in Kernel Streaming version behave like in MME version. The input queue is fully filled at the start but the output queue is filled up to the pre-fill point to minimize clock difference effect. In the most stable state, both queue indicators should be on the right (queues are filled up).

KS command line parameters

Accordingly, KS version supports additional command line options:

/ChanCfgIn: <str> | Input channel configuration
/ChanCfgOut: <str> | Output channel configuration
/ContQueueIn | Use continuous queue mode for input pin (legacy only)
/ContQueueOut | Use continuous queue mode with output pin (legacy only)

KS statistics

During the transfer, KS version displays some statistics:

  • Latency - latency values reported by devices and drivers. Total - a total latency reported by the driver, FIFO - internal DAC/ADC queue duration, Chipset - a latency added by the adapter chipset, Codec - a latency added by adapter's codec. Depending on device and driver, less or more fields may be shown.
  • Pos step - actual position step (granularity), in frames. Shows the amount of frames that recording/playback position is increased by between successive polls. The less polling interval is used, the better position granularity is calculated. Pins having smaller position granularity usually have less latency.
  • Poll - poll interval in microseconds. The application polls device driver for position changes several times for each buffer part. For example, if total buffer duration is set to 20 ms and number of buffer parts is set to 4, duration of each part is 5 ms. Audio Repeater polls each part several times to encounter position changes with the appropriate resolution. "Req" means a requested poll interval, and "Min", "Avg" and "Max" fields represent real interval statistics. Average value noticeably less than both requested and system timer resolution indicates CPU and/or internal kernel timing overload.
  • Sys timer res - system timer resolution in microseconds:
    • Req - requested by the application.
    • Act - actually used by the system.

To the right of input/output pin names, KS protocol type is displayed (legacy or RT Audio). RT Audio usually has less latency than legacy buffering but not all drivers support this mode. If the driver supports both RT Audio and legacy modes, RT Audio is used.

The "Buffer duration" field shows actual audio buffer duration. For legacy protocol, it is always equal to the specified total duration. For RT Audio protocol, actual duration may be greater due to rounding enforced by the system.

Submitting buffer parts to a legacy pin queue, Audio Repeater can use either standard (demand) or continuous buffer chain mode.

Standard mode (the "Continuous" box is cleared) means that a buffer is submitted only after it had been filled (playback) or emptied (recording). In this mode, data processing is performed correctly but buffer flow may move non-uniformly. It does not affect streaming stability if there are enough buffers in the queue but may cause unstable streaming with low-latency settings (short buffering time and small amount of buffers).

Continuous mode (the "Continuous" box is checked) means that each buffer is submitted back immediately as returned from the pin. It helps to maintain an uniform buffer flow but violates system data processing rules so audio data played back or recorded may become corrupt.

These queue modes are not used with RT Audio pins.

KS format restrictions

Audio drivers support only a limited set of formats (format ranges) at WDM/KS level. If a given format is not supported by device pins, Audio Repeater displays an error message, listing format ranges supported by the driver for the pin. But these ranges represent only a "best case" support; in particular adapter configurations, actually accepted ranges may be narrower than reported.

Please note that Kernel Streaming version interacts directly with an audio device driver and uses a different communication technique than standard Windows audio subsystem. KS protocols and properties are not fully documented by Microsoft so implementation of some functions is based only on experimental results. Most audio drivers, even WHQL certified, are tested only using standard Windows audio subsystem requests. On non-standard requests, such drivers may generate errors and even BSODs. For example, some Realtek WHQL-certified drivers generate BSODs if a sampling rate less than 8000 is selected for a capture operation.

Such driver behavior is definitely incorrect and should not be considered as Audio Repeater's problem because a well-built driver never causes BSODs. If a driver other than VAC causes a BSOD, please contact driver's vendor instead of complaining to Audio Repeater.

RT Audio buffer type and duration

For RT Audio protocol, a circular buffer should be allocated. If number of buffer parts is 2, Audio Repeater tries to allocate a buffer with notifications and, if successful, resulting buffer size/duration is usually close to the requested. If number of parts is different, or the driver doesn't support buffer notifications, resulting buffer size may be significantly greater due to rounding enforced by the system, which increases the latency. Therefore, if you want to reduce the latency as much as possible, and the pins support notification (event driven) mode (PKEY_AudioEndpoint_Supports_EventDriven_Mode), try to set number of buffer parts to 2, and check the actual buffer duration.


Virtual Audio Cable - Examples

Examples

Recording audio output of an application (for example a browser)

  • Launch a playback (producing the sound) application.

  • Try to find audio output/playback settings in playback application.

    If there are such settings, select a particular Line N (Virtual Audio Cable) endpoint as the output (playback/render) device.

    If the application offers no way to select audio devices/endpoints explicitly (like most browsers, for example), open the "Playback" tab in Audio Properties Applet, right-click a particular Line N (Virtual Audio Cable) endpoint and choose "Set as Default Device". Be aware of default device issues.

  • If the application offers playback audio format selection, choose it.

  • Launch a recording (consuming the sound) application.

  • Find audio input/recording settings in recording application and assign a recording device as described above.

  • Make sure the N (a cable number) is the same for both applications.

  • If possible, choose the same recording audio format as chosen for playback.

  • Start recording. You will see a silence is recorded (with full VAC version) or there will be a periodical voice reminder (with trial version after initial silent period).

  • Start playback. You will see an audio position is moved and level meters are alive but there will be no audible sound because a signal is passed via Virtual Cable to a recording application directly.

  • Stop both recording and playback.

  • If your recording application can play recorded data (for example, any audio editor like Audacity, Wavosaur, Sound Forge, or Audition), you can immediately hear a recorded signal. Just make sure that its wave output is assigned to a real audio adapter (a card) playback endpoint and headphones/speakers are connected.

Monitoring signals during recording

  • Configure playback and recording applications as described above.

  • Launch Audio Repeater.

  • Select a proper Virtual Cable N ("Line N") as an input device.

  • Select a real (hardware) audio adapter playback endpoint as an output device.

  • Choose the appropriate audio format parameters.

  • Click Start button. You will see data queues moving.

  • Start recording and playback as described above.

A signal produced by the playing application will be distributed among your recording application and Audio Repeater which passes it to a real device and you will hear it. You should hear clear sound produced by the playback application (with full VAC version) or the sound with periodical voice reminder (with trial version).

You can also leave "None" in the Wave Out field of the Audio Repeater to only watch signal levels on the screen, not playing a signal back to the speakers. To only watch signal level, you can use Control Panel application instead.

Starting from Win7, there is a built-in Listen feature to monitor a cable. You don't need Audio Repeater in a simple case. But in more complex cases, Audio Repeater could be useful (for example, to connect a Virtual Cable to several devices at the same time).

Determining actual audio format used by an application

  • Launch VAC Control Panel.

  • Launch an application and select a Virtual Cable N ("Line N") as a playback or recording device.

  • Start playback or recording. In VAC Control Panel, you will see the current cable format parameters. If the cable format is not limited, it probably reflects a format used by this application.

But due to the layering issues, if the application uses shared-mode device access, Virtual Cable device can receive a request from System Audio Engine, not from the application directly. Please also note that applications selecting a format, can change it from time to time.

Additionally, you can view VAC driver's Event Log to see which audio formats were requested for streaming (maybe unsuccessfully).

Chaining several audio applications one by other

  • Create an appropriate number of Virtual Cables using VAC Control Panel.

  • Launch your applications.

  • In the first application, which will be audio signal creator/producer, select a Virtual Cable N ("Line N") as a playback/output device.

  • In each intermediate application, which will be both audio signal consumer and producer, select a Virtual Cable X ("Line X") as a recording/input device and a Virtual Cable Y ("Line Y") as a playback/output device. The X for each recording device must be the same as the Y used for a playback device in previous application in the chain. In other words, each intermediate application must be connected to the next by a separate cable. You don't need to number them in ascending order, they simply must be separated.

  • If last application is not a final recording destination, select a real audio adapter as its playback device.

  • To temporarily exclude an intermediate application from the chain without changing other applications' settings, simply insert Audio Repeater instead.

Recording Skype conversations

To record Skype conversations, you need two Virtual Cables and at least two Audio Repeater instances:

  • In Skype, you must assign recording/input to Virtual Cable 1 ("Line 1") and assign playback/output to Virtual Cable 2 ("Line 2").

  • First Audio Repeater instance must transfer from your audio adapter's recording endpoint to Virtual Cable 1 ("Line 1"), supplying first Virtual Cable with a microphone signal.

  • Second Audio Repeater instance must transfer from Virtual Cable 2 ("Line 2") to your audio adapter's playback endpoint, passing Skype output to the speakers.

  • Audio Repeater uses one-second buffer by default that introduces a significant (about 1..2 seconds) delay. You need to experiment with total buffering time, lowering it until audible interrupts occur. The more buffering time, the stable the audio transfer, the longer delay, and vice versa.

  • Now you can separately record your voice from the Virtual Cable 1 ("Line 1") and other party's voice from the Virtual Cable 2 ("Line 2"). Almost any multitrack recorder can be used - for example, N-Track Studio or Audition (formerly Cool Edit Pro).

  • If you want to record both parties from a single source (mixed), you need to start third Audio Repeater instance and transfer from the Virtual Cable 1 ("Line 1") to the Virtual Cable 2 ("Line 2"). Then you could record a mixed signal from Virtual Cable 2 ("Line 2").

  • To avoid an echo, make sure your microphone source line monitoring channel is muted in audio card's mixer.

Mixing signals from two or more microphones into a single source

  • Using built-in Listen feature or two Audio Repeater instances, create a real-time transfer from each microphone to the same Virtual Cable playback endpoint (for example, "Line 1").

  • In VAC Control Panel, make sure that speaking into each microphone causes cable signal indicators moving.

  • In desired audio applications, select Virtual Cable's recording endpoint (for example, "Line 1") as audio source.

  • Instead of microphones, you can use any other audio sources.

Distributing audio signal among several audio endpoints (devices)

  • Configure your playback application to use Virtual Cable N ("Line N") device as an output.

  • Launch Audio Repeater instance, select Virtual Cable N ("Line N") device for input and first audio device for output. Change format parameters if needed and start audio transfer.

  • Launch another Audio Repeater instance, select the same Virtual Cable N ("Line N") device for input and another audio device for output. Change format parameters if needed and start audio transfer.

  • Start playback in your application. You will hear a sound in speakers/headphones connected to both audio devices.

  • Please note that due to clock difference issue you will not get a stable sound within a long period of time.

Please note that due to clock difference issue you will not get a stable sound within a long period of time.

Adding audio signal to a broadcast

If you have an audio broadcasting application that broadcasts a signal from your microphone and want to add a sound from another application (audio player, synthesizer, signal processor etc.), use the following configuration:

  • In the broadcasting application, choose Virtual Cable N as the input/recording device instead of the microphone.

  • Launch Audio Repeater, choose a microphone device as input and Virtual Cable N as output. If your microphone is mono, adjust the channel config. Click Start - Audio Repeater will transfer a signal from the microphone to Virtual Cable N. Say some words in the microphone - signal level indicators must react to them.

  • Start the broadcasting and check microphone signal latency. It will be greater than broadcasting directly from the microphone. If needed, try to adjust buffering settings to lower the latency.

  • Launch an application that should produce the additional sound and choose Virtual Cable N as output device. Activate audio playback - a signal will be mixed together with a microphone signal.

The same method can be used to mix an audio signal into a Skype conversation.

Remapping channels (extracting selected channels from a stream or inserting them to a stream)

To extract (gather) some channels from a stream (or split the stream):

  • Choose a Virtual Cable and configure its format range to accept the source multichannel stream. Make sure that the Enable channel mixing checkbox is cleared and "Ch mix" is "off" (channel mixing is disabled).

  • Route a multi-channel audio stream to the chosen Virtual Cable device.

  • Run Kernel Streaming version of Audio Repeater, choose the appropriate Virtual Cable as input device and leave output device field to be "None". Choose input channel configuration matching the source audio stream, click Start and check if all appropriate channel level indicators are active. If no, check your setup for common multi-channel issues. Finally, click Stop.

  • Choose Custom for input channel configuration and select channel positions that you want to extract.

  • Choose an output device (possibly another Virtual Cable) and appropriate channel configuration. For example, if you want to extract two channels, choose Stereo. If you want to extract to a non-standard channel set (for example, three channels), choose Custom and select appropriate number of adjacent channel positions, starting from FL. Then adjust the common number of channels if needed.

  • Configure another Virtual Cable (if used) and recording/processing application that will consume extracted channels.

  • Start recording/processing then start audio transfer in Audio Repeater. Signal level indicators corresponding to the source channels selected to extract should move.

To insert (scatter) some channels to a stream:

  • Choose a Virtual Cable and configure its format range to accept the destination multichannel stream. Make sure that the Enable channel mixing checkbox is cleared (channel mixing is disabled).

  • Run Kernel Streaming version of Audio Repeater, choose a source device (possibly another Virtual Cable) as input. Choose input channel configuration (standard or custom) matching the source audio stream. For example, if you want to insert two channels, choose Stereo. If the source stream has a non-standard channel set (for example, three channels), choose Custom and select appropriate number of adjacent channel positions, starting from FL.

  • Select the appropriate Virtual Cable as output device, choose Custom for output channel configuration and select channel positions where you want to insert (mix) the source channels. Then adjust the common number of channels if needed.

  • Run a recording/processing application and configure it to record a multi-channel audio stream from the chosen Virtual Cable device.

  • If needed, run another application that plays a multi-channel stream to the chosen Virtual Cable as a base sound. In such case, selected channels will be mixed into this sound stream.

  • Start recording/processing then start signal transfer in Audio Repeater then start the source stream and another application (if used). Signal level indicators corresponding to source stream channels should move. Recording/processing application will receive a multi-channel stream with source channels inserted at the specified positions.

  • If there are problems with multi-channel playback/recording, check your setup for common multi-channel issues.

Packing signals from two microphones into left and right channels of a single stereo stream

To pack signals from two microphones into left and right channels of a single stream:

  • In VAC Control Panel, choose a Virtual Cable and configure its format range to accept a stereo (two-channel) stream. Make sure that the Enable channel mixing checkbox is cleared and "Ch mix" is "off" (channel mixing is disabled). Leave Control Panel open to watch cable signals.

  • Set default format for the recording endpoint to "stereo", with desired sampling rate and bitness.

  • Run two instances of Kernel Streaming version of Audio Repeater. In each of them, choose the appropriate microphone pin as "Wave In", and and leave "Wave Out" to be "None". Set input/recording channel configuration to "Mono".

  • Try to start each repeater to make sure that both microphone pins support selected sampling rate and bitness. If the repeater shown an error message related to unsupported format, correct sampling rate and/or bitness, and try again. If the microphone pin does not support mono (single-channel) formats, it cannot be used for such task.

  • If both repeaters are successfully started, speak into each microphone to make sure that the appropriate signal indicator moves, and stop them.

  • In both repeaters, choose the same Virtual Cable as "Wave Out", and set output channel configuration to "Custom". In first repeater, check the "FL" output box; in the second, check the "FR" box. Only a single channel should be checked in each repeater. Set number of channels to 1 in both repeaters.

  • Start recording/processing application (for example, Audacity) and choose the appropriate "Line N" recording endpoint (if possible, use WASAPI interface). Configure the application to record a stereo stream.

  • Start recording and make sure that VAC Control Panel shows that current audio format is stereo.

  • Start both repeaters, speak into microphones and check that the appropriate signal level indicators in VAC Control Panel are moving. If the recording/processing application has such indicators, they should move too.

Instead of microphones, you can use any other audio recording devices, or even signals produced by other applications, passing them via additional Virtual Cables. You can pack up to 8 signals by default, and up to 32 maximum. Just configure the appropriate formats for Virtual Cable, and run a separate Audio Repeater instance for each signal.


Virtual Audio Cable - Uninstallation

Uninstallation

Before starting VAC uninstallation, make sure that VAC driver is not used by applications and/or system services. Cable device usage is shown by the Control Panel application. If you attempt to uninstall the driver while it is in use, the uninstaller will fail to properly remove the driver from the system and to delete its files and folders. So it is recommended to close all applications that may access audio endpoints (including those hidden in the tray and web browsers), make sure that "Listen" mode for all VAC endpoints is disabled, and close all system multimedia-related windows.

Since uninstallation requires privileged actions, you must explicitly log to the Administrator account if UAC is not enabled in your system (by default, UAC is enabled).

Before you start uninstallation, open the Audio Properties applet. If a Virtual Cable device is selected as a default device for the recording and/or playback, select any other devices instead. Also check if the "Listen" mode is enabled. Then close the properties page.

To start removing VAC software from the system, open the installed application list. In Windows 10, it is under Settings - Apps and Features. In Windows 7, it is under Control Panel - Programs and Features. Dependent on your system, left- or right-click the "Virtual Audio Cable" item, then click Uninstall. Alternatively, you can open the Virtual Audio Cable folder in the Start Menu and select the Uninstall item.

If UAC is enabled in your system, you will be prompted to elevate your privileges to run the uninstaller.

If you have accidentally deleted your VAC Start Menu folder, you can start the uninstaller manually. Click Start - Run or press Win-R to open the Run Application dialog, click Browse, locate a directory where VAC is installed (by default, it installs to "C:\Program Files\Virtual Audio Cable"), and double-click setup item; a path to the uninstaller application will be inserted in the command line. Then append a space character and "-u" option to the command line (outside of the quotes, if any). Resulting command line should look like this:

"C:\Program Files\Virtual Audio Cable\setup.exe" -u

Then click OK, the uninstaller should start.

After successful uninstallation, you will receive a confirmation message.

If some driver files, services and other objects are currently in use by the system or by , they cannot be deleted immediately. In such case, the uninstaller creates a "delayed delete requests" for them and prompts you to restart Windows. If you don't want to restart immediately, you must not try to reinstall VAC in this Windows session otherwise severe errors may occur.

Uninstallation troubleshooting

If the uninstaller fails to properly remove software components from the system, try advanced setup mode that allows you to over-install the software. In some cases, after successful over-installation you will be able to successfully uninstall the software. As a last chance, you can try to remove the driver manually:

  1. Log in with the Administrator account.
  2. Open Device Manager.
  3. Expand the "Sound..." device category by clicking on the "+" sign.
  4. Right-click the Virtual Audio Cable device and choose Uninstall.
  5. In Windows 6.x, check the Delete the driver software item.

This sequence deletes only VAC driver and its devices but driver service may not be automatically deleted. To manually delete kernel-mode service, locate VAC installation folder (usually "C:\Program Files\Virtual Audio Cable") right-click "delservice" file and select "Run as administrator". Service will be deleted immediately if it is stopped, or marked for deletion (in such case, you need to restart Windows, the service will be deleted during next system startup).

If VAC installation folder does not exist (for example, has been deleted manually), unzip VAC distribution package into an empty folder and locate "delservice" file there. Don't open the file right from the archive, it won't work.

After removing system references, you can delete driver file vrtaucbl.sys from Windows installation folder (usually C:\Windows\system32\drivers).

VAC program folder and its Start Menu folder can be deleted using any Windows file management utility (i.e., Explorer).

If the problem is not covered by this manual, please report it.


Virtual Audio Cable - Distribution policy

Distribution policy

VAC is shareware.

Trial version of the product is free of charge and can be distributed freely if its package and file contents remain unchanged and there are no commercial purposes. You cannot sell it, solely or within other products.

Full version is commercial and is granted to registered users after payment. This version can be used only in conditions specified in the license agreement. See the license.txt file in the distribution package.

Audio Repeater application is free of charge and can be used indepentltly, without installing the entire product. Audio Repeater is not feature or time limited, VAC trial version package contains the same binary as the full one.


Virtual Audio Cable - Support

Support and feedback

VAC is developed by Eugene (Evgenii) Muzychenko, an independent software developer.

Bug fixes and updates are available on the product website.

You can also visit the page with other software products by Eugene Muzychenko.

If you encountered an unexpected behavior and/or a technical problem, firstly please make sure that you have read the documentation and understand basic principles and usage rules of the product. Looking for troubleshooting information, please see troubleshooting section and FAQ/How to... lists at first.

If the problem is not covered by this manual, please send a support request.

Writing a message, add "Virtual Audio Cable" or "VAC" to the subject field. Messages with empty subject or only with a common word/phrase like "Hi", "Help request" or "Some questions" may be considered as a spam and automatically killed by mail filters.

Only English and Russian languages are supported in communication.

Please include following items in your request:

  • Product name (VAC), its version number and type (trial, full or free).
  • Platform type (single/multiple CPU) and CPU type.
  • Operating system (name, version, build number, language).
  • Detailed situation description:
    • What audio applications do you use (names and versions).
    • What each application is intended for (except of well-known ones).
    • How each application uses audio devices (for playback, for recording, for both).
    • What application's audio settings are used.
    • What Virtual Cable devices are used (cable numbers, recording or payback operations).
    • How these cables are configured (what VAC Control Panel shows for these cables in "Cable parameters" box).
    • How VAC driver is configured (what VAC Control Panel shows in "Driver parameters" box).
    • VAC Control Panel window image may be useful.
    • What default shared recording/playback formats are set in the system, if any.
    • What actions did you perform.
    • What exactly did you expect.
    • What was really happen.
    • Exact error message texts (or pictures).
    • Other details, if any.

For example, if you have a problem with audio connections, you should describe how you connect applications to audio devices (real and virtual), audio formats used, recording/playback modes (if any), and specify any other information that could help to understand your problem. The more meaningful information you provide, the faster and helpful response you will get.

Example of ill-formed support request:

I have installed it but it does not work. I spent many hours trying to get it working but no success. Please help ASAP!

Example of well-formed support request:

I have installed VAC (4.60, trial version) in 64-bit Windows 10 Home. If I run Audio Repeater (MME, 1.56.1, 32-bit), choosing "Line 1 (Virtual Audio Cable)" as input and "Speakers (Realtek HD)" as output (other settings have default values), there are sound interruptions after several minutes of use. I tried to increase buffering time in Audio Repeater, and the clear sound period becomes longer. But I cannot get rid of interruptions at all. Tried to alter clock correction value for Cable 1 but it does not solve the problem.

If the problem is related to installation/uninstallation, please attach a log file created by Setup application.

Identifying yourself

Please identify yourself properly. If you are a registered (paid) user, please specify your email address used for the order placement, or the order ID, or other order details. If you use a different email address and did't specify your full name or your name is very common, it could be difficult or even impossible to find your order.

Explaining the problem

Please write problem explanation to be rich in content. Avoid meaningless messages like "I cannot install it" or "It did not work". Your message must be informative and allow to understand your problem. Please write as exact as possible: what did you want to achieve, what did you do, and what was happened. If you have received an error message and code, please include them into your report. For long messages, attach some screenshots instead.

Please avoid messages like "I run <application name>, but it doesn't work as I expect, how to fix that?". VAC is a wide-purpose tool that can be used with any audio application or their combinations, in huge amount of configurations. The author (and support staff, if any) is unable to learn about all existing audio applications (except well-known ones, like Skype or WinAMP) to understand how they work.

For better problem explanation, please describe all audio signal paths. For example, "I speak into the microphone connected to built-in audio adapter. Application <name 1> gets it from the adapter's endpoint, adds some funny effects, then plays resulting signal to Virtual Cable 1. Application <name 2> gets the signal from Virtual Cable 1 and broadcasts it over the net".

Attaching files

If your problem can be described better by some data files, you can attach them to your message. For example, if you experience a strange noise in audio data, it could be useful to present a data fragment saved to a WAV/MP3 file. But don't send large (a minute or more) audio fragments. Send meaningful fragments only. In most cases, 5-10 seconds of audio is quite enough.

If possible, please avoid large (greater than 1-2 Mb) email attachments except explicitly asked.

Attaching screenshots

To illustrate your problem, you can attach some screenshots to your report. If there is only a single informative window (a dialog box, an error message), take a "window screenshot" (Alt+PrintScreen keys), not full screenshot (single PrintScreen key). If there are several informative windows at the screen, arrange them to be all visible and take a full screenshot (single PrintScreen key). These keys save window or screen image to Windows Clipboard.

After taking the screenshot to the clipboard, start Windows Paint utility or a free image viewer/editor (IrfanView, XnView etc.), paste the image from clipboard, and then save to a file in PNG or GIF format, using "File - Save As" menu command. Don't resize the image and/or save to JPEG/JPG formats because text information may become unreadable.

Attach image files directly, don't wrap them with Word or PDF documents, unless you want to add a text, drawings or other useful informatioin.

Attaching videos

If your problem is hard to be explained by the text and static images, you may capture a screen video with a screen recording software like free CamStudio. Plase note that video clips may be large; don't attach clip files larger to 5-10 MB to a message. Upload them to a free file hosting service and provide a link in the message.

Attaching VAC driver log file

If your problem is not related to installation/uninstallation process, please attach VAC driver event log, saving it to a file in VAC Control Panel application.

Attaching VAC setup log file

During installation and uninstallation, a log file is created, describing a process details. After successful installation, the log file is kept in the VAC installation directory (install.log file). If installation/uninstallation process fails, a log file is kept in the temporary directory; in such case, the installer informs you how this file is named and offers you to view its contents.

If your problem is related to installation/uninstallation process, please include log file contents into your report. You may either copy/paste file contents to the email text or attach a log file. It may help to investigate your problem.

Attaching Windows SetupAPI log file

You may be asked for Windows SetupAPI log (device installation process log). In Windows 2k/XP/2k3, log file is named setupapi.log and located in Windows root folder, usually named Windows. In Vista/Server 2008/Win7, log file is named setupapi.dev.log and located in the "inf" subfolder.

By default, only most important messages are included in SetupAPI log. To provide maximum information, it is better to enable all possible messages to be written to the log. To enable them, create a .reg file with the following text:

REGEDIT4
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Setup]
"LogLevel"=dword:4800ffff
"LogMask"=dword:fffffff

Save the file then double-click it and allow the changes to be added to the registry. Changes will take effect after Windows restart.

To restore default log settings, use .reg file with the following text:

REGEDIT4
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Setup]
"LogLevel"=-
"LogMask"=-

Attaching minidumps

If your system crashes, configure it to make a crash minidump. A minidump file contains some essential information about a crash, it may help to analyze your situation.

To configure system to create a minidump, open Windows Control Panel, then open System item. Select Advanced tab and click Settings button in Startup and Recovery group. In the Write Debugging Information box, choose "Small memory dump". Leave a default path (%SystemRoot%\Minidump) in the Small Dump Directory field.

Additionally, you may clear Automatically Restart checkbox to prevent automatic reboot after a crash. In such case, Windows will stay at the blue screen message.

If you had a system crash, then tried to enable minidump creation and saw it is already configured, it means you already have a minidump for this crash and can send it, not needing to wait for another crash.

After each system crash, a new minidump file is created in the Windows\Minidump folder. File names contain a date and a sequence number within a date. Locate 1..3 of last minidump files and attach them to your report. Make sure you are attaching only minidump (64 kb) files, not a big dump (several megabytes in size) files.


Virtual Audio Cable - Upgrading to new versions

Upgrading to new versions

Within a major version (2.xx, 3.xx, 4.xx etc.) you can freely upgrade to any newer minor version. For example, if you bought version x.08, you can freely upgrade to x.10 or x.12.

To upgrade to a newer minor version, please see your purchase order confirmation email message. It contains download and installation instructions for all available minor versions.

If you bought a previous major version (for example, 3.xx), you can upgrade to a newer major version (for example, 4.xx) with a discount. To obtain discount conditions, please visit VAC homepage mentioned here.


Virtual Audio Cable - How to...

How to...

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 realtime audio processing?

The simplest way to estimate internal kernel latency is to use 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.

Another useful tool is LatencyMon that measures various kernel latencies and can show a driver causing inadequate delays.

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.

I have several audio adapters with their own speakers attached to each adapter. How to play a sound using all adapters 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.

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 SPDIF) 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. Additionally, sounds coming from different speakers will "slide apart" from each other due to a clock difference effect.

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 start Audio Repeater with a particular 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.

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 several 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/enpoints?

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. You can perform the following steps to find processes using the driver:

  • Download and run Sysinternals Process Explorer application.
  • Open Device Manager (no administrator rights required for this usage).
  • Expand the "Sound, video and game controllers" branch.
  • Double-click the "Virtual Audio Cable" item. In the property window, select the "Details" tab.
  • In the "Property" menu, select the "Physical device object name".
  • Copy the string that looks like "\Device\nnnnnnnn" from the "value" field.
  • In Process Explorer window, click "Find" - "Find handle or DLL".
  • In the Search window, paste the device object name string to the search field and click "Search".

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.

I have enabled test-signing mode in my system for older unsigned VAC version. Now I got signed version, 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.


Virtual Audio Cable - Frequently Asked Questions (FAQ)

Frequently Asked Questions (FAQ)

What the <some term> stands for?

If you see an unknown term in VAC Control Panel or Audio Repeater interface, or in this user manual, try to enter it on the "Search" tab. If some manual pages displayed on the right side, read the appropriate topics.

How to use VAC for <some task>?

Try to select some keywords describing the task and enter them on the "Search" tab. Maybe there is a recipe.

I am evaluating trial version and hear the repeating "trial" voice. Does it mean that VAC works correctly?

Definitely, no. It only means that VAC driver is loaded and a signal is routed from a Virtual Cable device to the speakers/headphones. To make sure VAC works for you, please build a proper signal routing chain that transfers a useful signal (together with the "trial" voice mixed in trial version).

In other words, if trial version works exactly as you need, successfully routing your audio signals, and the only undesired thing is the periodical voice reminder, then you can consider that VAC correctly works for you.

Why some fields in VAC Control Panel are grayed out?

It means that this product version is feature-limited.

Does VAC ensure absolutely reliable and stable streaming?

Unfortunately, no. There is no way to ensure absolutely reliable and stable streaming in Windows because Windows is not a real-time operating system. In most cases, a hardware-assisted streaming, when you play and/or record a stream to/from a hardware audio adapter, is quite stable because all audio data processing is performed by the separate hardware device, not by the main CPU, and redundant buffering is used. VAC serves virtual devices having no dedicated hardware support, so its code has to compete with other user threads and system components in main CPU resources usage.

In Windows, there is no guarantee that an application (and even a kernel-mode driver) code will certainly executed within a given period of time. For relatively long periods, like one second, the probability is almost 100%, and even for 100 ms, the probability is very high. So, in general, multi-threading works well. But for short periods (10 or 1 ms), the probability significantly drops. Only enough buffering can prevent arbitrary data loss.

Therefore, some special measures must be taken to achieve more reliable and stable streaming. Please learn about system performance checking and tuning, audio layering issues, advanced usage rules, HowTo and Troubleshooting sections.

Does VAC use registration keys, Internet activation procedure or other technical licensing measures?

No, it doesn't. Once purchased a license, you will get full version package and need just to install it instead of trial version.

I have created several Virtual Cables but only some of them are visible. Why?

Windows releases starting from Vista use Audio Endpoint Builder service that creates high-level endpoints for low-level pins. On every pin reconfiguration, Endpoint Builder must query the pin for various information and create/modify/delete the appropriate endpoint.

From release to release, Endpoint Builder behavior becomes worse. It issues hundreds of redundant queries to each pin. To prevent high system load, Windows 10 uses a kind of throttling, inserting pauses between sequential queries. System load was reduced but processing time was increased significantly. For typical hardware devices with 1-3 endpoints, the time never exceeds several seconds. But VAC driver exposes four pins for each Virtual Cable, so the processing may consume 2-3 minutes for 15-20 cables. Creation of 100-150 cables may require up to several hundreds of megabytes of RAM and 15-20 minutes of 100% CPU load. The same effect is occurs if number of cables is significantly decreased.

The order in which cable endpoints appear in the lists, is undefined. For example, "Line 10" may appear immediately, then "Line 2", then "Line 1", and so on.

My audio adapter (soundcard) has no "What You Hear" or "Stereo Mix" recording function. Does VAC implement it?

Definitely, no. VAC does not interact with other audio devices. It cannot automatically intercept any audio signal, it can route a signal only if a Virtual Cable device is explicitly used in audio path.

If you are using Vista/Win7, there can be a loopback source line in your audio adapter but disabled by default. To check it, right-click on speaker icon in the system tray, select "Recording devices", right-click on any device in the list and select "Show disabled devices". Some additional devices may appear. If there is a device like "Stereo Mix", right-click on it and select "Enable".

You can record sounds from applications and/or system by directing their audio output to some Virtual Cable device. It can be achieved by selecting Virtual Cable device in application's audio settings or using Virtual Cable as a system default device.

Since audio output will go to Virtual Cable instead of your audio card, you need to monitor the cable to hear the sound.

My audio adapter (soundcard) has analog and digital outputs but I cannot use them in the same time. Can VAC help?

Unfortunately, no. VAC cannot extend limited hardware capabilities. If an audio adapter allows to use its inputs/outputs in the same time and its driver doesn't restrict it, you should be able to use them independently. But some adapters have simplified drivers that allow to use only a single output line. You could look for another driver, maybe it exists. For example, there can be a driver for Windows 5.x suitable for Windows 6.x too.

Can VAC route sound between different PC's?

No, VAC operates only locally. But you can use VAC together with an network audio software like Skype to route audio signals over a network. Please note that audio quality will depend on network software behavior.

I have tried a trial version but was not satisfied. Will full version work better?

Full version features differ from trial ones only by a maximal number of cables. Full version also does not add female voice reminder to the signal. See the trial version limitations for details. Sound quality is the same in trial and full version, no signal quality degradation occurs in trial version.

Therefore, trial version has all the features of full version and can do everything that full version can, except number of cables. If three cables are enough for your task but you cannot get the trial working, it means you are doing something wrong or VAC is not intended to your task at all.

If you have successfully applied trial version to your configuration, full version will work for you.

How many Virtual Cables I need to implement my task?

You need as many cables as many independent audio signals you want to pass between applications:

  • To pass a single audio signal from one application to another, you need a single cable.
  • To mix three signals from three applications and pass a single combined signal to fourth application, you still need a single cable.
  • To pass two independent signals, you need two cables.
  • To mix two signals into a single combined signal and mix three other signals into a separate combined signal, you still need two cables, and so on.

Please note that each cable is single-directional. Therefore, if you have two applications capable to produce and receive audio signals at the same time, you need two cables to create two-way communication between these applications.

How much is sound latency with VAC?

VAC itself adds almost no latency but actual value is much more dependent from an audio interface used by the application and application's audio buffer configuration than from a Virtual Cable timing event frequency.

Very good performance and latency can be achieved using exclusive-mode device access (hardware-accelerated DirectSound in Windows 5.x, WASAPI in Windows 6.x). For even better performance and lower latency, you can use WDM/KS, directly or via an ASIO wrapper like ASIO4ALL or ASIO2KS. Shared-mode streaming methods have lowest performance and highest latency.

Typically, latency time is comparable with an audio buffer granularity. For example, if application uses a total buffering time of 500 ms divided into four buffer parts, average application latency time will be 500 / 4 = 125 ms. If a cable is configured to 10 ms per interrupt, cable latency will be no more than 10 ms.

To reduce latency time, first try to decrease application's audio buffer granularity. Some MME applications allow to specify number of audio buffers and a total buffering time; set these values to 50..100 ms per buffer part and 500..1000 ms of total time. DirectSound applications also may allow to specify a minimal buffer fragment size for processing.

You can also try to decrease the number of milliseconds per interrupt for a cable but it may help to decrease latency time by several milliseconds only.

With a well-tuned configuration (hardware, OS and applications), it is possible to reduce latency time down to several milliseconds. Latency less than 1-2 ms is not possible in Windows because a lowest timing interval is 1 ms.

Can VAC map default audio devices to different cables for different applications?

VAC does not map audio devices. If you assign some Virtual Cable device as a system default recording and/or playback device, mapping is performed by Windows.

Starting from 1803, Win10 offers per-application device/endpoint selection (Windows Sound Settings - App volume and device preferences), but this feature may not work properly.

In Windows 5.x, you can use different user accounts to map default devices differently for different applications.

Can VAC be used on a virtual machine (virtual server, VPS/VDS)?

VAC can be used on any Windows machine, regardless of its type. But there are some important issues since VAC is a kernel-mode driver, not a user-mode application. Please read about virtualized environment compatibility issues.

Working remotely, please read about remote access compatibility issues.

What are the difference between old and new 5.1 and 7.1 speaker/channel configurations?

Old 5.1 speaker/channel configuration named "5.1" or "5.1 back" contains back speakers/channels (back left and back right). New configuration contains side speakers/channels instead and is named "5.1 surround".

Old 7.1 speaker/channel configuration named "7.1" or "7.1 wide" contains "front left of center" and "front right of center" speakers/channels. New configuration contains left and right side speakers/channels instead and is named "7.1 surround".

How much CPU is consumed by VAC?

It depends primarily on number of audio streams processed at the same time, then on CPU type, clock frequency, number of cores, L1/L2 cache sizes, memory type, clock frequency, Windows configuration, audio interface used, application/device interaction algorithm, audio buffers size, number of buffers used, cable event rate, volume control, format conversion options etc.

For example, the following configuration:

  • T8300 (2 cores, 2.4 GHz), Q9550 (four cores, 2.8 GHz) or 3610QM (four cores, 2.3 GHz) CPU
  • Single Virtual Cable device configured for 5 ms per event, no volume control
  • 32 Audio Repeater KS instances (Virtual Cable 1 to Virtual Cable 1, 44100/16/2, 20 ms per buffer, 4 buffers, no format conversion)

that creates 64 independent audio streams processed by VAC driver, produces about 1% overall CPU load. The load depends mostly on number of streams. For example, 16 cables and 32 Audio Repeater KS instances (Virtual Cable N to Virtual Cable N+1) produce the same 1% load.

32 Audio Repeater MME instances (500 ms per buffer, 12 buffers) creating 64 streams processed by System Audio Engine and a single stream processed by VAC driver, produce about 5-10% overall CPU load under Windows 7.

With format conversion and/or volume control, each stream processing may consume up to dozen percent of CPU resources. The higher are sampling rate and number of channels, the more CPU resources are taken to process the stream.

Please note that system tracing/debugging features (for example, Driver Verifier) may significantly increase CPU load and decrease stream processing performance and stability.

I see high CPU load when Virtual Cables are used. Is it normal?

It is normal if there are format differences between a current cable format and recording/playback clients' formats. In such case, format conversion will be performed. It takes a high amount of CPU resources.

Check the number of milliseconds per interrupt parameters for all active cables. If this parameter is very low (1..2) for some cables, try to increase it at least to 3..7.

CPU resources are also used to perform a volume control. If you don't need volume control for a particular cable, it is better to disable it.

In Vista/Win7, I see high CPU load produced by AudioDG process. Is it normal?

In Windows 6.x, AudioDG process (the System Audio Engine) hosts almost all audio processing in the system (basic audio interface support, local and global audio effects (LFX/GFX) etc.). If you run several audio application that create several audio streams, especially using audio effects, AudioDG may produce significant CPU load, regardless of are Virtual Cable devices used or not.

Can VAC render my MIDI sequence to a Wave file?

Definitely, no. VAC simulates a simple electric cable, it cannot synthesize a sound from a MIDI sequence. Although, VAC can help you to record output of some software synthesizers to a Wave file. You also could use a built-in Windows GS software synthesizer that plays synthesized waveform to a system default playback device.


Virtual Audio Cable - Troubleshooting

Troubleshooting

You have troubles reading this manual and navigating in it.

Try to enter some keywords under the "Search" tab. If there are no related pages, try to read about the principles, features, simple usage rules, typical usage examples and frequently asked questions.

VAC has been installed successfully but you don't know how to run it. There are no new shortcuts on the desktop.

VAC is a "passive" tool. It is not a self-sufficient application that you could simply run. The main purpose of VAC is to create virtual audio devices for you. You can use these devices with almost any audio application by selecting the appropriate endpoints in their audio settings. VAC cannot work standalone, with no audio applications (or system components) connected.

Please read about VAC principles and consult other parts of this manual.

After successful VAC installation, some usual sounds disappear.

It may be the default device issue.

During or after installation, VAC driver is not loaded because of the digital signature problems.

From release to release, Windows uses more and more strong digital signature policies. If signature verification is not successful, the system displays various error messages: "The third-party INF does not contain digital signature information", "Cannot verify digital signature", "Code 52" in Device Manager etc.).

At first, make sure you obtained VAC distribution package from official sources. Packages distributed from third-party sources may be tampered with. Since VAC is quite popular, there are many fake "releases" that contain malware.

If you use Windows 7 or 2008 Server, make sure your system supports SHA-2 (SHA-256) digital signatures (KB3033929 update should be installed). Windows 8 and later systems don't require such update.

If Windows doesn't accept VAC driver signature, try to restart Windows in "Disable driver signature enforcement" mode. For that, press F8 or hold Shift at early boot time to enter Troubleshoot mode. If a text-mode menu appears, choose "Disable driver signature enforcement". If a graphical "Choose an option" menu appears, choose "Troubleshoot", then "Startup settings", then restart and "Disable driver signature enforcement" as startup settings menu appears. After installing VAC in this mode, restart Windows in normal mode.

You hear an unwanted female voice in the recorded audio. How to get rid of it?

You are using a trial version, so please note the trial version limitations. This voice reminder is normal for the trial. To get rid of this voice, purchase the full version.

You have set output of your audio application to a Virtual Cable but you hear no sound.

If you connect an audio source (a sound-producing application) to the playback/render cable side and leave other side unconnected, you will not hear any sound. It is like plugging an electric cable to the speakers/headphone output of a computer or a phone, leaving other cable end unconnected.

You need to connect other (input/capture) side of the cable to another application that will receive (record/capture) the sound produced by the source application. See VAC principles, simple usage rules and examples for details.

You see red triangle icons with the exclamation marks in cable and/or stream list.

Such icon indicates stream and/or cable problem. Follow the guidelines to isolate and eliminate the problem.

You have set output of your audio application to the Virtual Cable N, then set input of recording application to the Virtual Cable N. Sound recording is fine but you hear no sound from the headphones/speakers during recording. What to do to hear a live sound?

You need to monitor cable transfer as mentioned in the simple usage rules. The simplest way to monitor is using Audio Repeater application included in VAC package. See the example.

Starting from Win7, you also can monitor a cable using the built-in Listen feature.

You have configured playback and recording applications to be connected through Virtual Cable but audio signal is not passed as expected.

  • Make sure that playback application really sends an audio stream to the driver:

    If there is a song/track position pointer, it should move.

    If there is a playback/remaining time, it should go forward/back.

    If there is a signal level indicator, it should move.

  • Make sure that playback application plays audio signal to the chosen Virtual Cable:

    Application's settings specify this Virtual Cable device or this Virtual Cable device is assigned to be system default.

    VAC Control Panel application shows audio format and signal level indicator for this cable as you start playback and does not show them as you stop playback.

  • Make sure that the proper audio signal is played by playback application:

    Use Audio Repeater application or Windows Listen feature to monitor a signal passed through the cable.

  • Make sure that recording application really records from the cable (time counter is running, level indicators are moved, VAC Control Panel application shows non-empty recording stream count and a new stream is shown in the stream list.
  • In some cases, VAC driver may reject stream creation requests (audio format is out of range, incorrect format descriptor etc.), registering the failure in driver's event log.

When USB audio device is plugged in, some sounds disappear.

It may be the default device issue. Many USB audio devices are configured to become a system default audio device when plugged in. So all default sounds become routed to newly connected device.

In some cases, such effect may occur due to endpoint arrangement issue.

Wrong audio endpoints are actually used for playback/recording.

Usually, it caused by the default device issue or endpoint arrangement issue.

During VAC installation, Windows cannot find some files.

First, try to determine do these files belong to VAC file set or to Windows file set. For example, browse VAC distribution package contents. If required file names are present in the package, check if they are present in a folder where you have unpacked them before installation. Maybe you have unpacked the ZIP archive without pathnames (nested folders) or missed some files.

If the archive had beed unpacked properly but Windows installer cannot access some files, it might be due to restricted access rights. Check file properties for the access rights. If a folder where files are unpacked has special characters in the full path (punctuation characters, national alphabet characters), try to unpack installation files to a folder that does contain only Latin characters in the path.

If Windows requires some files that are not present in VAC package, they might be system files that Windows needs to install and/or check their versions. Usually, all the original files needed are located at distribution packages (Windows installation disk, Service Pack disks). To minimize external package requirement, Windows keeps some frequently used files in its installation folder (Driver Cache, system32\dllcache subfolders) and use them instead of asking for a disk. But if you delete these packages (driver.cab, sp2.cab or others), Windows cannot find an original file on the hard disk and asks for a CD/DVD.

If Windows asks for a system or a service pack CD/DVD but you have no these disks, try to locate required files in Windows installation folder. For example, ksuser.dll file could be located in system32 subfolder and portcls.sys could be located in system32\drivers.

During installation, you get a driver selection error.

In some cases, VAC installer aborts with the following message: "Cannot install device (15/515 - There is no driver selected for the device information set or element.)". Most probably, this error occurs if your system is misconfigured.

Please locate the "setupapi.dev.log" file in your system and search it for "access is denied" or "error 5" messages. If you find such errors not only for VAC installation attempts, it means that your system is misconfigured (administrator account does not have enough rights and/or system folders have invalid Access Control Lists). You need system repair and even re-installation to restore proper file access rights.

If access deny errors are listed only for VAC installations, please send a report containing setupapi.dev.log file to analyze it.

VAC was installed but there are no Virtual Cable devices and/or VAC Control Panel reports that driver is not loaded.

Please open Device Manager, expand the "Multimedia" or "Audio" device subtree and look for "Virtual Audio Cable" device. If there is no such device, it means that VAC is not properly installed. Make sure that you have carefully followed all installation instructions.

If "Virtual Audio Cable" device is present, open its properties and read device status in the "General" tab. There may be some common problems:

  • Error code 22 (This device is disabled) - try to enable device from a context menu.

  • Error code 39 (Windows cannot load the device driver for this hardware. The driver may be corrupted or missing) - VAC driver file was corrupted/deleted for an unknown reason. First, check for signature problems. Then try to uninstall VAC and install it back.

  • Error code 48 (The software for this device has been blocked from starting because it is known to have problems with Windows) - please read about virtualized environment compatibility issues.

If the device is working properly (no error codes in Device Manager) but VAC Control Panel reports that driver is not loaded, make sure that you run same version of Control Panel application executable (from the same distribution package).

If the problem is not described here, please contact support describing the problem in details.

VAC installation produces error 1072 (The specified service has been marked for deletion).

Most likely, you previously tried to uninstall VAC when some cables were in use and uninstaller was unable to remove the driver's service. Please restart the system and retry installation. If there will be some "already exists" errors, use Advanced Setup Mode to repair.

KS version of Audio Repeater displays error 87 (the parameter is incorrect)

Some WDM/KS drivers may incorrectly return this error if some format parameters are not supported. Try to use different format parameters for the appropriate input or output pin.

MME version of Audio Repeater displays error 1 (undefined external error)

If such error is shown for input/recording endpoints in Windows 10, check the Microphone Privacy settings.

Since MME error code 1 is the "unspecified error" code, it may be returned in some other cases, where specific error codes are not defined, for either input/recording or output/playback endpoints.

VAC KS pins are accessible but higher-level endpoints are inaccessible.

Windows Audio Subsystem allows to selectively disable higher-level audio endpoints without affecting their underlying KS pins. So you may discover that Virtual Cable endpoints (or other device's endpoints) are not visible/accessible via WASAPI, MME or other higher-level interfaces (for example, by Audio Repeater MME), but KS pins are visible/accessible (for example, by Audio Repeater KS).

In such case, open Audio Properties Applet, switch to "Playback" and/or "Recording" tab, right-click on any enpoint, and make sure that "Show disabled devices" is checked. If there are endpoints marked as "Disabled", right-click on them, and click "Enable".

Trying to start recording from Virtual Cable device, you get a message saying it is busy.

At first, please make sure that error message really applies to Virtual Cable device, not to another audio device.

This error occurs if there are no available pin instances to allocate for recording operation. By default, each cable pin allows several instances but if all of them are exhausted, there will be an error message on any Windows platform. For details, please read about audio stack layering.

Another cause may be the known bug in Windows 6.x systems.

Trying to start transfer in KS Audio Repeater, you get "pin does not support requested format" error.

This error means that a selected input or output pin does not support requested audio format.

Kernel Streaming version of Audio Repeater connects directly to audio device driver, not to System Audio Engine that has format conversion features. In most cases, device driver accepts only formats supported by the device and performs no format conversion. For example, if the pin accepts only 24-bit formats, 16-bit formats can be used only via high-level interfaces - MME/DS/WASAPI, and only 24-bit formats are allowed to be used via WDM/KS interface.

Audio signal passed through a Virtual Cable becomes distorted.

Signal distortion (garbling, crackling, popping, static-like clicking etc.) usually occur due to buffering problems in audio applications, System Audio Engine or VAC driver itself, if buffer lengths/sizes used for audio data transfer are not enough to compensate application and/or system processing delays. Another reason may be the non-realtime nature of Windows kernel.

First of all, please check if your system is suitable for real-time audio streaming. To achieve a stable streaming, all buffering times must be 1.5-2 times greater than longest internal delay. For example, if LatencyMon shows 20 ms internal system delays, you will have a stable audio streaming only with buffering lengths of 30-40 ms or greater. The problem is that System Audio Engine usually chooses 10 ms buffers to communicate with audio drivers.

If the system is considered suitable, check VAC driver and Audio Repeater application stability.

If Virtual Cable is the only path between two applications (one is playing back and another is recording), try the following:

  • Launch all applications before starting the streaming. Launching an application is a resource-intensive operation that often causes internal kernel delays.
  • Check the CPU load and try to lower it if high.
  • Try to stop unnecessary application activity.
  • Try to decrease the number of milliseconds per interrupt parameter for the cable.
  • Try to change appropriate port/miniport types, making sure that actual types (on the right of selection combo boxes) are changed. For example, change WaveRT to WavePci or WaveCyclic.
  • Try to increase worker thread priority.
  • Try to increase the buffering time in audio application.
  • If your application uses DirectSound under Windows 5.x, check and adjust the DirectSound hardware acceleration level.

If there are other (hardware or software) devices in the path (for example, an application records from a device and plays back to Virtual Cable, or vice versa), please also check if this issue is not caused by clock difference.

If you are using trial version that adds a female voice reminder, please pay attention to how this voice reminder sounds. Because it is added by VAC driver, playback side problems cannot affect it. Therefore, if you play back a signal to a Virtual Cable device and hear voice reminder clear but the signal becomes distorted, it means that recording side is OK but playback side has buffering problems. If both voice reminder and useful signal are distorted, it means that buffering problems occur on recording side and/or inside VAC driver.

Additionally, look to overflow/underflow counters for the particular Virtual Cable in VAC Control Panel. If overflow counter is not increasing, or is increasing rarely, but underflow counter is increasing rapidly, it means that buffering problems occur on the playback side, and vice versa. If both underflow and overflow counters are increasing rapidly, it means a total buffering problem due to CPU overload, high disk/network load, low cable timing event period, system timer problems etc.

If you still cannot eliminate cracks and/or distortions, please try deeper investigation and tuning described here.

As you start audio transfer over a Virtual Cable, there are distortions, but as you restart transfer, all works fine.

Many system and driver code and data parts are designed as pageable. It means that they are loaded to physical memory on demand as really needed so they may not be loaded automatically on system startup. Additionally, these parts may be unloaded from memory if not used frequently. To load such code/data parts, the system must perform some paging operations, reading from (and probably writing to) some disk files. Disk operations, especially on slow laptop HDDs, are much slower than memory operations and can affect real-time performance.

Therefore, when you start audio transfer, some code/data parts needed to process audio signals may not be loaded from their disk files or be unloaded to a paging file so the system must bring them back to physical memory before they can be used for signal processing. Additional time may be required for first-time initialization or re-initialization. It may cause delays and short-time distortions. Because these delays are random, streaming synchronization may be affected, especially if there are several real-time streams. As all code/data parts used for real-time processing are stabilized, streaming should become stable and smooth.

In Audio Repeater or similar applications used for device-to-device transfer, such delays may cause buffering failures (input or output queues become overflowed or underflowed immediately). In most cases, stopping and immediate restarting restores a smooth streaming.

Trying to change VAC parameters or perform a restart in VAC Control Panel, you get "Access denied" error.

To perform some privileged operations (for example, driver restart via device property change, or restart a service), VAC Control Panel needs to have administrative rights. So you need either to run VAC Control Panel "as administrator", right-clicking its shortcut, or log in using the native Administrator account (not a user with administrative privileges available).

Trying to restart the driver in VAC Control Panel, you get "Unable to restart driver" error.

Some applications and/or services may hold references to VAC devices without stream creation. Total count of these references is shown by VAC Control Panel in the "Clients" fiels. Normally, there are 4-5 references from system processes, they don't prevent driver from restarting. But if other services/applications hold additional references, driver cannot be restarted until these references are released.

If you have closed all audio applications but client count is greater than 4-6 and driver cannot be restarted, you could try to search processes holding references to VAC devices. Download Process Explorer (GUI) or Handle (command line) utilities from Sysinternals and search for paths containing "\topo" and "\wave" substrings. VAC device interface paths end with "\topoN" and "\waveN" where N stands for cable number. Please note that some references are held by system services (svchost.exe processes) so there is no way to determine a service holding the reference.

If you found some non-Windows processes and/or services holding VAC device references, try to determine software products that they belong to (by name, by Internet search etc.). Maybe such product has a tray icon that allows to stop the service. As a last chance, try to kill the process in Task Manager.

Never kill svchost.exe processes except if you are familiar with Windows services.

MME applications (for example, Audio Repeater) produce gaps in audio streams on smooth window minimizing/restoring.

Some MME audio applications, including Audio Repeater, use traditional window messaging (WM_xxxx) technique to receive real-time event notifications. When Windows performs window minimize/maximize animation, a delay in window message queue processing occurs and the application does not receive its buffer recording/playback events in the proper time.

To disable window minimize/restore animation:

  • Win 6.x: Control Panel - All Control Panel Items - Performance Information and Tools - Adjust Visual Effects - Animate windows when minimizing and maximixing.
  • Win 5.x: Control Panel - System - Advanced - Animate windows when minimizing and maximixing.

In Win 6.x, you also can try to enable Aero interface that performs some graphical operations by hardware so there are more CPU resources available for audio transfer.

KS version of Audio Repeater is free of such problem so you could use it instead of MME version if not don't want to disable window animation.

Using Audio Repeater MME in 64-bit OS, you don't see some devices in input/output device list.

Some old MME audio drivers register themselves using a non-standard way so only 32-bit audio applications can see them. 64-bit applications may not see them.

Starting from VAC 4.10, Audio Repeater application is distributed in both 32- and 64-bit binaries. Only an appropriate binary (32-bit in 32-bin Windows, and 64-bit in 64-bit Windows) is placed in VAC installation folder.

If you don't see some MME/DS devices in Audio Repeater lists under 64-bit system, try 32-bit binary from VAC distribution package (the x86 folder).

Video-intensive applications cause sound distortions and/or interruptions.

Applications that draw images on the screen intensively (animations, games, presentations) often consume many CPU and bus resources. Many video drivers violate Microsoft load balancing requirements to draw faster and smoother. Since VAC has no own hardware and uses main CPU and bus resources too, there is a competition and video drivers might hold their critical sections for a long time, preventing VAC worker threads to maintain reliable data transfer.

To solve these problems, try the following:

  • If the problem is related to Windows interface visual effects like window animation, try to disable visual effects at all or enable Aero interface.
  • If the problem is related to a particular application, try to modify application's settings (for example, lower the frame rate in a game, simulation speed in a simulator etc.).
  • Try to increase worker thread priority.
  • Try to update video drivers to the latest.

The Configure button in playback audio device list of Audio Device Control applet is not accessible.

This is a known behavior of Windows 6.x and later releases. These versions show Configure button only for speaker-type pins but don't allow to specify a name for the endpoint, always using "Speakers" name. Using speaker-type pins in VAC would not allow to distinguish between different Virtual Cables, they all would be equally named "Speakers".

So VAC uses LineOut-type output pins instead of speaker-type ones by default. These pins only allow to select a default format for shared-mode access.

You can enable speaker type using the "Enable spk pin" parameter in cable parameters section of VAC Control Panel. In such case, please carefully read the precautions.

You want to record a multichannel audio stream but there are only two channels.

At first, start VAC Control Panel and make sure that cable format range includes desired number of channels. For example, if you need 5.1 stream (6-channel), maximum number of channels should be set to 6 or more. In general, number of channels is set to 1..N but in some cases you could need to use a more strict rule (N..N) to disable undesired formats.

If you use Audio Repeater, make sure that an appropriate multichannel format is selected.

In Windows 6.x and later, shared-mode recording format is set to stereo by default. To use multichannel formats on recording, you need to configure default device format for the cable.

Trying to select default/shared format for the endpoint, you get "format not supported" error.

This problem may occur due to one of Windows bugs. As a workaround, set format attribute policy to ignore format attributes for the particular cable or for all cables (global policy).

After upgrading 4.15 or earlier to 4.50 or later, you have troubles with applications using KS interface.

Starting from 4.50, VAC supports RT Audio protocol and defaults to WaveRT port in Windows Vista and later systems, while previous VAC versions support only WavePci port in all systems. Some applications can use only standard Kernel Streaming protocol so they cannot interact with a Virtual Cable that uses RT Audio/WaveRT.

Try to change parameters of the the appropriate Virtual Cable to use WavePci or WaveCyclic for the appropriate cable end, making sure that actual port types are successfully changed to WP or WC.

Trying to record from a unused endpoint in Windows 6.x or later, you are informed that it is in use.

Windows 6.x and later releases use endpoints to access different source (input) lines. Most modern audio devices have multiplexed source lines, not mixed ones, so only a single source line can be used at the same time. If a recording endpoint in a multiplexed source line group is currently in use, all other endpoints in the group become unavailable.

An endpoint can be currently used by an application or by the system (as a default device, including default communication device). Audio device usage can be non-obvious, for example:

  • The Listen feature is turned on for the device.
  • Recording Device tab is open in the Audio Device Properties applet (it opens audio devices to show current signal levels).

To make all recording endpoints available for explicit selection by recording applications, make sure that no endpoint from a multiplexed group is currently in use.

VAC Control Panel does not start, displaying error message with "0/1 - Incorrect function" text.

First make sure that VAC Control Panel executable file is started from the VAC installation folder and VAC was correctly installed before. If you start it from a folder with unpacked VAC distribution files, there may be incompatible driver and application versions.

To make sure that driver/application versions are the same, you can compare product version for both driver file (vrtaucbl.sys) located in System32\Drivers subfolder of Windows root folder, and application file (vcctlpan.exe) located in VAC installation folder (usually C:\Program Files\Virtual Audio Cable). To see a product version, right-click on the file, select Properties, open Version tab and select Product Version. Product version for driver and application files must be the same except of a build number (last of four numbers delimited with the period).

Also please make sure that VAC Control Panel is started from the folder you specified in last VAC installation. If installation and/or uninstallation procedures were performed inaccurately, there may be alternate folders containing different versions of VAC Control Panel application, and your Desktop and/or Start Menu may contain shortcuts to them.

If driver/application versions are the same, check if Creative Live! Cam Virtual driver is installed. It can be checked in Device Manager (by name) or in System32\drivers subfolder of Windows root folder (by the livecamv.sys file name). This driver was developed from VAC by a third-party company and incorrectly uses some identifiers used by VAC, making a collision.

Creative Live! Cam Virtual driver is a part of some Creative Live! Cam web camera products. To avoid a collision, disable or even uninstall it.

Please visit Creative website to obtain updated camera software.

At each boot, you see "the data is invalid" message window with "TBIA" header.

This message is generated by M-Audio Fast Track product. Most likely, this application queries audio drivers for their properties and handles returned values incorrectly. Please upgrade your Fast Track version and contact M-Audio for support if the message still appears.

Overflow and/or underflow counters in VAC Control Panel are growing continuously.

Massive buffer overflows/underflows usually occur in two situations:

  • VAC driver client (an application or System Audio Engine) fails to provide memory/data buffers in time (fast enough). In such case, you need to check your system's performance (CPU and memory speeds, CPU consumption, background disk/network activity etc.).
  • Virtual Cable pin is used by System Audio Engine in shared mode and all System Audio Engine's clien streams are paused. It is a normal sutuation caused by System Audio Engine's behavior because VAC cannot distinguish between buffer/data absence due to a temporary client failure or such pause processing technique.

There are audible gaps, cracks and pops in the signal but there are no overflows/underflows in the cable.

Signal distortions may be causes solely by client applications, while VAC transport works reliably.

With RT Audio KS protocol and WaveRT port type, client-to-driver communication principles don't allow drivers to register buffer overflow/underflow on client side. So overflow/underflow counters don't work for the appropriate cable side.

You use Audio Repeater to monitor VAC cables with a soundcard and there are periodic interrupts of the sound.

Like a hardware audio adapter, VAC has internal software clock to time audio data transfer. There always is a slight difference between each clock. Within several minutes, a total difference may become enough to buffer overrun or underrun. Try to adjust cable clock to match device's clock.

KS version of Audio Repeater shows much lower actual sampling rate than specified in format settings.

To calculate actual sampling and clock rates, Audio Repeater periodically gets current stream playback/recording position from a driver to see how fast the position is moving. In looped streaming protocol, stream position is always moving through stream's circular buffer so position moving speed always represents playback/recording sampling rate accurately. But in standard streaming protocol, the position cannot go beyond a chain of buffers submitted by a client (in this case, Audio Repeater application). If all buffers submitted by a client have been processed and there are no available buffers in driver's queue, the position stops until a buffer is submitted and data processing is resumed. There is no way to get data-independent stream timing information in standard streaming protocol.

If KS version of Audio Repeater uses very short (1-2 milliseconds) buffer parts together with small (1-4) number of buffer parts (for example, 4ms of total buffer divided onto 4 parts), buffer part exchange rate between Audio Repeater and a driver (including VAC one) becomes very high (1000-3000 times per second). Each time, several user-to-kernel mode and back switches are performed. The system may be unable to maintain such high communication rate smootly, and periodic internal kernel delays may disrupt a continuous data buffer flow. Therefore, gaps between buffer parts start to occur, some audio data are loss, and position movement becomes jerky.

In such case, try to increase number of buffer parts without touching total buffer duration. The more buffer parts in the queue, the more stable data flow is. If increasing number buffer parts to 8..16 does not help, try to increase total buffering time.

If you disconnect an external audio device or turn it off while Audio Repeater uses it, an error message is displayed.

It is quite normal. As you disconnect an audio device or turn it off (for example, a TV connected via HDMI), the appropriate audio endpoint disappears from the system and applications cannot use it anymore. Only specially prepared applications are capable to silently stop their audio streams, save current state and automatically restore the streaming as the endpoint reappears.

The best practice is to stop all device usage before disconnecting it or turning off, as suggested for USB flash devices, external disks etc.

Trying to re-install VAC, you get an error message saying that a file, folder or device is already present.

Maybe you forgot to uninstall the previous (trial or older) version of VAC or uninstallation completed with an error, failing to remove some components. Uninstall it and then carefully follow installation instructions. If you encounter an error, read the uninstallation troubleshooting section.

When Windows returns from a suspended state, audio streams are not resumed or there are error messages.

Going to a suspended (Sleep/Standby/Hibernation) state, Windows closes some or all active application-to-device connections and sometimes disconnects (unmounts) some audio devices. Returning back to working state, Windows tries to connect (mount) the devices back and/or restore application connections. But some devices, especially external ones, need some time and/or some additional conditions to be reconnected. So special non-trivial measures are required for an audio application to resume all streams automatically.

To avoid such problems, don't put your system into a suspended state if audio streaming is active. Don't close audio applications, just stop audio streaming.

Using Media Player with Virtual Cables, you see Virtual Cable is in use after playback ends.

It is known Media Player behavior in Windows 6.x. Media Player opens playback device on first playback but does not close it until player window is closed. If you need to free Virtual Cable device (for example, to change cable format), close Media Player window.

Under Win 6.x, DirectSound interface cannot use more than two channels.

This problem occurs because DirectSound in Win 6.x gets channel configuration only from speaker-type pins. Try to enable speaker pin type for the cable.

VAC Control Panel shows that some cables are active but there are no audio applications open.

Unfortunately, Windows keeps no track of applications or processes that use audio devices. There is no way to show a list of applications or processes that use a particular device, you can find them only sequentially or by intuition.

  • Check all applications showing their icons in System Tray. Except system icons, each additional tray icon represents at least one hidden application. Do not forget that Win 6.x allows to hide some notification icons (up arrow is displayed in the tray).
  • Check if Audio Properties Applet is open. They can keep audio devices open to show signal levels.
  • Check if system default playback device is assigned to Virtual Cable device. If yes, system notification sounds (menu/button click, window maximizing/minimizing, device insertion/removal etc.) create audio streams at Virtual Cable.
  • Check if Listen feature is enabled for any recording device, using Virtual Cable as input or output.
  • Check if speech recognition is active. If yes, input device may be assigned to Virtual Cable.

When more than one Skype instances are used with several Virtual Cables, Skype freezes.

If you don't use PortCls data processing engine for WavePci port/miniport type, this most likely happens due to known PortCls bug. Please try affinity restriction technique.

An application accesses Virtual Cables via Kernel Streaming interface but sound is broken.

Maybe you have the same problem as with multiple Skype instances. If two applications (and even two threads in the same application) access PortCls simultaneously, it may cause buggy PortCls behavior. Please try affinity restriction technique.

When VAC is used with iTunes and/or QuickTime, sound is choppy.

iTunes uses QuickTime to play audio. To configure audio settings for iTunes, you must configure them for QuickTime instead.

To configure QuickTime audio settings, open its preferences by right-clicking QuickTime icon in system tray or by opening its applet in Windows Control Panel. Select SoundOut to display audio output settings page. In the playback device field, make sure that DirectSound interface type is selected, not the WaveOut (MME). If WaveOut is selected, change it to DirectSound and try to play again.

If DirectSound interface is already used but a sound is choppy, click Options to open advanced options page. Increase a buffering time in the FIFO size in millisecs field to 200..500 ms.

An audio signal passed via the cable becomes very quiet.

If stream format limiting is not used or upper number of channels is greater than in your stream format, System Audio Engine creates its main stream with maximal allowed number of channels and converts your format, lowering channel volume.

To solve this problem, make sure that stream format limiting mode is not set to "None" and correct upper channel limit for a particular cable.

You have selected a Virtual Cable for the application but it still uses a different endpoint.

Some audio software developers test their software in a typical system that has only a single audio device. In such case, this device always has ID 0 and is a system default. Even if such application allows to select audio device explicitly, it could have a bug due to that it always uses ID 0 (first available device) instead of particular device ID (1, 2 or more). If such application is tested only in a single-device environment, there are no other IDs than 0 and the bug may not be caught. Since most users, having single-device systems too, will not report it, the bug may persist for a long time.

A similar bug may occur if an application always used ID -1 (a system default device) instead of real device ID.

If you select a particular device for playback/recording but the application remains to use a first available or system default device, try to contact application's developers and/or support sevice.

As you decrease event/interrupt period duration for some cables, CPU load increases significantly.

In most cases, even 1 ms per event/interrupt does not produce a significant overhead. But some poorly designed applications/drivers that need a small delay, use the "skip current time slice" operation instead of specifying a specific delay time. By default, Windows time slice duration is 15 ms so such applications/drivers don't cause context switches more than 66 times per second. But with, for example, 3 ms per interrupt/event, system timer resolution is set to 1.5 ms and they can switch their contexts up to 666 times per second, increasing their overhead more than 10 times.

You can use Windows Task Manager or Process Explorer utility from SysInternals to see which processes (and their threads) cause most context switches in the system and try to exit them for a while.

If you experience high CPU load by VAC driver (shown by LatencyMon software) or "System" process (PID 4) when Virtual Cable devices are involved in streaming, you can try to disable stream/cable signal level calculation to reduce CPU consumption.

Signal level calculation parameters are not supported by Control Panel application and can be set only via registry values. One of them disables level calculation for all cable streams, and the another disables level calculation for entire cable. To disable level calculation, set parameter(s) to 1 (in the SOFTWARE registry branch, not in the SYSTEM one) and restart VAC driver. If signal level calculations are disabled, Control Panel will not show them. To enable level calculations back, set parameter(s) to 0 and restart VAC driver to propagate changes.

Try to disable level calculation for desired cable's streams first. If it does not help, try to disable level calculation for the cable.

The same cable/application configuration under server OS works worse than under desktop OS.

Windows Server operating systems use different scheduling policies than Workstation (desktop) ones. In particular, default thread execution quantum (time slice) in server OSes is several times longer (usually six times). It allows server threads to make more work within a single execution period but decreases responsiveness to real-time events and audio/video streaming stability.

You could try to decrease the quantum using the System applet in Windows Control Panel. Open Advanced System Settings dialog, select Advanced tab and click Settings... button in the Performance frame. In the next dialog, select Advanced tab. If the Background Services option is selected in the Processor Scheduling frame, change selection to Programs. If Programs is already selected, your system is already configured to use a short quantum.

You use Remote Desktop connection (RDS/RDP) but there are no Virtual Cable endpoints.

It is a common problem that occurs if remote sessions are used. Please read about remote access compatibility issues.

You use Remote Desktop connection (RDS/RDP) and audio stops as you disconnect.

The problem is in audio endpoint (device) management for Remote Sessions. Even you had turned remote audio support off ("Play on remote computer" or "Leave at remote computer"), and no virtual audio endpoints are created for the session, Remote Session Manager always reconfigures all audio endpoints in the remote system on each session connection and disconnection.

During the reconfiguration process, every endpoint is deleted and re-created. If the endpoint is used by an audio application for that time, the application receives an error (as for a suddenly unplugged USB device), and cannot continue to work with the endpoint. To continue audio operations, the application needs to re-open the endpoint (and possibly re-enumerate all endpoints to ensure that there were no changes in their set).

Only Core Audio endpoints (MME, DirectSound, WASAPI) are reconfigured. Kernel Streaming pins remain accessible, so applications using KS (for example, KS version of Audio Repeater) will not stop.

Such audio endpoint reconfiguration is definitely unreasonable if no remote audio support is requested for the remote session. You can submit a problem report via the Feedback Hub.

When trying to use Kernel Streaming version of Audio Repeater, Windows crashes.

At first, please configure your system to create minidump files. They help to isolate the error.

Additionally, you can download either Sysinternals' sync utility or FlushVol utility to flush file buffers to disks immediately before clicking "Start" on Audio Repeater. If there will be BSOD, flushing the buffers will minimize a chance of information loss.

At second, please determine an error source. Audio Repeater is a user-mode application that cannot cause a system crash (the blue screen, BSOD). It can be caused only by a kernel-mode code like a driver. Since Audio Repeater works with audio devices via their audio drivers, each driver is possible to cause a crash. So please try KS version of Audio Repeater to transfer from/to your hardware audio devices only, not selecting Virtual Cable devices at all. If there will be a crash, it means a bug in hardware card drivers, not in VAC driver. If so, please contact audio card manufacturer for driver update. You may also attach some minidumps to help the manufacturer to fix the bug.

If KS version of Audio Repeater works normally with your hardware audio devices, try KS version with Virtual Cable devices only (for example, from VC1 to VC2). If there will be a crash, it will mean that bug is located in VAC driver. In such case, please send a couple of latest minidump files for investigation.

Using VAC to route audio from the microphone, you hear an unwanted echo.

An echo can appear if your audio connection scheme has some loopbacks and/or multiple repeaters. For example, each audio card can repeat (monitor) an input signal to its own output (the speakers). If monitoring is enabled (input line is not muted), you will hear your voice in the speakers even there is no audio application running.

If an application records an input signal and also reproduces (repeats) it to the speakers, a signal copy is created, sounding as an echo. This copy appears slightly later due to the buffering. Input audio signal also could be copied to the speakers due to improper Virtual Cables assignment in applications.

To avoid an echo, you should disable either input line monitoring in the audio card or recorded data playback in the application. You can control audio card monitoring status (volume and mute) in its volume control panel (the mixer). To disable repeating in the application, see application's settings. Also check your Virtual Cable connection scheme to avoid possible loopbacks and parallel signal paths.

To isolate the cause of the loopback, modify your audio connections and settings step-by-step. If next modification eliminates or alters the loopback effect, you probably found the suspicious part.

You have started wave record, then run Cakewalk but there are no Virtual Cables in Cakewalk endpoint list.

Cakewalk may behave slightly strange, querying audio devices upon startup only. During them, Cakewalk queries wave devices to know whether they support various audio formats or not. If wave device does not support a particular format, Cakewalk excludes it from available wave endpoints.

If the stream format limiting is enabled for a Virtual Cable, all wrong formats will be rejected. Thus, stop all activities for all cables whose you want to use in Cakewalk and/or disable stream format limiting. Then start Cakewalk, wait until it will be ready, and then restore previous settings/activities again.

You want to record a signal from (or play to) your favorite application but it does not allow to set an audio format and starts using an unknown format automatically.

You can use VAC Control Panel which will show you formats that are currently in use with each cable. See the example.

You try to convert a speech recording into text using Google Speech service but it stops after about a minute.

It is the known peculiarity of Google Speech API/service. Similar behavior is observed if Google Speech records from a microphone (as usual) and you play recorded speech back from a phone, audio player or similar device.

There is no objective explanation of such behavior. Maybe Google servers keep fingerprints of all audio patterns submitted for speech recognition, and stop working if the pattern appears to be already known.


Virtual Audio Cable - Windows peculiarities and bugs

Windows peculiarities and bugs

The "Listen" feature does not change target endpoint on default endpoint change

If a default playback endpoint is selected as a target for the "Listen" feature, and default playback endpoint is changed, target playback endpoint is not changed, and audio stream is still transferred to the same target endpoint.

Systems affected: Windows 10/1903, Windows 10/1909.

System Audio Engine does not open a capture pin if instance count is nonzero

If a KS/WDM driver reports that there are available capture pin instances (KSPROPERTY_PIN_GLOBALCINSTANCES property request returns PossibleCount greater than CurrentCount), System Audio Engine does not create a pin instance if CurrentCount is nonzero.

In accordance with Microsoft documentation, PossibleCount values greater than CurrentCount mean that there are available pin instances, and the driver will satisfy a stream creation request.

Microsoft developers explain this Audio Engine behavior by the desire to avoid possible problems with multiplexed pins.

Systems affected: All systems from Windows Vista.

Channel peak values are not processed properly

Channel peak values (IAudioMeterInformation::GetChannelsPeakValues) may not be returned, and live peak indicators may not be shown in audio endpoint property windows even if the driver supports KSPROPERTY_AUDIO_PEAKMETER2 property request.

This bug occurs if the driver supports KSPROPERTY_AUDIO_PEAKMETER2 property request and supports more than two audio channels. The basic KSPROPERTY_AUDIO_PEAKMETER request is processed properly regardless of number of channels supported. If the driver supports both KSPROPERTY_AUDIO_PEAKMETER and KSPROPERTY_AUDIO_PEAKMETER2, systems starting from WIndows 8 use KSPROPERTY_AUDIO_PEAKMETER2.

Systems affected: Windows 10 from 1803.

The "Levels" tab of audio properties window crashes if the filter supports more than 8 channels

In playback endpoint properties, opening the "Levels" tab may crash the property window if the appropriate filter supports more than 8 audio channels.

Systems affected: All systems starting from Windows Vista.

RT Audio buffer created by a KS/WDM driver is much larger than requested

If an audio client requests a circular buffer in RT Audio protocol from a KS/WDM driver, the driver may return much larger buffer. For example, if 1920-byte buffer is requested, 4096 byte-buffer is returned. If 5760-byte buffer is requested, 8192-byte buffer is returned.

The problem affects all PortCls miniport drivers if a simple circular buffer without notifications is requested (KSPROPERTY_RTAUDIO_BUFFER property request). In such case, PortCls forcibly rounds the requested buffer size up to a multiple of a page size (4096 bytes). This leads to increased latency.

If the client requests a buffer with notifications (KSPROPERTY_RTAUDIO_BUFFER_WITH_NOTIFICATION property request), no size adjustment is performed by PortCls (but the driver itself may adjust buffer size as well).

Systems affected: All systems from Windows Vista.

System audio services send KSPROPERTY_PIN_PROPOSEDATAFORMAT requests with invalid parameters

System audio services that use MMDevAPI.dll may send many KSPROPERTY_PIN_PROPOSEDATAFORMAT property requests with invalid parameters passed in KSDATAFORMAT descriptor. Audio drivers that carefully check all the parameters, fail all these requests. Drivers that don't check all the parameters, may misbehave or even crash.

In most cases, invalid FormatSize, and arbitrary Flags and SampleSize values are provided. In the Flags, arbitrary values often contain KSDATAFORMAT_ATTRIBUTES flag, causing the driver to interpret the data beyond the KSDATAFORMAT descriptor as a format attribute list.

Such errors often occur with multi-channel (having more than two channels) formats. VAC driver event log may contain records marked with "*" that indicates an error, and containing words "attribute" or "KSDATAFORMAT".

As a workaround, VAC driver supports format attribute policies.

Systems affected: All systems from Windows Vista to Windows 10.


Virtual Audio Cable - Glossary

Glossary

Virtual Cable

A Virtual Cable is a software emulation of a real (wireline) audio cable. It consists of a pair of audio endpoints (formerly "devices"): a playback one and a recording one. These endpoints are internally connected to each other, making a loopback. All sounds played to the output/playback endpoint can be immediately recorded from the input/recording one. See the basic principles for more details.

In VAC documentation, the "Virtual Cable" term is used as a placeholder for the appropriate endpoint pair. For example, "Virtual Cable 2" usually has endpoints named "Line 2", unless you have renamed them. The "Virtual Cable 2" name appears only in KS-aware applications like Audio Repeaser KS.

Audio device

Commonly, "audio device" term means a hardware peripheral ("physical device", "adapter", "controller"), either separate (connected to an external connector), or built-in (soldered to the motherboard or even enclosed into an IC (chip)). In operating systems and applications, "audio device" often means a software resource ("logical device", "port", "connection point") that represents a particular function of the hardware device, accessible via system API.

At the dawn of Windows, the "playback device", "recording device" and "auxiliary device" terms represented system logical device that could be used to play sounds to speakers/headphones, record sounds from microphones/lines, and control audio parameters, like volume level. In most cases, all three types of such "software devices" were incorporated into a single hardware device, governed by a single driver.

Legacy Windows logical audio devices are called Waveform devices. By example, a typical audio adapter (card) has two logical waveform devices: Wave Input (Wave In) (typically microphone input) and Wave Output (Wave Out) (typically speaker output). The former is used to record (capture) audio data from hardware inputs (sources) to applications, and the latter - to play (render) audio data from applications to hardware outputs (destinations).

Logical audio devices are accessed via audio interfaces. Different interfaces may expose different logical device sets. For example, for a single WDM/KS resource (a pin), higher-level interfaces may create several endpoints that represent separate source lines served by the same pin.

Using the "device" term in documentation, it is required to distinguish between hardware devices and software/logical ones. To get rid of such confusion, starting from Vista, the "endpoint" term is used to designate a logical device.

Audio endpoint

Windows versions prior 6.x create recording (capture) logical waveform device for each capture waveform pin exposed by a driver. This recording resource usually represents all recording capabilities of the corresponding hardware device, which may have several source lines. Selecting such resource in a recording application was not enough to record audio signal from a particular source line. A device mixer should be configured to select (connect) an appropriate source line before recording starts.

To avoid confusion between software and hardware devices, and to eliminate such additional steps, Windows 6.x introduced a new resource type called endpoint, or an "endpoint device". Instead of creating a single logical recording audio "port" common for all inputs of a single hardware device, Windows now creates a separate endpoint for each source line, concatenating source line name with hardware device name, like "Mic Volume (AC97 Audio)" or "Line In (AC97 Audio)", and exposes them as legacy logical waveform devices. When an application opens a particular endpoint for recording, Windows automatically selects the appropriate source line in device's mixer.

Since source lines in most audio devices are multiplexed, not mixed, only a single endpoint can be used for recording at a time. If a recording endpoint is used for recording, all other device endpoints multiplexed in the same group become unavailable.

Virtual Cable source lines are software-emulated and represented as "multiplexed" to look similarly to other audio devices.

Each endpoint can be either in connected (plugged in) or unconnected (not plugged in) state. Endpoint of a real hardware device can become connected when a connector is plugged into a jack. Only connected endpoints are available for playback/recording and visible in application's audio device list. VAC driver represents connection state of its recording endpoints in accordance to VAC Control Panel settings.

You can view all audio endponts and their states in Windows Audio Properties applet, right-clicking on any item of Recording or Playback lists and enabling "Show disabled endpoints" and "Show disconnected endpoints".

Please note that endpoint creation in Windows 6.x is a very slow process. For example, creation of 30-40 endpoints (when a driver is initially loaded or restarted) may require up to a minute of 100% CPU load on 2 GHz machine. Therefore, avoid creation of large amount of Virtual Cables unless really needed.

Also please note that all Virtual Cables with enabled speaker pin type will have the same playback endpoint name, like "Speakers (Virtual Audio Cable)". It is by system design, not due to a bug.

At Kernel Streaming level, elementary (low-level) audio endpoints are called pins, and provided by low-level device drivers. High-level (usual) endpoints are created from such pins by System Audio Endpoint Builder, and served by System Audio Engine.

Audio Stream

Digital audio stream is a sequence of audio data samples/frames, representing an audio signal. Each stream has the appropriate format.

"Fixed" (recorded) audio stream data can be stored on any type of data storage: RAM, ROM, HDD, SSD etc. Transferring a stream in real time is called real-time or live streaming.

In real-time streaming, stream is a data flow through audio hardware and software. For an audio application, it means a connection made by a client to an endpoint, with audio data flow between them.

VAC, being a KS driver, processes audio streams as KS streams.

Audio Format

A combination of audio encoding parameters (sampling rate, sample size and number of channels) is called digital audio format.

An audio format can be shortly specified as these three values: 48000/16/2 or (48000, 16, 2) means 48000 samples per second, 16 bits per sample and two channels (stereo).

Multichannel (more than 2 channels) formats also contain a channel configuration (distribution) parameter.

Audio data encoding

In digital audio, signal is represented by a sequence, or a flow, of momentary amplitude values, or samples. All samples in the stream have the same bitness, or size: 8, 16, 20, 24 bits and so on. Sample size defines sample value range and a dynamic range of the digital sound in decibels, which is near to six times larger than sample size in bits. For example, 16-bit samples can represent approximately 96 dB of dynamic range.

Audio signal can have one or more channels. Most signals are single-channel (mono) or two-channel (stereo). Modern audio hardware and software support five, eight or even more channels (for example, Dolby 5.1, 7.1 etc.). To represent these channels, audio samples are packed into blocks (frames), from left to right. A mono frame consists of a single sample value. In a single frame, all channel sample values are sampled simultaneously, at the same moment of time.

A sampling rate means how frequently sample values are measured (sampled) on recording or converted to signal amplitudes on playback. Sampling rate determines how many frames are transferred per second. This parameter is often called "samples per second" but it is correct only for a mono stream. Generally, it should be read as "frames per second" (FPS). But since all channels are samples at the same time, the "samples per second" term is correct too.

Sampling rate also defines an maximal signal frequency available for coding; it is a half of a given sampling rate, in Hertz. For example, to represent an audio signal containing frequencies up to 16 kHz, at least 32000 samples (frames) per second are required.

Sample values can be represented using various encoding methods. A simplest and most widely used method is the Pulse Code Modulation (PCM) when a numeric sample values immediately represents an absolute linear signal amplitude.

There are compressed encoding methods (ADPCM, a-law, u-law, MPEG, WMA, OGG etc.). They allow to compress audio data but require more resources to process them and frequently cause quality loss.

VAC supports only fixed-point PCM encoding.

Real-time performance

Performance of a computer system is commonly considered as a throughput, meaning how fast common operations (calculations, data transfer, image rendering etc.) are performed. Common performance is always measured averagely, by counting number of operations and dividing it by elapsed time interval.

Within the interval, operations are not always performed uniformly. There can be noticeable variations in CPU frequency, number of cores involved, power saving modes etc. so only average values are meaningful. Each computer task is performed sequentially, step by step, and the time required for each step may vary. Commonly, only total time required to complete the entire task is taken into account.

In audio processing, such overall performance is meaningful for "offline" operations only, when all audio data involved in processing are already stored in files. To process them (cut undesired parts off, adjust signal volume etc.) fast enough, it does not matter how uniformly the data are read, processed and written. For example, a processing application can read all the data first, then process them all, then write them all, or read-process-write data by small portions. In other words, it does not matter how the processing is organized internally, only a final result is important. If application's "internal" or "virtual" time flows non-uniformly, it does not affect the final result.

But in real world, the time always flows uniformly. If audio processing is related to real-world events (for example, recording a speech, musical performance, playing a sound back etc.), the "internal" or "virtual" computing time must flow uniformly too, in accordance with real world time. It is called real-time computing. Real-time performance means how fast and reliably the hardware and software reacts to events that occur in real world. In other words, not only overall performance (measured on long time intervals) is important, but short-time, momentarily performance it important too.

A good example of real-time performance is a conveyor production. To maintain an uniform, uninterruptible process, the transporter must not move faster than a slowest worker can perform his/her operation. Therefore, even a single worker that does not complete his/her work in time, can break entire process. To maintain the process moving uniformly, eachl worker must operate fast enough, produce no excessive delays.

Unfortunately, Windows is not a real-time OS. Having good overall performance, Windows never guarantees that all live streaming will be performed reliably, with no drop-outs, glitches, cracks or pops. In general, Windows real-time audio performance is quite enough. But sometimes internal system parts or drivers may interrupt audio processing for several, or even dozens of, milliseconds. To have reliable audio streaming, especially for low-latency processing, the system may require special testing and tuning.

Audio interface

To communicate with an audio device, each application must use some interface presented by Windows. Each interface consists of a set of functions and is restricted by a set of conditions and rules.

MME (MultiMedia Extensions), or WinMM, is the oldest audio interface introduced in Windows 3.0. It is intended for a streaming audio and has relatively high latency. Under Windows 9x/ME, MME interface uses old-style 16-bit code, as some other operating system parts. But MME is simple, exists in all Windows versions since 1991 and its behavior never changed. MME supports only shared access mode. Audio data are passed via a buffer chain provided by a client. Most audio applications can use MME interface. MME limits endpoint name length to 31 characters, so names may appear truncated. MME endpoints are accessed by their numbers, so arrangement issues may occur.

DirectSound interface has been introduced in Windows 95 as a part of the DirectX acceleration set. It combines a low-level, hardware-close, low-latency audio operations with a high-level, device-independent programming. Audio data are passed via circular buffer. Originally intended for games, DirectSound interface quickly became very popular in sound synthesis and recording/playback applications. In Windows 5.x, DirectSound supports both shared and exclusive access modes. In Windows 6.x, DirectSound acceleration features (the exclusive access mode) are not supported anymore so interface efficiency became the same as MME. Later, DirectSound is replaced with XAudio2.

WASAPI interface has been introduced in Vista. The abbreviation stands for Windows Audio Session API. It supports both shared and exclusive access modes. In the exclusive mode, it is highly efficient like hardware-accelerated DirectSound, but in shared mode, its efficiency is comparable with shared-mode MME and DirectSound. Main WASAPI advantage is that it has a modern style, object-oriented, flexible, allows to use local and global effect processors (LFX and GFX) and provides a way to insert user-defined processing objects (APOs) into signal path. Audio data are passed via circular buffer.

In addition to these high-level interfaces working via System Audio Engine, Windows offers a lowest-level, highest-efficiency Kernel Streaming interface to access audio drivers directly, bypassing all higher-level processing.

WASAPI in exclusive mode has almost the same efficiency as KS but may be affected by system layer implementation (for example, there are some problems in Win7 fixed in Win8).

Four interfaces described above are Windows standard ones. Additionally, there are some third-party interfaces intended for professional audio processing. Most popular of them is Steinberg's ASIO (Audio Streaming Input/Output). ASIO is designed for extreme performance and precision. VAC doesn't directly support ASIO but there are some ASIO wrappers over WDM/KS like ASIO4ALL or ASIO2KS.

The "low-level" and "high-level" terms are quite relative. In one case, interface level may represent its universality and usability (the simpler, the higher level). In another case, the level may represent interface features and efficiency (the more features or the higher efficiency, the lower level).

WASAPI, DirectSound and MME interfaces can be considered "high-level" only in comparison to Kernel Streaming because they are built on top of KS. In modern Windows versions, these interfaces are often considered "low-level" because higher-level ones (AudioGraph, MediaCapture, MediaElement, XAudio2) are offered. Meanwhile, XAudio2 is often called "low-level" because it offers hardware-close streaming control.

Client

A software entity (an application, a service, a part of operating system) that uses an audio endpoint and opens it, connecting to its provider, is called the client. Most low-level audio drivers allow only a single client (instance) for each pin but System Audio Engine supports unlimited number of clients, sharing device endpoints among them. VAC driver allows any number of clients to open each pin directly (in the exclusive mode).

If an application requests endpoint connection several times without closing it, it means that endpoint provider has several clients. In other words, each endpoint opening request is treated as new client appearance. Client disconnects from the provider when it closes an endpoint instance.

When an application accesses low-level audio endpoint (pin), provided immediately by a low-level driver, by KS interface, it becomes a driver's client. When an application accesses a high-level audio endpoint, it becomes System Audio Engine's client. In turn, System Audio Engine accesses a low-level pin and becomes low-level driver's client.

Audio buffers

All audio interfaces use audio buffer conception to interchange audio data between applications and devices. A buffer is a memory block containing an audio data fragment or intended to be filled with such data fragment. Data buffering is used to make data transfer more smooth and reliable.

A smallest data unit that a computer can transfer between a device and main memory is a word. In audio, each computer word contains only 1-2 frames of 16-bit stereo sound. It is extremely small amount for real-time streaming. So audio frames are packed in blocks containing thousands, hundreds or (as an exception) dozens of frames each.

In MME and legacy WDM/KS, a buffer chain algorithm is used to interchange audio data between an application and the audio subsystem; application sends several buffers to driver, driver plays them or fills them with data, and returns them back to application. An application must use more than one buffer because some time passes between a moment when a device driver inform about buffer completion and the moment when it receives a next buffer from the application.

In DirectSound, WASAPI and modern (RT Audio or WaveRT) WDM/KS, circular (ring) buffers are used; application allocates a single memory block, logically divided into several parts, tells the driver which part is ready for playback/recording, and the driver notifies the application when part processing is done.

To maintain a smooth and continuous audio stream, an application must provide enough buffering time. Most applications use 500.1000 ms of buffering time, divided into 8..12 chain buffers in MME or to 4..12 circular buffer parts in DirectSound, WDM/KS or WASAPI . But the more buffering time, the more latency is introduced. So you need to balance these parameters for each configuration used.

Kernel Streaming interface

Kernel Streaming (WDM/KS Audio, or KS Audio) is the lowest-level multimedia interface introduced in Windows 2000/98. The WDM stands for the Windows Driver Model, an universal driver structure and behavior making available to use a common binary driver file in Windows 98/ME/2000/XP and higher systems. The KS stands for the Kernel Streaming, the audio/video streaming technology of the Windows kernel.

WDM/KS is a very sophisticated, lowest-level multimedia interface supporting a huge set of features. It allows to achieve highest audio precision and lowest latency. In Windows 2000/XP and later, all higher-level audio interfaces are implemented on top of the WDM/KS.

WDM/KS supports only exclusive access mode. Only multi-client audio drivers like VAC allow to create multiple streams through a single pin.

Only KS interface allows a user-mode client to directly communicate with an audio driver with no intermediate layers. An application having properly-implemented KS interaction can achieve highest possible stream quality, efficiency and stability. Only driver and/or hardware bugs may affect signal quality and latency.

To communicate with the driver, KS clients use KS protocols. Full WDM/KS protocol implementation is very hard for a particular driver, so Windows offers Port Class Driver to simplify multimedia driver creation.

Kernel Streaming protocols

To exchange audio data and control the stream, KS driver and client must negotiate a protocol. There are two different streaming protocols used between KS client and KS driver: "legacy" and "realtime".

Legacy (or "standard streaming") is a native KS streaming protocol, available in all KS implementations, starting from Windows 98. Audio data are passed via buffer chains, as in MME interface. To send and receive each buffer in the chain, a switch to kernel mode must be performed. The higher processing event frequency, the lower latency, the more overhead.

"Realtime" protocol ("looped streaming" or "RT Audio mode") was added in Windows 6.x. Audio data are passed via single circular buffer (usually located in the hardware) that is directly accessible to user-mode client. No periodic kernel mode switching is required to write data on playback and read them on recording. If the driver supports a position register, no kernel mode switching is required to obtain current playback/recording position.

Inside each protocol, different processing modes can be negotiated between the driver and client.

Don't confuse the "realtime" in protocol naming with real-time performance/streaming. Since all audio streaming protocols are designed and used for playback or recording real world audio signals, they all definitely work in real time. The "realtime" term in protocol naming has a meaning like "more suitable for real time processing", "very low latency" etc.

Although standard streaming protocol is supported by all Windows versions that support KS, particular drivers support it by their own choice. Starting from Windows 6.x, RT Audio is considered preferred for most embedded hardware. Only USB audio drivers still support legacy protocol because there is no direct access from the CPU to internal circular buffer inside USB device.

VAC driver supports both legacy (in all systems) and RT (in modern systems) KS protocols. They can be chosen via PortCls port/miniport types.

Stream processing modes

Represent various peculiarities of Kernel Streaming protocol used by KS clients.

  • Looped - a looped (circular) data buffer is used.
    In legacy KS protocol, a buffer chain is normally used, when completed buffer parts are being returned to client, and new parts are being submitted in reply. In looped mode, buffer parts are never returned until explicitly requested, so the driver continuously loops submitted parts.
    In real-time protocol, a single circular buffer is the only way to interchange data between driver and client, so this mode is always indicated for RT streams.
  • Event notification - driver signals the events to notify the client about stream progress. Currently, RT protocol allows to specify up to two events that signal as the appropriate half of looped buffer is completed.
    If events are not used, clients have to poll stream position with a sufficient frequency.
  • Packet mode - stream data are submitted and completed in packets (parts of circular buffer). Currently, buffer can be divided into two packets (halves) only.
    In packet mode, both driver and client can check stream integrity, and detect data overflows/underflows.
    Without packet mode, data are submitted and completed in portions of any size, and only client can detect overflows/underflows by current stream position. Driver never knows how much data are submitted or completed by client.
  • Clock register - a hardware (or emulated) register is used by the client to read stream's clock information directly, without issuing a special API request and switching from user mode to kernel mode, and then back to user mode.
  • Position register - a hardware (or emulated) register is used by the client to read directly current stream position.

Looped mode can be used in both legacy and RT protocols. Other modes are used in RT protocol only.

Filter

In the WDM/KS driver technology, each device driver exposes a set of logical subdevices called filters (they are streaming filters like DirectShow ones). Each filter emulates a hardware processing unit. It can accept signal and/or data, produce them, or perform both of these operations.

Each filter exposes a set of pins.

Pin

A pin represents a connection point of a filter: recording (capture), playback (render), volume control, mixer, clock and so on. A pin is a low-level synonym of an endpoint. The "pin" term is similar to the "lead" in electronics.

To use a pin for audio streaming, Windows creates an instance of the pin by "opening" it. Each pin instance forms a separate stream. If an application accesses the pin directly using WDM/KS interface, the instance is created for the application itself, nobody else can use this instance and the appropriate stream. If an application accesses the pin in shared mode through System Audio Engine, the Engine creates a single instance for itself and then shares it among all connected applications. It allows single-client drivers to be used by multiple applications at the same time.

If the driver supports multiple pin instances, multiple clients can use the appropriate pin, creating their own instances. Most KS drivers support only a single pin instance so there can be only a single client (System Audio Engine or a KS-aware application).

KS stream (a pin instance)

In general, a term "stream" in sound/audio context is used to designate any kind of audio stream.

For a WDM/KS driver, this term is used to designate a data flow connected to a particular pin instance by request from a client. Each new pin instance forms a new stream. Each stream has its own audio format. An application can be connected to a KS stream either directly or via the System Audio Engine proxy layer.

VAC processes KS streams only. Higher-level streams are maintained by the appropriate interface providers.

Formats if Virtual Cable streams can affect the cable format.

Format conversion

Audio format conversion (resampling) is a particular case of data conversion in audio streams. To convert an audio data stream with a given format to a stream with another format, the following actions should be performed:

  • Sampling rate conversion if sampling rates are different. Usually, it is a most time-consuming operation.
  • Sample size (bit depth) conversion. It is the lowest time-consuming operation, unless special smoothing measures are used.
  • Channel set conversion. Depending on the source and destination channel sets, it can consume less or more processing time.

There are some known format conversion issues.

Format attributes

Format attributes are additional format properties for KS streams. These attributes can be provided together with KSDATAFORMAT descriptor if KSDATAFORMAT_ATTRIBUTES flag is speficied in the Flags field.

Format attribute support was announced in Windows 2000/98, but was actually implemented only in Windows 8.1 for signal rocessing modes. If a KS filter exposes format attribute support, systems prior to 8.1 may incorrectly form KSDATAFORMAT descriptor in their property requests, so the driver have to fail the request, and the format requested cannot be used. Even in Windows 8.1 and 10, this problem may occur with WaveCyclic ports.

VAC format attribute policies

To avoid problems caused by Windows bugs related to format attributes, VAC driver supports format attribute policies:

  • Default - enable format attributes for Windows 8.1 and later systems, if port/miniport type is WaveRT.
  • Process - allow and process format attributes regardless of system version and port/miniport type.
  • Ignore - ignore format attributes regardless of system version and port/miniport type.

If format attribute support is allowed, the appropriate miniport exposes support for signal processing modes.

Format attribute policies can be configured either globally (for all cables) or for particular cables. On VAC driver startup, actual policies chosen for render/capture sides of each cable are reported in driver event log.

Signal processing modes

Windows uses signal processing modes to tell KS drivers how to process stream data (don't touch, alter signal volume, apply audio effects etc.). Signal modes are selected via format attributes.

VAC driver doesn't support signal processing modes other than raw, but supports the appropriate property requests to conform to Windows requirements.

Source line

A typical audio device has a single digital recording channel that application can use to capture audio signal but several source (input) lines like Microphone, Line, Phone, CD and others. To capture audio signal coming from a particular source line, this line should be selected first. In Windows 5.x, you need to use Windows Mixer application to select a source line. Windows 6.x creates audio endpoints for this purpose.

As a virtual device, VAC has no real source lines. But some applications want to connect to a given line type (Microphone or S/PDIF) so VAC provides several emulated source lines. All of them are identical but Windows can use different default settings for each line. For example, Windows 6.x uses less sampling rate recording from the Microphone line than from the Line In.

Virtual Cable's source lines are internally connected to a multiplexer (mux), allowing to select only a single source line for recording. The only effect is volume control (if enabled): only selected line's volume controls affect cable volume. Currently selected source line is shown in cable state window.

Source line set is a cable configuration parameter.

Cable format

When a Virtual Cable gets its first input or output client (stream), a particular audio format is chosen as the cable format. Cable format parameters are determined from both first client (stream) format and the cable format range.

Cable format is fixed while a cable is active ( has at least one client/stream).

Internal mixing is performed in cable format so all render/output stream data are converted to cable format, and mixed results are converted from the cable format to capture/input stream formats. If cable channel mixing is enabled, VAC also converts channel sets in multichannel streams.

Cable format range

A range of audio formats allowed to be selected as a cable format. The wider this range is, the more formats are available to be chosen for a cable, the more often format conversion occurs. Format range is a cable configuration parameter.

If range of each format parameter (sampling rate, bits per sample, number of channels) is narrowed to a single value (for example, 48000..48000, 24..24, 2-2), cable format will not vary, and always be the appropriate, regardless of stream formats. But some streams may not be created due to stream format limiting.

Cable channel mixing

By default, VAC converts channel sets in multichannel streams if number of channels in stream and cable formats are different. For example, when converting from stereo stream to mono, VAC mixes (sums) both left and right channels, producing a single channel stream. When converting from mono stream to stereo, VAC spreads a single channel into left and right ones. When converting 4-, 6- and 8-channel streams, more complex rules are applied.

If channel mixing is disabled, VAC performs channel scattering (placing sequentially packed channel data to specified channel configuration positions) or gathering (extracting specified channel configuration positions and placing them to a sequentially packed set) instead of mixing them. See here for details.

In some situations, disabled channel mixing may produce undesirable effects.

Channel mixing mode is a cable configuration parameter.

Channel/speaker configuration (channel distribution)

For mono and stereo audio data formats, only known, dedicated speaker placements are available: for mono, there is only a single speaker; for stereo, there are only two speakers or headphone parts. So it is not necessary to specify their placement additionally.

For multi-channel formats, there can be several speaker placement schemes for the same number of channels. For example, old 5.1 speaker configuration used back channels (the "5.1 back" scheme), while modern configuration uses side channels (the "5.1 surround") instead. Therefore, it is not enough to specify only a number of channels; you need to specify channel-to-speaker mapping as well.

VAC supports the following audio channels:

Abbreviation | Location | Hex mask
FL | Front Left | 1
FR | Front Right | 2
FC | Front Center | 4
LF | Low Frequency (Subwoofer) | 8
BL | Back Left | 10
BR | Back Right | 20
FLC | Front Left of Center | 40
FRC | Front Right of Center | 80
BC | Back Center | 100
SL | Side left | 200
SR | Side right | 400
TC | Top center | 800
TFL | Top front left | 1000
TFC | Top front center | 2000
TFR | Top front right | 4000
TBL | Top back left | 8000
TBC | Top back center | 10000
TBR | Top back right | 20000

Hex mask represents a bit mask corresponding to a single channel, in hexadecimal form. To get a mask for several channels, add their masks together, using Windows calculator in HEX mode. For example, a mask for FC+BR+SL channels will be 4+20+200 = 224 hex (0x224 in popular C/C++ notation).

Channel data (sample values) in the frame are always arranged within the frame in the same order as listed in the table above. So left channel samples always precede right channel samples, subwoofer channel samples always precede back channels samples, and so on.

For details, see the description on Microsoft site.

See here how to set speaker configuration for an audio device/endpoint.

Stream format limiting mode

A rule to limit a new stream format. Mostly used to control automatic format selection features of System Audio Engine. See here for details. Limiting mode is a cable configuration parameter.

VAC driver event log

VAC driver event log is a list of various internal events processed by VAC driver (stream creation, start/stop, termination etc.). Event log can represent some hidden details of driver and/or cable devices activity, helping to understand what is happening and isolate problems.

VAC driver internally keeps a relatively small amount of recent events. If Control Panel application is running, it constantly retrieves new events from the driver and places them to a drop-down list so no events are lost. But if Control Panel is not running, newer events may overwrite older ones in driver's internal memory so unread events may be lost.

In Control Panel's list, all events are kept until closing the application and event descriptions can be viewed and/or saved to a file.

System audio engine

The System Audio Engine is a system code that supports most of system audio features. It is hosted by the AudioDG (Audio Device Graph [Isolation]) process.

System Audio Engine acts as a "proxy" to each WDM/KS audio driver accessed via WASAPI, MME, DirectSound and other higher-level interfaces in shared mode. When an application uses shared connection mode, a separate pin instance is implicitly created to the System Audio Engine. See Audio layering issues for details.

Additionally, the Engine hosts Audio Processing Objects (APOs) implementing local and global audio effects (LFX/GFX).

Before Win 6.x, the same role was played by the KMixer (kernel-mode audio mixer), a system kernel-mode audio component (a special kind of an audio driver), a part of the Windows 98/ME and 2k/XP/2k3 audio subsystem.

System audio services

Starting from Vista, the system has a dedicated Audio Service (AudioSrv), named Windows Audio in the service list. This service maintains audio endpoint properties.

Audio endpoint database is built by the Windows Audio Endpoint Builder service (AudioEndpointBuilder). This service queries all audio pins exposed by KS filters and creates an endpoint for each pin.

These services are running in the Service Host process container (svchost.exe). An instance of such process may run several different services. To help finding the appropriate service, VAC driver shows service tags in its event log.

In some cases, restarting System Audio Service may help to eliminate some audio endpoint problems without rebooting the entire system.

Service tags

Most Windows services are running in dedicated Service Host process container (svchost.exe). An instance of such process may run several different services. Each service acts on behalf of its container process. When the service accesses a device, device driver can determine only process (PID) and thread (TID) identifiers, but not the service name. To identify a particular service, the driver may access the Service Tag, a numeric identifier of the service. VAC driver shows service tags in its event log.

Unfortunately, a driver cannot access Service Manager database to identify the name of the service. To identify the service by its tag, use third-party "sctagquery" command-line utility. For example, if the PID is 184 and service tag is 12, enter the following command line under an administrator account:

sctagqry -n 12 -p 184

Shared and exclusive pin access

Most audio device drivers support only a single instance of each capture or render pin (they are single-client drivers). To allow to access these pins from several applications at the same time, an intermediate (proxy) layer is required. In Windows, this layer is provided by the System Audio Engine: MME (all) and DirectSound/WASAPI (by default) connections are established in the shared mode when the engine creates a single pin instance for itself and all clients are connected to the engine, not immediately to the pin. System Audio Engine chooses an appropriate format for the pin instance, and then converts audio data between pin format and client stream formats. This mode is convenient but often not efficient enough.

DirectSound (in Windows 5.x), WASAPI (in Windows 6.x) and WDM/KS (in all systems) support exclusive pin access modes while the pin instance is created for a requestor application only. No other clients (applications and even system sounds) are allowed to share this instance. The pin is instantiated with the format requested and no format conversion is performed between client application and the driver. This mode is efficient but not convenient enough because there can be only a single application that can use the pin at a time. If the driver supports multiple pin instances like VAC, there is no such restriction.

Implementing multi-client pin access, VAC behaves like System Audio Engine in the shared mode, mixing playback streams together, distributing cable data among recording streams and performing format conversions. So most efficient VAC usage method is to use exclusive access modes when connecting to Virtual Cables is possible.

PortCls

PortCls stands for "Port Class Driver". It is Windows kernel-mode module (portcls.sys) implementing most common multimedia driver functions and intended to simplify drivers for particular multimedia hardware. A driver based on PortCls functionality is called "minidriver", or "miniport driver". PortCls receives all KS client and some system internal requests, translates them and passes to a miniport driver. So a miniport driver must implement only device-specific code.

In Windows XP and later systems, on a multi-CPU/core hardware, PortCls has some bugs. To avoid problems linked to them, VAC implements a workaround, processing most streaming WavePci requests without calling to PortCls. Processing can be switched back to PortCls engine for particular cables using cable configuration parameters.

Port class driver port/miniport types

VAC, as well as most other audio drivers, is built in a "miniport driver" model while driver binary module contains only code that handles driver-specific functions. Common functions are handled by standard Windows Port Class Driver module. The "port" and "miniport" terms mean internal system interfaces provided for software module communication. They are not related to hardware ports used for device connection, or I/O ports used for low-level device communications.

To communicate with audio miniport driver, Port Class Driver provides three internal port (interface) types:

  • WaveCyclic - intended for legacy audio adapters with a single circular hardware buffer common for all clients. It is the simplest (and usually most stable) interface but also the slowest one.

  • WavePci - intended for adapters with multiple bus mastering buffers individual for each client and internal hardware mixing support. Can provide less latency than WaveCyclic but port/miniport communication is much more complex and may cause problems in some cases.

  • WaveRT - intended for modern adapters having one or more circular hardware buffers directly accessible to user-mode clients. It is the most efficient interface having almost no overhead.

WaveCyclic and WavePci exist in all Kernel Streaming implementations. WaveRT was introduced in Windows Vista so it is not available in XP and older versions.

For a user-mode Kernel Streaming client (including System Audio Engine), audio drivers that use WaveCyclic or WavePci port interfaces are indistinguishable. In Windows terms, they support a "standard streaming protocol". Kernel Streaming version of Audio Repeater application calls such drivers "legacy". On the contrary, drivers using WaveRT port interface support "looped streaming protocol" and are considered "realtime". Audio Repeater calls them "RT Audio".

Most modern audio drivers for embedded (hidden under the cover) hardware support RT Audio protocol. USB audio drivers usually support legacy one.

Prior to 4.50, VAC supported only WavePci interface (and only standard/legacy KS protocol, respectively). Starting from 4.50, each side of each cable can be configured to support any of three port/interface types. Of course, WaveRT is not available in XP.

With WaveRT, VAC supports notification events (PKEY_AudioEndpoint_Supports_EventDriven_Mode property), and clock/position registers, allowing a user-mode client to maintain a stream with no periodic kernel mode switching.

Please look here how to properly choose between miniport types and KS protocols.

Latency

When an application and a driver deal with digital audio, they don't interchange single samples/frames; instead, they use memory buffers to store blocks of audio data. To respond to a real-time event, an application or a driver needs some time, from microseconds to dozens of milliseconds. Due to buffering and processing delays, there are some time between an audio signal arrives at a device input and its digitized value arrives in application memory. This time period is called latency.

Timing event (formerly the "interrupt")

Due to a discrete nature of the digital audio, continuous digital audio stream transfer is performed in series of blocks. To transfer a stream from each cable's output endpoint to its input endpoint, VAC has internal timing clock that generates system events allowing VAC to be called to transfer a next data block of the stream. Earlier VAC versions used timer interrupts for that. Current versions use timer events but the "interrupt" term is kept for a succession.

Interrupt/event period duration is a cable configuration parameter.

The more is event frequency, the shorter is event period, the less is block size, the smoother is stream transfer. But decreasing interrupt/event period causes increase of system timer resolution and timer interrupt frequency so system overhead is increased too. VAC driver sets system timer resolution to a half of the "MS per int" parameter specified.

Large (more than 10-15 ms) values may significantly disrupt stream uniformity and even cause stream breaking.

Mixer (volume control tool)

In general, a mixer stands for a device that mixes several audio signals together and allows to control their volume, balance, timbre and other parameters. Almost each audio adapter has its own mixer that allows to select recording sources, change recording/playback levels, and so on. These features are called a "adapter mixer" or a "driver mixer".

Windows prior to Vista/Win7 have a standard mixer control application that is often called "Windows mixer". It can be invoked by double-clicking at the speaker icon in the system tray. A window with a set of sliders and check boxes is displayed. You can view the mixer in two modes: playback (the default) and recording. In playback mode, the mixer controls output audio lines available for playback and repeated (monitored) input lines routed to the output (speakers). In recording mode, the mixer controls input lines available for recording.

To configure mixer panel, open Options menu and select Properties. In the dialog, select a device you want to control, select a mode and check input/output lines you want to see in the panel.

In Windows 6.x, system mixer became much more simpler. It can be opened by right-clicking the speaker icon in the system tray and selecting "Open Volume Mixer". You can change playback/recording levels for devices selected under an icon or for system/application sounds. Clicking on speaker icons at the bottom, you can mute/unmute audio sources.

Don't confuse Windows mixer control application with System Audio Service and System Audio Engine Windows component.

Start menu

The Windows Start menu is a hierarchical menu used to run applications and tools. Before Windows 8, can be open by the "Start" button located at the bottom left corner. In Windows 8, was replaced by the Tile Interface (Metro), but still available for the bottom-left corner click. In 8.1, a small Windows logo button is placed to the bottom left corner. In Win10, had been reverted back to a hierarchical menu view.

System tray

The System tray (notification area) is a rightmost area of the horizontal taskbar or a lowest area of the vertical taskbar, where system clock and application icons are located. In Win 5.x, this area always shows all existing icons. Starting from Win 6.x, some icons can be hidden. If there are hidden icons, double up arrow is displayed in the notification area.

Command line

The Command Line is a legacy way to specify the operations to be performed by typing textual commands. A command line consists of a command (action name) and optional parameters (arguments).

In Windows, any executable file can be invoked as a command. For example, Audio Repeater can be started with a command line, supplying the parameters.

To enter the commands, Windows offers a feature named "Command Prompt" or "Console Session". Commands are executed by the command interpreter (cmd.exe). Applications designed for a console session are named "console applications". Unlike GUI applications, they only can "print" their results as a text inside the console window. Some useful system and third-party utilities exist as a console applications only, there are no GUI analogs with the same functionality.

To work with console applications, open the Command Prompt item in the Windows System or Accessories folder from the Start Menu, or enter "cmd" in the "Run" dialog invoked by Win-R. To open a privileged console session, right-click the Command Prompt item and choose "Run as administrator".

Although you can run a console application directly from the "Run" dialog, typing or pasting the command line, the console window will be closed immediately after the console application exits. If you need to see the results, open a console window permanently.

To paste a command line into the console window, try Shift-Ins or Ctrl-V combinations. If they don't work, left-click the upper left corner, then click "Edit" and select "Paste". Press Enter to execute the command.

To execute a command/application, the Command Interpreter must know where it is located. If the application is not installed into the system but just downloaded, it is better to place it in a separate folder with a short name containing no spaces (for example, c:\tmp). To run the application (for example, ScTagQuery) from the console session, place the path prefix before the application name:

c:\tmp\sctagqry -p 1752

To run the application several times, change the default folder first:

cd c:\tmp

Then you can run the application by entering only its file name, followed by the optional arguments.

To exit the session, type "exit" and press Enter.

Command can be grouped into a script (batch/command file).

Windows Control Panel

Windows Control Panel is a set of Windows built-in control and management applets. In Windows XP, Vista or Windows 7, you can open it by clicking Start - Settings - Control Panel. In Windows 8 and 10, Control Panel is replaced by the Settings window that can be opened by right-click on left bottom screen corner and choosing "Settings" from the menu.

Don't confuse Windows Control Panel with VAC Control Panel.

Windows Device Manager

Device Manager is a built-in Windows Management Console applet, displaying a device list and allowing to configure/reinstall them. Device Manager can be opened in any of the following ways:

  • Right-click on My Computer and select Manage.
  • Right-click on My Computer, select Properties, open Hardware tab and click Device Manager.
  • Open Windows Control Panel, open Administrative Tools then open Computer Management.

If started from a non-privileged account, Device Manager warns that it can only show device parameters. In a privileged mode, Device Manager can perform various device control operations.

Windows Task Manager

Windows Task Manager is a standard system application that shows running applications, processes and services, CPU usage and other useful information.

Task Manager can be quickly invoked by the Ctrl-Shift-Esc key combination. Alternative way is to open the Run Dialog by pressing Win-R, and enter executable file name (taskmgr) in the "Open" field.

In default non-privileged mode, Task Manager shows only processes belonging to the current user. To show all processes running in the system, run it from a privileged (administrator's) account.

Windows Resource Monitor

Windows Resource Monitor is a standard system application that shows system resource (CPU, memory, storage, network) consumption by running processes.

To run Resource Monitor, press Win-R and enter executable file name (resmon) in the "Open" field. If your account is not a privileged one, you will get a privilege elevation prompt.

Sysinternals utilities

Sysinternals is a long-time project started and maintained by several experienced system software developers (firstly independent, then joined Microsoft developer team). They have created a lot of useful system utilities helping to collect various information and troubleshoot the system.

Some utilities that may help in VAC troubleshooting:

  • Process Explorer - shows running processes, threads, services, loaded DLLs, open handles and much more.
  • Process Monitor - shows file, registry, network and process operations performed by the processes being traced.
  • Handle (command-line) - shows open handles to files or devices.

Windows Sound Settings

Windows Sound Settings is the main audio/sound settings page introduced in Windows 10.

This page can be opened two ways:

  • Right-click the bottom left corner of the desktop. Left-click Settings, then System, then Sound.
  • Right-click the speaker icon in the system tray (bottom right area). Click Open Sound settings.

The Audio Properties Applet can be accessed via the "Sound Control Panel" link.

Open Windows Sound Settings now (Windows 10 only)

Microphone Privacy Settings

Windows Microphone Privacy Settings is the new settings page introduced in Windows 10 version 1803. It can be found in Settings - Privacy - Microphone.

By the description, Microphone Privacy feature should prevent application access to microphone endpoints. But actually it blocks application access to all input/recording endpoints. Windows 10 may turn microphone access off automatically during the upgrade, so you need to turn it back on manually.

Open Microphone Privacy Settings now (Windows 10 only)

If privacy settings block input/recording endpoint access, VAC Control Panel shows a red border around the Privacy Settings button.

Audio Properties Applet

Audio Properties Applet is a built-in Windows Control Panel applet that manages and controls multimedia and audio devices. Do not confuse it with the Sound Settings Page of Windows 10 settings.

The applet can be opened by three ways:

  • From VAC Control Panel, click the "Audio properties" button.

  • If there is a speaker icon in system tray, right-click it and select:
    Windows 10    : "Open sound settings" then "Sound control panel", or "Sounds".
    Windows 6.x    : "Playback/Recoding devices".
    Windows 5.x    : "Adjust Audio Properties".

  • Open Windows Control Panel and open "Sound" (Windows 6.x), "Sound and Audio Devices" (Windows 5.x).

On the Audio tab, you can view and change default playback and recording devices, adjust DirectSound acceleration level, set speaker configuration and so on.

Clock

Each streaming device, both hardware and software, needs a clock source to transfer streaming data smoothly and uniformly. After each time period measured by the clock, a portion of streaming data is sent or received.

An asynchronous device (a computer, audio card, radio etc.) has its own clock source (a clock generator). A synchronous device (also called "slave") receives a clock signal from a master device having its own clock generator. Some audio devices (for example, professional audio cards) having their own clocks and normally working asynchronously, allow to use an external clock source to work synchronously with en external device.

When the CPU interacts with an audio adapter (on-board chip, a card, an external USB adapter) to send/receive a command or data block, CPU clock is used as a source, and the audio adapter acts as a slave (synchronous) device. But in audio streaming mode, adapter's clock is used (except of professional adapters that support external clock source) and CPU acts as a slave device.

In other words, the CPU determines when to send/receive a command or data block but an adapter determines when playback/recording of data portion completes. As the streaming has been started, CPU cannot instruct the adapter to move streaming data slower or faster; it only can change the sampling rate if the adapter supports sampling rate changing on the fly.

Being a virtual audio adapter, VAC has no its own hardware clock generator, it uses system timer to generate periodic events and form time intervals.

Clock difference

Two asynchronous devices, each of them has its own clock source, cannot have exactly the same clock frequency (rate, or speed). Since their clocks are different, their rates always are slightly different, and actual sampling rates are slightly different too. As a pair of a real watches, two asynchronous audio devices cannot have their data streams to flow in a strict match, and one stream slowly forestalls while other stream is late. As a result, there will be some gaps or losses in the overall audio data stream.

VAC supports clock correction feature to minimize this effect.

System timer (system clock)

To keep world time and synchronize various tasks, Windows maintains internal system time using hardware clock generators. A piece of kernel code responsible for timekeeping is called system timer or system clock.

Drivers of pure virtual (software-only) devices having no their own hardware clock generators, use system timer to generate periodic events and form desired time intervals.

A shortest time period that can be formed using a timer, is called timer resolution (granularity). Windows timer resolution can be changed by drivers and/or applications. The less granularity the timer has, the more exact time intervals can be formed but the more overhead is introduced, and vice versa.

VAC driver sets system timer resolution to a half of the smallest time event duration among all cables. Current resolution is displayed in driver parameter section of VAC Control Panel application. System timer resolution changes are registered in the event log. Current resolution is displayed in VAC Control Panel.

System default (preferred) audio device/endpoint

Windows supports up to 256 different MME/DirectSound/WASAPI audio endpoints for audio input and output. Any of them can be assigned as system default, or preferred device, that is used by default. Such assignment can be performed using Audio Properties applet. In application's device selection menus, default device appears as the "Microsoft Sound Mapper", "Wave Mapper", "System Default" or something like.

If an application issues a request to a default device, Windows routes it to the actual device that was previously set as a default.

In latest Windows 10.x releases, default devices can be set on a per-application basis. In Windows 6.x, default devices are set on a per-system basis. In Windows 5.x, default audio devices are set on a per-user basis.

See the system default device issues for details.

Default audio format for a device/endpoint

To support shared access mode, System Audio Engine creates a single, common pin instance for all client applications, using a common audio format. But the engine does not know which formats will be used in the future so it cannot choose a best format automatically.

In Windows 5.x, common format selection is based on the first connection request. For a recording request, the common format is the same as requestor's format. For a playback request, the common format is most "wide" format supported by the pin. If the pin supports high sampling rates, bit depths and number of channels, using most usual formats involves unnecessary format conversions, overhead and audio degradation.

To control these issues, Windows 6.x maintain a default audio format for each playback and recording device. When a device is opened in shared mode, System Audio Engine always uses its default format. So you can freely choose between default formats to achieve either best audio quality, or best performance, or best compatibility.

Default formats can be chosen in the "Sound" applet from Windows Control Panel. Open "Playback" or "Recording" tab, double-click a device and select "Advanced" tab.

Listen feature

Starting from Win7, Windows implements the Listen feature intended to monitor (hear a signal from) a recording audio device. When this feature is turned on for a particular recording device, System Audio Engine starts to continuously record from the device and immediately play back recorded signal to the given playback device. Thereby this feature is similar to Audio Repeater application.

To use Listen feature for a device, open the Audio Properties Applet, select Recording tab, double-click an endpoint, open the Listen tab, check the "Listen to this device" checkbox and select desired output device (usually speakers).

With this feature, you can either listen for a signal coming from a Virtual Cable (enabling Listen feature for a source endpoint for the cable and choosing headphones/speakers as a target device) or supply a Virtual Cable with a signal (enabling Listen feature for a source device and choosing Virtual Cable as a target device).

Once you turned Listen feature on, it remains active until explicitly turned off. Since there is no visible activity indicator, it is easy to forgot about it. If you have wrong/unwanted audio signals played back and/or recorded, make sure that there is no Listen feature activated by mistake for some devices used.

Speaker pin type

WDM/KS drivers of most audio adapters provide KSNODETYPE_SPEAKER type for their playback pins. Such pin type allows to configure channel distribution with the "Configure" button of Windows Audio Properties Applet but Audio Endpoint Builder always assigns the "Speakers" name for endpoints linked to these pins. If an audio adapter (real or virtual) has more than a single output line, it is impossible to distinguish them by name.

As a workaround, VAC uses KSNODETYPE_LINE_CONNECTOR for playback pins by default. It allows to use an unique name like "Line N" for each output line but does not allow to use system channel configuration features. Additionally, some channel processing problems may occur in applications using DirectSound.

To control playback pin type, use the "Enable spk pin" parameter in cable configuration section of VAC Control Panel.

Please note that enabling speaker pin type for some cables under Win 6.x causes playback endpoints of these cables to have the same "Speakers" name. Most audio applications distinguish between audio devices only by their names, not unique internal identifiers. Therefore, if you enable speaker pin types for two Virtual Cables and both these cables have the same "Speakers (Virtual Audio Cable)" name, audio application might confuse between these cables. Most probably an application will lose proper cable selection between running sessions.

Administrator account

A privileged (superuser) account in the system. Applications that run from this account can perform various administrative actions. Since VAC is a device driver, a special privilege is required to install it into the system or to restart it, applying a configuration change.

In Windows 5.x, any member of the "Administrators" group has such privilege and can perform these actions.

In Windows 6.x, there is UAC feature (enabled by default). Only built-in administrator account (named "Administrator") can perform all privileged actions without additional measures. Other accounts marked as "administrator" are "virtually privileged" and can perform privileged operations only by privilege elevation. The difference is only that a plain user account requires administrator password for privilege elevation while account marked as administrator does not.

If UAC is enabled, Windows tries to automatically elevate privilege level for applications marked as privileged (such applications cannot work from a non-privileged account). VAC installer and uninstaller are marked as privileged applications so Windows will ask for privilege elevation if you don't have enough privileges.

But VAC Control Panel is not marked as privileged because it can perform both privileged and non-privileged actions. So if you run VAC Control Panel from an account other than "Administrator" (even marked as administrator), only non-privileged actions will be available. You will not be able to perform actions that require driver or System Audio Service restart.

To start an application behalf on the built-in Administrator account, either log in using "Administrator" as a user name or right-click an application icon and select "Run as administrator" item.

Remote session

Initially, Windows supported only local work session when a user sits immediately at the console (display, keyboard, and mice) of a computer running Windows. Starting from Windows 2000, Remote Desktop Sessions (RDS) were introduced, when a user sits at a "terminal" (or a "client") computer but all user's actions are sent to a remote "terminal server" computer running Windows and the results (screen contents, sounds etc.) are sent back to a client computer. Terminal connections are established via Remote Desktop Protocol (RDP). Using such connection, a user can work with a remote computer as if he/she worked with it locally. But there are some limitations.

There are two types of Windows remote connections: separate (isolated) and direct ("console"). For a separate connection, Windows establishes a new login session, isolating user environment from other users. For a direct connection, remote user is connected to a main console session environment.

With desktop-sharing products like TightVNC, TeamViewer, LogMeIn, Remote Administrator, connections are established directly by translating screen updates from the server to your computer and translating your mouse/keyboard actions from your computer to the server. No separate logon session is created and your computer acts as a "remote console" for the server computer. Having such connection, you can use all server resources, feeling yourself like sitting at the server immediately.

Remote Connection/Session support in Windows allows to transfer sounds from/to the remote computer. By default, as you establish a session, all native audio endpoints of the remote system are hidden, and a virtual enpoints named like "Remote audio" or "RDP Audio" are created instead. If a remote audio application plays a sound to such endpoint, the sound is transferred to your local system, and you can hear it in your speakers/headphones. If an application records a sound from such endpoint, it is transferred from your local microphone or source line to the remote system.

You can turn such behavior off in the "Local resources - Remote audio" settings of remote connection dialog before establishing a remote session. In such case, no virtual audio endpoints are created for the session, and all audio applications will see the same audio endpoint set as in a typical local session.

There are some compatibility issues and even troubles related to remote sessions/connections.

Virtualized environment

An environment created by virtualization tools is called "virtualized environment".

Different virtual machine software offer different layers of platform virtualization. Some platform virtualization products offer full hardware virtualization (VMware, Virtual PC, Virtual Box, Parallels Workstation, Bochs) while most other products like Parallels Virtuozzo (mostly used in Windows VPS/VDS technology) offer only a partial virtualization (for example, OS level virtualization).

There are some compatibility issues related to virtualized environment.

Digital signature

Digital signature is a special digital sequence to check data authenticity and consistency. If data are illegally modified (tampered with), their signature becomes invalid and it can be easily checked.

Windows uses two types of digital signatures for executable (PE) files:

  • Publisher signature is applied directly by a software publisher (vendor) using a publisher certificate and certify the file as authentic one. A publisher certificate is obtained once and then used to sign all developed software. VAC executable modules are signed by the EV code signing certificate.
  • Windows Logo signature is applied by Microsoft Windows Hardware Quality Lab (WHQL) and certify the file as passed Windows-compliance tests. A software package is submitted to WHQL to test and if tests are successful, WHQL signs executable files as Windows-compliant. WHQL signature is not mandatory so VAC driver is not signed by it.

If you have digital signature problems with VAC driver, please read the guidelines.

Buffer overflows/underflows

A buffer overflow occurs if the buffer has no room for data should be placed into it (some data will be lost from a flow). An underflow occurs if the buffer has not enough data should be retrieved from it (data flow will contain a gap). If a buffer is filled at one side and drained at another side, overflows will occur if the filling flow is more "thick" than the draining one, and vice versa.

Compared with car fuel tank usage, an overflow occurs if your car tank has no more room to accommodate fuel provided via the filling hose. If the hose has no special protective cutoff, fuel excess will flow out and you lose it. On the contrary, if you don't fill a tank at the proper time, it runs out and your car will stop suddenly, requiring a maintenance.

In a multi-node or multi-layer chain, stream data overflow/underflow not necessary means a crack, pop or glitch. On the contrary, no data overflows/underflows do not mean that there are no cracks, pops or glitches. Data processing node/layer (a driver, an application, a service, a plugin etc.) that registers an overflow/underflow knows nothing about other nodes/layers in the chain; if they use extensive buffering, it may prevent audio stream from breaking. Therefore, if a node/layer had successfully passed data portion to another node/layer in the chain, there may be buffering problems in other nodes/layers, causing stream breaks.

Affinity restriction

PortCls system driver has a bug causing a significant drop of audio data processing efficiency on multi-CPU or multi-core hardware with WavePci port/miniport type. VAC implements multiple subdevices where most audio drivers implement only a single subdevice so this bug does not occur with most hardware audio drivers.

The problem is described in details in microsoft.public.development.device.drivers newsgroup. You can find the post, entering "skype portcls getmapping" in Google search string. Sorry, there is no stable link.

The best way to avoid this problem is to use VAC internal data processing engine instead PortCls one (internal engine is used by default).

If PortCls engine should be used for some reason, only possible workaround is to disable concurrent request processing in PortCls. For this, VAC offers some driver parameters and cable parameters to restrict CPU affinity of worker threads, belonging to System Audio Engine or to any client. Create the appropriate driver parameter value in the registry, setting it to a number of cables causing the problem, or create affinity restriction parameters for selected cables. Then restart VAC driver to propagate parameter changes.

WaveRT and WaveCyclic port types are not affected by this bug.

Worker thread

A worker thread is a driver's thread that performs all stream processing work (data transfer, volume control, format conversion etc.). Different threads can be executed on different CPUs/cores, achieving optimal performance and load distribution. By default, VAC driver starts one worker thread per physical CPU/core so all available CPU power can be used to process stream data.

By default, worker thread scheduling priority is relatively high (between a normal thread priority and highest possible priority value). It guarantees that stream data processing will take advantage over most regular threads but not to consume all possible CPU time.

You can limit number of these threads and/or change their priority using Control Panel application or modifying driver parameters in the Registry.

Cable and/or stream problem

A condition that prevents (or may prevent) normal cable or stream functioning.

A problem is indicated by red exclamation point. Cable problems are indicated in cable list window, left to cable number. Stream problems are indicated in stream list window, left to stream identifier.

If one or more cable streams have problems, cable problem is also indicated. If cable problem is indicated but there are no stream problems, the problem concerns the cable itself.

If there are no explicit messages describing the problem, see driver event log for details. Problem related messages are indicated by "!".

Windows boot process

Once, each Windows shutdown supposed a complete removal of all system components from the memory. Respectively, every system startup (boot) was performed "from scratch", by reading (loading) all required code and data from the disk. A system restarted (rebooted) this way was always clean from any temporary objects that don't persist on the disk. This is often called the "full" or "clean" restart.

Later, Windows began to support hibernation and hybrid shutdown modes, while the computer looks like completely turned off, but the live system state is not built from scratch. Instead, some (or all) code/data in the memory are saved to the disk during shutdown, and read back during boot process, to make boot process quicker.

In case of such optimized, partial startup, not all internal system and/or application data structures are rebuilt. If some actions (for example, software product installation, system update etc.) require a complete system restart, and the system is configured for hibernation or hybrid shutdown, such partial shutdown/startup sequence will not perform full system restart.

Therefore, the only way to perform a complete (cold) Windows restart, is choosing the "restart" option from the Power Menu. Other ways (choosing "shutdown", pressing the power button etc.) don't guarantee full system restart. You can use alternate ways only if you are absolutely sure that your system is configured for a full shutdown followed by a full, complete startup process.

Windows versions

Modern Windows NT releases are the following:

  • 5.0 - Windows 2000 (Win2k)
  • 5.1 - Windows XP (WinXP)
  • 5.2 - Windows 2003 Server (Win2k3)
  • 6.0 - Windows Vista, Server 2008
  • 6.1 - Windows 7 (Win7), Server 2008 R2
  • 6.2 - Windows 8 (Win8)
  • 6.3 - Windows 8.1 (Win8.1)
  • 10.0 - Windows 10 (Win10)

So the "Win 5.x" means Windows 2000/XP/2003 and "Win 6.x" means Vista, Server 2008, Windows 7 and Windows 8.

Windows 95/98/ME have 4.x versions and don't belong to Windows NT family.

In general, a property added or removed in a particular version, persists in next versions too, unless explicitly stated.


Virtual Audio Cable - History

History

Version 4.65 (21.01.21)

  • Fixed a bug introduced in 4.64: KS RT Audio filters didn't expose event driven mode (notification) support, so Windows Audio Engine didn't use short audio buffers.
  • Fixed a bug with output top channels confusion on Audio Repeater KS.
  • Signal level indicators now display visible levels for any non-silent signal, including a very low noise.
  • Double-click on a cable row acts like the "Cable Info" button.
  • Some format/attribute errors are now shown in the event log.
  • Added format attribute support policies as a workaround for some Windows bugs.
  • Stream management code in Audio Repeater MME is rewritten to decrease latency.
  • Added the ability to use comments in Audio Repeater configuration files.
  • Changed queue management algorithm in both MME and KS versions of Audio Repeater.
  • Minor bugfixes.

Version 4.64 (17.07.20)

  • Fixed the installer that didn't enable the device in XP.
  • Fixed a minor bug in timer event handling.
  • Changed system timer resolution handling algorithm for better stability.
  • Some improvements in Audio Repeater KS.

Version 4.62 (03.01.20)

  • Fixed driver signature issues in Win7/8/8.1.
  • Fixed minor bugs in Setup application.

Version 4.61 (30.12.19)

  • Fixed Audio Repeater bug that caused hangup on device disconnection.
  • Added top speaker channel support.
  • Added signal processing mode support.
  • Replaced independent cable clock sources with a single kernel timer to allow multiple cables to be coherent.
  • Fixed a bug in calculation of minimal cable event period (Cable Info window).
  • Fixed a bug in WaveRT capture stream processing that caused data loss on short buffering time.
  • Increased cable clock calculation precision, eliminating error accumulation.
  • Increased clock register bitness up to 64 and precision up to QPC resolution.
  • Added workaround for audio device properties confusion due to permanent property caching in Win10.
  • Cumulative algorithm for actual sampling rate calculation.
  • Added Sound Settings and Microphone Privacy buttons to the Control Panel.
  • Added Microphone Privacy reminders to Audio Repeater and Control Panel.
  • Changed signal level indicators from linear to logarithmic for better visibility.
  • Added gauge coloring to Audio Repeater windows.
  • Added automatic uninstaller launching feature to the setup application.
  • Added default endpoint checking feature to the setup application.
  • In the setup application, using more reliable device uninstallation algorithm.
  • Clarified names of System Audio Engine and Audio Service.
  • Added feature-limited free version.
  • Removed three-cable limitation from trial version.

Version 4.60 (12.10.18)

  • Added RT Audio packet streaming support.
  • Increased maximum number of supported channels to 32 (may cause problems, consult the manual).
  • Decreased default timer event period down to 3 ms to avoid RT Audio (WaveRT) glitches.
  • Show actual and potential cable/stream problems with state icons.
  • Show circular buffer duration and amount of buffered data (in milliseconds) in stream lists.
  • Show stream processing modes in stream lists.
  • Made application windows DPI aware (no blurring on high DPI displays).
  • Added high-resolution icons.
  • Added tooltips to application controls.
  • Added "Help" button to Audio Repeater applications.
  • Added a private property set accessible via any KS interface.
  • Added registry parameter for timer resolution adjustment.
  • Increased trial voice reminder delay to 30 minutes.
  • Added voice reminder status (silent/audible) indication to Control Panel.
  • Removed stream data buffer and stream watermark support because they were hard to tune and not very efficient against stream stability problems.
  • Some changes in Conrol API, not binary compatible with previous versions.
  • Fixed bug causing BSOD on some rare formats and settings combinations.
  • Fixed buffer notification positions.
  • Fixed minor bugs.

Version 4.51 (05.03.18)

  • Added second INF file to install under Win 6.x (Vista, Win 7/8/8.1).
  • Changed class/interface GUIDs for the driver, Control API and Native Mode key (custom versions only).
  • Decreased noise level in Native Mode.
  • Uninstall entry is now created with a constant product GUID.
  • Minor bugfixes.

Version 4.50 (30.12.17)

  • Fixed a bug caused Control Panel crash if VAC driver cannot be restarted.
  • Split monolithic cable KS filter into two separate render/capture filters.
  • Added WaveRT (RT Audio) and WaveCyclic port/miniport interface support.
  • Removed 16-cable limitation from the default INF file.
  • Met Device Guard requirements.
  • Signed with EV certificate to allow loading by Win10 in Secure Boot mode.
  • Added load/save configuration features to Audio Repeater.
  • Added actual sampling rate display to Audio Repeater.
  • Added stream's actual sampling rate and run time display to VAC Control Panel.
  • API: replaced CreationTime field in CableInfo with LifeTime to prevent calculation errors.

Version 4.15 (31.12.15)

  • Added KSEVENT_PINCAPS_FORMATCHANGE event support.
  • Replaced source line summer with a multiplexer.
  • Added recording side volume control.
  • Added cable information window with stream information list.
  • Added event log feature.
  • Fixed some bugs in KS version of Audio Repeater.
  • Added some options and useful information display to KS version of Audio Repeater.
  • Added MMCSS task registration to Audio Repeater to control thread priority.
  • Fixed a bug in resuming the streaming after sleep/hibernation.
  • Added Ctrl-C support in Audio Repeater "Wave in" and "Wave out" fields to copy device name to the clipboard.
  • Increased small buffer movement uniformity between VAC driver and applications.

Version 4.14 (30.05.14)

  • Fixed a bug caused playback at higher speed.
  • Added a workaround for PortCls bug (GetMaxMapRegisters function) causing position freezing.
  • Fixed a bug caused signal level to be painted over the header in Control Panel application.
  • Added stream buffer control to minimize overflows/underflows.
  • Added button to restart System Audio Engine.
  • Now filter volume/mute nodes always report 8-channel support.

Version 4.13 (23.07.13)

  • Fixed a bug preventing stream buffer watermark parameters from being loaded on restart.
  • Fixed bugs causing integer divide overflows in Audio Repeater (both MME and KS versions).
  • Added a workaround for PortCls bug causing BSOD (bugchecks 0x50 or 0xD6) in GetMaxMapRegisters function if Driver Verifier with the special pool is used for VAC driver verification.
  • Added peak signal level indicators to Control Panel.
  • Changed signal level indication in Audio Repeater from average to peak.
  • Fixed stream position timestamp error if PortCls is not used (occurred in Open Broadcaster Software).
  • Added a feature to control playback pin type (speaker or line out).
  • Fixed sleep/hibernate problems.
  • Added master volume control.

Version 4.12 (01.04.12)

  • Fixed RtAudio buffer processing bug in Audio Repeater KS.
  • Added clock rate display to Audio Repeater.
  • Changed number of worker threads limit to a number of logical CPUs.

Version 4.11 (11.03.12)

  • Added cable multi-selection feature to Control Panel.
  • Clock correction precision increased to 0.0000001% (1E-8%).
  • Added volume boost feature.
  • Fixed sampling rate change bug caused incorrect playback speed.
  • Rewritten data processing code from DPC to system thread set to minimize interlocked waiting and improve performance on multi-CPU/core systems.
  • Added stream buffer watermark control feature to improve stream stability.
  • Added "Reset counters" buttons (Control Panel) to reset cable/driver counters.
  • Minimum possible sampling rate increased from 200 to 1000.
  • Fixed a bug in KS Audio Repeater (device name string length was limited to 31 chars as in MME version).
  • Optimized KS Audio Repeater algorithms for more reliable transfer.
  • Added a feature to Audio Repeater: now command-line options can specify device number instead of its name to avoid name collisions if several adapters of the same type coexists.
  • Added several channel mixing/distribution schemes.
  • Added channel scatter/gather mode and cable channel mixing control.
  • Increased clock correction precision (registry value format is changed).
  • Added a privilege elevation manifest to Setup application to elevate privileges automatically.
  • Maximum sampling rate changed from 1000000 to 384000 in accordance with MS requirements.
  • Add "already installed" warning to Setup application.
  • Fixed some node property errors.
  • Fixed some minor bugs.

Version 4.10 (15.02.10)

  • Added IPrefetchOffset interface support (more stable audio in XP/Vista/Server 2008/Win7).
  • Added a workaround to avoid Skype freezing and to stabilize streaming in heavy load cases.
  • Changed voice reminder policy in trial version.
  • Added tray icon support to Audio Repeater.
  • Added Kernel Streaming version of Audio Repeater.
  • Added Wikipedia references in the user manual.
  • Fixed some bugs in volume control code.
  • Fixed a bug caused timer resolution restoration when a last cable stream was closed.
  • Added timer resolution correction on return from standby.
  • Added load splitting among CPUs/cores.
  • Added Authenticode digital signature from NTONYX.
  • Added instance closing feature to Audio Repeater.

Version 4.09 (11.06.08)

  • Fixed a bug caused system crash in case of incorrect volume settings.
  • Now multichannel nodes are exposed correctly (individual sliders instead of the Pan slider).
  • Fixed a bug caused break instruction crash (0x80000003) on a floating point format query.
  • Fixed a bug caused system crash in low memory situation.
  • Added a test signature to 64-bit driver module.
  • Increased average time interval between voice reminders in trial version.
  • Increased clock correction precision in Control Panel to 1/1000th of a percent.

Version 4.08 (14.09.07)

  • Clock correction amount is now represented and specified in percent values.
  • Changed clock correction algorithm to increase sampling rate precision.
  • Fixed a bug in the INF file that prevented Virtual Cables from being used via KS Proxy (for example, as a DirectShow WDM filter).
  • Fixed a bug in format checking code that limited number of channels to 2 under Vista.

Version 4.07 (28.06.07)

  • Removed another debug break instruction caused a bugcheck in rare cases.

Version 4.06 (15.05.07)

  • Fixed installer bug caused the driver to stay disabled after installation.

  • Removed a debug break instruction caused a bugcheck in rare cases.

Version 4.05 (12.05.07)

  • Added a clock correction feature.
  • Added configuration options for source line set (affects endpoint creation in Vista).
  • Changed service name in INF file to eliminate conflicts with VAC 3.
  • Added more correct multi-channel support under Vista.
  • Added a workaround for Vista portcls.sys bug (a miniport stream can be destructed without been stopped).
  • Removed the "Mic" source line (capture endpoint in Vista) from the default source line set.
  • Changed "Milliseconds per interrupt" default value to 7 to improve DirectSound stability.
  • Improved stream stability on short buffering times.
  • Changed the Control Panel interface.

Version 4.04 (31.12.06)

  • Fixed a bug in topology description (fake recording controls were not accessible).
  • Fixed some synchronization bugs (the system hangs while several cables are heavily used).
  • Added a pitch (frequency) shifting support.
  • Added a limited Vista support.

Version 4.03 (16.07.06)

  • Fixed a bug that caused change of signal pitch. This issue was previously considered as DirectSound bug and was described in FAQ section related to speech engines. This section has been removed from the FAQ.

Version 4.02 (22.05.06)

  • Added 64-bit binaries.
  • Some minor corrections.

Version 4.01 (24.03.06)

  • Fixed some bugs.
  • Changed default stream format limiting mode to the "Cable range".

Version 4.00 final release (06.03.06)

  • Fixed some bugs.
  • Added volume control features.

Version 4.00 beta 6 (27.02.06)

  • Fixed some bugs.
  • Added format conversion and stream format limiting features.

Version 4.00 beta 5 (16.12.05)

  • Fixed some bugs.
  • Added a manual file.
  • Installer/uninstaller improvements (administrator rights check, uninstallation entry creation in Add/Remove Programs).

Version 4.00 beta 4 (18.08.05)

  • Fixed some bugs.

Version 4.00 beta 3 (23.07.05)

  • Fixed some bugs.
  • Added installer/uninstaller.

Version 4.00 beta 2 (15.07.05)

  • Fixed some bugs.
  • Added Control Panel application is available.

Version 4.00 beta 1 (07.06.05)

  • First beta release (without an installer).