Virtual Audio Cable (VAC)
25+ years of experience. Connects audio apps together since 1998.
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.
This section combines global driver parameters not specific to a particular cable.
This section combines individual cable parameters.
This section shows all available cables and their most important parameters/states.
For example:
Cable list is updated several times per second, showing actual cable states.
Double-click on a cable row acts as the Cable Info button.
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.
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.
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 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.
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.
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.
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.
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.
By clicking the "Sound settings" button, you can open Windows Sound Settings page.
By clicking the "Privacy settings" button, you can open Windows Sound Privacy Settings page.
By clicking the "Audio properties" button, you can open Audio Properties Applet.