【用户手册】高级电缆使用

VirtualAudioCable14年前 (2010-10-10)用户手册

本节介绍高级使用方法。在尝试使用高级功能之前, 您需要了解VAC原理和简单的使用规则。

选择最合适的 PortCls 接口和 KS 协议

VAC 实现了所有三个PortCls 端口/微型端口接口:WaveCyclic、WavePci 和 WaveRT。一般来说,WaveCyclic 最简单、最可靠,WaveRT 最新且最高效,WavePci 的延迟比 WaveCyclic 更短。

这些内部接口类型不仅影响 VAC 和PortCls模块之间的内部通信及其效率。WaveCyclic 和 WavePci 都在 KS 过滤器和 KS客户端之间实现“旧”、“标准”或“传统” KS 流协议,而 WaveRT 实现“RT 音频”、“循环”或“实时”流协议。

可以在VAC 控制面板中为每个电缆侧独立 选择端口/微型端口类型。需要重新启动驱动程序才能使端口类型更改生效。因此,请仔细注意右侧的两个字母缩写“WC”、“WP”和“WR”,它们指示实际使用的端口/微型端口类型。

在Vista 及更高版本中, PortCls完全支持 WaveRT 端口/微型端口,系统音频引擎完全支持 RT 音频协议。但是,某些提供“KS 接口支持”的音频应用程序可能不支持 RT Audio。如果应用程序无法访问设置为 WaveRT 模式的 虚拟电缆引脚,请尝试将相应的电缆侧切换为 WavePci 或 WaveCyclic。

反之亦然,一些新的音频应用程序可能仅支持RT 音频协议,因此您可能需要在适当的电缆端使用 WaveRT 接口。

一般来说,使用以下规则来选择PortCls接口:

  • 首选 WaveRT 以获得最佳性能。

  • 如果某些应用程序无法访问虚拟电缆端点,请使用 WavePci 作为平衡解决方案(仅适用于这些端点)。

  • 如果出现流稳定性问题,请尝试使用 WaveCyclic 作为最简单且最兼容的接口。

  • 在XP中,不支持 WaveRT。

捕获(记录)和渲染(播放)电缆侧独立运行。因此,您可以为每一方分别选择PortCls接口和KS协议。

选择最合适的客户端接口

作为KS 过滤器,VAC 驱动程序为每条电缆提供一对渲染和捕获引脚。使用这些引脚,Windows 音频子系统构建更高级别的音频层(请参阅音频分层问题)。因此,每条虚拟电缆至少提供三个音频接口:WDM/KS、DirectSound和MME (Wave),每层都有一对录音/播放端点。在Windows 6.x中,将会有第四个接口,WASAPI。

下面的列表按效率递减的顺序显示了音频接口:

  • 波分复用/波分复用

  • 独占模式 下的 WASAPI或带硬件加速的 DirectSound(仅限Windows 5.x)

  • 共享模式 下的 WASAPI 、MME 或 DirectSound(在所有版本的 Windows 中)。

要获得更高的性能和更少的延迟,请使用最低级别的接口类型。为了获得更高的兼容性和更少的问题,请使用最高级别的接口类型。

在独占模式下 使用WDM/KS或WASAPI ,请记住它们不支持 pin 实例共享。仅当驱动程序支持多个引脚实例时,才可以与特定引脚建立多个连接。VAC 支持它们,但并非所有其他音频驱动程序都支持。此外,即使有可用实例, 系统也可能拒绝使用该引脚。

使用WDM/KS接口时,请注意,它包含大量功能(属性),但某些音频驱动程序,尤其是第三方驱动程序,仅使用有限的一组功能进行测试。某些属性没有得到很好的记录,因此驱动程序开发人员可能无法满足所有要求。不正确的驱动程序行为可能会导致应用程序故障甚至系统崩溃。尝试新的应用程序、新的音频设备或新的驱动程序版本,在执行重要工作之前,首先在最小的环境中对它们进行一些测试。

调整 DirectSound 硬件加速级别

从Windows 6.x +开始,不支持DirectSound硬件加速。

在Windows 5.x中,如果 利用其硬件加速功能,则可以更有效地通过DirectSound接口使用VAC 。要使 Windows 能够使用它,您必须调整VAC 设备的 硬件加速级别。

