今天寫的這篇博文源於之前上半年自己接過的一個項目,我答應過我的一些兄弟,會將這兩年自己接項目的一些經驗寫到博客里,但是出於對客戶商業利益的考慮,我不能把項目源碼全部公開,只能幫助大家整理一些知識,希望大家諒解。。。
客戶的需求是這樣的,做一個聲卡混音程序,實現將音箱要播放的聲音和話筒輸入的聲音合成為輸入,主要是用於嵌入式音頻播放產品,所以大家以后見了音效特別好的產品不要相信銷售人員的忽悠。。。“我們的產品音效好是用了XXX高科技材料,覺得處於國際領先水平。。。”,他們口中所謂的“高科技”,其實都是在軟件上做了文章而已。
其實要實現這樣的一個功能其實並不難,但我當時其實也是第一次做這樣的程序(國內這個東西確實很好有人做過),心里也沒底,但是憑借我扎實的基礎,再加上我在圖書館泡了一天之后,我很快就有了思路。。。主要有兩種方法可以實現:1.可以使用DirectXsound接口做.將輸出緩沖區音頻疊加到輸入緩沖區;2.可以調用ASIO音頻驅動,網上有好的教程,大家可以參考http://bbs3.driverdevelop.com/read.php?tid=111697
這兩個方案都是只能基於wince系統的,linux下我暫時沒有找到一個很好的方案,但是最終我還是選擇了第一個,因為畢竟圖書館關於direct的開發資料比較多,開發難度相對來說容易控制,但由於我不能公布全部代碼,只能在這里梳理一下重要的幾個知識點和程序中需要用到的API。
其實我不怕大家嘲笑,在做這個項目之前我一直以為directx就只做3D處理的,但是在圖書館查了多媒體處理技術的相關書籍之后,才知道自己有多么無知。DirectX是由很多API組成的,按照性質分類,可以分為四大部分,顯示部分、聲音部分、輸入部分和網絡部分。顯示部分擔任圖形處理的關鍵,分為Direct Draw(DDraw)和Direct 3D(D3D),前者主要負責2D圖像加速。它包括很多方面:我們播放mpg、DVD電影、看圖、玩小游戲等等都是用的DDraw,你可以把它理解成所有 划線的部分都是用的DDraw。后者則主要負責3D效果的顯示,比如CS中的場景和人物、FIFA中的人物等等,都是使用了DirectX的Direct 3D。聲音部分中最主要的API是DirectSound,除了播放聲音和處理混音之外,還加強了3d音效,並提供了錄音功能,我所接的這個項目就是利用了DirectSound來解決的。。
API調用方面的話主要掌握3個方面,1.對音頻緩沖區的操作,2.對創建輔助緩沖區,3利用directx實現混音程序,這三方面的書籍,dirextx的技術書籍我相信應該都有,園子里也有人寫過相關的介紹http://www.cnblogs.com/top5/ 只要學會調用這三方面的API,做相關的音頻項目自然會便覺得很方便,不是什么高科技,在這里我不想貼代碼來忽悠大家,這東西又不是我自創的,花個幾十元錢去亞馬遜買本書大家都能學會,熟練以后,去游戲公司應聘的話,月薪7K應該不成問題。
我寫博客注重一些項目經驗和設計思路,這樣才能夠助新手快速培養獨立完成項目的思路,因為我不是職業程序員,從事的工作也是電氣領域的工作,不會和大家搶工作,我接私活第一是為了接觸各個領域方面的技術,拓展自己的專業視野,我大致了解一下開發流程即可,因為沒有必要過於深入,因為國內所有領域說句老實話,核心技術都是國外的,除了一些逆向分析的黑客高手和一些科研工作者,一般人都很難了解,也沒有這個時間,對於我這樣一個業余的技術個體戶來講,我只要按時完成客戶給我的項目,能保證產品就可以了,暫時不會研究的那么深入,不過等過個幾年,等我的團隊日益成熟了,也許會做自己的獨立產品。。。。自己獨立接項目的另一個好處就是可以積累一定的社會人脈,讓社會來認可我的專業水平,我一直覺得做技術(不光是計算機,電氣、機械等其他專業領域一樣)和球星踢球很像,個人水平一旦被社會得到認可,身價自然水漲船高了,和比自己水平高一點的人一起做項目,技術能力自然很容易提高。。。
學習和工作,無論全職還是兼職,都是為了更好的生活,何必在乎形式呢。。。。。