虛擬麥克風使用的場景:
- Android 或 IOS 端錄制音頻數(shù)據(jù), 發(fā)送給 Windows 服務(wù)端, Windows 服務(wù)端把數(shù)據(jù)傳遞給到 Winodws 驅(qū)動端
- 第三方的軟件, 例如: 錄音機, 聊天軟件翰铡, 游戲等, 就可以收到聲音
- 音頻數(shù)據(jù)流動可以參考下圖
虛擬Mic.png
虛擬麥克風相關(guān)的技術(shù)概念:
- 能否不開發(fā) Winodws 驅(qū)動讽坏, 直接把Mic數(shù)據(jù)锭魔, 通過Winodws語音服務(wù)程序發(fā)送給通用的第三方軟件 -- 不行
- Windows 程序能否通過 API 調(diào)用的方式, 把音頻數(shù)據(jù)發(fā)送到虛擬Mic設(shè)備上 -- 不行路呜, Windows 不允許往輸出設(shè)備寫入數(shù)據(jù)
- Windows 官方提供的 虛擬音頻驅(qū)動 Sysvad 提供了很好的參考方案迷捧, 但是音頻數(shù)據(jù)的流轉(zhuǎn)通道沒有實現(xiàn), Speaker 設(shè)備支持寫入到文件胀葱, Mic 設(shè)備模擬 Tone 音(當一直響)
- Github 也有一些開源方案參考: 開源 AudioMirror 方案漠秋, 方案主要有兩個問題: 代碼基于老的 Sysvad 方案開發(fā), 音頻數(shù)據(jù)無法直接發(fā)送給虛擬Mic抵屿, 需要發(fā)送給虛擬 Speaker 然后通過 虛擬Speaker 在驅(qū)動層 通過 RingBuffer 的形式把數(shù)據(jù)轉(zhuǎn)給虛擬 Mic庆锦。 如果是商用方案, 顯得數(shù)據(jù)流不夠優(yōu)雅轧葛。
- 市面上的閉源方案 MicStream 搂抒, 如果僅演示使用, 這是個很好的實現(xiàn)方案尿扯, 如果需要進行一些定制求晶, 例如數(shù)據(jù)通過 BT 發(fā)送, 音頻的通道衷笋, 采樣率芳杏, 深度進行一些定制, 這個是無法滿足的辟宗。
虛擬麥克風實現(xiàn)方案:
- 基于 Windows 官方虛擬音頻驅(qū)動爵赵, 已經(jīng)實現(xiàn)好了虛擬Mic
- 基于此驅(qū)動, 再搭建一個應用層和驅(qū)動層的通訊通道就可以實現(xiàn)虛擬Mic功能
- 通道可以使用 DeviceIoControl 進行音頻數(shù)據(jù)流轉(zhuǎn)