流和电缆格式限制

由于音频分层的特殊性,除了独占模式访问之外,音频应用程序无法完全控制 设备实际用于播放或录制的音频格式。在Windows 5.x中,录音操作始终向驱动程序请求指定的格式,但 Windows 5.x中的播放操作会尝试请求系统音频引擎设备支持的最宽格式。

例如,如果DirectSound 应用程序请求以 48000/24/2 播放,DirectSound 子系统首先从System Audio Engine请求 44100/16/2 。如果虚拟电缆是空闲的并且该格式在电缆格式范围内,则将选择 44100/16/2 作为电缆格式。将使用 48000/24/2 创建第二个渲染流,但使用电缆时无法更改电缆格式。因此,VAC 将执行从 48000/24/2 到 44100/16/2 的格式转换,信号质量将会下降。为了最大限度地减少格式转换,您可以限制电缆格式或流格式或两者。

电缆格式限制对于指定电缆两侧最方便的格式范围非常有用。例如,如果您想在一侧使用 48000/16/2,在另一侧使用 44100/24/2,则可以将电缆格式范围设置为 44100-48000/16-24/2-2。它可以防止由于系统音频引擎的隐式引脚实例分配而导致电缆格式锁定在低采样率和/或位数。

默认情况下,电缆格式范围仅限于非常常见的范围,以获得更好的兼容性。如果您想使用更广泛的范围,可以使用VAC 控制面板扩展格式范围。

如果驱动程序不允许DirectSound和MME子系统使用其首选格式参数,则它们通常可以尝试一些连续格式。驱动程序无法建议更高级别的层使用特定参数,但它可以拒绝某些格式并允许其他格式。所以你可以使用各种流格式限制模式:

  • 驱动程序范围(以前称为“无”)- 对常见驱动程序功能没有流格式限制。因此,可以使用驱动程序支持的任何格式创建新流。大多数情况下都会执行 格式 转换。

  • 电缆范围(默认)- 仅当其格式在电缆格式范围内时才能创建新流 。在某些情况下会执行格式转换。

  • 有线格式- 仅当其格式与当前有线格式完全匹配时才能创建新流。如果电缆空闲,则“电缆范围”模式用于第一个流(有关详细信息,请参阅格式选择规则)。因此,不会执行任何格式转换,因为所有有线流都具有相同的格式。此模式类似于以前的(2.x、3.x、4.00 beta)版本行为。

作为极端情况,您可以为每个电缆格式参数设置相同的下限和上限范围,并将流格式限制模式指定为“电缆格式”。因此,客户端流仅允许特定格式(例如 96000/24/2)。如果双方客户端都能够选择这种格式,则不会执行任何转换。所有音频数据将通过电缆原封不动地传输,没有质量损失。

但不要忘记,分层方案会阻止应用程序完全控制其音频活动。系统音频引擎中可能会发生一些隐式格式转换,并且无法轻松检查。

格式转换问题

VAC支持格式转换。但由于混合目的,VAC 无法直接从播放客户端格式转换为录音客户端格式。相反,VAC 首先将数据从各种播放客户端格式转换为有线格式,然后使用有线格式混合客户端数据。最后,VAC 将混合数据从电缆格式转换为各种记录客户端格式。

当第一个播放或录制客户端 连接到给定的虚拟电缆时,选择 电缆格式参数。采样率、每个样本的位数和通道数是从电缆格式范围中选择的,以尽可能接近客户的格式参数。

例如,如果客户端请求 44100/16/2,电缆格式范围为 22050-48000/8-32/1-8,则电缆格式设置为 44100/16/2(等于客户端格式)。如果电缆格式范围将采样率限制为 22050-32000,则电缆采样率将设置为 32000(可能的最高值)。如果限制为 48000-96000,则结果值为 48000(可能的最低值)。

如果您不知道特定应用程序使用哪种格式进行播放或录制,请运行VAC 控制面板。它显示每条电缆的 当前电缆格式。

对于多通道(4.1、5.1、7.1 等)格式,不要忘记调整共享模式访问( Windows 6.x +) 或扬声器配置( Windows 5.x ) 的默认端点格式。

