我已经实现了一个像这样的5波段均衡器-
final short lowerEqualizerBandLevel = MusicService.equalizer.getBandLevelRange()[0];
final short upperEqualizerBandLevel = MusicService.equalizer.getBandLevelRange()[1];
for (short i = 0; i < 5; i++) {
final short equalizerBandIndex = i;
seekBars[i] = (SeekBar) findViewById(seekBars[i]);
seekBars[i].setMax(upperEqualizerBandLevel - lowerEqualizerBandLevel);
levels[i] = (TextView) findViewById(levels[i]);
levels[i].setText((MusicService.equalizer.getCenterFreq(equalizerBandIndex) / 1000) + "Hz");
seekBars[i].setProgress((upperEqualizerBandLevel - lowerEqualizerBandLevel) / 2);
seekBars[i].setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
MusicService.equalizer.setBandLevel(equalizerBandIndex, (short) (progress + lowerEqualizerBandLevel));
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
}
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
}
});
}然而,我想要添加一个重置按钮来重置均衡器的所有频带电平,我就是这样做的-
reset.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
for (short i = 0; i < 5; i++) {
MusicService.equalizer.setBandLevel(i, (short) MusicService.equalizer.getCenterFreq(i));
seekBars[i].setProgress((upperEqualizerBandLevel - lowerEqualizerBandLevel) / 2);
}
}
});我想知道这是不是
MusicService.equalizer.setBandLevel(i, (short) MusicService.equalizer.getCenterFreq(i));是重置均衡器的正确方法。
有时我也会通过这种方法得到非常高的音调。
发布于 2017-07-29 04:56:07
有3件事需要知道。
1)每个均衡器频带支持/控制频率范围。因此,当您调用equalizer.getCenterFreq(short bandIndex)时,它会给出它支持/控制的频率范围的中心。
2)重置均衡器:均衡器默认使用一些preset。我假设你重置的意思是将一些预先设置的值分配给均衡器。您可以使用下面的命令
short index = equalizer.getCurrentPreset();
//save this index and later assing this preset via equalizer.usePreset(index)3)您可以获取每个频段的最高和最低限制,具体如下:
short[] range = equalizer.getBandLevelRange();
//where range[0] is lowest while range[1] is highest limit. And you can
//set band level to either of these higher or lower limits. As you require.通常,频带级别范围是-1500到+1500 (就像在我的测试用例中一样)。因此,如果您计划将所有频段重置为零,则可以执行以下操作:
equalizer.setBandLevel(1 /*short bandIndex*/, 0 /*short level*/);希望能有所帮助。
https://stackoverflow.com/questions/45244906
复制相似问题