【用户手册】词汇表

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

虚拟电缆

虚拟电缆是真实(有线)音频电缆的软件模拟。它由一对音频端点(以前的“设备”)组成:一个播放端点和一个录音端点。这些端点在内部相互连接,形成环回。所有播放到输出/播放端点的声音都可以立即从输入/录音端点录制。有关更多详细信息, 请参阅基本原则。

在 VAC 文档中,“虚拟电缆”术语用作相应端点对的占位符。例如,“虚拟电缆 2”通常具有名为“线路 2”的端点,除非您已重命名它们。“Virtual Cable 2”名称仅出现在KS感知应用程序中,例如Audio Repeater KS

音频设备

通常,“音频设备”术语是指硬件外围设备(“物理设备”、“适配器”、“控制器”),可以是单独的(连接到外部连接器),也可以是内置的(焊接到主板或什至封装 一个IC(芯片))。在操作系统和应用程序中,“音频设备”通常指代表硬件设备特定功能的软件资源(“逻辑设备”、“端口”、“连接点”),可通过系统 API访问

在 Windows 诞生之初,“播放设备”、“录音设备”和“辅助设备”术语代表系统逻辑设备,可用于向扬声器/耳机播放声音、从麦克风/线路录制声音以及控制音频参数,比如音量级别。在大多数情况下,所有三种类型的此类“软件设备”都被合并到单个硬件设备中,由单个驱动程序管理。

旧版 Windows 逻辑音频设备称为波形设备例如,典型的音频适配器(卡)有两个逻辑波形设备:波形输入(Wave In)(通常是麦克风输入)和波形输出(Wave Out)(通常是扬声器输出)。前者用于记录(捕获)从硬件输入(源)到应用程序的音频数据,后者用于播放(渲染)从应用程序到硬件输出(目标)的音频数据。

逻辑音频设备通过音频接口 访问不同的接口可能暴露不同的逻辑设备集。例如,对于单个WDM/KS资源(引脚),更高级别的接口可能会创建多个端点 ,这些端点代表由同一引脚提供服务的 单独源线。

使用文档中的“设备”术语,需要区分硬件设备和软件/逻辑设备。为了消除这种混乱,从Vista开始,“端点”术语用于指定逻辑设备。

音频端点

Windows 6.x之前的版本为驱动程序公开的每个捕获波形引脚创建记录(捕获)逻辑波形设备。该记录资源通常代表相应硬件设备的所有记录能力,其可以有多个源行在录音应用程序中选择此类资源不足以记录来自特定源线的音频信号。设备混音器 应配置为在录音开始之前选择(连接)适当的源线路。

为了避免软件和硬件设备之间的混淆,并消除此类额外步骤,Windows 6.x引入了一种称为端点或“端点设备”的新资源类型。Windows 现在不再为单个硬件设备的所有输入创建通用的单个逻辑录音音频“端口”,而是为每个源行创建一个单独的端点,将源行名称与硬件设备名称连接起来,例如“麦克风音量(AC97 音频) ”或“扬声器(Realtek 高清晰度音频) ”,并将它们公开为传统逻辑波形设备当应用程序打开特定端点进行录制时,Windows 会自动在设备的混音器中选择适当的源行

由于大多数音频设备中的源线路是多路复用的,而不是混合的,因此一次只能使用一个端点进行录音。如果使用某个录音端点进行录音,则同一组中复用的所有其他设备端点将不可用。

虚拟电缆源线路是软件模拟的,并表示为“多路复用”,看起来与其他音频设备类似。

每个端点可以处于连接(插入)或未连接(未插入)状态。当连接器插入插孔时,可以连接真实硬件设备的端点。只有连接的端点可用于播放/录制并在应用程序的音频设备列表中可见。VAC 驱动程序根据VAC 控制面板设置表示其记录端点的连接状态。

您可以在Windows 音频属性小程序 中查看所有音频端点及其状态,右键单击“录制”或“播放”列表中的任何项目并启用“显示禁用的端点”和“显示断开连接的端点”。

请注意, Windows 6.x + 中的端点创建是一个非常缓慢的过程。例如,创建 30-40 个端点(当最初加载或重新启动驱动程序时)可能需要 2 GHz 计算机上长达一分钟的 100% CPU 负载。因此,除非确实需要,否则请避免创建大量虚拟电缆。

另请注意,所有启用扬声器引脚类型的虚拟电缆都将具有相同的播放端点名称,例如“扬声器(虚拟音频电缆) ”。这是系统设计造成的,而不是由于错误。如果您为两个或更多虚拟电缆启用了扬声器引脚类型,请手动重命名相应的端点(在音频属性小程序或系统 - 声音 - 属性窗口中)以区分它们。

内核流级别,基本(低级)音频端点称为pin,并由低级设备驱动程序提供。高级(通常)端点由System Audio Endpoint Builder从此类引脚创建,并由System Audio Engine提供服务。

音频流

数字音频流是表示音频信号的音频数据样本/帧的序列每个流都有适当的格式

“固定”(录制的)音频流数据可以存储在任何类型的数据存储上:RAM、ROM、HDD、SSD 等。实时传输流 称为实时流或实时流

在实时流中,流是通过音频硬件和软件的数据流。对于音频应用程序,这意味着客户端端点建立的连接,以及它们之间的音频数据流。

VAC 作为KS驱动程序,将音频流作为KS 流进行处理。

音频格式

音频编码参数(采样率、样本大小和通道数) 的组合称为数字音频格式

音频格式可以简单地指定为以下三个值:48000/16/2 或 (48000, 16, 2) 表示每秒 48000 个样本,每个样本 16 位和两个通道(立体声)。

多通道(超过 2 个通道)格式还包含通道配置(分配)参数。

音频数据编码

数字音频中,信号由瞬时幅度 值或样本的序列或流表示流中的所有样本都具有相同的位数或大小:8、16、20、24 位等。样本大小定义了样本值范围和数字声音的动态范围(以分贝为单位),其接近以位为单位的样本大小的六倍。例如,16 位样本可以表示大约 96 dB 的动态范围。

音频信号可以有一个或多个通道大多数信号是单通道(单声道)或双通道(立体声)。现代音频硬件和软件支持五个、八个甚至更多声道(例如杜比 5.1、7.1 等)。为了表示这些通道,音频样本从左到右被打包成块(帧) 。单帧由单个样本值组成。在单个帧中,所有通道样本值在同一时刻同时采样。

采样是指在录制时测量(采样)样本值或在播放时将样本值转换为信号幅度的频率。采样率决定每秒传输多少帧。该参数通常称为“每秒采样数”,但仅对于单声道流是正确的。一般来说,它应该被理解为“每秒帧数”(FPS)。但由于所有通道同时都是样本,因此“每秒样本数”术语也是正确的。

采样率还定义了可用于编码的最大信号频率;它是给定采样率的一半,以赫兹为单位。例如,要表示频率高达 16 kHz 的音频信号,每秒至少需要 32000 个样本(帧)。

样本值可以使用各种编码方法来表示。最简单且最广泛使用的方法是脉冲编码调制(PCM),此时数字样本值立即表示绝对线性信号幅度。

压缩编码方法(ADPCM、a-law、u-law、MPEG、WMA、OGG 等)。它们允许压缩音频数据,但需要更多资源来处理它们,并且经常导致质量损失

VAC仅支持定点 PCM 编码。

实时表现

计算机系统的性能通常被视为吞吐量,意味着常见操作(计算、数据传输、图像渲染等)的执行速度。常见性能始终通过计算操作数量并将其除以经过的时间间隔来平均测量。

在该区间内,操作并不总是均匀地执行。CPU 频率、涉及的核心数量、省电模式等可能存在显着变化,因此只有平均值才有意义。每个计算机任务都是按顺序、一步步执行的,并且每个步骤所需的时间可能会有所不同。通常,仅考虑完成整个任务所需的总时间。

在音频处理中,当处理中涉及的所有音频数据都已存储在文件中时,这种整体性能仅对“离线”操作有意义。为了足够快地处理它们(切除不需要的部分、调整信号音量等),数据读取、处理和写入的一致性并不重要。例如,处理应用程序可以首先读取所有数据,然后处理所有数据,然后全部写入,或者一小部分读取-处理-写入数据。换句话说,内部如何组织处理并不重要,重要的是最终结果。如果应用程序的“内部”或“虚拟”时间流动不均匀,则不会影响最终结果。

但在现实世界中,时间总是均匀流动的。如果音频处理与现实世界事件相关(例如,录制语音、音乐表演、播放声音等),则“内部”或“虚拟”计算时间也必须根据现实世界时间均匀流动。这就是所谓的实时计算实时性能意味着硬件和软件对现实世界中发生的事件实时反应的速度和可靠性。换句话说,不仅整体表现(以长时间间隔衡量)很重要,而且短时间、瞬间的表现也很重要。

