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

时间:2008-10-17 08:55:29

标签: winapi audio directx audio-recording

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

4 个答案:

答案 0 :(得分:17)

假设您在谈论Windows,基本上有三种方法可以做到这一点。

第一种是打开音频设备的主输出作为录制源。这只有在驾驶员支持它时才有可能,尽管大多数人都这样做了。虚拟设备的通用名称是“您听到的内容”或“波出”。您需要使用合适的API(请参阅MSDN中的WaveIn或DirectSound)来进行捕获。

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

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

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

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

答案 1 :(得分:3)

您可以使用波形音频接口,每个PInvoke有一个MSDN article如何访问它。

为了捕捉正在播放的声音,您只需打开播放设备而不是麦克风。打开输入,当然不是输出; - )

答案 2 :(得分:0)

如果您使用的是OSX,Audio Hijack Pro from Rogue Amoeba可能是最简单的方法。

无论如何,为什么不将你的音频循环回你的音频并录制?这是一个非常简单的解决方案。只需将电缆插入音频输出插孔和线路输入插孔即可开始录音。

答案 3 :(得分:0)

您必须启用设备立体声混音。如果你这样做,直接声音找到这个设备。