国产精品天干天干,亚洲毛片在线,日韩gay小鲜肉啪啪18禁,女同Gay自慰喷水

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

如何在任務(wù)管理器上可視化聲音

2018-12-08 12:30 作者:九條可憐醬  | 我要投稿

具體效果可以先觀看一下視頻?av37598946

源碼:https://github.com/ibukisaar/Taskmgr_x_Spectrum

注意事項(xiàng):只在Win10 x64下運(yùn)行過(guò),Visual?Studio版本至少2017。程序本身需要管理員權(quán)限啟動(dòng),如需調(diào)試Visual?Studio也要管理員權(quán)限啟動(dòng)。任務(wù)管理器上的CPU監(jiān)視窗口數(shù)量如果不是4,可能要對(duì)代碼作出修改。

原理

先用C++寫(xiě)個(gè)dll用于注入攔截WM_PAINT消息,不然CPU監(jiān)視窗口會(huì)有間歇性閃爍。注入不是必須的,這步可以省略,如果可以容忍閃爍發(fā)生的話(huà)。

用GetWindowLongPtr拿到舊的WndProc,放到map里,再用SetWindowLongPtr為每個(gè)子窗口設(shè)定新的WndProc。

新的WndProc代碼


接下來(lái)全都是C#代碼。

使用查找窗體相關(guān)的WinAPI拿到目標(biāo)窗體句柄,并獲得子窗體以及它們的層級(jí)關(guān)系,然后搜索CPU使用率監(jiān)視窗口。如果你的情況不太一樣,那么需要用spy++重新進(jìn)行分析。

拿到CPU使用率監(jiān)視窗口的代碼
斷點(diǎn)調(diào)試查看層級(jí)關(guān)系
找出對(duì)應(yīng)位置的子窗體

拿到各個(gè)子窗口后,把句柄傳進(jìn)WindowGraphics構(gòu)造函數(shù)并實(shí)例化,這是一個(gè)可以跨進(jìn)程窗體繪制的類(lèi),繪圖方式使用WPF中的DrawingContext。調(diào)用WindowGraphics中的OpenDraw()方法,并返回一個(gè)IGraphics接口對(duì)象,通過(guò)該對(duì)象開(kāi)始繪制,最后調(diào)用Dispose()方法將繪制內(nèi)容提交到目標(biāo)窗體。其WinAPI原理是:創(chuàng)建內(nèi)存DC,用SetDIBits將繪制內(nèi)容拷貝到內(nèi)存DC,再用BitBlt將內(nèi)存DC內(nèi)容拷貝到目標(biāo)DC。

將繪制內(nèi)容提交到目標(biāo)DC


捕獲聲音用的是第三方庫(kù)NAudio中的WasapiLoopbackCapture,這種錄制方式不會(huì)受到系統(tǒng)音量的影響(即使系統(tǒng)音量是0依然可以錄制)。如果你想顯示麥克風(fēng)的頻譜,可以將這個(gè)類(lèi)改成WasapiCapture。


FFT運(yùn)算使用了FFTW庫(kù),據(jù)說(shuō)是世界上最快的FFT庫(kù)。但是FFT后的數(shù)據(jù)并不能直接拿來(lái)繪制,還要自己處理一下。整個(gè)處理過(guò)程:復(fù)數(shù)結(jié)果取模?→?提取感興趣頻率區(qū)域 → 頻率以對(duì)數(shù)刻度方式顯示(依照人耳聽(tīng)覺(jué))→ 振幅以分貝刻度顯示(依照人耳聽(tīng)覺(jué))。在進(jìn)行FFT之前,最好進(jìn)行加窗處理,減少頻譜能量泄漏,所謂的加窗處理就是聲波和窗口直接對(duì)應(yīng)相乘。

FFT處理過(guò)程
加窗處理
未加窗的頻譜能量泄漏現(xiàn)象(來(lái)源維基百科)
加Hamming窗的頻譜能量泄漏現(xiàn)象(來(lái)源維基百科)



暫時(shí)說(shuō)到這,如果有什么問(wèn)題我會(huì)在評(píng)論區(qū)補(bǔ)充。



如何在任務(wù)管理器上可視化聲音的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國(guó)家法律
平湖市| 隆化县| 依安县| 大荔县| 五华县| 黄大仙区| 如东县| 大同市| 固始县| 景德镇市| 如皋市| 湾仔区| 荔浦县| 安徽省| 岑溪市| 丹凤县| 寿阳县| 内丘县| 育儿| 锦州市| 乌兰察布市| 连城县| 台北市| 深州市| 吉林市| 静乐县| 瑞金市| 榆林市| 卢氏县| 西和县| 农安县| 五大连池市| 洛扎县| 清徐县| 永济市| 平安县| 巢湖市| 从化市| 杭锦旗| 东丰县| 罗山县|