如果启用有线频道混合并且有线/客户端格式具有不同数量的频道,则仅实现 1、2、4、6 和 8 频道的典型频道转换方案。在其他组合中,所有源通道混合在一起,然后分发到所有目标通道。

要重新映射通道、从流中提取特定通道或添加它们,请使用通道分散/收集功能。

尽量减少格式转换的机会。转换由主CPU执行并占用大量CPU 资源,因此可能会显着降低应用程序的速度。当许多客户端同时使用时,它甚至可能会挂起您的系统,因为转换是由内核模式线程执行的,这些线程通常比大多数系统和用户应用程序的线程具有更高的优先级。

音量控制问题

VAC 支持音量控制(衰减或增强)。对于每个播放或录制流,可以通过适当的接口方法控制音量和声相。对于整条电缆,可以通过音频混合器接口或Windows 音频混合器控制应用程序控制主音量、平移和静音。

要使用线缆音量控制功能,您必须在线缆配置参数 中启用音量控制。

音量控制限值为-40..+12 dB(从电压电平的100倍衰减到电压电平的4倍放大)。

要控制电缆音量参数,请使用 Windows 音量/混音器控制工具:

  • 在Windows 6.x + 中,右键单击系统托盘中的扬声器图标,选择打开音量混合器,然后单击设备名称/图标下的箭头并选择所需的设备。单击设备图标打开设备属性小程序;高级控件可以在“级别”选项卡上找到。另一种方法是通过从扬声器图标上下文菜单中选择音量控制选项来自定义快速音量控制窗口,然后单击以打开快速控制窗口。

  • 对于Windows 5.x:单击“开始” - “程序” - “附件” - “娱乐” - “音量控制”。另一种方法是右键单击扬声器图标并选择“打开音量控制”。在Windows 音频混合器控制窗口中,打开“选项”菜单并选择“属性”。在Mixer Device项中,选择合适的 Virtual Cable 设备,然后单击OK。混音器将切换以显示 Virtual Cable N 音量控制。第一组“音量控制”代表主要的电缆控制。”“Wave ”组调整波形流音量,“ SW Synth ”组调整系统创建的软件 MIDI 合成器通道音量。显示其他控件是出于兼容性目的,不会影响电缆操作。

VAC 支持录音(源)和播放(目标)音量控制。但在录音音量控制中,只有选定源线路的控制会影响电缆音量。

与格式转换一样,音量控制也会占用一些CPU 资源,影响音质。仅在真正需要时才使用它。

使用临时(客户端)电缆时钟控制

如果您需要将音频流从虚拟电缆端点传输到另一个音频端点(反之亦然),您可能会遇到时钟速率差异问题。在这种情况下,请检查执行传输的应用程序是否支持VAC 驱动程序的 时钟控制功能。

如果您使用音频中继器(MME或KS版本),请使用打开VAC 时钟控制。

使用永久电缆时钟校正

如果将虚拟电缆与其他音频设备一起使用的应用程序不支持VAC 客户端时钟控制,您可以尝试永久调整电缆时钟,更改电缆的时钟校正比率,直到电缆的内部时钟速度最接近另一个设备的时钟。

混音、格式转换和音质

输出流的混合是通过饱和(削波)来实现的。如果幅度值超过样本位数定义的最大范围,则将其剪裁为最大值。

VAC 使用相对简单的线性重采样 算法,不使用抖动或其他高级平滑功能。因此,转换结果听起来可能比原始信号差。为了防止质量下降,您需要注意格式匹配。理想情况下,所有三种格式(播放客户端的格式、电缆格式和录制客户端的格式)应该相同。

如果所有格式相同并且禁用了电缆音量控制,VAC 不执行任何转换,所有样本都直接复制,并且如果有多个播放客户端,则仅执行混音。在这种情况下,不会发生质量下降(执行BitPerfect传输)。如果您在播放端播放 WAV 文件并同时从录音端录制数据,则录制的数据将与播放的数据相同,除了可能存在的前导和/或尾随静默之外。

但只有所有使用的格式相同、禁用音量控制并且音频数据路径清晰易懂 时,才能实现如此完美的结果。在Windows 6.x +中,除非使用 WDM/KS接口,否则很难清楚地了解音频数据路径。

仅在真正需要时才使用数据包模式

