BREW中的特殊語音處理

abel_cao發表於2010-11-04

版權宣告:本文為半吊子子全棧工匠(wireless_com,同公眾號)原創文章,未經允許不得轉載。 https://blog.csdn.net/wireless_com/article/details/6510396

從 BREW2.X 開始,針對語音處理提供了 IVocoder 介面。 IVocoder 介面使用預設的聲音路徑,以捕獲和播放聲碼器幀。由於 IVocoder 使用的裝置也可以用來執行語音呼叫,因此使用 IVocoder 的應用程式必須注意並整合 TAPI 通知,以便在啟動語音呼叫時適時停止使用聲碼器。 IVocoder 介面實現的基本流程如下:

1 )建立 IVocoder 介面,從系統層面上來看,這是給 IVocoder 分配一段記憶體空間,記憶體空間的使用根據應用的需要來設定。

2 )配置 IVocoder 的用例,包括聲碼器演算法、資料速率、回撥引數等。

增強可變速率聲碼器 EVRC ( IS-127 )可以很好的提高語音質量。實時的資料速率實質上由手機底層的聲碼器根據訊雜比和語音空閒度控制,在程式裡無法強制其按某速率進行編碼,但 BREW 仍要求設定上限和下限速率。

當與呼叫聲碼器相關的事件發生時,都要向系統註冊一個相關的回撥函式在系統執行佇列中排隊。當系統執行到該回撥函式時,系統可以根據回撥函式的內容來決定是否繼續、中斷或者結束聲碼器的操作,當然決定的過程也是新事件產生的過程,也就意味著又註冊一個

回撥函式。也就是說,聲碼器的回撥函式是使用者自定義但卻是系統自動呼叫的函式。回撥函

數的配置好壞,直接關係著整個語音的流程順暢與否。

3 )啟動並進行語音的編碼。

由介面函式 IVOCODER_VocInStart() 啟動聲碼器進行編碼語音幀;如果成功則呼叫已經配置的回撥函式 HavaDataCB 。回撥函式 HavaDataCB 中,用介面函式 IVOCODER_VocInRead() 一幀幀的採集語音並把資料寫入快取區。然後打包準備發往伺服器端。緩衝區大小必須足以支援聲碼器的最大幀速率,而不僅僅是當前速率限制所用的最大值。

由介面函式 IVOCODER_VocOutStop() 停止聲碼器的播放,然後停止語音的處理,並釋放 IVocoder 介面。

 

本文來自CSDN部落格,轉載請標明出處:http://blog.csdn.net/wireless_com/archive/2010/09/18/5892552.aspx


相關文章