实时性能的一个很好的例子是传送带生产。为了保持统一、不间断的流程,运输人员的移动速度不得超过最慢工人的操作速度。因此,即使是单个工人没有及时完成工作,也可能会破坏整个流程。为了保持流程均匀进行,每个工人必须足够快地操作,不会造成过多的延误。

不幸的是,Windows 不是实时操作系统Windows 具有良好的整体性能,但并不保证所有实时流媒体都能可靠地执行,不会出现丢包、故障、裂纹或爆裂现象。总的来说,Windows的实时音频性能已经足够了。但有时内部系统部件或驱动程序可能会中断音频处理几毫秒甚至几十毫秒。为了获得可靠的音频流,特别是对于低延迟处理,系统可能需要特殊的测试和调整

音频接口

为了与音频设备通信,每个应用程序都必须使用Windows 提供的某些接口。每个接口由一组功能组成,并受到一组条件和规则的限制。

MME多媒体扩展)或WinMM是 Windows 3.0 中引入的最古老的音频接口。它用于流式音频并且具有相对较高的延迟在Windows 9x/ME下,MME接口使用旧式的16位代码,就像其他一些操作系统部件一样。但 MME 很简单,自 1991 年以来存在于所有Windows 版本中,并且其行为从未改变。MME仅支持共享接入方式音频数据通过客户端提供的缓冲链传递大多数音频应用程序都可以使用MME接口。MME限制端点 名称长度最多为 31 个字符,因此名称可能会被截断。MME端点是通过号码访问的,因此可能会出现排列问题

DirectSound 已作为DirectX 加速集的一部分引入到 Windows 95 中。它将低级、硬件封闭、低延迟的音频操作与高级、设备无关的编程相结合。音频数据通过循环缓冲区传递DirectSound 接口最初用于游戏,但很快在声音合成和录音/播放应用程序中变得非常流行。Windows 5.x,DirectSound 支持共享和独占访问模式Windows 6.x+中,DirectSound加速功能(独占访问模式)不再支持,因此接口效率变得与MME相同。后来 DirectSound 被XAudio2取代。

WASAPI已在Vista中引入。该缩写代表 Windows Audio Session API它支持共享和独占访问模式在独占模式下(尤其是事件驱动通知),它像硬件加速的DirectSound一样高效,并确保BitPerfect传输,但在共享模式下,其效率与共享模式MME和DirectSound相当。WASAPI 的主要优点是它具有现代风格、面向对象、灵活,允许使用本地和全局效果处理器(LFX 和 GFX),并提供一种将用户定义的处理对象(APO)插入信号路径的方法。音频数据通过循环缓冲区

内核流(KS)接口是Windows 2000以来的基本接口虽然上述高级接口通过系统音频引擎,但 KS 是由设备驱动程序立即实现的。所有其他音频接口均基于 KS 之上。默认情况下,KS不涉及信号处理,因此可以用于BitPerfect传输。

独占模式 下的WASAPI与KS的效率几乎 相同,但可能会受到系统层实现的影响(例如在Win8 中修复了Win7中的一些问题)。

上述四个接口都是Windows标准接口。此外,还有一些用于专业音频处理的第三方接口。

ASIO 是最流行的第三方接口。ASIO 的设计宗旨是简单、极致的性能和精确度,适合BitPerfect传输。VAC不直接支持ASIO

“低级”和“高级”术语是相对而言的。在一种情况下,接口级别可以代表其通用性和可用性(越简单,级别越高)。在另一种情况下,级别可以代表界面功能和效率(功能越多或效率越高,级别越低)。

WASAPI、DirectSound 和 MME 接口只有与 Kernel Streaming 相比才能被视为“高级”,因为它们是构建在 KS 之上的。在现代Windows 版本中,这些接口通常被认为是“低级”的,因为提供了更高级别的接口( AudioGraphMediaCaptureMediaElement、 XAudio2 )。同时,XAudio2通常被称为“低级”,因为它提供硬件关闭的流控制。

客户

使用音频端点并打开它并连接到其提供者 的软件实体(应用程序、服务、操作系统的一部分)称为客户大多数低级音频驱动程序仅允许每个引脚有一个客户端(实例) ,但系统音频引擎 支持无限数量的客户端,并 在它们之间共享设备端点。VAC 驱动程序允许任意数量的客户端直接打开每个引脚(在独占模式下)。

如果应用程序多次请求端点连接而没有关闭它,则意味着端点 提供者有多个客户端。换句话说,每个端点 打开请求都被视为新的客户端出现。当客户端关闭端点实例时,客户端会与提供者断开连接。

当应用程序通过KS 接口访问由低级驱动程序立即提供的 低级音频端点 ( pin ) 时,它就成为驱动程序的客户端。当应用程序访问高级音频端点时,它就成为系统音频引擎的客户端。反过来,系统音频引擎访问低级引脚并成为低级驱动程序的客户端。

连接到有线时钟以动态调整它的 进程成为有线时钟客户端

音频缓冲区

所有音频接口都使用音频缓冲区 概念在应用程序和设备之间交换音频数据。缓冲区是包含音频数据片段或旨在填充此类数据片段的存储块。采用数据缓冲,使数据传输更加流畅、可靠。

计算机可以在设备和主存储器之间传输的最小数据单元是在音频中,每个计算机字仅包含 1-216 位立体声。对于实时流媒体来说这是极小的量因此,音频帧被打包成块,每个块包含数千、数百或(作为例外)数十个帧。

MME传统 WDM/KS中,缓冲链算法用于在应用程序和音频子系统之间交换音频数据;应用程序向驱动程序发送多个缓冲区,驱动程序播放它们或用数据填充它们,然后将它们返回给应用程序。应用程序必须使用多个缓冲区,因为从设备驱动程序通知缓冲区完成的时刻到它从应用程序接收到下一个缓冲区的时刻之间要经过一段时间。

DirectSoundWASAPI 和现代(RT Audio 或 WaveRT)WDM/KS中,使用循环(ring)缓冲区;应用程序分配单个内存块,逻辑上分为几个部分,告诉驱动程序哪个部分已准备好播放/录制,驱动程序在部分处理完成时通知应用程序。

为了保持流畅和连续的音频流,应用程序必须提供足够的缓冲时间大多数应用程序使用 500.1000 ms 的缓冲时间,在 MME 中分为 8..12 个链式缓冲区,在 DirectSound、WDM/KS 或 WASAPI 中分为 4..12 个循环缓冲区部分。但缓冲时间越长,引入的延迟就越多。因此,您需要为所使用的每个配置平衡这些参数。

内核流音频接口

内核流 WDM/KS AudioKS Audio)是 Windows 2000/98 中引入的最低级别的多媒体接口。WDM 代表Windows 驱动程序模型98/ME/2000/XP 及更高版本的系统中使用通用二进制驱动程序文件。KS代表Kernel Streaming,Windows 内核的音频/视频流技术KS 接口由 WDM 设备驱动程序实现。

KS 是一个非常复杂的最低级多媒体接口,支持大量功能。它可以实现最高的音频精度和最低的延迟Windows 2000/XP及更高版本中,所有更高级别的音频接口都是在KS之上实现的。

KS 支持准确的时间戳,用于将音频数据链接到时间线。

KS仅支持独占访问模式只有像 VAC 这样的多客户端音频驱动程序才允许通过单个引脚创建多个流。

只有 KS 接口允许用户模式客户端直接与音频驱动程序通信,而无需中间层。正确实现 KS 交互的应用程序可以实现尽可能高的流质量、效率和稳定性。只有驱动程序和/或硬件错误可能会影响信号质量和延迟

为了与驱动程序进行通信,KS客户端使用KS 协议对于特定的驱动程序来说,完整的 KS 协议实现非常困难,因此 Windows 提供了端口类驱动程序来简化多媒体驱动程序的创建。

内核流协议

为了交换音频数据并控制流,KS 驱动程序和客户端必须协商协议KS客户端和 KS 驱动程序 之间使用两种不同的流协议:“传统”和“实时”。

Legacy(或“标准流”)是本机 KS 流协议,可用于从Windows 98开始的所有 KS 实现。音频数据通过缓冲链传递,如MME接口中一样。要发送和接收链中的每个缓冲区,必须切换到内核模式。处理事件频率越高,延迟越低,开销越大。

Windows 6.x + 中添加了“实时”协议(“循环流”或“RT 音频模式”)音频数据通过单个循环缓冲区(通常位于硬件中)传递,用户模式客户端可以直接访问该缓冲区。无需定期切换内核模式即可在播放时写入数据并在记录时读取数据。如果驱动程序支持位置寄存器,则无需切换内核模式即可获取当前播放/录制位置。

在每个协议内部,驱动程序和客户端之间可以协商 不同的处理模式。

不要将协议命名中的“实时”与实时性能/流媒体混淆。由于所有音频流协议都是为了播放或记录现实世界的音频信号而设计和使用的,因此它们绝对都是实时工作的。协议命名中的“实时”术语具有“更适合实时处理”、“非常低的延迟”等含义。

