多彩编程 多彩编程MZPH · CODE BLOG
ARTICLE DETAIL

文章详情

深耕前端与后端开发技术的一线实战笔记与踩坑复盘。

Windows 音频捕获入门:从 WASAPI 到 WAV

Windows 音频捕获入门:从 WASAPI 到 WAV 1. 学习目标音频捕获阶段不需要掌握所有 Windows 音频 API。完成下面这条数据链,就足以进入重采样、编码和音视频同步:音频设备 - WASAPI - AudioPacket - WAV - 播放器/ffprobe 验证这一阶段真正需要掌握的是:麦克风采集与系统声音 Loopback 的区别。Shared、Exclusive、Event-driven 的基本含义。PCM 的 sample、frame、channel、byte 关系。GetBuffer()和ReleaseBuffer()的生命周期。设备位置、QPC 时间和媒体 PTS 的区别。静音、中断和时间戳错误的语义。当前 Demo 为了避免说话测试,采用:默认扬声器 - WASAPI Shared/Event-driven Loopback - WAV2. 麦克风与 Loopback2.1 麦克风采集GetDefaultAudioEndpoint(eCapture,eConsole,device);eCapture表示录音端点,数据来自麦克风、线路输入或虚拟麦克风。人的声音 - 麦克风 - 驱动 - Windows Audio Engine - 应用2.2 系统声音 LoopbackGetDefaultAudioEndpoint(eRender,eConsole,device);初始化时增加:AUDCLNT_STREAMFLAGS_LOOPBACKeRender表示播放端点。Loopback 不读取麦克风,而是复制 Windows 音频引擎送往默认扬声器或耳机的最终混音:播放器/浏览器/游戏 - Windows Audio Engine - 扬声器 - Loopback Capture ``` Loopback 只捕获默认播放设备上的声音。系统切换到另一个耳机后,已经建立的会话 不会自动迁移,需要重新打开设备。 系统没有播放声音时,Loopback 可能完全不产生 packet。因此程序运行 10 秒,并不 保证 WAV 中一定包含 10 秒音频;严格保持墙钟时间轴时需要为空闲区间补静音帧。 ## 3. Shared、Exclusive 与 Event-driven ### Shared Mode 多个应用共享 Windows Audio Engine。应用通常使用 `GetMixFormat()` 返回的格式, 由系统负责与硬件格式适配。 优点: - 兼容性好。 - - 不独占设备。 - - 适合作为第一个采集实验。 ### Exclusive Mode 应用直接独占设备并选择硬件支持的格式。它适合低延迟或专业音频,但会引入格式 协商、缓冲区周期和设备占用等额外问题,不属于当前阶段。 #
返回列表