Android Equalizer Bands отличается от других mp3-плееров - PullRequest
0 голосов
/ 22 декабря 2018

Мой класс активности эквалайзера

@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_equalizer);  


    verticalSeekbar[0]    =   findViewById(R.id.verticalSeekbar1);
    slider_labels[0]      =   findViewById(R.id.tvFreq1);
    slider_value[0]       =   findViewById(R.id.value1);
    verticalSeekbar[1]    =   findViewById(R.id.verticalSeekbar2);
    slider_labels[1]      =   findViewById(R.id.tvFreq2);
    slider_value[1]       =   findViewById(R.id.value2);
    verticalSeekbar[2]    =   findViewById(R.id.verticalSeekbar3);
    slider_labels[2]      =   findViewById(R.id.tvFreq3);
    slider_value[2]       =   findViewById(R.id.value3);
    verticalSeekbar[3]    =   findViewById(R.id.verticalSeekbar4);
    slider_labels[3]      =   findViewById(R.id.tvFreq4);
    slider_value[3]       =   findViewById(R.id.value4);
    verticalSeekbar[4]    =   findViewById(R.id.verticalSeekbar5);
    slider_labels[4]      =   findViewById(R.id.tvFreq5);
    slider_value[4]       =   findViewById(R.id.value5);


    mEqualizer = new Equalizer(0, mediaPlayer.getAudioSessionId());
    setupEqualizer();
    mEqualizer.setEnabled(true);


    for (short i = 0; i < 5; i++){
        final short equalizerBandIndex = i;

        int freq_range = mEqualizer.getCenterFreq(equalizerBandIndex);

        verticalSeekbar[i].setMax(upperEqualizerBandLevel - lowerEqualizerBandLevel);
        verticalSeekbar[i].setProgress(mEqualizer.getBandLevel(equalizerBandIndex));

        verticalSeekbar[i].setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
            @Override
            public void onProgressChanged(SeekBar seekBar, int progress, boolean b) {
                mEqualizer.setBandLevel(equalizerBandIndex, (short) (progress + lowerEqualizerBandLevel ));
                slider_value[equalizerBandIndex].setText(String.valueOf((progress + lowerEqualizerBandLevel) / 100) + " dB");
            }

            @Override
            public void onStartTrackingTouch(SeekBar seekBar) {

            }

            @Override
            public void onStopTrackingTouch(SeekBar seekBar) {

            }
        });
        slider_labels[i].setText(formatBandLabel(freq_range));

        float scale2 = getResources().getDisplayMetrics().density;
        int dpAsPixels2 = (int) (8*scale2 + 0.5f);


        setupEqSpinner();

    }

}

Я ограничил количество полос до 5 в цикле for, потому что я хочу показать только 5 полос, чтобы он соответствовал моему дизайну xml.

Но мой вопрос в том, что когда я использую:

Log.i(TAG, "Number of bands: " + mEqualizer.getNumberOfBands());

Возвращает число 5, поэтому мое устройство поддерживает 5 полос эквалайзера верно?

Но у меня есть еще одно приложение для медиаплеера, которое показывает 7 полос, а частоты не 60 Гц, 230 Гц, 910 Гц, 3 кГц, 14 кГц , а 50 Гц, 130 Гц, 320 Гц, 800 Гц, 2 кГц,5 кГц и 12,5 кГц.

Так как же возможно, что приложение может отображать 7 полос , хотя эквалайзером поддерживается только 5 полос ?

Спасибо,

...