Я прочитал API Android и попытался выполнить поиск в Интернете по объявлению пользовательского audioSessionId
, а затем с помощью этого audioSessionId
инициализировать класс AudioFx и назначить свой MediaPlayer или AudioTrack жестко закодированный audioSessionId
.
Этот метод позволит мне сначала создать AudioFx, а затем прикрепить новый MediaPlayer или AudioTrack к этому audioSessionId
.
В настоящее время я могу использовать этот метод на Android 2.3.6, но на Android 4.x. Я сталкиваюсь с проблемами с ошибками, которые инициализация терпит неудачу, или на других устройствах ICS/JellyBean эта ошибка не работает, но вызывает функцию к исключениям.
Samsung Galaxy S II [Android 4.0.3]: [Проблема больше не происходит с Android 4.0.4]
E/AudioEffect(13250): set(): AudioFlinger could not create effect, status: -38
E/AudioEffects-JNI(13250): AudioEffect initCheck failed -5
E/AudioEffect-JAVA(13250): Error code -5 when initializing AudioEffect.
W/WrapEqualizer(13250): createEqualizer() -> Effect library not loaded
Motorola Xoom [Android 4.1.2]
Не получается, что после конструктора кажется беззвучным. Затем при вызове getProperties() он сбой.
java.lang.RuntimeException: AudioEffect: set/get parameter error
at android.media.audiofx.AudioEffect.checkStatus(AudioEffect.java:1247)
at android.media.audiofx.Equalizer.getProperties(Equalizer.java:532)
Nexus 4 [Android 4.2.1]
Использование audioSessionId = 0 все работает нормально, но с использованием любого другого номера устройство будет сообщать о следующей тихой ошибке каждый раз, когда я пытаюсь изменить предустановку, уровень полосы, бас повысит до ON или Virtualizer до ON. Идентификатор эффекта различается в зависимости от FX, который я пытаюсь изменить.
W/AudioPolicyManagerBase(165): unregisterEffect() unknown effect ID 1381
Обновление 08/11/12:
Я могу использовать audioSessionId
как 0. Я знаю, что он устарел, но он работает с использованием разрешения. <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
Должен ли я использовать AudioFx со звуковым идентификатором сеанса 0?