尽管所有支持KS的Windows 版本 都支持标准流协议,但特定驱动程序可以自行选择支持它。Windows 6.x开始,RT Audio 被认为是大多数嵌入式硬件的首选。只有 USB 音频驱动程序仍然支持旧协议,因为 CPU 无法直接访问 USB 设备内部的内部循环缓冲区。

VAC 驱动程序支持传统(在所有系统中)和 RT(在现代系统中)KS 协议。可以通过PortCls 端口/微型端口类型来选择它们

流处理模式

代表KS客户端使用的内核流协议的各种特性。

  • 循环-使用循环(循环)数据缓冲区。
    在传统 KS 协议中,当完成的缓冲区部分返回给客户端并提交新部分作为回复时,通常使用缓冲区链。在循环模式下,除非明确请求,否则缓冲区部分永远不会返回,因此驱动程序会不断循环提交的部分。
    在实时协议中,单个循环缓冲区是驱动程序和客户端之间交换数据的唯一方法,因此始终为 RT 流指示此模式。

  • 事件通知- 驱动程序发出事件信号以通知客户端有关流进度的信息。目前,RT 协议允许指定最多两个事件,这些事件在循环缓冲区的相应一半完成时发出信号。
    如果不使用事件,客户端必须以足够的频率轮询流位置。

  • 数据包模式- 流数据以数据包(循环缓冲区的一部分)的形式提交和完成。分组模式是流量控制的一种目前,系统每个缓冲区仅支持两个数据包(一半)。
    在数据包模式下,驱动程序及其客户端都 维护数据包计数器来检查流完整性并检测潜在的数据上溢/下溢
    如果没有数据包模式,数据将以任意大小的部分提交和完成,并且只有客户端可以通过驱动程序维护的流位置来检测上溢/下溢。驱动程序永远不知道客户端提交或完成了多少数据。

  • 时钟寄存器- 客户端使用硬件(或模拟)寄存器直接 读取流的时钟信息,无需发出特殊的 API 请求并从用户模式切换到内核模式,然后再返回用户模式。

  • 位置寄存器- 客户端使用硬件(或模拟)寄存器来直接读取当前流位置。

循环模式可用于传统协议和 RT 协议。其他模式仅在RT协议中使用。

Windows 7 及更高版本 支持事件通知Windows 10 及更高版本支持数据包模式,并且可以在电缆参数中选择性地禁用任何电缆端

VAC 控制面板在电缆流列表 的“模式”列中显示流处理模式

ASIO音频接口

ASIO音频流输入/输出)是Steinberg 为其音频硬件和软件 设计的音频接口。

标准Windows音频接口是面向帧的(各个通道样本被打包到帧中),并且流中的所有通道都是逻辑连接的(表示相同的声图)。相反,ASIO是面向通道的(每个通道的样本连续放置并存储在单独的内存缓冲区中,形成多个单通道(单声道)流),并且通道通常是独立的,承载不同的声音。

因此,标准接口最适合“固体”多通道流(立体声、四声道、5.1、7.1 等),而 ASIO 最适合多源多目的地流(人和乐器的声音、音效、调音台、录音机、音序器等)。

ASIO 支持时间戳,允许确定或指定每个音频数据块在时间线上的确切位置。

ASIO 使用驱动程序枚举,而不是 Windows 音频接口中使用的设备/端点枚举。无法确定驱动程序为多少个设备提供服务。假设驱动程序仅服务于单个设备,但驱动程序可以一次服务于多个同步设备,将它们的通道组合成更大的通道阵列。

通常,不支持格式转换,所有样本均“按原样”传输。客户端 软件必须查询 ASIO 驱动程序以获取底层设备支持的采样率和样本表示。

ASIO 驱动程序是单客户端的,一个驱动程序无法为多个客户端应用程序提供服务。为了创建复杂的软件路由方案, 需要使用VST主机应用程序。单个 VST 主机与所有可用的 ASIO 驱动程序通信,使它们可用于每个 VST插件

ASIO 驱动程序是一个用户模式DLL, 实现进程内COM 服务器。由于DLL无法直接与硬件通信,因此硬件供应商还提供了内核模式硬件驱动程序。一些供应商还提供WDM/KS驱动程序,允许从任何 Windows 应用程序使用其设备。其他供应商仅提供特殊的内核模式驱动程序来与 ASIO 驱动程序 DLL 配合使用,因此他们的设备只能由支持 ASIO 的应用程序使用。

筛选

WDM/KS驱动程序技术中,每个设备驱动程序公开一组称为过滤器的逻辑子设备 (它们是DirectShow那样的流过滤器 )。每个过滤器模拟一个硬件处理单元。它可以接受信号和/或数据、产生它们或执行这两种操作。

每个过滤器都暴露出一组引脚

别针

引脚代表过滤器的连接点:录音(捕获)、播放(渲染)、音量控制、混音器、时钟等。引脚是端点的低级同义词术语“引脚”类似于电子学中的“引线”。

为了使用 pin 进行音频流,Windows 通过“实例化”或“打开”它来创建 pin 的实例。每个 pin 实例形成一个单独的如果应用程序使用WDM/KS接口直接访问引脚 ,则为应用程序本身创建实例,其他人无法使用该实例和适当的流。如果应用程序通过系统音频引擎以共享模式访问引脚,则引擎会为其自身创建一个实例,然后在所有连接的应用程序之间共享它。它允许多个应用程序同时使用 单客户端驱动程序。

如果驱动程序支持多个引脚实例,则多个客户端 可以使用适当的引脚,创建自己的实例。大多数 KS 驱动程序仅支持单个引脚实例,因此只能有一个客户端(系统音频引擎KS感知应用程序)。

KS 流(pin 实例)

一般而言,声音/音频上下文中的术语“”用于指定任何类型的音频流

对于WDM/KS驱动程序,该术语用于指定 根据客户端请求连接到特定引脚实例的数据流。每个新的引脚实例形成一个新的流。每个流都有自己的音频格式应用程序可以直接或通过系统音频引擎代理层连接到 KS 流。

VAC 仅处理 KS 流。更高级别的流由适当的接口提供者维护

虚拟电缆流是否会影响电缆格式的 格式

格式转换

音频格式转换重采样)是音频流中数据转换的一种特殊情况。要将给定格式的音频数据流转换为另一种格式的音频数据流,应执行以下操作:

  • 如果采样率不同,则进行采样率转换。通常,这是最耗时的操作。

  • 样本大小(位深度)转换。这是耗时最少的操作,除非使用特殊的平滑措施。

  • 通道集转换。根据源通道集和目标通道集,它可能会消耗更少或更多的处理时间。

存在一些已知的格式转换问题

格式属性

格式属性是KS流的附加格式属性如果在 Flags 字段中指定了 KSDATAFORMAT_ATTRIBUTES 标志,则 这些属性可以与KSDATAFORMAT描述符一起提供

Windows 2000/98 中宣布了格式属性支持,但实际上仅在 Windows 8.1 中针对信号处理模式实现如果 KS 过滤器公开格式属性支持,则 8.1 之前的系统可能会在其属性请求中错误地形成 KSDATAFORMAT 描述符,因此驱动程序必须使请求失败,并且无法使用请求的格式。即使在 Windows 8.1 和 10-11 中, WaveCyclic端口也可能会出现此问题

VAC 格式属性策略

为了避免与格式属性相关的 Windows bug 引起的问题,VAC 驱动程序支持格式属性策略:

  • 默认 -如果端口/微型端口类型为 WaveRT ,则启用Windows 8.1及更高版本系统的格式属性。

  • 处理 - 允许并处理格式属性,无论系统版本和端口/微型端口类型如何。

  • 忽略 - 忽略格式属性,无论系统版本和端口/微型端口类型如何。

如果允许格式属性支持,则相应的微型端口将公开对信号处理模式的支持。

格式属性策略可以全局(针对所有电缆)或针对特定电缆进行配置。VAC 驱动程序启动时,为每条电缆的渲染/捕获侧选择的实际策略会在驱动程序事件日志中报告

信号处理模式

Windows 使用信号处理模式告诉KS 驱动程序如何处理流数据(不要触摸、改变信号音量、应用音频效果等)。信号模式通过格式属性选择

VAC 驱动程序不支持原始信号处理模式以外的信号处理模式,但支持适当的属性请求以符合 Windows 要求。

BitPerfect 音频数据传输

BitPerfect音频传输代表音频流的精确传输,确保每个音频样本“按原样”完整交付。

默认情况下,Windows 音频子系统 更喜欢多功能性和兼容性,为应用程序提供播放和录制任何可能的声音的能力。为此,如果应用程序请求的格式 与设备格式不匹配,系统音频引擎会自动执行格式转换。

系统音频引擎接受的格式范围非常广泛:从每秒 1000 到 384000 个样本,从每个样本 8 到 32 位(整数或浮点),以及一次 1 到 8 个通道。

