均衡器是一種可以分別調(diào)節(jié)各種頻率成分電信號放大量的電子設(shè)備,通過對各種不同頻率的電信號的調(diào)節(jié)來補償揚聲器和聲場的缺陷,補償和修飾各種聲源及其它特殊作用。一般均衡器僅能對高頻、中頻、低頻三段頻率電信號分別進行調(diào)節(jié)。在創(chuàng)建Equalizer實例時,在音頻框架層將會同時創(chuàng)建一個均衡器引擎。均衡器的細節(jié)由OpenSL ES 1.0.1規(guī)范定義。
為了在通過AndroidAudioTrack、MediaPlayer進行音頻播放時具有均衡器特效,在構(gòu)建Equalizer實例時指明音頻流的會話ID即可。如果指定的會話ID為0,則Equalizer作用于主要的音頻輸出混音器(mix)上,Equalizer將會話ID指定為0要"android.permission.MODIFY_AUDIO_SETTINGS"權(quán)限。
均衡器涉及的參數(shù)包括:
PARAM_BAND_FREQ_RANGE、PARAM_BAND_LEVEL、
PARAM_CENTER_FREQ、PARAM_CURRENT_PRESET、PARAM_GET_BAND、
PARAM_GET_NUM_OF_PRESETS、PARAM_GET_PRESET_NAME、PARAM_LEVEL_RANGE、
PARAM_NUM_BANDS、PARAM_STRING_SIZE_MAX等。
均衡器常用的方法包括:
getNumberOfBands () //獲得頻段數(shù)
getBandLevel() //獲得頻段增益(db)
getBandLevelRange() //獲得頻段增益范圍
getCenterFreq() //獲得中心頻率
setBandLevel() //設(shè)置頻段增益(db)
setParameterListener() //設(shè)置Equalizer.OnParameterChangeListener監(jiān)聽器
下面是實現(xiàn)均衡器可視化的一般過程:
mEqualizer = new Equalizer(0, mMediaPlayer.getAudioSessionId());
mEqualizer.setEnabled(true); //打開均衡器
short bands = mEqualizer.getNumberOfBands(); //獲得頻道數(shù)
final short minEQLevel = mEqualizer.getBandLevelRange()[0]; //小增益
final short maxEQLevel = mEqualizer.getBandLevelRange()[1]; //大增益
for (short i = 0; i < bands; i++)
{
int centerFreq = mEqualizer.getCenterFreq(band) / 1000; //獲得中心頻率
short gain = mEqualizer.getBandLevel(band); //獲得頻段增益
……..
}