简介这是一份基于微软音频驱动示例实现的虚拟声卡工程面向 Windows 驱动与音频开发学习者用于理解虚拟音频设备在系统中的创建、接口挂载与数据路由方式。压缩包为 RAR 格式共 91 个文件体积约 132KB以头文件与源码文件为主配合构建脚本、说明文档和驱动安装配置文件构成一套可直接研读的驱动示例工程包内还包含多个分支示例目录可对比不同音频模型与传输路径的实现差异。内容覆盖多组示例模块涉及不同音频格式、DMA 传输、拓扑结构、多声道配置等实现读者可借此学习 WDM 驱动框架、WASAPI 与 Core Audio 接口调用、音频信号处理以及多线程实时同步等关键知识点readme 中通常还给出了编译、安装与依赖说明。已有 829 人学习下载适合需要对照官方示例做二次开发或希望从原理层面掌握虚拟声卡机制的开发者。1. 虚拟声卡没有它系统声音录不下来这件事能折腾你一下午直播开着、BGM放着观众却说听不到背景音乐录教程视频画面正常、音轨静音——这类问题在开发者圈子里太常见了根子多半是系统不允许“直接录到正在播放的声音”。virtual audio虚拟声卡就是干这个的它在系统里注册一对虚拟音频设备播放端和录音端内部连通应用把声音输出到虚拟播放设备录音软件再像读麦克风一样把它拿走。这个方案是直播推流、系统录音、远程会议音频路由的标配。装不好它音频链路就会各种无声、杂音、延迟排查起来极其玄学。下面就把主流系统的虚拟声卡选型、安装、配置和排错一次讲透适合卡在音频路由上的开发者照着走。2. 方案选型先分清平台再决定装哪一个2.1 三种主流虚拟声卡方案对比虚拟声卡这个领域不像装显卡驱动那样一家独大不同系统各有成熟方案选错了会在驱动签名、权限、内核兼容这些地方连环翻车。先看一张对比表快速定位自己该走哪条路操作系统推荐工具免费程度配置难度典型用途WindowsVB-CABLE免费单线缆低系统声采集、直播、录音macOSBlackHole完全开源免费中多声道路由、系统内录LinuxPulseAudio null-sink系统自带低桌面音频路由选型第一原则是不要跨平台硬套。Windows 上 VB-CABLE 的思路是“虚拟线缆”macOS 上虽然也有 VB-CABLE 的版本但多数用音视频工具的人更习惯 BlackHole 这种完全开源、不依赖订阅的方案Linux 则压根不需要装第三方驱动PulseAudio 自带的 null-sink 就够日常用了。平台选错后面每一步都在给前面的选择擦屁股。2.2 Windows 平台VB-CABLE 最轻但免费版只有一条线缆VB-CABLE 是目前 Windows 上最轻的虚拟声卡方案它本质是一条“虚拟音频线缆”一头是播放设备一头是录音设备中间的音频传输纯软件完成不经过任何物理硬件。安装完系统里会多出两个设备——CABLE Input播放和 CABLE Output录音应用把声音往 CABLE Input 一塞录音软件从 CABLE Output 接住就这么简单。这个方案最大优点是免费版提供的单条线缆足够绝大多数场景使用系统默认输出改到 CABLE Input录音软件输入改到 CABLE Output一个标准的“系统声进虚拟线缆”链路就成了。相比那些自带混音台的专业级虚拟声卡VB-CABLE 没有复杂面板不跟你讲路由矩阵反而让新手不容易懵。需要注意装 VB-CABLE 时如果一路 Next容易被注册表里多出的音频服务搞乱。我习惯装完立刻打开声音面板确认 CABLE Input 和 CABLE Output 都出现且电平状态正常再动系统默认设备。免费版只有一条线缆如果你需要同时路由多路音频比如一边录自己声音一边录队友声音可能得考虑付费多线缆版本或者叠加音频路由工具共同使用。2.3 macOS 平台BlackHole 是绕不开的选择macOS 上虚拟声卡的选择比 Windows 更少BlackHole 基本是事实标准。它完全开源免费有 2ch、16ch、64ch 等不同声道版本采样率最高到 384kHz做多轨音频路由也不虚。安装后系统里会多出一个 BlackHole 2ch 音频设备任何应用都能把它当普通声卡用。macOS 与 Windows 的关键差异是系统声音面板里直接选 BlackHole 2ch 会导致自己听不到声音所以官方推荐配合“音频 MIDI 设置”创建一个多输出设备让声音同时输出到 BlackHole 2ch 和物理扬声器。这个思路比 Windows 的“侦听此设备”优雅不少延迟也更可控。BlackHole 装完还要重启一下系统音频服务这个动作在老一点的 macOS 版本上尤其重要跳过它会导致设备列表里刷不出新声卡。2.4 Linux 平台PulseAudio 的 null-sink 三行命令Linux 桌面走 PulseAudio 或 PipeWire 的话不需要下载任何第三方安装包PulseAudio 自带的 module-null-sink 就能创建虚拟声卡。它不占额外资源、不需要重启一条 pactl 命令即可动态加载。# 创建名为 virtual_speaker 的虚拟声卡 pactl load-module module-null-sink sink_namevirtual_speaker sink_propertiesdevice.descriptionVirtual_Speaker创建成功后系统声音设置里会出现 Virtual_Speaker 设备角色与 VB-CABLE 的 CABLE Input 相同作为“播放设备”存在。应用把声音送进去录音软件用“监视 Virtual_Speaker”的方式捕获音频流。但 null-sink 只是把声音吸收这段音频能不能被其他应用读取取决于你用 PulseAudio 还是 PipeWire是否装了 pavucontrol 这类图形路由工具。纯命令行玩法门槛略高胜在干净。如果需求只是“把系统声录下来”优先选 Windows 的 VB-CABLE 或 macOS 的 BlackHole如果是桌面内做应用级音频分流Linux 的 null-sink 三行命令就够。确定方案之后下面两章分别展开 Windows 和 macOS 的完整操作每一处配置我都标注了容易写错的路径和参数。3. Windows 下安装 VB-CABLE两个设备的角色别搞反3.1 下载与安装x64 和非 x64 两个安装包选错就白装VB-CABLE 的安装包在官网下载页是一个 ZIP 压缩包解压后能看到两个安装程序VBCABLE_Setup_x64.exe 和 VBCABLE_Setup.exe。64 位 Windows 装前者32 位装后者。这一步看着简单但我在 64 位系统上见过有人装了 32 位版本结果设备管理器和声音面板全都识别不到排查半天才发现是架构不对。安装时会弹授权确认窗口点接受后驱动会立刻写入系统这时候最好把正在播放声音的应用全部关闭避免音频服务占用冲突。装完程序会提示重启电脑。虚拟声卡是内核驱动级软件不像普通应用即装即用重启这步不能跳过否则声音设备列表里很可能找不到 CABLE 设备。我习惯装完立刻重启顺手在设备管理器的“音频输入和输出”分支下确认多出两个带 CABLE 字样的设备。3.2 认识 CABLE Input 和 CABLE Output名字和角色是反的这是整个 VB-CABLE 配置里最容易搞混的地方。光看名字你可能以为 CABLE Input 是输入设备、CABLE Output 是输出设备实际恰好相反CABLE Input 出现在“播放”设备列表里角色是扬声器应用程序把声音输出到这里。CABLE Output 出现在“录音”设备列表里角色是麦克风录音软件从这里读取音频流。换句话说CABLE Input 对应用来说是“音箱”CABLE Output 对录音软件来说是“麦克风”。音频流从 Input 进去、从 Output 出来中间像一根真实线缆直连。理解不了这层反转关系的人十有八九会在配置里把两个设备选反在系统录音设置里把默认录音设备选成 CABLE Input结果录到的还是静音。面板操作上新版 Windows 的“设置 → 系统 → 声音”页面能改默认设备但信息展示有限。我的习惯是直接 WinR 输入 mmsys.cpl 回车打开经典声音控制面板在“播放”和“录制”两个选项卡里看设备状态和改默认值。经典面板能看到设备当前运行状态绿色电平跳动这对排查太重要了。3.3 系统级配置把默认输出切到 CABLE Input要采集系统声音最直接做法是把 Windows 默认输出设备设为 CABLE Input这样所有系统音效、浏览器、播放器的声音都会送进虚拟线缆。具体步骤按 Wini 打开设置进“系统 → 声音 → 输出”把默认输出设备改成 CABLE Input。再按 mmsys.cpl 打开经典面板在“录制”选项卡里确认 CABLE Output 处于就绪状态电平条安静时不起伏。# 也可以在 Windows 下用命令行工具快速切换默认输出设备 SoundVolumeView /SetDefault CABLE Input Output如果你不爱点图形界面可以借助 SoundVolumeView 这类命令行小工具切换默认设备。但注意改完默认输出后电脑就听不见任何声音了——所有声音都被送进虚拟线缆而线缆另一头暂时没接任何“听”的设备。这是新手最容易误以为装坏了的时候其实不是坏了是链路还没闭环。录音软件这一侧只需要把输入设备选成 CABLE Output。比如在系统自带录音机里麦克风下拉列表选 CABLE Output再点录制系统正在播放的声音就能被录进去。3.4 一边录一边听监听思路和音频环路提醒上面配置能录到声音代价是物理扬声器静音。如果录制或直播过程中需要监听系统声音有两条路第一条是软件内监听。直播软件、录音软件大多带监听功能打开后能直接从软件里听到进入虚拟线缆的音频流。这条路简单、延迟低推荐优先用。缺点是你只能听到“进软件的声音”想同时听到应用声和麦克风声的混合效果得看软件是否支持。第二条是系统级监听。在经典声音控制面板的“录制”选项卡里选中 CABLE Output点属性切到“侦听”标签勾选“侦听此设备”然后在“播放此设备”下拉列表里选真实扬声器。系统会把虚拟线缆里的声音转发到物理音箱。注意勾选“侦听此设备”时播放设备必须选择真实的扬声器或耳机绝不能选 CABLE Input 或 CABLE Output否则会形成音频环路轻则啸叫重则设备假死。系统级监听有个常见坑勾选侦听后默认播放设备还是 CABLE Input而侦听选项里如果错误选择 CABLE Output 作为回放设备音频环路直接炸出刺耳啸叫。我一般取值播放设备选真实扬声器或耳机不选任何带 CABLE 字样的设备。另外系统级监听会引入一小段可感知延迟对口型、弹琴这类需要精确节奏的场景别用这个方案老实让软件做监听。4. macOS 下安装 BlackHole 与多输出设备录音和监听可以共存4.1 安装 BlackHolepkg 装完重启 coreaudiodBlackHole 的安装包是标准 pkg 格式双击一路继续即可安装过程不需要额外配置。装完后记得在终端执行一次# 重启系统的音频服务进程让虚拟声卡设备生效 sudo killall coreaudiod这步的作用是让核心音频守护进程重新扫描设备。不少人在 macOS 上装完发现音频设备列表里没有 BlackHole十有八九就是跳过了这步。kill 掉 coreaudiod 之后系统会自动拉起新进程不需要注销或重启电脑。装完验证打开“系统设置 → 声音 → 输出”应该能看到 BlackHole 2ch 出现在设备列表里。这一步通过后面才谈得上配置多输出。4.2 创建多输出设备把系统声分流到扬声器和虚拟线如果直接把系统输出设为 BlackHole 2ch结果是电脑彻底安静了所有声音都进虚拟声卡自己听不到。这跟 Windows 那边把默认设备改成 CABLE Input 的体验一模一样不过 macOS 解决方式更优雅。打开“音频 MIDI 设置”启动台 → 其他目录下或 Spotlight 搜索 Audio MIDI Setup在左下角点“”号选择“创建多输出设备”。在下方的设备列表里勾选 BlackHole 2ch 和内置扬声器或 USB 声卡、耳机顺序无所谓。最后回到“系统设置 → 声音 → 输出”把输出设备切换到这个多输出设备。这样配置之后系统音频会同时流向 BlackHole 2ch 和物理扬声器录音软件选 BlackHole 2ch 作为输入设备就能录制系统声音同时还能正常听到声音。这一招在 Windows 上对应“侦听此设备”但多输出设备是并行分流不像侦听那样有二次转发延迟实际体验舒服很多。4.3 采样率统一macOS 爆音的重灾区macOS 的音频处理对采样率极其敏感。系统输出设备 48kHz、BlackHole 2ch 设置成 44.1kHz 时录出来的音频会带周期性咔哒声严重时整段声音像接触不良。解决办法是在音频 MIDI 设置里把多输出设备涉及的所有设备采样率统一。具体操作选中 BlackHole 2ch右上角“格式”下拉框改成 44.1kHz 或 48kHz再依次选中内置扬声器、多输出设备把格式改成一样。我个人在录视频场景一律用 48kHz因为视频平台最终以 48kHz 为主流录音乐 Demo 才用 44.1kHz。注意改完采样率后最好重新在系统声音设置里切换一次输出设备让音频服务重新按新格式建立连接。还有一个细节容易忽略BlackHole 的声道版本和格式是绑定的2ch 版本只能处理双声道。如果你在音频 MIDI 设置里选了 5.1 声道等高级格式BlackHole 2ch 会直接罢工。需要多声道环境的话要额外下载 16ch 或 64ch 版本重新安装。4.4 Linux 平台补丁null-sink 的完整路由与开机自启回到 Linux前文提到的基础方案是动态加载 null-sink但光加载模块还不够形成闭环——需要把应用声音导向虚拟声卡同时让系统能“听到”它。完整命令如下# 1. 加载虚拟声卡模块创建 virtual_speaker pactl load-module module-null-sink sink_namevirtual_speaker sink_propertiesdevice.descriptionVirtual_Speaker # 2. 查看当前所有音频设备确认 virtual_speaker 的编号 pactl list short sinks # 3. 把默认输出切换到虚拟声卡 pactl set-default-sink virtual_speaker三步做下来系统声音进入 virtual_speaker录音软件把输入源指向 Monitor of Virtual_Speaker就能拿到系统音频流。这里 Monitor 就是 PulseAudio 为每个 sink 自动创建的录音源相当于 VB-CABLE 的 CABLE Output。但 null-sink 是动态加载的重启电脑就失效。要让配置持久化可以把加载指令写到 /etc/pulse/default.pa或用户级 ~/.config/pulse/default.pa在文件末尾追加# 追加到 PulseAudio 默认配置开机自动创建虚拟声卡 load-module module-null-sink sink_namevirtual_speaker sink_propertiesdevice.descriptionVirtual_Speaker这有个坑改完 default.pa 后PulseAudio 在很多发行版上不会自动重载配置要在终端执行 pulseaudio -k 重启音频服务或注销重登一次。如果桌面音量控制图标里出现两个 Virtual_Speaker通常是系统级和用户级配置写了两遍检查一处删掉即可。5. 虚拟声卡常见问题排查无声、静音、爆音、变调四类坑5.1 装了 VB-CABLE 之后系统彻底没声音电平条却在跳现象默认输出设备选成 CABLE Input 后扬声器安静了但 CABLE Output 的电平条在系统声音面板里正常跳动说明音频流确实进了虚拟线缆只是没人接听。原因这不是故障是链路没闭环。CABLE Input 只是把声音收进线缆线缆另一头没有接真实输出设备物理扬声器自然没动静。只有打开录音软件并选择 CABLE Output 作为输入或启用系统监听声音才能被人感知。解决如果只是临时录系统声录完要恢复音箱把默认输出设备改回真实扬声器即可。如果需要一边录一边听回到 3.4 节的监听方案把 CABLE Output 的侦听对象指向真实扬声器。5.2 BlackHole 录到的是静音但监听设备有声音现象多输出设备配置完成系统声音正常从扬声器出来录音软件选 BlackHole 2ch 录制后波形一直是平的。原因大概率是录音软件把输入设备指向了多输出设备而不是 BlackHole 2ch。很多录音软件的麦克风下拉列表会列出系统所有音频设备多输出设备也在里面一旦选到它软件实际在“录制”多输出设备的输出而这条输出不包含发给 BlackHole 的数据通道。解决打开音频 MIDI 设置确认 BlackHole 2ch 状态正常在录音软件输入设置里明确选 BlackHole 2ch。另一个容易忽略的点是权限macOS 隐私设置里录音软件必须勾选麦克风权限否则即使选对设备系统也拒绝把音频流交给它。5.3 虚拟声卡链路出现明显延迟和爆音现象监听或录制的声音有滞后感重音位置出现咔哒声或碎音。原因虚拟声卡音频流走软件环形缓冲区缓冲区太小会爆音太大会延迟明显。系统级侦听比软件内监听多走一条转发路径延迟更大后台高 CPU 任务也可能让音频线程饥饿。解决优先改用软件内监听在录音软件、直播软件里适当调大音频缓冲比如调到 256 或 512 采样关闭浏览器里后台播放的页签减轻音频引擎调度压力。5.4 录出来的声音变调、速度不对现象录音回放时声音像快进或慢放人声发闷甚至变成“小黄人”效果。原因播放设备和虚拟声卡的采样率不一致。比如系统输出 48kHzCABLE Output 或 BlackHole 2ch 端录音采样率被软件设成了 44.1kHz播放时系统按错误速度解析采样点于是变调。解决把采集链路上所有设备的采样率统一。Windows 上在 CABLE Output 属性的“高级”选项卡里检查默认格式macOS 在音频 MIDI 设置里统一格式。录音软件的工程采样率也不要和虚拟声卡打架我一般先把虚拟声卡设成工程文件相同的采样率再开录音会话。6. 装完怎么验证从系统声到录音文件一步不落配置完虚拟声卡别急着开直播或者录正片先走一遍最小链路验证系统出声 → 虚拟声卡接收 → 录音软件录下 → 回放检查。这四步全部通过才算真正跑通。Windows 下验证最简单打开系统自带录音机声音输入设备选 CABLE Output放一段有节奏感的音乐录 30 秒停止后回放。如果回放能听到清晰音乐且没有爆音、没有变调链路就通了。macOS 同理用系统自带的 QuickTime Player 新建音频录制音频来源选 BlackHole 2ch录一段再回放。如果你手头有 FFmpeg命令行验证更快# Windows从 CABLE Output 录音 5 秒保存为 wav ffmpeg -f dshow -i audioCABLE Output -t 5 test.wav# macOS从 BlackHole 2ch 录音 5 秒保存为 wav ffmpeg -f avfoundation -i :BlackHole 2ch -t 5 test.wav跑完生成 test.wav大小非零、打开能听到内容说明虚拟声卡工作正常。再进一步用 FFmpeg 的 ebur128 滤镜看平均响度确认电平不是虚高或过低ffmpeg -i test.wav -af ebur128 -f null -输出里会显示综合响度值大致在 -16 LUFS 左右算健康范围。从那以后我每次配置完虚拟声卡都会先关掉所有音乐用 FFmpeg 录 5 秒空白环境声确认设备能出电平再放一段音乐确认音质没变形最后才接入直播或录制链路。这套验证花不了两分钟却能省掉录制一小时才发现音频翻车的后悔药希望帮到你。本文还有配套的精品资源点击获取