当您想确保根本不存在缓冲问题(咔嗒声、爆裂声、间隙等)时,数据包模式可以显着提高流可靠性。但这种模式也有一个缺点:当没有足够的缓冲时间余量时,驱动程序可能会检测到实际上并未发生的错误上溢/下溢。当驱动程序报告此类溢出/下溢时,客户端可能会决定重新同步缓冲区;这个过程会导致声音伪影的出现。如果没有数据包模式,缓冲伪影可能完全或几乎听不见。

因此,仅在电缆一侧或两侧启用数据包模式以提高数据可靠性。如果没有数据包模式,缓冲区短缺情况下的伪影通常会更少。

首先开始录音

在Windows 6.x +中,您可以显式选择共享模式操作的默认格式,因此您可以忽略以下内容。

 当为系统音频引擎 创建公共pin实例时,由于分层问题,共享模式下的Windows 5.x音频子系统仅在第一个设备连接上传播录制音频格式。如果向虚拟电缆端点发出的第一个连接是播放请求,则共享格式选择将更加复杂并且更难以预测。因此,在Windows 5.x中,最好先使用虚拟电缆开始录制操作,然后再在同一电缆上开始播放操作。它将修复电缆格式,进一步的播放操作不会改变它。

“操作”代表实际的 录制/播放过程,而不是运行应用程序。某些应用程序具有特殊按钮和/或菜单命令来启动操作。但其他一些应用程序可以在需要时启动操作。例如,Skype在建立对等连接时启动它们。

要观察电缆格式的演变,请使用VAC 控制面板。

如果不是真正需要,请避免首先启动 KS 客户端

系统音频引擎由于其错误,如果存在正在实例化的引脚的活动实例,则无法创建KS 流。因此,如果您在启动更高级别客户端(MME、WASAPI等)之前启动KS录制或播放客户端,系统音频引擎将不会创建自己的 pin 实例,从而导致向相应的更高级别客户端发出播放/录制请求失败。

因此,如果您使用相同的虚拟电缆混合 KS 和更高级别的接口客户端,请首先启动播放和/或录制更高级别接口客户端中的至少一个,从而允许系统音频引擎分配相应的第一个引脚实例(播放和/或或录音)电缆侧。然后,您可以启动在最大 pin 实例数中设置的任意数量的 KS 客户端。

从4.70开始,VAC驱动默认欺骗系统音频引擎,因此您可以先启动KS客户端。但不要忘记第一个客户端设置电缆格式。如果默认格式不同,则会进行 格式转换。

多通道格式的扬声器/通道配置

要正确传输多通道音频数据,您必须为特定虚拟电缆配置扬声器配置。虚拟电缆的扬声器配置必须与音频格式的通道分布相匹配。要调整扬声器配置,请执行以下操作:

  • 打开音频属性小程序。

  • 在“播放”选项卡上,选择适当的虚拟电缆端点。

  • 如果“配置”按钮已启用,请单击它并选择适当的配置。

  • 此外,打开端点属性对话框并在“高级”选项卡上 选择默认格式 。

从Windows 6.x + 开始,“配置”按钮对于禁用扬声器类型引脚 的电缆不可用(默认设置)。您可以为某些电缆启用扬声器引脚类型,但所有这些电缆都将具有相同的“扬声器”播放端点 名称,因此很难区分它们。

重新映射(分散/聚集)多通道流中的通道

将有线客户端 流与有线声音混合并在客户端流之间分配有线声音,VAC通过三种可能的方式处理音频通道:

  • 使用常见的求和/分配方案将源通道集转换为目标通道集。例如,要将两个立体声通道转换为单个单声道通道,请将左通道和右通道相加在一起。如果电缆启用了 通道混合,则使用此模式。

  • 将一组较少数量的通道分散到一组较多的通道中。源流帧中相邻打包的通道按照源通道分布掩码的建议进行分布(分散) 。

  • 从一组较多的通道中收集一组较少数量的通道。由目标 通道分布掩码指定的放置在源流帧中的通道被压缩(聚集)以相邻打包在目标流帧中。

如果电缆的通道混合被禁用 ,则使用分散/聚集模式。电缆格式的内部电缆混合缓冲区始终按顺序放置所有通道。因此,可以从具有比有线格式更少通道的回放流执行分散,或者从具有比有线格式更多通道的记录流执行分散。反之亦然,可以从具有比有线格式更多通道的回放流执行收集,或者从具有比有线格式更少通道的记录流执行收集。

