我在播放soundpool时遇到问题。 我是Android新手,我希望你能帮助我。 我创建了类来加载soundpool
public class Suond {
protected static int suond1 ,suond2,suond3,suond4,suond5,suond6,suond7;
protected static SoundPool sou;
protected static AudioAttributes aa;
@SuppressLint("NewApi")
@SuppressWarnings("deprecation")
protected static void oi(Context Con ){
if(Build.VERSION.SDK_INT>=Build.VERSION_CODES.LOLLIPOP){
aa = new AudioAttributes.Builder()
.setUsage(AudioAttributes.USAGE_GAME)
.setContentType(AudioAttributes.CONTENT_TYPE_SONIFICATION)
.build();
sou = new SoundPool.Builder().setMaxStreams(10)
.setAudioAttributes(aa).build();
suond1 = sou.load(Con,R.raw.Music1,1);
suond2 = sou.load(Con,R.raw.Music2,1);
suond3 = sou.load(Con,R.raw.Music3,1);
suond4 = sou.load(Con,R.raw.Music4,1);
suond5 = sou.load(Con,R.raw.Music5,1);
suond6 = sou.load(Con,R.raw.Music6,1);
suond7 = sou.load(Con,R.raw.Music7,1);
}
else{ sou = new SoundPool(10,AudioManager.STREAM_MUSIC,1);
suond1 = sou.load(Con,R.raw.Music1,1);
suond2 = sou.load(Con,R.raw.Music2,1);
suond3 = sou.load(Con,R.raw.Music3,1);
suond4 = sou.load(Con,R.raw.Music4,1);
suond5 = sou.load(Con,R.raw.Music5,1);
suond6 = sou.load(Con,R.raw.Music6,1);
suond7 = sou.load(Con,R.raw.Music7,1);
}
}
}
我还有10个按钮代表游戏中的关卡在每个按钮中textview包含一个用于每个文本视图的动画监听器的值在监听器的末尾,使用soundpool。
valueAnimator.addListener(new Animator.AnimatorListener() {
@Override
public void onAnimationStart(Animator animation) {
suond.sou.play(Suond.suond1, 1, 1, 1, 0, 1);
}
@Override
public void onAnimationEnd(Animator animation) {
Suond.sou.play(Suond.suond2, 1, 1, 1, 0, 1);
}
@Override
public void onAnimationCancel(Animator animation) {
}
@Override
public void onAnimationRepeat(Animator animation) {
}
});
valueAnimator.setDuration(2000);
valueAnimator.start();
}
每个按钮都有一个相互连接的监听器,当监听器播放第一个按钮时,动画分别从第二个和第三个按钮开始到第十个按钮。一切顺利,但当动画到达第八个按钮时,有时第九个或第十个按钮声音消失,直到活动离开并返回两到三次声音活动回来播放。 在我的猜测中,我认为声音因为连续几次播放而停止但是当我读到有关Soundpool时,它专门用于播放短音并且可以播放超过声音的同时可以在我的同时播放多达16种声音应用程序声音不是同时播放但分别是他使用的声音不超过30 KB。 我不知道出了什么问题。 为什么连续几次播放时声音停止播放。 我用的是Android 4.0 非常感谢,并希望能帮助我解决任何问题。
答案 0 :(得分:1)
(1)你的代码中有拼写错误,所以你是如何编译它的?
Suond.sou.play(Suond.suond2, 1, 1, 1, 0, 1);
suond.sou.play(Suond.suond1, 1, 1, 1, 0, 1);
无论如何它应该是:
Suond.sou.play(Suond.suond2, 1, 1, 1, 0, 1);
(2)MaxStreams设置为10,因此您只能有10个并发流(而不是16个):
sou = new SoundPool.Builder().setMaxStreams(10).setAudioAttributes(aa).build();
else{ sou = new SoundPool(10,AudioManager.STREAM_MUSIC,1);
(3)跟踪您的活动声音(Suond.sou.play
返回一个整数):
int streamID = Suond.sou.play(Suond.suond2, 1, 1, 1, 0, 1);//streamID better as an integer array
(4)在离开活动后记得整理好(如果在活动结束后你不打算使用它,那么在onDestroy()
中释放。):
//loop round your active sounds
sou .stop(streamID) ;stop ONE active sound
sou .release();