SoundPool не воспроизводит mp3?

Я пытаюсь выполнить mp3-файл с помощью SoundPool. Я загрузил mp3 с помощью SoundPool.load, но когда я пытаюсь, SoundPool.play не работает и не выдает никаких исключений. Я использую API21.

Как я могу это решить?

Я пытаюсь это.

public class CustomSoundPool {

    //SDK Version
    public SoundPool getSoundPool(){
        SoundPool sounds = null;

        if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP){
            AudioAttributes attributes = new AudioAttributes.Builder()
            .setUsage(AudioAttributes.USAGE_GAME)
            .setContentType(AudioAttributes.CONTENT_TYPE_SONIFICATION)
            .build();

            sounds = new SoundPool.Builder()
            .setAudioAttributes(attributes)
            .build();
        }else{
            sounds = new SoundPool(5,AudioManager.STREAM_MUSIC,0);
        }
        return sounds;
    }

}




 /** play sound with error or success */
        private void playSound(){
            SoundPool sound = new CustomSoundPool().getSoundPool();
            if(resposta.getValor() == 1){
                int soundId = sound.load(getView().getContext(), R.raw.sucesso, 1);
                sound.play(soundId, 1, 1, 0, 0, 1);
            }else{
                int soundId = sound.load(getView().getContext(), R.raw.erro, 1);
                sound.play(soundId, 1, 1, 0, 0, 1);
            }
            sound.release();            
        }

person FernandoPaiva    schedule 10.12.2014    source источник


Ответы (1)


Вы выпускаете SoundPool слишком рано. Сделайте релиз позже, т.е. в onDestroy методе Activity. Теперь звук не успеет проиграться, прежде чем вся память и нативные ресурсы, используемые объектом SoundPool, будут освобождены. Кроме того, вы пытаетесь быстро воспроизвести звук, прежде чем он действительно загрузится. Вы не можете использовать play до загрузки вашего звука. Используйте SoundPool.OnLoadCompleteListener#onLoadComplete, чтобы дождаться загрузки звука и внутри слушателя воспроизвести ваш звук.

SoundPool soundPool;
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
     AudioAttributes attributes = new AudioAttributes.Builder()
          .setUsage(AudioAttributes.USAGE_GAME)
          .setContentType(AudioAttributes.CONTENT_TYPE_SONIFICATION)
          .build();

          soundPool = new SoundPool.Builder()
                        .setAudioAttributes(attributes)
                        .build();       
}
else {
    soundPool = new SoundPool(10, AudioManager.STREAM_MUSIC, 0);
}
soundPool.setOnLoadCompleteListener(new SoundPool.OnLoadCompleteListener() {
    @Override
    public void onLoadComplete(SoundPool soundPool, int sampleId, int status) {
        soundPool.play(sampleId, 1.0f, 1.0f, 0, 0, 1.0f);
    }
});
soundPool.load(this, R.raw.sucesso, 1);
person michal.z    schedule 10.12.2014
comment
даже я делаю ваше предложение не работает. Играть, а не исполнять звук - person FernandoPaiva; 10.12.2014