Как создать собственный пресет для эквалайзера? - PullRequest
0 голосов
/ 05 апреля 2019

Код для отображения полос эквалайзера

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

    final short lowerEqualizerBandLevel = mEqualizer.getBandLevelRange()[0];
    final short upperEqualizerBandLevel = mEqualizer.getBandLevelRange()[1];

        //VerticalSeekBar1

        int freq_range0 = mEqualizer.getCenterFreq((short)0);
        verticalSeekbar[0].setMax(upperEqualizerBandLevel - lowerEqualizerBandLevel);
        verticalSeekbar[0].setProgress(mEqualizer.getBandLevel((short)0));
        verticalSeekbar[0].setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
            @Override
            public void onProgressChanged(SeekBar seekBar, int progress, boolean b) {
                mEqualizerBandLevel0 = progress;
                mEqualizer.setBandLevel((short) 0, (short) (progress + lowerEqualizerBandLevel ));
                slider_value[0].setText(String.valueOf((progress + lowerEqualizerBandLevel) / 100 + " dB"));
            }
            @Override
            public void onStartTrackingTouch(SeekBar seekBar) {
            }
            @Override
            public void onStopTrackingTouch(SeekBar seekBar) {
            }
        });
        slider_labels[0].setText(formatBandLabel(freq_range0));

verticalSeekbar [0]: - первая полоса эквалайзера, и у меня 5 из них, так что verticalSeekbar [1]... и т. д. до [4].

Код для счетчика, показывающий поддерживаемые устройством предварительные настройки.

final ArrayList<String> eqPresets = new ArrayList<>();
    ArrayAdapter<String> eqPresetsAdapter = new ArrayAdapter<>(this,R.layout.spinner_item, eqPresets);
    eqPresetsAdapter.setDropDownViewResource(R.layout.spin_item);
    Spinner eqSpinner   =   findViewById(R.id.mPresetsSpinner);
    for (short i = 0; i < mEqualizer.getNumberOfPresets(); i++){
        eqPresets.add(mEqualizer.getPresetName(i));
    }
    eqSpinner.setAdapter(eqPresetsAdapter);

Теперь, что я пытаюсьдостижение заключается в том, чтобы создать пользовательскую предустановку, чтобы она сохраняла уровень полосы для каждой полосы эквалайзера.

customPreset = new CustomPreset();
customPreset.setPresetName(input.getText().toString());
customPreset.setmEqualizerBandLevel0(mEqualizerBandLevel0);
customPreset.setmEqualizerBandLevel1(mEqualizerBandLevel1);
customPreset.setmEqualizerBandLevel2(mEqualizerBandLevel2);
customPreset.setmEqualizerBandLevel3(mEqualizerBandLevel3);
customPreset.setmEqualizerBandLevel4(mEqualizerBandLevel4);
customPresets.add(customPreset);

Я попробовал это сделать, сохранив значения прогресса всех групп поиска и установив новый уровень полосы с помощью

mEqualizer.setBandLevel((short) 0, (short) (customPresets.get(position).getmEqualizerBandLevel0() + lowerEqualizerBandLevel ));

Когда выбран Пользовательский пресет , но я не знаю, как я могу показать эти пользовательские пресеты в Набор пресетов , потому что у массива для счетчика есть тип String и я не могу добавить объект в массив для строк.

...