SoundPool загружает звуки, но каждый раз, когда я проигрываю его, он говорит, что образец ___ не готов?

У меня возникли некоторые трудности с моим SoundPool. У меня есть ArrayList<Integer> моих звуковых идентификаторов, расположенных в моей папке res/raw. Я создаю SoundPool в своем классе ViewHolder для RecyclerView:

//create the SoundPool
sp = new SoundPool(20, AudioManager.STREAM_MUSIC, 0);
//create the AudioManager for managing volume
audioManager = (AudioManager)context.getSystemService(Context.AUDIO_SERVICE);
//store the streamVolume in an int
streamVolume = audioManager.getStreamVolume(AudioManager.STREAM_MUSIC);

//set the load listener for my soundfiles
sp.setOnLoadCompleteListener(new SoundPool.OnLoadCompleteListener() {
    @Override
        public void onLoadComplete(SoundPool soundPool, int sampleId, int status) {
            loaded = true;
        }
});

Я воспроизвожу звук при щелчке ImageView следующим образом:

@Override
public void onClick(View v) {
    if (v.equals(cardImg)) {
        sp.load(context, cardData.getSoundId(), 1);
        if (loaded) {
            sp.play(cardData.getSoundId(), streamVolume, streamVolume, 1, 0, 1f);
        }
    }
}

И каждый раз, когда я нажимаю на cardImg, я получаю эту ошибку:

W/SoundPool﹕ sample 2130968609 not READY

Где выборка int меняется в зависимости от того, какую карту я нажимаю, как и должно быть.

Итак, я знаю, что он ПОЛУЧАЕТ правильный soundID из моего ArrayList (хранящегося в классе CardData), и он определенно видит, что он загружен, потому что иначе он не будет пытаться воспроизвести, потому что loaded никогда не будет истинным. Мой вопрос: почему мои звуки никогда не готовы?

Мои звуки имеют формат .m4a, который, по словам Android, поддерживается в документации. Я пробовал на устройстве Android 5.0 и устройстве Android 4.4, но ничего не изменилось.

Я пытался использовать MediaPlayer, но у меня возникают ошибки памяти, так как у меня есть много коротких клипов, которые нужно спамить, и я читал, что SoundPool был намного лучшим способом справиться с этим (?).

Любая помощь будет оценена по достоинству! Я очень раздосадован здесь.


person shan    schedule 10.03.2015    source источник


Ответы (1)


Вы используете неправильный идентификатор. SoundPool.load возвращает идентификатор, который должен быть передан в SoundPool.play.

person tachyonflux    schedule 10.03.2015
comment
Идеально. Большое спасибо! Я знал, что мне не хватает чего-то очень простого. Я только что установил int для своего sp.load и передал его в sp.play :-) Еще раз спасибо! Я приму ваш ответ, когда смогу. - person shan; 10.03.2015