先來點閑言碎語,前段時間我有一段感悟:Android開發(fā),本身并不是一個可以走得多遠的方向,它只是一個平臺,提供了許多封裝好的API,讓大家能夠快速開發(fā)出針對特定業(yè)務的應用。
創(chuàng)新互聯(lián)公司擁有10多年的建站服務經(jīng)驗,在此期間,我們發(fā)現(xiàn)較多的客戶在挑選建站服務商前都非常的猶豫。主要問題集中:在無法預知自己的網(wǎng)站呈現(xiàn)的效果是什么樣的?也無法判斷選擇的服務商設計出來的網(wǎng)頁效果自己是否會滿意?創(chuàng)新互聯(lián)公司業(yè)務涵蓋了互聯(lián)網(wǎng)平臺網(wǎng)站建設、移動平臺網(wǎng)站制作、網(wǎng)絡推廣、按需網(wǎng)站建設等服務。創(chuàng)新互聯(lián)公司網(wǎng)站開發(fā)公司本著不拘一格的網(wǎng)站視覺設計和網(wǎng)站開發(fā)技術相結合,為企業(yè)做網(wǎng)站提供成熟的網(wǎng)站設計方案。真正有價值的地方就在于Android與具體的業(yè)務方向結合,比如:Android與音視頻技術,Android與智能硬件交互,Android與前端技術的融合與探索,Android信息安全,Android源碼深度定制等等。
我一直比較看好音視頻/多媒體方向,希望在此能夠深入積累和探索,前段時間我發(fā)布了一款Android VoIP網(wǎng)絡電話應用“飛鴿電話”,并寫了一篇分析其整體架構的文章《PigeonCall:一款Android VoIP網(wǎng)絡電話App架構分析》,歡迎有興趣的小伙伴們先看一看。
在這個應用的開發(fā)過程中學到的東西還蠻多的,因此想寫一些文章分享分享,本文作為開篇,主要以問答的形式,介紹一些音頻開發(fā)的基礎常識,非常重要,因為不了解這些常識,很多Android API或者第三方庫的參數(shù),你都不知道該怎么配置。
1. 音頻開發(fā)的主要應用有哪些?
音頻播放器,錄音機,語音電話,音視頻監(jiān)控應用,音視頻直播應用,音頻編輯/處理軟件,藍牙耳機/音箱,等等。
2. 音頻開發(fā)的具體內(nèi)容有哪些?
(1)音頻采集/播放
(2)音頻算法處理(去噪、靜音檢測、回聲消除、音效處理、功放/增強、混音/分離,等等)
(3)音頻的編解碼和格式轉換
(4)音頻傳輸協(xié)議的開發(fā)(SIP,A2DP、AVRCP,等等)
3. 音頻應用的難點在哪?
延時敏感、卡頓敏感、噪聲抑制(Denoise)、回聲消除(AEC)、靜音檢測(VAD)、混音算法,等等。
4. 音頻開發(fā)基礎概念有哪些?
在音頻開發(fā)中,下面的這幾個概念經(jīng)常會遇到。
(1) 采樣率(samplerate)
采樣就是把模擬信號數(shù)字化的過程,不僅僅是音頻需要采樣,所有的模擬信號都需要通過采樣轉換為可以用0101來表示的數(shù)字信號,示意圖如下所示:
藍色代表模擬音頻信號,紅色的點代表采樣得到的量化數(shù)值。
采樣頻率越高,紅色的間隔就越密集,記錄這一段音頻信號所用的數(shù)據(jù)量就越大,同時音頻質量也就越高。
根據(jù)奈奎斯特理論,采樣頻率只要不低于音頻信號最高頻率的兩倍,就可以無損失地還原原始的聲音。
通常人耳能聽到頻率范圍大約在20Hz~20kHz之間的聲音,為了保證聲音不失真,采樣頻率應在40kHz以上。常用的音頻采樣頻率有:8kHz、11.025kHz、22.05kHz、16kHz、37.8kHz、44.1kHz、48kHz、96kHz、192kHz等。
(2) 量化精度(位寬)
上圖中,每一個紅色的采樣點,都需要用一個數(shù)值來表示大小,這個數(shù)值的數(shù)據(jù)類型大小可以是:4bit、8bit、16bit、32bit等等,位數(shù)越多,表示得就越精細,聲音質量自然就越好,當然,數(shù)據(jù)量也會成倍增大。
常見的位寬是:8bit 或者 16bit
(3) 聲道數(shù)(channels)
由于音頻的采集和播放是可以疊加的,因此,可以同時從多個音頻源采集聲音,并分別輸出到不同的揚聲器,故聲道數(shù)一般表示聲音錄制時的音源數(shù)量或回放時相應的揚聲器數(shù)量。
單聲道(Mono)和雙聲道(Stereo)比較常見,顧名思義,前者的聲道數(shù)為1,后者為2
(4) 音頻幀(frame)
這個概念在應用開發(fā)中非常重要,網(wǎng)上很多文章都沒有專門介紹這個概念。
音頻跟視頻很不一樣,視頻每一幀就是一張圖像,而從上面的正玄波可以看出,音頻數(shù)據(jù)是流式的,本身沒有明確的一幀幀的概念,在實際的應用中,為了音頻算法處理/傳輸?shù)姆奖悖话慵s定俗成取2.5ms~60ms為單位的數(shù)據(jù)量為一幀音頻。
這個時間被稱之為“采樣時間”,其長度沒有特別的標準,它是根據(jù)編×××和具體應用的需求來決定的,我們可以計算一下一幀音頻幀的大?。?/p>
假設某通道的音頻信號是采樣率為8kHz,位寬為16bit,20ms一幀,雙通道,則一幀音頻數(shù)據(jù)的大小為:
int size = 8000 x 16bit x 0.02s x 2 = 5120 bit = 640 byte
5. 常見的音頻編碼方式有哪些?
上面提到過,模擬的音頻信號轉換為數(shù)字信號需要經(jīng)過采樣和量化,量化的過程被稱之為編碼,根據(jù)不同的量化策略,產(chǎn)生了許多不同的編碼方式,常見的編碼方式有:PCM 和 ADPCM,這些數(shù)據(jù)代表著無損的原始數(shù)字音頻信號,添加一些文件頭信息,就可以存儲為WAV文件了,它是一種由微軟和IBM聯(lián)合開發(fā)的用于音頻數(shù)字存儲的標準,可以很容易地被解析和播放。
我們在音頻開發(fā)過程中,會經(jīng)常涉及到WAV文件的讀寫,以驗證采集、傳輸、接收的音頻數(shù)據(jù)的正確性。
6. 常見的音頻壓縮格式有哪些?
首先簡單介紹一下音頻數(shù)據(jù)壓縮的最基本的原理:因為有冗余信息,所以可以壓縮。
(1) 頻譜掩蔽效應: 人耳所能察覺的聲音信號的頻率范圍為20Hz~20KHz,在這個頻率范圍以外的音頻信號屬于冗余信號。
(2) 時域掩蔽效應: 當強音信號和弱音信號同時出現(xiàn)時,弱信號會聽不到,因此,弱音信號也屬于冗余信號。
下面簡單列出常見的音頻壓縮格式:
MP3,AAC,OGG,WMA,Opus,F(xiàn)LAC,APE,m4a,AMR,等等
7. Adndroid VoIP相關的開源應用有哪些 ?
imsdroid,sipdroid,csipsimple,linphone,WebRTC 等等
8. 音頻算法處理的開源庫有哪些 ?
speex、ffmpeg,webrtc audio module(NS、VAD、AECM、AGC),等等
10. Android提供了哪些音頻開發(fā)相關的API?
音頻采集: MediaRecoder,AudioRecord
音頻播放: SoundPool,MediaPlayer,AudioTrack (它們之間的區(qū)別可以參考這篇文章)
音頻編解碼: MediaCodec
NDK API: OpenSL ES
11. 音頻開發(fā)的延時標準是什么?
ITU-TG.114規(guī)定,對于高質量語音可接受的時延是300ms。一般來說,如果時延在300~400ms,通話的交互性比較差,但還可以接受。時延大于400ms時,則交互通信非常困難。
12. 小結
音頻開發(fā)的知識點其實挺多的,一篇文章也無法詳細地展開敘述,因此,不夠全面和詳盡的地方,請大家搜索專業(yè)的資料進行深入了解。文章中有不清楚的地方歡迎留言或者來信 lujun.hust@gmail.com 交流,或者關注我的新浪微博 @盧_俊 或者 微信公眾號 @Jhuster 獲取最新的文章和資訊。
另外有需要云服務器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務器、裸金屬服務器、高防服務器、香港服務器、美國服務器、虛擬主機、免備案服務器”等云主機租用服務以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應用場景需求。