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。
我的 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。