Эквалайзер - библиотека эффектов не загружена

У меня почти такая же проблема, как описано здесь здесь, ответ в этом сообщении мне не помогает, я освобождаю свой эквалайзер сразу после установки уровней полосы. Он отлично работает на моем устройстве 4.0.4, он отлично работает на другом устройстве 2.3.5, он падает на небольшой процент устройств, и неважно, какая версия Android работает на этих устройствах.

Таким образом, ошибка

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

java.lang.UnsupportedOperationException: Effect library not loaded
        at android.media.audiofx.AudioEffect.<init>(AudioEffect.java:355)
        at android.media.audiofx.Equalizer.<init>(Equalizer.java:149)

Я не знаю, как это решить, любые предложения?

Ответ 1

Убедитесь, что вы перезагрузили устройство и протестировали его снова с помощью release() после использования эквалайзера, он работал у меня через 2 дня поиска подсказок.

Ответ 2

Это зависит от сборки Android, загруженной на устройство.

Этот журнал означает, что нет библиотеки для реализации функции AudioEffect.

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

Ответ 3

Из документации вам нужно вызвать release() на Equalizer, MediaPlayer, Visualizer и т.д. для изящного выхода, или вы увидите эту ошибку при перезапуске приложения. Единственное средство - перезагрузка, как уже упоминалось в этом потоке.

Здесь жизненный цикл приложения для Android делает вещи немного сложными, так как приложения никогда не должны выходить (просто приостановить и возобновить), если это не требуется ОС по соображениям памяти или перезагрузка. Ваше приложение onDestroy() метод вызывается в обоих случаях.

Вы можете поместить release() в onDestroy(), и это будет соответствовать жизненному циклу Android для развернутых приложений. Ваши пользователи не будут видеть эту ошибку.

В разработке есть проблема: IDE, такие как Eclipse (которая на самом деле является основой для создания IDE и не предназначена для самой IDE...), убьет процесс приложения, а не отправит сообщение об уничтожении. Это нарушает жизненный цикл, и release() не вызывается.

Вот почему вы никогда не должны звонить System.exit(). Это нарушает жизненный цикл, рискуя нечестными выходами именно так.

Итак, ваш процесс был беззастенчивым. Это происходит только при разработке, а не в развертывании. Одно из средств - не использовать окно устройства в eclipse для остановки процессов. Это не остановка, а убийство.

Eclipse также убивает (нарушение жизненного цикла) процесс несправедливо при запуске проекта приложения, когда уже запущен экземпляр.

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