DirectSound折騰記之一

 

DirectSound折騰記之一

前幾日,公司的客戶提出一個新要求:需要一個語音對講軟件實現語音對講的功能。
上網搜資料,首先看到的是微軟的DirectSound技術,於是從CodeProject下載一個C#編寫的程序,叫VoiceChat,在此基礎之上進行改寫。
VoiceChat這個程序寫的很不錯,能實現語音對講的基本功能,但在使用中發現有兩個問題:
1、有節奏的“突突”的雜音
2、回聲
再利用Google尋找答案的過程中,搜到一些有用的文章,在這裏我把頁面的地址也記在這裏,做個備忘:
1、博客堂的“我不是聖人”的博客,該博主的源代碼和VoiceChat有很多相像的地方,比如變量名等,應該是同門中人。諸位一定要看評論,我就是在評論中找到有消除雜音和回聲的線索。

2、CSDN博客,文章:AEC (Acoustic Echo Canceller) 迴音消除初探
http://blog.csdn.net/guanchanghui/archive/2006/08/07/1031279.aspx
是VC的代碼,我沒有測試過

爲了實現去除迴音和雜音的方法,不得已認識了CaptureEffectDescription類,也結識了CaptureEffectsClassAcousticEchoCancellation和CaptureEffectsMsAcousticEchoCancellation兩位朋友,蠻以爲大功告成,誰知道還缺一個關鍵的FullDuplex對象,然而在實例化FullDuplex的時候,缺總是拋出異常。
想找個使用FullDuplex類的例子,聽說微軟的DirectX SDK中有,於是下載了Microsoft DirectX SDK (March 2009),安裝以後才發現沒有FullDuplex的例子,於是又下載了一個早一些的版本,仍然找不到,最後終於在Microsoft DirectX SDK  sum2004裏找到,在找資料的過程中,發現網上有很多VC的源代碼和例子,於是改變主意,從網上下載一個名叫“多人語音聊天”的VC源代碼,就爲了編譯它,我幾乎花了整個下午的時間:
1、源代碼中用到的頭文件streams.h,Microsoft DirectX SDK  sum2004以後的版本都沒有,要安裝Microsoft DirectX SDK  sum2004
2、需要靜態庫strmbasd.lib,微軟在SDK中竟然沒有提供,還需要打開BaseClasses項目編譯生成,我的系統上裝有VC6和VC2008,我先用VC2008編譯,設置了一些編譯選項,勉強編譯通過,可在編譯“多人語音聊天”項目時,碰到很多莫名其妙的問題,最後以失敗而告終。
3、接下來使用VC6編譯BaseClasses和“多人語音聊天”這兩個項目,又是一番折騰,最後終於在下面這篇文章的指導下通過了編譯(還不得已註釋了兩行代碼)
文章地址:http://blog.csdn.net/schoolers/archive/2009/04/27/4128785.aspx,不過運行時還是碰到了問題,可能是我註釋的代碼造成的。
最後不得不放棄使用VC的想法,重新拾起VoiceChat。

發佈了103 篇原創文章 · 獲贊 4 · 訪問量 38萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章