Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> Android開發實例 >> Android音效

Android音效

編輯:Android開發實例

 Android提供了一套音效處理的庫,包括有BassBoost重低音,Equalizer均衡器,Virtualizer虛擬器,PresetReverb預置混響,EnvirenmentReverb環境音混響,Visaulizer可視化,downmix,preprocess(AGC(增益) AEC(回聲消除) NS(噪聲抑制))等。本文介紹音效庫是如何從底層獲取數據和為上層提供處理好的數據。

  一、如何加載庫和創建音效

  以上這些音效分別封裝在libbundlewrapper.so,libreverbwrapper.so,libvisualizer.so,libdownmix.so,libpreprocess.so等五個庫中,這些庫是由system/etc/audio_effects.conf這個配置文件中聲明。加載該文件的地方有兩個,一個是libeffect.so的EffectsFactory類,另外一個是libaudioflinger.so中的AudioPolicyService類。類工廠EffectsFactory使用了兩個鏈表分別保存了lib和每個效果的結構體。目前使用到音效的地方有AudioFlinger中輸出的各種音效, AudioMixer中的downmix, AudioPolicyService中的輸入時的預處理preprocess。

  當創建一個音效時,由上層傳入UUID到EffectsFactory中鏈表保存的音效中查詢獲得。java層media.audiofx包提供了java層的接口,JNI層有兩個接口文件:android_media_AudioEffect.cpp和Android_media_visualizer.cpp,本地層有AudioEffect.cpp和Visualizer.cpp,在構造AudioEffect的構造函數中,根據Effect的UUID調用AudioFlinger的createEffect函數,從而調用類工廠EffectsFactory的EffectQueryNumberEffects查詢並創建Effect的對象。

圖1-1 AudioFx包類圖

  二、音效數據的來源

  音效數據的來源需要分析AudioFlinger中的數據流的流程。首先我們先看一下hardware/libhardware/include/hardware/audio_effect.h定義了effect_config_t, buffer_config_t,audio_buffer_s等結構體,在audio_buffer_s中定義了保存輸入數據的指針,我接下來看一下這些指針是在何處賦值。

  struct audio_buffer_s {
size_t frameCount; // number of frames in buffer
union {
void* raw; // raw pointer to start of buffer
int32_t* s32; // pointer to signed 32 bit data at start of buffer
int16_t* s16; // pointer to signed 16 bit data at start of buffer
uint8_t* u8; // pointer to unsigned 8 bit data at start of buffer
};
};

  當創建音效時,在AudioFlinger首先調用的是CreateEffect函數,當創建了一個effect實例後,要調用CreateEffect_l函數創建一個EffectHandle用於操作effect實例,並且判斷該track是否已存在effectchain,如果不存在則創建一個effectChain然後將effect加入,如已存在則直接加入,在創建effectchain的部分指定了chain的inbuffer和outbuffer;將effect加入到effectchain的過程就是設置每個effect數據來源的地方,根據effect自己的flag屬性確定它在chain中的位置。addEffect_l中調用了setInBuffer和setOutBuffer指定了數據源。

  三、硬件音效的實現

  目前的音頻芯片很多都提供了部分硬件音效(如硬件EQ),其效果和效率是軟件實現所不能夠比的。根據硬件提供的控制節點,由mixer control將相應的值設置到聲卡生效。

  四、總結

  本文通過跟蹤一個音效創建分析音效的創建過程和音效的數據來源。

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved