winapi - 如何捕获正在播放的音频?

标签 winapi audio directx audio-recording

有谁知道如何以编程方式捕获正在播放的声音(即来自声卡的所有声音,而不是来自麦克风等输入设备的声音)。

最佳答案

假设您正在谈论 Windows,则基本上可以通过三种方法来执行此操作。

第一个是打开音频设备的主输出作为录音源。这只有在驱动程序支持时才可能实现,尽管现在大多数驱动程序都支持它。虚拟设备的常见名称是“What You Hear”或“Wave Out”。您将需要使用合适的 API(请参阅 MSDN 中的 WaveIn 或 DirectSound)来进行捕获。

第二种方法是编写一个过滤器驱动程序,可以在音频流到达物理设备之前拦截它。再次强调,此技术仅适用于具有合适驱动程序拓扑的设备,并且肯定不适合胆小的人。

这意味着这些选项都不能保证在具有任意硬件的 PC 上工作。

最后一种选择是使用虚拟音频设备,例如 Virtual Audio Cable 。如果此设备被设置为 Windows 中的默认播放设备,则所有运行良好的应用程序都将通过它播放。然后,您可以从同一设备进行记录以捕获总输出。只要您可以控制要录制的应用程序使用的设备,那么此选项将始终有效。

所有这些技术都有其优点和缺点 - 由您决定哪一种最适合您的需求。

关于winapi - 如何捕获正在播放的音频?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/211484/

相关文章:

c++ - 删除远程用户帐户功能

windows - 如何获取 Windows 中所有打开的命名管道的列表?

C++ 从另一个 Win32 应用程序获取 GDI 原始文本

java - 输出的 wav 文件大小比原始文件大几倍

c++ - Directx 11 渲染问题,没有显示三角形

winapi - Golang : using Windows 10 API/UWP/System. Windows 运行时?

c# - C#Android:在单击时播放声音

javascript - <audio> 标签的可定制和跨浏览器友好的音频播放器

opengl - 多头显示系统

c++ - 采样 D3D11 深度缓冲区时出现问题