2016-02-12 2 views
0

Когда я добавляю код, чтобы приложить эффект BassBoost, onCompletionListener моего MediaPlayer уволен сразу. Вот соответствующий код:Почему onCompletionListener сразу срабатывает при подключении AudioEffect?

player.setDataSource(context, Uri.parse(song.filename)); 

// everything is fine if I comment out these 3 lines 
BassBoost boost = new BassBoost(0, player.getAudioSessionId()); 
boost.setStrength((short) 1000); 
player.attachAuxEffect(boost.getId()); 

player.prepare(); 
player.start(); 

Я экспериментировал с порядком данного кода безрезультатно. Наконец, я зарегистрировал значения getCurrentPosition() и getDuration() в обработчике завершения, и вы бы не знали об этом: они оба равны нулю!

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

ответ

0

Я понял это из другого вопроса. Если вы укажете аудио-сессию в конструкторе эффектов , а затем вызовите attachAuxEffect, он не удастся. Эта работа:

BassBoost boost = new BassBoost(0, player.getAudioSessionId()); 
boost.setStrength((short) 1000); 
// ALREADY ATTACHED IN CONSTRUCTOR ... player.attachAuxEffect(boost.getId()); 
Смежные вопросы