在Android开发中我们常常使用MediaPlayer来播放语音文件,所以MediaPlayer存在一些不足,例如:资源占用量较高、延迟时间较长、不支持多个音频同时播放等。这些优点决定了MediaPlayer在这些场合的应用状况不会很理想,例如在对时间精确度要求相对较高的网游研发中。
在网游研发中我们常常需要播放一些手游配乐(比如:爆炸amr播放器安卓,粒子撞击等),这种音响的共同特征是短促、密集、延迟程度小。在这种的画面下,我们可以使用SoundPool代替MediaPlayer来播放各种音响。
SoundPool(android.media.SoundPool),顾名思义是女声池的含义,主要用来播放一些较短的嗓音片段,支持从流程的资源或文档功能加载。与MediaPlayer相比,SoundPool的劣势在于CPU资源占用量低和反应延迟小。另外,SoundPool还支持自行设置声音的质量、音调、播映比例等参数,支持通过ID对多个音频流进行管理。
就现在已知的信息来说,SoundPool有一些设计上的BUG,从固件版本1.0开始有些还没有修复,我们在使用中可能小心再谨慎。相信未来Google会修复某些难题,但我们最好还是列出来:
1. SoundPool最大只能申请1M的内存空间,这就意味着我们没法用一些很短的嗓音片段,而不是用它来播放音乐如果做网游背景音乐。
2. SoundPool提供了pause和stop方法,但这种方式建议最好不要轻易使用,因为有些时候这些可能会使你的流程莫名其妙的终止。建议使用这两个方法的时候尽可能多做试验工作,还有些朋友反映这些不会立即终止播放女声,只是把缓冲区里的数据播放完就会停下来,其实会多播放一秒钟。
![]()
3. SoundPool的效能问题。其实SoundPool的效能在这种播放类中算是很好的了,所以有的朋友在G1中测试它还是有100ms左右的延迟,这可能会影响用户感受。也许这不能管SoundPool本身,所以到了外观比较好的Droid中这个延迟就可以让人接受了。
在现阶段SoundPool有其他缺点,但也是着它不可替代的特点amr播放器安卓,基于这种我们建议大在如下情况中多使用SoundPool:1.应用程序中的声效(键盘提示音,传闻等)2.网游中密集而短暂的嗓音(如多个星球同时爆炸)
开发流程:
1> 往项目的res/raw目录中取出音效文件。
2> 新建SoundPool对象,然后读取SoundPool.load()加载音效,读取SoundPool.play()方式播放指定音效文件。
public class AudioActivity extends Activity {
private SoundPool pool;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

setContentView(R.layout.main);
//指定声音池的最大音频流数目为10,女声质量为5
pool = new SoundPool(10, AudioManager.STREAM_SYSTEM, 5);
final int sourceid = pool.load(this, R.raw.pj, );//载入音频流,回到在池中的id
Button button = (Button)this.findViewById(R.id.button);
button.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
//播放语音,第二个参数为左厉声音量;第三个参数为右声道音量;第四个参数为优先级;第五个参数为循环次数,不循环,-1循环;第六个参数为速度,速度最低0.5最高为2,1代表正常速度
pool.play(sourceid, 1, 1, , -1, 1);
}
});
}
}
DemoActivity.java:
本文来自电脑杂谈,转载请注明本文网址:
https://www.pc-fly.com/a/bofangqi/article-118487-2.html
在质量上中国海军也会占据绝对上风