Windows下如何对声卡音频输出进行录音

对系统播放出来的声音进行录音是一个比较常见的需求,比如各类直播工具,就会把主播的声音经过麦克风采集下来,再与电脑里播放的音乐合成(也就是混音),再推送到CDN,分发给观众;再比如屏幕录制也希望能够同时录制系统的声音输出。

微软提供的Core Audio APIs中的WASAPI即是用来实现这一功能的。

先看这个https://docs.microsoft.com/zh-cn/windows/win32/coreaudio/core-audio-apis-in-windows-vista

大意是说从windows vista开始提供的这套接口,它为更高层次的接口如DirectSound和waveXxx提供基石,开放出来满足更低层的开发。

再看这个关于WASAPI的介绍:https://docs.microsoft.com/zh-cn/windows/win32/coreaudio/wasapi?redirectedfrom=MSDN

大意是说WASAPI使得客户端的应用能够在应用与音频端点设备之间管理音频数据流,头文件Audioclient.h和Audiopolicy.h给出了WASAPI接口的定义。

再看这个https://docs.microsoft.com/zh-cn/windows/win32/coreaudio/capturing-a-stream

讲到了客户端调用IAudioCaptureClient接口从端点缓冲中读取捕捉的数据,可以用共享模式或独占模式。介绍了IAudioClient和IAudioCaptureClient这两个接口的一些方法的使用。并且附带了一个例子,是从默认的采集设备录制音频流的,如果要捕捉声卡输出的音频流,需要将eCapture改为eRender。

再看这个关于Loopback Recording的https://docs.microsoft.com/zh-cn/windows/win32/coreaudio/loopback-recording

在loopback模式下,WASAPI客户端能够捕捉正在被渲染端点设备播放的音频流,如何以loopback模式打开一个流。

最后提一下用到该项技术的开源软件OBS:https://github.com/obsproject/obs-studio

具体源码参考插件win-wasapi的实现。

此外还有两处文章值得参考:

1.http://blog.sina.com.cn/s/blog_bb2d37f30102xdhf.html

2.https://blog.csdn.net/u013898698/article/details/80251150

发布了282 篇原创文章 · 获赞 140 · 访问量 117万+

猜你喜欢

转载自blog.csdn.net/qiuchangyong/article/details/104486716