例如,流具有立体声格式(两个通道)和掩码0x410 (BL+SR),而有线格式具有 7.1 格式(八个通道)。如果码流是回放码流,则两个码流通道将分散到八个有线通道:左码流通道将混合到BL有线通道,右码流通道将混合到 SR有线通道。如果码流是录制码流,则从 8 个有线频道中采集两个码流通道:左码流通道从BL码流通道中获取,右码流通道从SR 码流通道 中获取。

换句话说,可以有两个数据传输路径:从音频应用程序(源)到虚拟电缆(目的地),或从虚拟电缆(源)到音频应用程序(目的地)。如果源流的通道数少于目标流,则会发生散射。如果源流的通道数多于目标流,则会发生聚集。

请注意,不支持频道重新排序。 分散/聚集通道始终以与源通道 相同的顺序打包。

仅当有线和流通道掩码重叠(按位 AND 非零)时才执行分散/聚集。否则,执行直接传输(将第一个源通道复制到第一个目标通道,依此类推)。

大多数应用程序不允许显式指定通道分布掩码;相反,他们根据通道数量分配标准掩码。要使用分散/聚集功能,您需要使用KS 版本的音频中继器或开发自己的应用程序通过WDM/KS 接口访问虚拟电缆引脚。

您可以使用有线和流信号电平指示器 观看频道如何重新定位。

请参阅演示分散/聚集功能用法的示例。

使用PortCls数据处理引擎

出于性能和稳定性方面的考虑,VAC 在WavePci模式 下使用自己的流数据处理引擎,部分绕过了标准 Windows PortCls驱动程序提供的代码。但VAC内部数据处理引擎并未涵盖所有可能的KS功能,因此可能存在一些问题。如果出现此类问题,您可以禁用内部 VAC 引擎并使用 PortCls 的引擎。在这种情况下,您可能需要限制系统线程关联性 ,以部分避免已知的 PortCls 问题。

WaveRT 和 WaveCyclic 端口/微型端口不需要此类解决方法。

向系统音频引擎报告引脚实例计数

从 4.70 开始,VAC 驱动程序不会向系统音频引擎 (AudioDG) 报告其实际引脚实例计数,以避免由于Windows bug导致创建高级 strem 失败 。如果引脚实例计数请求 (KSPROPERTY_PIN_CINSTANCES) 来自 AudioDG,VAC 驱动程序现在会在 CurrentCount 中报告零,从而使引擎认为不存在与过滤器关联的活动引脚实例(流)。

此解决方法允许在启动高级(WASAPI、DirectSound、MME 等)客户端之前 启动一个或多个 KS 客户端。

如果由于某种原因您需要恢复驱动程序的标准行为,请启用相应电缆端的实例计数报告,然后重新启动驱动程序以传播更改。

创建许多虚拟电缆

在将电缆数量增加到超过 5-10 之前,请阅读有关系统限制和开销问题的信息。

使用格式属性策略

要解决由Windows bug引起的格式支持问题,您可以使用格式属性策略。默认情况下,VAC 驱动程序仅 支持Windows 8.1及更高版本系统的格式属性和信号处理模式,并且仅支持 WaveRT端口/微型端口类型。在一些奇怪的情况下,可以定义明确的策略。

格式属性策略可以 全局配置或按电缆配置。除默认策略之外的每条电缆策略优先于任何全局策略。如果指定默认每条电缆策略(或未指定策略),则使用全局策略。如果对电缆应用非默认策略,则该策略将同时用于捕获端和渲染端。如果应用默认策略,则各方选择自己的实际策略。

必须重新启动VAC 驱动程序才能更改格式属性策略。为电缆侧选择的实际策略显示在 驱动程序事件日志中。


此软件“仅限学习交流,不能用于商业用途”如用于商业用途,请到官方购买正版软件,追究法律责任与本站无关!

我们每月需支付高额服务器费用,捐赠将保证服务器有更好的配置和稳定运行;非常感谢您的捐赠支持。
(资源收集整理维护不易,敬请珍惜并感谢开发者。)