例如,如果应用程序具有格式为 44100/16/2 的内置声音,但特定设备仅支持 48000/24/2,则该声音无法直接播放到该设备。在早期版本的Windows中,所有应用程序都必须自行转换音频格式,而重采样算法并不简单。现在,应用程序可以简单地以所需的格式打开设备的端点,并且转换是透明完成的。任何应用程序都可以使用系统支持的任何格式,而无需向特定设备查询它们可以支持的格式。

此外,即使不使用格式转换,引擎也可以将多个流混合在一起、调整信号音量、应用音频效果等。每个操作都可能改变流的数字表示,即使这些变化听不到。

这种广泛的兼容性对于大多数音频应用来说很方便,但不适合特殊应用,例如执行测量、精确信号生成、在数字音频接口之间传输音频流等。此类应用需要可靠、透明的信号路径。透明路径确保发送到设备的所有音频样本都将完好无损地传送,并且只能添加开始/尾随静音。

在标准 Windows 音频接口中,BitPerfect 传输只能在独占模式的WASAPIKS 中进行。 MME DirectSound 等标准接口无法保证透明性。

ASIO默认情况下确保 BitPerfect 传输,但某些设备和/或驱动程序可能会更改音频样本。

源线

典型的音频设备具有单个数字录音通道,应用程序可以使用该通道来捕获音频信号,但也有多个源(输入)线路,例如麦克风、线路、电话、CD 等。要捕获来自特定源线的音频信号,应首先选择该线。Windows 5.x中,您需要使用 Windows Mixer应用程序来选择源行。Windows 6.x +为此目的 创建了音频端点。

作为一个虚拟设备,VAC没有真正的源线。但有些应用程序希望连接到给定的线路类型(麦克风或 S/PDIF),因此 VAC 提供了多个模拟源线路。它们都是相同的,但 Windows 可以为每行使用不同的默认设置。例如,Windows 6.x + 使用麦克风线路录音的采样率低于线路输入录音的采样率。

Virtual Cable的源线在内部连接到多路复用器 (mux),允许仅选择单个源线进行录制。唯一的效果是音量控制(如果启用):只有选定线路的音量控制会影响电缆音量。当前选择的源线显示在电缆状态窗口中。

源线设置是一个电缆配置参数

电缆格式

当虚拟电缆获得其第一个输入或输出客户端 ()时,将选择特定的音频格式作为电缆格式有线格式参数由第一 客户端)格式和有线格式范围决定。

当电缆处于活动状态时(至少有一个客户端/),电缆格式是固定的。

内部混合以电缆格式执行,因此所有渲染/输出流数据都转换为电缆格式,并且混合结果从电缆格式转换为捕获/输入流格式。如果启用 有线频道混合,VAC 还会转换多频道流中的频道集。

电缆格式范围

允许选择 一系列音频格式作为电缆格式该范围越宽,电缆可供选择的格式越多,发生格式转换的频率也越高。格式范围是一个电缆配置参数

如果每个格式参数的范围(采样率、每个样本位数、通道数)缩小为单个值(例如,48000..48000、24..24、2-2),则电缆格式将不会变化并且无论 格式如何,始终是合适的。但由于流格式限制,某些可能无法创建。

有线频道混合

默认情况下,如果流格式有线格式中的通道数不同, VAC 会转换多通道流中的通道集。例如,当从立体声流转换为单声道时,VAC 会混合(求和)左声道和右声道,产生单声道流。当从单声道流转换为立体声时,VAC 将单个声道分为左声道和右声道。转换 4、6 和 8 通道流时,会应用更复杂的规则。

如果禁用通道混合,VAC 会执行通道分散(将顺序打包的通道数据放置到指定的通道配置位置)或聚集(提取指定的通道配置位置并将它们放置到顺序打包的集合),而不是混合它们。详细信息请参见此处

在某些情况下,禁用通道混合可能会产生不良效果

通道混合模式是一个电缆配置参数

通道/扬声器配置(通道分配)

对于单声道和立体声音频数据格式,只有已知的专用扬声器位置可用:对于单声道,只有一个扬声器;对于单声道,只有一个扬声器。对于立体声,只有两个扬声器或耳机部件。因此没有必要额外指定它们的位置。

对于多声道格式,相同数量的声道可以有多种扬声器放置方案。例如,旧的 5.1 扬声器配置使用后置声道(“5.1 后置”方案),而现代配置则使用侧声道(“5.1 环绕”)。因此,仅指定多个通道是不够的;您还需要指定通道到扬声器的映射。

VAC 支持以下音频通道:

缩写地点六角掩码
FL左前1
FR右前方2
FC前中心4
如果低频(低音炮)8
BL左后10
BR右后20
FLC中左前侧40
FRC中间右前侧80
公元前后中心100
SL左侧200
SR右侧400
TC顶部中心800
TFL左前上方1000
TFC顶部前中心2000年
TFR右上前侧4000
TBL上后左8000
待定上背部中心10000
热熔胶上后右20000

Hex mask表示 单个通道对应的位掩码,采用十六进制 形式。要获取多个通道的掩码,请使用 Windows 计算器以十六进制模式将它们的掩码相加。例如,FC+BR+SL 通道的掩码将为 4+20+200 = 224 十六进制(流行的 C/C++ 表示法中的 0x224)。

