均衡器是一种可以分别调节各种频率成分电信号放大量的电子设备,通过对各种不同频率的电信号的调节来补偿扬声器和声场的缺陷,补偿和修饰各种声源及其它特殊作用。一般均衡器仅能对高频、中频、低频三段频率电信号分别进行调节。在创建Equalizer实例时,在音频框架层将会同时创建一个均衡器引擎。均衡器的细节由OpenSL ES 1.0.1规范定义。
为了在通过AndroidAudioTrack、MediaPlayer进行音频播放时具有均衡器特效,在构建Equalizer实例时指明音频流的会话ID即可。如果指定的会话ID为0,则Equalizer作用于主要的音频输出混音器(mix)上,Equalizer将会话ID指定为0要"android.permission.MODIFY_AUDIO_SETTINGS"权限。
均衡器涉及的参数包括:
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 () //获得频段数
getBandLevel() //获得频段增益(db)
getBandLevelRange() //获得频段增益范围
getCenterFreq() //获得中心频率
setBandLevel() //设置频段增益(db)
setParameterListener() //设置Equalizer.OnParameterChangeListener监听器
下面是实现均衡器可视化的一般过程:
mEqualizer = new Equalizer(0, mMediaPlayer.getAudioSessionId());
mEqualizer.setEnabled(true); //打开均衡器
short bands = mEqualizer.getNumberOfBands(); //获得频道数
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); //获得频段增益
……..
}