最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(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ó)家法律
卓资县| 江源县| 太仆寺旗| 黄大仙区| 昌邑市| 长沙县| 恩平市| 陆河县| 壤塘县| 高要市| 南乐县| 临泉县| 盘锦市| 读书| 舟曲县| 古浪县| 肥乡县| 会宁县| 宜宾市| 申扎县| 宜丰县| 隆林| 贵港市| 凤台县| 邯郸市| 石阡县| 浦江县| 泽库县| 连城县| 绥中县| 南华县| 慈溪市| 宜宾市| 武功县| 牡丹江市| 苍溪县| 昌平区| 青州市| 济南市| 大渡口区| 若羌县|