【问题标题】:Reset band level of equalizer in android在android中重置均衡器的频段级别
【发布时间】:2017-07-21 18:56:23
【问题描述】:

我已经实现了一个像这样的 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));

是重置均衡器的正确方法。

而且有时我通过这种方法得到一个非常高的音调。

【问题讨论】:

  • 您不能将centerFreq 设置为频段级别。它是频段支持的频率范围的中心。

标签: android android-mediaplayer android-seekbar android-music-player equalizer


【解决方案1】:

有 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*/);

希望对你有帮助。

【讨论】:

    猜你喜欢
    • 2011-08-08
    • 1970-01-01
    • 1970-01-01
    • 2013-01-16
    • 1970-01-01
    • 2015-07-15
    • 2018-04-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多