中的 通道数据(样本值始终按照上表中列出的顺序在帧内排列。因此,左声道样本始终位于右声道样本之前,低音炮声道样本始终位于后声道样本之前,依此类推。

有关详细信息,请参阅Microsoft 站点 上的说明

请参阅此处如何设置音频设备/端点的扬声器配置。

码流格式限制模式

限制新流 格式的 规则主要用于控制系统音频引擎的自动格式选择功能。详细信息请参见此处限制模式是一个电缆配置参数

VAC 驱动程序事件日志

VAC 驱动程序事件日志是 VAC 驱动程序处理的各种内部事件的列表(流创建、启动/停止、终止等)。事件日志可以表示驱动器和/或电缆设备活动的一些隐藏细节,有助于了解正在发生的情况并隔离问题。

VAC 驱动程序在内部保留相对少量的最近事件。如果控制面板应用程序正在运行,它会不断从驱动程序检索新事件并将它们放入下拉列表中,这样就不会丢失任何事件。但如果控制面板未运行,较新的事件可能会覆盖驱动程序内存中较旧的事件,因此未读事件可能会丢失。

控制面板的列表中,所有事件都会保留到关闭应用程序为止,并且可以查看事件描述和/或将其保存到文件中。

Windows 音频子系统

Windows 音频子系统包括多个组件,其中最重要的组件如下:

  • ks.sys - 通用内核流 内核模式库。提供通用例程来处理各种KS请求和对象。被大多数 KS 驾驶员用作助手。

  • portcls.sys - 内核模式端口类驱动程序。提供一个简化 KS 驱动程序开发的框架。执行大多数典型的 KS 操作,而实际的设备驱动程序(称为“微型端口驱动程序”)仅提供特定于设备的操作。

  • ksproxy.ax - 包装 KS过滤器 以将其表示为DirectShow过滤器的 用户模式组件因此,每个具有 KS 驱动程序的设备都可以自动从 DirectShow过滤器图表进行访问,并且开销成本尽可能最低。

  • AudioDG.exe -系统音频引擎与 KS 设备驱动程序通信,混合应用程序播放的声音,分割应用程序录制的声音,执行格式转换等。

  • Audiosrv.dll -系统音频服务执行各种设备/端点维护任务。

系统音频引擎

系统音频引擎是支持大多数系统音频功能的系统代码。它由 AudioDG(音频设备图[隔离])进程托管。

系统音频引擎充当通过WASAPIMMEDirectSound和共享模式下的其他更高级别接口访问的每个WDM/KS音频驱动程序的“代理” 当应用程序使用共享连接模式时,系统音频引擎会隐式创建一个单独的引脚实例。有关详细信息,请参阅音频分层问题

此外,引擎还托管实现本地和全局音频效果 (LFX/GFX) 的音频处理对象 (APO)。

在Win 6.x 之前, KMixer (内核模式音频混合器)扮演着相同的角色 ,它是一个系统内核模式音频组件(一种特殊的音频驱动程序),是 Windows 98/ME2k/的一部分。XP/2k3 音频子系统。

系统音频服务

Vista开始,系统有一个专门的音频服务(AudioSrv),在服务列表中名为Windows Audio 。该服务维护音频端点属性。

音频终结点数据库由Windows 音频终结点生成器服务 (AudioEndpointBuilder) 构建 。该服务查询KS 过滤器 公开的所有音频引脚,并为每个引脚创建一个端点。

这些服务在服务主机进程容器 (svchost.exe) 中运行。此类进程的一个实例可以运行多个不同的服务。为了帮助查找适当的服务,VAC 驱动程序在其事件日志中显示服务标签

在某些情况下,重新启动系统音频服务可能有助于消除某些音频端点问题,而无需重新启动整个系统。

服务标签

大多数 Windows 服务都在专用服务主机进程容器 (svchost.exe) 中运行。此类进程的一个实例可以运行多个不同的服务。每个服务代表其容器进程进行操作。当服务访问设备时,设备驱动程序只能确定进程(PID)和线程(TID)标识符,而不能确定服务名称。为了识别特定服务,驾驶员可以访问服务标签,即服务的数字标识符。VAC 驱动程序在其事件日志中显示服务标签。

不幸的是,驱动程序无法访问 Service Manager 数据库来识别服务的名称。要通过标签识别服务,请使用第三方“ sctagquery ”命令行实用 程序。例如,如果PID为184,服务标签为12,则在管理员帐户下输入以下命令行

sctagqry -n 12 -p 184

共享和独占 PIN 访问

大多数音频设备驱动程序仅支持每个捕获或渲染引脚 的单个实例(它们是单客户端 驱动程序)。为了允许同时从多个应用程序访问这些引脚,需要中间(代理)层。在 Windows 中,该层由系统音频引擎提供 当引擎为自身创建单个 pin 实例并且所有客户端都连接到引擎时,MME(全部)和DirectSound/WASAPI (默认)连接以共享模式建立,不立即到过滤器销钉系统音频引擎为 pin 实例选择适当的格式,然后在 pin 格式和客户端流格式之间转换音频数据。这种模式虽然方便,但往往效率不够。

DirectSound(在Windows 5.x中)、WASAPI(在Windows 6.x + 中)和WDM/KS(在所有系统中)支持独占引脚访问模式,而引脚实例仅为请求者应用程序创建。不允许其他客户端(应用程序甚至系统声音)共享此实例。该引脚使用请求的格式进行实例化,并且客户端应用程序和驱动程序之间不执行格式转换。这种模式很高效,但不够方便,因为一次只能有一个应用程序可以使用该引脚。如果驱动程序支持多个引脚实例(如 VAC),则没有此类限制。

在实现多客户端 引脚访问时,VAC 的行为类似于共享模式下的系统音频引擎,将播放流混合在一起,在记录流之间分配电缆数据并执行格式转换。因此,最有效的 VAC 使用方法是在可以连接到虚拟电缆时使用独占访问模式。

WASAPI中,以两种形式支持独占访问模式:轮询(对于播放也称为“推”,对于录制也称为“拉”)和事件驱动的通知。在轮询模式下,客户端定期查询流的状态以确定何时写入或读取下一部分音频数据。在通知模式下,每次房间/数据可用时驱动程序都会引发事件。除了更优化的 CPU 资源利用率之外,通知模式还允许使用非常小的KS 缓冲区(低至 1 毫秒)。

端口Cls

PortCls代表“端口类驱动程序”。它是 Windows 内核模式模块 (portcls.sys),实现最常见的多媒体驱动程序功能,旨在简化特定多媒体硬件的驱动程序。基于 PortCls 功能的驱动程序称为“微型驱动程序”或“微型端口 驱动程序”。PortCls接收所有KS 客户端和一些系统内部请求,将其转换并传递给微型端口驱动程序。因此,微型端口驱动程序必须仅实现特定于设备的代码。

Windows XP及更高版本的系统中,在多CPU /核硬件上,PortCls存在一些错误为了避免与它们相关的问题,VAC 实施了一种解决方法,处理大多数流式WavePci请求而不调用 PortCls。对于特定电缆,可以使用电缆配置参数将处理切换回 PortCls 引擎

端口类驱动程序端口/微型端口类型

VAC 以及大多数其他音频驱动程序均内置于“微型端口驱动程序”模型中,而驱动程序二进制模块仅包含处理特定于驱动程序的功能的代码。常见功能由标准 Windows端口类驱动程序模块处理“端口”和“微型端口”术语是指为软件模块通信提供的内部系统接口。它们与用于设备连接的硬件端口 用于低级设备通信的 I/O 端口无关。

为了与音频微型端口驱动程序进行通信,端口类驱动程序提供了三种内部端口(接口)类型:

  • WaveCyclic - 旨在用于具有所有客户端通用的 单个循环 硬件缓冲区的传统音频适配器。它是最简单(通常也是最稳定)的接口,但也是最慢的接口。

  • WavePci - 适用于具有多个总线主控缓冲区的适配器,每个客户端和内部硬件混合支持各自独立可以提供比 WaveCyclic 更少的延迟,但端口/微型端口通信要复杂得多,并且在某些情况下可能会导致问题

  • WaveRT - 适用于具有一个或多个 可供用户模式客户端直接访问的循环硬件缓冲区的现代适配器。它是最有效的接口,几乎没有任何开销。

WaveCyclic 和 WavePci 存在于所有内核流实现中。WaveRT 是在Windows Vista中引入的,因此在XP和更早版本中不可用

对于用户模式内核流 客户端 (包括系统音频引擎),使用 WaveCyclic 或 WavePci 端口接口的音频驱动程序是无法区分的。用Windows术语来说,它们支持“标准流协议”。音频中继器应用程序的内核流版本将此类驱动程序称为“旧版”。相反,使用 WaveRT 端口接口的驱动程序支持“循环流协议”并被视为“实时”。音频中继器将它们称为“RT 音频”。

大多数用于嵌入式(隐藏在外壳下)硬件的现代音频驱动程序都支持 RT 音频协议。USB 音频驱动程序通常支持旧版驱动程序。

在 4.50 之前,VAC 仅支持 WavePci 接口(并且分别仅支持标准/旧版KS 协议)。从 4.50 开始,每根电缆的每一侧都可以配置 为支持三种端口/接口类型中的任意一种。当然,WaveRT在XP中不可用。

通过 WaveRT,VAC 支持通知 事件(PKEY_AudioEndpoint_Supports_EventDriven_Mode 属性)和时钟/位置寄存器,允许用户模式客户端维护流而无需定期内核模式切换。

请查看此处如何在微型端口类型和 KS 协议之间正确选择。

潜伏

当应用程序和驱动程序处理数字音频时,它们不会交换单个样本/帧相反,它们使用内存缓冲区来存储音频数据块。为了响应实时事件,应用程序或驱动程序需要一些时间,从微秒到几十毫秒。由于缓冲和处理延迟,音频信号到达设备输入与其数字化值到达应用程序内存之间存在一些时间。这段时间称为潜伏期

当您通过电话与附近的人交谈时,您可以轻松听到声音延迟。您将首先直接听到对话者发出的声音,然后在几分之一秒后 - 在电话扬声器中听到,就像回声一样。产生这种效果的原因是,语音被转换为数字形式,记录在通信设备的存储器 中,作为数据包通过通信线路传输,并且在每个阶段都添加了小的延迟。

定时事件(以前称为“中断”)

由于数字音频的离散特性,连续的数字音频流传输是在一系列块中执行的。为了将流从每条电缆的输出端点传输到其输入端点,VAC 具有内部定时时钟 ,该时钟生成系统事件,允许调用 VAC 来传输流的下一个数据块。 早期的 VAC 版本为此使用定时器中断。当前版本使用计时器事件,但“中断”术语被保留下来。

这是一个电缆配置参数,您可以使用 VAC 控制面板 GUI 来控制它

事件频率越高,事件周期越短,块大小越小,流传输越平滑,延迟越小。但减少中断/事件周期会导致系统定时器分辨率和定时器中断频率增加,因此系统开销 也会增加。VAC 驱动程序将系统定时器分辨率设置为指定的“MS per int”参数的一半。

大的值(超过 10-15 毫秒)可能会显着破坏流的均匀性,甚至导致流中断。

混音器(音量控制工具)

一般来说,混音器代表将多个音频信号混合在一起并允许控制其音量、平衡、音色和其他参数的设备。几乎每个音频适配器都有自己的混音器,可以选择录音源、更改录音/播放级别等。这些功能称为“适配器混合器”或“驱动器混合器”。

Vista/Win7 之前的 Windows 有一个标准的混音器控制应用程序 ,通常称为“Windows 混音器”。可以通过双击系统托盘中的扬声器图标来调用它。将显示一个带有一组滑块和复选框的窗口。您可以以两种模式查看混音器:播放(默认)和录音。在播放模式下,混音器控制可用于播放的输出音频线以及路由到输出(扬声器)的重复(受监控)输入线。在录音模式下,混音器控制可用于录音的输入线路。

要配置混音器面板,请打开“选项”菜单并选择“属性”在对话框中,选择要控制的设备,选择模式并检查要在面板中看到的输入/输出线。

Windows 6.x +中,系统混合器变得更加简单。可以通过右键单击系统托盘中的扬声器图标并选择“打开音量混合器”来打开它。您可以更改图标下选择的设备或系统/应用程序声音的播放/录音级别。单击底部的扬声器图标,您可以将音频源静音/取消静音。

不要将 Windows 混音器控制应用程序与系统音频服务系统音频引擎Windows 组件混淆。

开始菜单

Windows “开始”菜单是用于运行应用程序和工具的分层菜单。在Windows 8之前,可以通过位于左下角的“开始”按钮打开。在 Windows 8 中,被平铺界面 (Metro) 取代,但仍可用于左下角单击。在 8.1 中,一个小的 Windows 徽标按钮被放置在左下角。在Win10中,已恢复为分层菜单视图。

系统托盘

系统托盘(通知区域)是水平任务栏的最右侧区域或垂直任务栏的最低区域,系统时钟和应用程序图标位于此处。Win 5.x中,该区域始终显示所有现有图标。从Win 6.x开始,一些图标可以被隐藏。如果有隐藏图标,通知区域中会显示双向上箭头。

命令行

命令是一种通过键入文本命令来指定要执行的操作的传统方法命令行由命令(操作名称)和可选参数(参数)组成。

在 Windows 中,任何可执行文件都可以作为命令调用。例如,可以使用命令行启动音频中继器,并提供参数

为了输入命令,Windows 提供了名为“命令提示符”或“控制台会话”的功能。命令由命令解释器cmd.exe )执行为控制台会话设计的应用程序称为“控制台应用程序”。与 GUI 应用程序不同,它们只能在控制台窗口内以文本形式“打印”结果。一些有用的系统和第三方实用程序仅作为控制台应用程序存在,没有具有相同功能的 GUI 类似物。

