SoundPool 正在加载声音,但每次我播放它时都会显示“样本___ 未准备好”?
Posted
技术标签:
【中文标题】SoundPool 正在加载声音,但每次我播放它时都会显示“样本___ 未准备好”?【英文标题】:SoundPool is loading sounds but every time I play it it says "sample ___ is not ready"? 【发布时间】:2015-03-10 00:15:59 【问题描述】:我的 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(存储在 CardData
类中)获取正确的 soundID,并且它肯定会看到它已加载,因为它不会尝试播放,因为 loaded
永远不会是真的。我的问题是:为什么我的声音还没有准备好?
我的声音是.m4a
格式,android 说文档中支持这种格式。我在 Android 5.0 设备和 Android 4.4 设备上进行了尝试,但没有任何变化。
我曾尝试使用MediaPlayer
,但我遇到了内存错误,因为我有许多短片需要被发送垃圾邮件,而且我读到 SoundPool 是一种更好的管理方式(?)。
任何帮助将不胜感激!我在这里超级烦恼。
【问题讨论】:
【参考方案1】:您使用了错误的 ID。 SoundPool.load
返回一个 id,该 id 应该被传递给 SoundPool.play
。
【讨论】:
完美。非常感谢!我知道我错过了一些超级简单的东西。我刚刚为我的 sp.load 设置了一个 int 并将该 int 传递给 sp.play :-) 再次感谢!我会尽可能接受你的回答。以上是关于SoundPool 正在加载声音,但每次我播放它时都会显示“样本___ 未准备好”?的主要内容,如果未能解决你的问题,请参考以下文章