У меня возникли некоторые трудности с моим 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 был намного лучшим способом справиться с этим (?).
Любая помощь будет оценена по достоинству! Я очень раздосадован здесь.