SoundPool正在加载声音,但每次播放时都会说“示例___还没准备好”?

时间:2015-03-10 00:15:59

标签: android soundpool

我的SoundPool有点困难。我的ArrayList<Integer>我的soundID位于我的res/raw文件夹中。我在我的ViewHolder类中为我的RecyclerView创建了SoundPool:

//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的变化取决于我点击的卡片,就像它应该的那样。

所以我知道它从我的ArrayList获取了正确的soundID(存储在CardData类中),并且肯定看到它被加载了,因为它不会尝试否则,因为loaded永远不会成真。我的问题是:为什么我的声音从未准备好?

我的声音是.m4a格式,Android表示文档支持这种格式。我尝试使用Android 5.0设备和Android 4.4设备,但没有任何变化。

我尝试使用MediaPlayer,但我遇到了内存错误,因为我有很多需要能够发送垃圾邮件的短片,而且我读到SoundPool是一种更好的方法来管理它(? )。

任何帮助将不胜感激!我在这里超级高兴。

1 个答案:

答案 0 :(得分:3)

您使用的是错误的ID。 SoundPool.load会返回一个假设要传递给SoundPool.play的ID。