Предпочтительный способ подключения AudioEffect к глобальному миксу?

В Android, AudioEffect API, все встроенные эффекты, такие как эквалайзер, имеют предупреждение

"ПРИМЕЧАНИЕ: добавление эквалайзера в глобальный аудиовыход с использованием сеанса 0 устарело."

Если это устарело, то что такое API-интерфейс замены? Моя цель - приложить эффект к глобальному выходному микшированию...

Ответ 1

Да, это устарело, из-за побочных эффектов.

На веб-сайте разработчиков Android говорится, что второй параметр класса Equalizer должен быть:

Уникальный идентификатор звукового сеанса системы. Эквалайзер будет прикрепленный к MediaPlayer или AudioTrack в том же сеансе аудио.

Вместо этого вы должны использовать это:

MediaPlayer mediaPlayer = new MediaPlayer();
mediaPlayer.setDataSource( _your_data_source_ );
Equalizer equalizer = new Equalizer(0, mediaPlayer.getAudioSessionId());
equalizer.setEnabled(true);
/* Do your stuff ... */
mediaPlayer.start();

Ответ 2

Согласно Android, вы можете использовать ACTION_OPEN_AUDIO_EFFECT_CONTROL_SESSION, чтобы получить идентификатор воспроизводимого аудио сеанса:

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

Я попытался добавить константу в манифест, но это не сработало:

<receiver android:name=".receivers.AudioSessionReceiver">
        <intent-filter>
            <action android:name="android.media.action.OPEN_AUDIO_EFFECT_CONTROL_SESSION"/>
        </intent-filter>
</receiver>

Если вы выясните, как использовать константу, намерение будет содержать идентификатор аудиосеанса, который вы можете использовать, чтобы применить необходимые настройки эквалайзера. (Если бы вы нашли обходной путь за все эти годы, не могли бы вы поделиться?)