User manual

Control Panel application

VAC Control Panel is a GUI 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 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 shortcuts (by default, "Virtual Audio Cable").

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

Some input fields (sampling rate, ms per int, capture/render ports etc.) have drop-down menus that allow you to select pre-defined values. If a click inside the field (to the left of the arrow) opens the menu, the field supports only predefined items. Otherwise, the click just sets the focus to the editable part of the field, and you can enter any desired value manually.

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 virtual cables to be created. Trial and Full versions allow multiple cables, Lite version is restricted. This parameter has its own Set button. Number of cables cannot be changed while at least one cable is in use. Changing this value causes driver restart.
  • Worker threads group controls driver worker thread usage policy. Has its own Set button. 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, the priority is optimized 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 multiple client threads intensively communicate with VAC driver using short (units of 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 the driver. This is a global setting that affects all cable format ranges. Before changing the limit, please read about compatibility issues.
  • Set - a button to set the above parameters.
  • Clients - shows 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 is registered. Some applications and/or system components may hold driver interface instances without stream creation; you can see client counter change as they start or exit.
  • Streams - shows 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 here 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). 10 ms per event/interrupt means 100 events/interrupts per second, 1 ms means 1000 per second, and so on.
  • Stream fmt limit - stream format limiting mode. Determines whether new streams are allowed or rejected, depending on their audio formats.
  • 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.
  • Packet mode - enable/disable packet mode  for capture/render port. Can be used to choose between the most reliable streaming and sound that does not irritate the ear.
  • 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, and you have to rename the endpoints manually to distinguish them.
  • 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:

    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 or enter the appropriate value in the "Cables" field and click Set button next to it. 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, so 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 in the "Cable" group. 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 grayed/dashed or half-checkefd checkbox mean that this parameter values are different for some cables. If you leave (or make) some fields empty and/or some boxes grayed 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).

  • Client clock - cable client clock information: identifier of the process (PID) that controls the clock, process name and the current client clock factor.

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 name - name of the process that created the stream. For KS interface clients, represents the process itself. For higher-level interface clients, always represents System Audio Engine process name.

  • PID - identifier of a process that created the stream (the same rules as for process name).

  • TID - 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 in the queue, or "n/a" if the processing mode doesn't allow to determine it. For render streams, this is the amount of audio data provided by the client and available for mixing to the Virtual Cable. For capture streams, this is the amount of client-provided buffer memory available for writing audio data from the 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. If there are buffer overflows/underflows, actual rate may be less than the rate specified by the format.

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

  • CPU - roughly estimated CPU usage by stream processing.

System limitations and overhead

Windows XP/2003 limit number of MME devices to 32. So MME applications that use waveIn/waveOut functions won't see more than 32 cable endpoints in Windows XP/2003. 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 virtual cables than really needed. Having many audio endpoints in your system,  you may experience excessive system overhead due to the slow endpoint building process.

Cable list update in VAC Control Panel can be slow when there are many cables. Audio application startup also may take a long time due to audio interface initialization.

Moreover, creating too many (100 and more) virtual cables may even cause other audio endpoints to disappear. Use this feature with care.

Also don't set Ms per int 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-11 only)

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

Opening System Sound Privacy Settings page (Windows 10-11 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.