要使用控制台应用程序,请“开始”菜单打开Windows 系统附件文件夹中的命令提示符,或在 Win-R 调用的“运行”对话框中输入“cmd”。要打开特权控制台会话,请右键单击命令提示符 项并选择“以管理员身份运行”。

尽管您可以直接从“运行”对话框中键入或粘贴命令行来运行控制台应用程序,但控制台窗口将在控制台应用程序退出后立即关闭。如果您需要查看结果,请永久打开控制台窗口。

要将命令行粘贴到控制台窗口中,请尝试 Shift-In 或 Ctrl-V 组合。如果它们不起作用,请左键单击左上角,然后单击“编辑”并选择“粘贴”。按 Enter 执行命令。

要执行命令/应用程序,命令解释器必须知道它所在的位置。如果应用程序未安装到系统中而是刚刚下载,最好将其放置在一个单独的文件夹中,其短名称不包含空格(例如,c:\tmp)。要从控制台会话运行应用程序(例如 ScTagQuery),请将路径前缀放在应用程序名称之前:

c:\tmp\sctagqry -p 1752

要多次运行应用程序,请先更改默认文件夹:

cd c:\tmp

然后,您可以通过仅输入其文件名并后跟可选参数来运行该应用程序。

要退出会话,请键入“exit”并按 Enter 键。

命令可以分组为脚本(批处理/命令文件)。

Windows 控制面板

Windows 控制面板是一组Windows 内置的控制和管理小程序。在 Windows XP、Vista 或 Windows 7 中,您可以通过单击“开始” - “设置” - “控制面板”来打开它在 Windows 8 和 10-11 中,控制面板被“设置” 窗口取代,右键单击屏幕左下角并从菜单中选择“设置”即可打开该窗口。

不要将 Windows 控制面板与VAC 控制面板混淆。

Windows 设备管理器

设备管理器是一个内置的 Windows 管理控制台小程序,显示设备列表并允许配置/重新安装它们。可以通过以下任一方式打开设备管理器:

  • 右键单击我的电脑并选择管理

  • 右键单击我的电脑,选择属性,打开硬件 选项卡,然后单击设备管理器

  • 打开Windows 控制面板,打开管理工具,然后打开计算机管理

如果从非特权帐户启动,设备管理器会警告它只能显示设备参数。在特权模式下,设备管理器可以执行各种设备控制操作。

Windows 任务管理器

Windows 任务管理器是一个标准的系统应用程序,它显示正在运行的应用程序、进程和服务、CPU 使用情况和其他有用信息。

可以通过 Ctrl-Shift-Esc 组合键快速调用任务管理器。另一种方法是按 Win-R 打开运行对话框,然后在“打开”字段中输入可执行文件名 (taskmgr)。

在默认的非特权模式下,任务管理器仅显示属于当前用户的进程。要显示系统中运行的所有进程,请从特权(管理员)帐户运行它。

Windows资源监视器

Windows 资源监视器是一个标准的系统应用程序,显示正在运行的进程的系统资源(CPU、内存、存储、网络)消耗情况。

要运行资源监视器,请按 Win-R 并在“打开”字段中输入可执行文件名 (resmon)。如果您的帐户不是特权帐户,您将收到特权提升提示。

系统内部实用程序

Sysinternals 是一个由几位经验丰富的系统软件开发人员(最初独立,后加入微软开发团队)发起和维护的长期项目。他们创建了许多有用的系统实用程序,帮助收集各种信息并对系统进行故障排除。

一些可能有助于 VAC 故障排除的实用程序:

  • Process Explorer - 显示正在运行的进程、线程、服务、加载的 DLL、打开的句柄等等。

  • 进程监视器- 显示被跟踪进程执行的文件、注册表、网络和进程操作。

  • 句柄命令行)- 显示文件或设备的打开句柄。

Windows 声音设置

Windows 声音设置是Windows 10中引入的主要音频/声音设置页面

该页面可以通过两种方式打开:

  • 右键单击桌面左下角。左键单击“设置”,然后单击“系统”,然后单击“声音”

  • 右键单击系统托盘 (右下区域)中的扬声器图标。单击打开声音设置

音频属性小程序可以通过“声音控制面板”链接访问。

立即打开 Windows 声音设置(仅限 Windows 10-11)

麦克风隐私设置

Windows麦克风隐私设置是Windows 10版本1803中引入的新设置页面, 可以在设置-隐私-麦克风中找到。

根据描述,麦克风隐私功能应阻止应用程序访问麦克风端点但实际上它会阻止应用程序访问所有输入/记录端点Windows 10-11 可能会在升级过程中自动关闭麦克风访问,因此您需要手动将其重新打开。

立即打开麦克风隐私设置(仅限 Windows 10-11)

如果隐私设置阻止输入/记录端点访问,VAC 控制面板会在“隐私设置”按钮周围显示红色边框

音频属性小程序

音频属性小程序是一个内置的Windows 控制面板小程序,用于管理和控制多媒体和音频设备。不要将其与Windows 10-11设置的声音设置页面混淆。

小程序可以通过三种方式打开:

  • VAC 控制面板中,单击“音频属性”按钮

  • 如果系统托盘 中有扬声器图标,请右键单击它并选择:
    Windows 10-11:“打开声音设置”,然后“声音控制面板”或“声音”。
    Windows 6.x +:“播放/录制设备”。
    Windows 5.x:“调整音频属性”。

  • 打开Windows 控制面板并打开“声音” Windows 6.x +)、“声音和音频设备”( Windows 5.x )。

“音频”选项卡上,您可以查看和更改默认播放和录音设备、调整DirectSound 加速级别、设置扬声器配置等。

每个流媒体设备,无论是硬件还是软件,都需要一个时钟源 来平滑、均匀地传输流数据。在时钟测量的每个时间段之后,发送或接收一部分流数据。

异步设备 (计算机、声卡、收音机等)有自己的时钟源(时钟发生器)。同步设备也称为“从设备”)从具有自己的时钟发生器的主设备接收时钟信号。一些音频设备(例如专业声卡)拥有自己的时钟并且通常异步工作,允许使用外部时钟源与外部设备同步工作。

当CPU与音频适配器(板载芯片、卡、外部USB适配器)交互发送/接收命令或数据块时,CPU时钟作为源,音频适配器作为从机(同步) 设备。但在音频流模式下,使用适配器的时钟(支持外部时钟源的专业适配器除外),CPU 作为从设备。

换句话说,CPU确定何时发送/接收命令或数据块,而适配器确定数据部分的回放/记录何时完成。当流已经开始时,CPU无法指示适配器更慢或更快地移动流数据;仅当适配器支持动态更改采样率时, 它才可以更改采样率。

VAC 驱动程序模拟虚拟音频适配器,没有自己的硬件时钟生成器,它使用系统定时器生成周期性事件并形成时间间隔。

时钟速率差异

两个异步设备,每个设备都有自己的时钟源,不可能有完全相同的时钟频率(速率,或速度)。由于它们的时钟不同,时钟速率总是略有不同,实际采样率也略有不同。作为一对真正的手表,两个异步音频设备的数据流不可能严格匹配,一个流缓慢抢先,另一个流迟到。因此,整个音频数据流中会存在一些间隙或丢失。

VAC 支持电缆时钟校正功能,以最大限度地减少这种影响。

电缆时钟校正

为了补偿时钟速率差异的影响,VAC 驱动器提供了电缆时钟校正 功能。有两种时钟校正类型:永久校正和临时校正。

永久校正量可以通过 VAC 控制面板进行设置,并将持续到下次更改为止。当第三方应用程序同时使用其端点与虚拟电缆端点时,它可用于将电缆时钟调整为最接近特定硬件设备的时钟。不幸的是,永久设置并不能完全消除时钟速率差异效应,只能减少它。VAC 感知应用程序可以通过VAC 驱动程序 API动态调整它,但这很危险:如果更改了数量的应用程序忘记将其恢复回来,电缆时钟仍然以降低或增加的速率运行,从而影响所有后续操作。

