SoundPool 正在加载声音,但每次我播放它时它都显示 "sample ___ is not ready"?

SoundPool is loading sounds but every time I play it it says "sample ___ is not ready"?

我的 SoundPool 有点问题。我的 res/raw 文件夹中有 ArrayList<Integer> 个 soundID。我在我的 ViewHolder class 中为我的 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 class 中),并且它肯定会看到它已加载,因为它不会尝试以其他方式播放,因为loaded 永远不会是真的。我的问题是:为什么我的声音从来没有准备好?

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

我曾尝试使用 MediaPlayer,但我 运行 遇到内存错误,因为我有很多短片需要发送垃圾邮件,而且我读到 SoundPool 更好管理此 (?) 的方法。

如有任何帮助,我们将不胜感激!我在这里超级烦恼。

您使用的 ID 有误。 SoundPool.load returns 应该传递给 SoundPool.play 的 id。