對系統播放出來的聲音進行錄音是一個比較常見的需求,比如各類直播工具,就會把主播的聲音經過麥克風採集下來,再與電腦裏播放的音樂合成(也就是混音),再推送到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