临时校正(所谓的客户端时钟控制,因为它只能由单个客户端进程控制)仅适用于 VAC 感知的应用程序(例如,音频中继器)。它在VAC 过滤器 API中实现,允许客户端根据该对中另一个音频设备的时钟速率调整电缆时钟。当客户端断开连接时,临时更正将自动消除,因此只有永久更正仍然有效。客户端时钟校正的状态可以在VAC控制面板的 电缆信息窗口中看到。

两个时钟校正参数均指定为因子/乘数。最终的修正量就是他们的乘积。例如,如果永久校正参数指定为1.02(102%或+2%),客户端时钟校正参数指定为0.97(97%或-3%),则实际校正量将为1.02 * 0.97 = 0.9894 (98.94%或-1.06%)。

系统定时器(系统时钟)

为了保持世界时间并同步各种任务,Windows 使用硬件时钟生成器维护内部系统时间负责计时的一段内核代码称为系统定时器系统时钟

没有自己的硬件时钟生成器的纯虚拟(纯软件)设备的驱动程序使用系统计时器来生成周期性事件并形成所需的时间间隔。由于硬件音频设备使用自己的时钟,因此任何两个设备之间始终存在时钟速率差异即使是不同驱动程序服务的虚拟设备也存在这样的速率差异,因为它们不使用通用的、标准化的计算算法,并且计算精度总是有限的。

使用定时器可以形成的最短时间段称为定时器分辨率粒度)。Windows 计时器分辨率可以通过驱动程序和/或应用程序更改。定时器的粒度越小,可以形成越精确的时间间隔,但引入的开销也越大,反之亦然。

VAC 驱动器将系统定时器分辨率设置为所有电缆中最小时间事件持续时间 的四分之一驱动程序请求的当前分辨率显示VAC 控制面板应用程序中。系统计时器分辨率的更改记录在事件日志中。系统设置的实际分辨率也显示在 VAC 控制面板中

系统默认(首选)音频设备/端点

Windows 支持多达 256 个不同的MME/DirectSound/WASAPI 音频端点用于音频输入和输出。其中任何一个都可以指定为系统默认值 默认使用的首选设备。可以使用音频属性小程序来执行此类分配在应用程序的设备选择菜单中,默认设备显示为“Microsoft Sound Mapper”、“Wave Mapper”、“System Default”或类似设备。

如果应用程序向默认设备发出请求,Windows 会将其路由到之前设置为默认设备的实际设备。

在最新的Windows 10-11版本中,可以基于每个应用程序设置默认设备Windows 6.x + 中,默认设备是按系统设置的。Windows 5.x中,默认音频设备是按用户设置的。

有关详细信息, 请参阅系统默认设备问题。

设备/端点的默认音频格式

为了支持共享访问模式, 系统音频引擎 使用通用音频格式为所有客户端应用程序创建单个通用引脚实例。但引擎不知道将来会使用哪些格式,因此无法自动选择最佳格式。

Windows 5.x中,通用格式选择基于第一个连接请求。对于录音请求,通用格式与请求者的格式相同。对于播放请求,通用格式是引脚支持的最“宽”格式。如果引脚支持高采样率、位深度和通道数,则使用最常用的格式会涉及不必要的格式转换、开销和音频质量下降。

为了控制这些问题,Windows 6.x + 为每个播放和录音设备维护默认的音频格式当设备以共享模式打开时,系统音频引擎始终使用其默认格式。因此,您可以在默认格式之间自由选择,以获得最佳音频质量、最佳性能或最佳兼容性。

可以在 Windows 控制面板的“声音”小程序中选择默认格式。打开“播放”或“录音”选项卡,双击设备并选择“高级”选项卡。

“听”功能

从Win7 开始,Windows 实现了监听功能,旨在监视(听到来自)录音音频设备的信号。当为特定录音设备打开此功能时,系统音频引擎 开始从该设备连续录音,并立即将录制的信号播放到给定的播放设备。因此,该功能类似于音频中继器应用,但不允许利用动态电缆时钟调整功能

要使用设备的监听功能,请打开音频属性小程序,选择录制 选项卡,双击端点打开监听 选项卡,选中“监听此设备”复选框并选择所需的输出设备(通常是扬声器)。

使用此功能,您可以侦听来自虚拟电缆的信号(为电缆的源端点启用侦听功能并选择耳机/扬声器作为目标设备),也可以为虚拟电缆提供信号(为电缆的源端点启用侦听功能)源设备并选择虚拟电缆作为目标设备)。

一旦您打开“监听”功能,它就会保持活动状态,直到明确关闭为止。由于没有可见的活动指示器,因此很容易忘记它。如果您播放和/或录制了错误/不需要的音频信号,请确保某些使用的设备没有错误激活“聆听”功能。

扬声器插针类型

大多数音频适配器的WDM/KS驱动程序为其播放引脚提供 KSNODETYPE_SPEAKER 类型。这种引脚类型允许使用Windows 音频属性 Applet的“配置”按钮配置通道分配,但音频端点生成器始终为链接到这些引脚的端点分配“扬声器”名称。如果音频适配器(真实的或虚拟的)具有多个输出线,则无法通过名称来区分它们。

作为解决方法,VAC 默认使用 KSNODETYPE_LINE_CONNECTOR 作为播放引脚。它允许为每条输出线使用唯一的名称,例如“Line N”,但不允许使用系统通道配置功能。此外,使用DirectSound 的应用程序中可能会出现一些通道处理问题 

要控制播放引脚类型,请使用VAC 控制面板的电缆配置 部分中的“启用 spk 引脚”参数

请注意,在Win 6.x 下为某些电缆启用扬声器引脚类型会导致这些电缆的播放端点 具有相同的“扬声器”名称。大多数音频应用程序仅通过名称来区分音频设备,而不是唯一的内部标识符。因此,如果您为两条虚拟电缆启用扬声器引脚类型,并且这两条电缆具有相同的“扬声器(虚拟音频电缆) ”名称,则音频应用程序可能会在这些电缆之间产生混淆。应用程序很可能会在运行会话之间失去正确的电缆选择。 

管理员帐户

系统中的特权 (超级用户)帐户。从该帐户运行的应用程序可以执行各种管理操作。由于 VAC 是一个设备驱动程序,因此需要特殊权限才能将其安装到系统中或重新启动它,应用配置更改。

Windows 5.x中,“管理员”组的任何成员都具有此类权限并可以执行这些操作。

Windows 6.x +中,有UAC 功能(默认启用)。只有内置管理员帐户(名为“管理员”)才能执行所有特权操作,而无需采取其他措施。其他标记为“管理员”的帐户具有“虚拟特权”,只能通过特权提升来执行特权操作。区别仅在于普通用户帐户需要管理员密码才能提升权限,而标记为管理员的帐户则不需要。

如果启用UAC,Windows 会尝试自动提升标记为特权的应用程序的权限级别(此类应用程序无法从非特权帐户运行)。VAC 安装程序和卸载程序被标记为特权应用程序,因此如果您没有足够的权限,Windows 将要求权限提升。

VAC 控制面板未标记为特权,因为它可以执行特权和非特权操作。因此,如果您从“管理员”以外的帐户(甚至标记为管理员)运行 VAC 控制面板,则只有非特权操作可用。您将无法执行需要重新启动驱动程序或系统音频服务的操作。

要代表内置管理员帐户启动应用程序,请使用“管理员”作为用户名登录,或右键单击应用程序图标并选择“以管理员身份运行”项。

远程会话

最初,当用户直接坐在运行 Windows 的计算机的控制台(显示器、键盘和鼠标)前时,Windows 仅支持本地工作会话。从 Windows 2000 开始,引入了远程桌面会话 (RDS),当用户坐在“终端”(或“客户端”)计算机上时,所有用户操作都会发送到运行 Windows 的远程“终端服务器”计算机结果(屏幕内容、声音等)被发送回客户端计算机。终端连接是通过远程桌面协议(RDP) 建立的。使用这种连接,用户可以使用远程计算机,就像他/她在本地使用它一样。但也有一些限制。

Windows 远程连接有两种类型:单独(隔离)和直接(“控制台”)。对于单独的连接,Windows 会建立一个新的登录会话,将用户环境与其他用户隔离。对于直接连接,远程用户连接到主控制台会话环境。

借助TightVNC、 TeamViewerLogMeInRemote Administrator等桌面共享 产品,可以通过将屏幕更新从服务器转换到您的计算机以及将鼠标/键盘操作从计算机转换到服务器来直接建立连接。不会创建单独的登录会话,您的计算机充当服务器计算机的“远程控制台”。有了这样的连接,您就可以使用所有服务器资源,感觉自己就像立即坐在服务器上一样。

