Как унаследовать все системные (нативные) звуковые эффекты в приложении медиаплеера?

Как унаследовать и включить (сделать эффективными) текущие аудиоэффекты (bassboost, эквалайзер и т. Д.) Из приложения, воспроизводящего аудиопотоки, при условии, что на устройстве имеется какое-то другое приложение для манипулирования собственными алгоритмами интонации.

Документация по API не очевидна, как этого добиться.

Следующее не работает или недостаточно:

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

                        mediaPlayer.prepare();
                        mediaPlayer.start();

1 ответ

Решение

Я могу ответить сам. Очевидным решением должно было быть что-то вроде:

Equalizer.inheritSystemEq()

Я заставил его работать только следующим громоздким способом. Обратите внимание, что решение устарело, но устаревшее решение не было заменено альтернативным API.

Equalizer equalizerSystem = new Equalizer(0, 0) //0 as second parameter is deprecated. 
//get current eq settings for global mix out
short band0 = equalizerSystem.getBandLevel((short) 0);
short band1 = equalizerSystem.getBandLevel((short) 1);
short band2 = equalizerSystem.getBandLevel((short) 2);
short band3 = equalizerSystem.getBandLevel((short) 3);
short band4 = equalizerSystem.getBandLevel((short) 4);

equalizerSystem.release();

//copy these "system" values (Set by another equalizer app) into
//another equalizer instance particular for this audio session.

Equalizer equalizer = new Equalizer(0, mediaPlayer.getAudioSessionId());
equalizer.setEnabled(true);
equalizer.setBandLevel((short) 0, band0);
equalizer.setBandLevel((short) 1, band1);
equalizer.setBandLevel((short) 2, band2);
equalizer.setBandLevel((short) 3, band3);
equalizer.setBandLevel((short) 4, band4);

Наконец, т. Е. Впоследствии, вызовите mediaPlayer.prepare() или mediaPlayer.prepareAsync, иначе equalizerSystem = new Equalizer(0,0) не будет работать.

Также устанавливается в AndroidManifest:

<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS"/>

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

Другие вопросы по тегам