Android ilbc 語音對話示範(三)程序流程

 BY http://blog.csdn.net/ranxiedao 謝絕轉載!

上一篇文章中詳細講述了 ilbc 在Android平臺的移植和編譯,現轉到Java層,實現音頻的採集和處理操作,本示範中的程序流程圖如下:

  順便提一下:因爲是在Ubuntu下寫的博客,所以沒有一個現成的工具來繪製流程圖,後來網上找到一個在線繪圖網站:

  http://creately.com/ 感覺非常不錯,繪製功能強大,推薦給大家,需要註冊才能使用。  

 

   圖解:

 1. 發送端有三個主要的類:AudioRecorder(負責音頻採集),AudioEncoder(負責音頻編碼),AudioSender(負責 將編碼後的數

發送出去); 這三個類中各有一個線程,錄製開始後,這三個線程一起運行,分別執行各自的任務, AudioRecorder採集音頻後,添加到

AudioEncoder 的音頻數據的List中,而AudioEncoder 的編碼線程不斷從List頭部取出數據,調用 ilbc 的底層\函數進行編碼,編碼

後的數據則又添加到下一級的AudioSender的 List中,AudioSender又不斷從頭部取出數據,然後發送出去;

2. 使用Android 系統自帶的 AudioRecord 這個類來實現音頻數據的採集,注意要在AndroidManifest.xml文件中加上權限

android.permission.RECORD_AUDIO ,使用 AudioRecord 時,一定要配置好一些音頻參數,比如採樣頻率, 採樣格式等,具體將

續代碼中詳細寫出;採集方法是 AudioRecord 中的  read(samples, 0, bufferSize) ;

 3. AudioEncoder 對數據編碼一次後,交付給AudioSender 讓其發送到服務器,發送方採用 UDP 協議,採集一次數據 長度爲960B,

碼後長爲100B ,所以一個 UDP 包就非常小,既節省帶寬,又減少丟包率;

 4. 接收端有三個主要的類:AudioReciever(負責接收UDP 包),AudioDecoder(負責解碼音頻),AudioPlayer(負責音頻播放),

致流 在上圖中已經詳細給出,這裏不做說明了,只不過就是 發送方流程的逆序。播放音頻使用的是Android中的AudioTrack 這個類,

使用write(byte[] data , int sampleOffset ,int sampleLength)  方法能夠直接播放音頻數據流

 5. 發送方有三個線程,接受方也有三個線程,一一對應,下一篇正式開始貼代碼 ;



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章