Windows 中的远程连接/会话支持允许将声音从远程计算机传输到远程计算机。默认情况下,当您建立会话时,远程系统的所有本机音频端点都会隐藏,并创建一个名为“远程音频”或“RDP 音频”的虚拟端点。如果远程音频应用程序向此类端点播放声音,声音将传输到您的本地系统,您可以在扬声器/耳机中听到它。如果应用程序从此类端点录制声音,则会将声音从本地麦克风或源线路传输到远程系统。

在建立远程会话之前,您可以在远程连接对话框的“本地资源 - 远程音频”设置中关闭此类行为。在这种情况下,不会为会话创建虚拟音频端点,并且所有音频应用程序将看到与典型本地会话中相同的音频端点集。

存在一些兼容性问题,甚至与远程会话/连接相关的 问题。

虚拟化环境

通过虚拟化工具 创建的环境 称为“虚拟化环境”。

不同的虚拟机软件提供不同层的平台虚拟化一些平台虚拟化产品提供完整的硬件虚拟化(VMwareVirtual BoxParallels WorkstationQEMUBochs),而大多数其他产品,如Parallels Virtuozzo(主要用于 Windows VPS/VDS 技术)仅提供部分虚拟化(例如,操作系统级虚拟化) )。

存在一些 与虚拟化环境相关的 兼容性问题。

电子签名

数字签名是一种特殊的数字序列,用于检查数据的真实性和一致性。如果数据被非法修改(篡改),其签名就会失效,并且可以轻松检查。

Windows 对可执行 ( PE ) 文件使用三种类型的数字签名:

  • 发布者签名由软件发布者(供应商)使用发布者证书直接应用,并证明文件是真实的。发布者证书获得一次,然后用于签署所有开发的软件。VAC 可执行模块由 EV 代码签名证书进行签名。此签名足以在Windows Vista、7、8 和 8.1中使用内核模式驱动程序。

  • 在数据库中注册内核模式驱动程序并执行一些基本检查后,Microsoft 硬件开发中心会应用证明签名在Windows 10 及更高版本中使用内核模式驱动程序需要此签名

  • Windows 徽标签名由Microsoft Windows 硬件质量实验室 (WHQL)应用,并证明文件已通过 Windows 合规性测试。将软件包提交给 WHQL 进行测试,如果测试成功,WHQL 会将可执行文件标记为与 Windows 兼容。在 Server 2012 及更高版本的服务器系统中以安全启动模式使用内核模式驱动程序时需要此签名。要在桌面系统或传统启动模式下使用,此签名不是必需的。VAC 驱动程序未经过其签名。

如果您有 VAC 驱动程序的数字签名问题,请阅读指南

缓冲区上溢/下溢

如果 缓冲区没有空间可放入数据(某些数据将从流中丢失),则会发生缓冲区溢出如果缓冲区 没有足够的数据应从中检索(数据流将包含间隙),则会发生下溢如果缓冲区在一侧填充并在另一侧排出,则如果填充流比排出流更“厚”,则会发生溢出,反之亦然。

与汽车油箱的使用相比,如果您的汽车油箱没有更多空间容纳通过加油软管提供的燃油,就会发生溢出。如果软管没有特殊的保护切断装置,多余的燃油就会流出,你就会失去它。相反,如果您没有在适当的时间加满油箱,油箱就会耗尽,您的汽车会突然停下来,需要进行维护。

在多节点或多层链中,流数据上溢/下溢并不一定意味着裂纹、弹出或故障。相反,没有数据上溢/下溢并不意味着没有裂纹、爆裂或毛刺。注册上溢/下溢的数据处理节点/层(驱动程序、应用程序、服务、插件等)对链中的其他节点/层一无所知;如果他们使用大量缓冲,则可能会阻止音频流中断。因此,如果一个节点/层已成功地将数据部分传递到链中的另一个节点/层,则其他节点/层中可能存在缓冲问题,导致流中断。

如果RT Audio协议中未使用数据包模式,则客户端 不会通知驱动程序有关读取或写入缓冲区的信息,因此驱动程序根本不会计算上溢/下溢。如果使用分组模式,双方将各自的缓冲区操作告知对方。

亲和力限制

PortCls系统驱动程序存在错误,导致具有WavePci 端口/微型端口类型的多CPU 或多核硬件上的音频数据处理效率显着下降VAC 实现多个子设备,而大多数音频驱动程序仅实现单个子设备,因此大多数硬件音频驱动程序不会出现此错误。

microsoft.public.development.device.drivers新闻组 中详细描述了该问题 。您可以在 Google 搜索字符串中输入“skype portcls getmapping”找到该帖子。不幸的是,没有稳定的链接。

避免此问题的最佳方法是使用 VAC 内部数据处理引擎代替 PortCls(默认使用内部引擎)。

如果出于某种原因应使用 PortCls 引擎,唯一可能的解决方法是禁用PortCls中的并发请求处理。为此,VAC 提供了一些驱动程序参数电缆参数 来限制 属于系统音频引擎或任何客户端的工作线程的CPU 关联性在注册表中创建适当的驱动程序参数值,将其设置为导致问题的电缆数量,或为选定的电缆创建关联性限制参数。然后重新启动VAC 驱动程序以传播参数更改。

WaveRT 和 WaveCyclic 端口类型不受此错误影响。

工作线程

工作线程是驱动程序的线程 ,执行所有处理工作(数据传输、音量控制、格式转换等)。不同的线程可以在不同的CPU /核心上执行,实现最佳的性能和负载分配。默认情况下,VAC 驱动程序为每个物理CPU /核心启动一个工作线程,因此所有可用的 CPU 功率都可以用于处理流数据。

默认情况下,工作线程调度优先级相对较高(在正常线程优先级和最高可能优先级值之间)。它保证流数据处理将优于大多数常规线程,但不会消耗所有可能的 CPU 时间。如果优先级设置为“自动”,VAC 驱动程序将使用系统端口类驱动程序提供的音频流资源管理。

您可以使用VAC 控制面板应用程序 限制这些线程的数量和/或更改其优先级

电缆和/或流问题

电缆或流媒体问题是指阻止(或可能阻止)正常电缆/流媒体功能的情况。

有问题用红色感叹号表示。电缆问题显示在电缆列表窗口中,左侧为电缆编号。流问题在流列表窗口中指示,左侧为流标识符。

如果一根或多根电缆流有问题,也会指示电缆问题。如果指示电缆问题但没有流问题,则问题与电缆本身有关。

如果没有明确的消息描述问题,请参阅驱动程序事件日志以了解详细信息。与问题相关的消息用“!”表示。

Windows启动过程

曾经,每次 Windows 关闭都会彻底破坏 RAM 中存储的所有系统组件。分别地,每次系统启动(boot)都是“从头开始”执行的,通过从磁盘读取(加载)所有必需的代码和数据并初始化它们。通过这种方式重新启动(重新引导)的系统始终可以清除不保留在磁盘上的任何临时对象。这通常称为“完全”或“干净”重新启动。

后来,Windows开始支持休眠 和混合关机模式,虽然计算机看起来完全关闭,但实时系统状态并不是从头开始构建的。相反,内存中的一些(或全部)代码/数据在关机期间保存到磁盘,并在启动过程中以相同状态读回,而不进行初始化,以使启动过程更快。

在这种优化的部分引导/启动 的情况下,并非所有内部系统和/或应用程序数据结构都被重建。如果某些操作(例如,软件产品安装/卸载、系统更新等)需要完整的系统重新启动,并且系统配置为休眠或混合关闭,则此类部分关闭/启动序列将不会执行完整的系统重新启动,并且配置过程可能无法正确完成。

因此,执行完全(冷)Windows 重新启动的唯一方法是从电源菜单中选择“重新启动”选项。其他方式(选择“关机”、按电源按钮等)不能保证系统完全重新启动。仅当您完全确定您的系统配置为完全关闭,然后是完全、完整的启动过程时,您才可以使用替代方法。

Windows 版本

现代Windows NT 版本如下:

  • 5.0 - Windows 2000 (Win2k)

  • 5.1 - Windows XP (WinXP)

  • 5.2 - Windows 2003 服务器 (Win2k3)

  • 6.0 - Windows Vista、服务器 2008

  • 6.1 - Windows 7 (Win7)、服务器 2008 R2

  • 6.2 - Windows 8 (Win8)

  • 6.3 - Windows 8.1 (Win8.1)

  • 10.0 - Windows 10 (Win10)、服务器 2012/2016/2019、Windows 11 (Win11)、服务器 2022

因此,“Win 5.x”表示 Windows 2000/XP/2003,“Win 6.x”表示 Vista、Server 2008、Windows 7 和 Windows 8。“Win 6.x+”表示 Vista 及所有更高版本(Win 7、赢8等等)。

Windows 11(10.0.22000,21H2)实际上是Windows 10的下一个版本,它与之前的版本(21H1)没有显着差异。

Windows 95/98/ME有4.x版本,不属于Windows NT家族。

一般来说,除非明确说明,否则在特定版本中添加或删除的属性也会在下一版本中保留。


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

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