c#/.NET - 录制当前正在播放的音频

c#/.NET - Recording the current audio being played

c#/.net有没有办法录制当前正在播放的音频?我在互联网上搜索了很多,但我能找到的唯一结果是使用麦克风录音。

我不想使用麦克风输入进行录音,我想在单击录音按钮时录制计算机上正在播放的内容。

谢谢

能够从另一个应用程序接收数据的唯一方法是开发人员通常通过某些 SDK、API 或其他方式提供访问点。否则,您的应用程序代码将无法从其他应用程序接收字节。

麦克风工作的原因是因为它从应用程序接收声音输出字节并将这些声波字节发送回您的 PC 以呈现和输出声音。由于您可以从麦克风访问这些字节,因此您可以捕获声音。

看看是否有 API 或您尝试从中获取声音的应用程序开发人员提供的 SDK。

这里有两个选择:

  1. 硬件环回设备 - 虚拟 "Stereo Mix" 音频设备,充当常规音频捕获设备,同时生成通过默认音频输出设备播放的混合音频提要的副本系统。由于此类设备显示为真正的音频输入设备,您可以使用标准 APIs、库甚至退出应用程序从此类设备进行录音。

  2. 以编程方式访问虚拟环回设备,就像它是类似麦克风的设备一样。 API 在后台将复制播放的音频内容,并使其在播放时可供回读。好消息是您可以访问您感兴趣的设备的混合音频源。

这两个选项在 MSDN 上的 Loopback Recording 文章中有详细描述,并可通过标准音频 API 获得,特别是 WASAPI。

对于 C# 开发,您可能会使用像 NAudio 这样的包装器。

对于选项 1,您会在 Whosebug 上找到很多问题,对于另一个选项,关键字是 AUDCLNT_STREAMFLAGS_LOOPBACK