对于Android的游戏音效播放,上次已经告诉大家使用 SoundPool类来实现,由于本次我们的游戏需要多种音效同时播放所以就选择了SoundPool类,它和Android提供常规的MediaPlayer类有哪些不同呢? 1. SoundPool载入音乐文件使用了独立的线程,不会阻塞UI主线程的操作。但是这里Android开发网提醒大家如果音效文件过大没有载入完成,我们 调用play方法时可能产生严重的后果,这里Android SDK提供了一个SoundPool.OnLoadCompleteListener类来帮助我们了解媒体文件是否载入完成,我们重载 onLoadComplete(SoundPool soundPool, int sampleId, int status) 方法即可获得。 2. 从上面的onLoadComplete方法可以看出该类有很多参数,比如类似id,是的SoundPool在load时可以处理多个媒体一次初始化并放入内存中,这里效率比MediaPlayer高了很多。 3. SoundPool类支持同时播放多个音效,这对于游戏来说是十分必要的,而MediaPlayer类是同步执行的只能一个文件一个文件的播放。 SoundPool类使用示例代码: SoundPool sp=new SoundPool(8, /*maxStreams*/, AudioManager.STREAM_MUSIC /*streamType*/,100 /*srcQuality*/) ; 有关载入音效的方法,有以下几种方法
int load(Context context, int resId, int priority) //从APK资源载入
int load(FileDescriptor fd, long offset, long length, int priority) //从FileDescriptor对象载入
int load(AssetFileDescriptor afd, int priority) //从Asset对象载入
int load(String path, int priority) //从完整文件路径名载入
我们看到了每个load的重载版本的最后一个参数为优先级,这里用于播放多个文件时,系统会优先处理不。 对 于播放,可以使用play(int soundID, float leftVolume, float rightVolume, int priority, int loop, float rate) ,其中leftVolume和rightVolume表示左右音量,priority表示优先级,loop表示循环次数,rate表示速率,如
//速率最低0.5最高为2,1代表正常速度
sp.play(soundId, 1, 1, 0, 0, 1);
而停止则可以使用 pause(int streamID) 方法,这里的streamID和soundID均在构造SoundPool类的第一个参数中指明了总数量,而id从0开始。

更多相关文章

  1. Android开发人员看过来:这些Kotlin化方法帮你提高开发技能
  2. Android 在onCreate()方法中获取控件宽高值为0解决方案
  3. 批量处理ios破解后的资源文件为android所用
  4. Android录制屏幕的实现方法
  5. Android中的R.java文件你知多少
  6. Android简单修改原有应用和添加应用的方法
  7. 如何给你的Android 安装文件(APK)瘦身(一)

随机推荐

  1. android 自定义 dialog
  2. android加载大图片内存问题
  3. android 子线程handler 实现
  4. Android(安卓)农历日历算法
  5. android studio 问题整理
  6. Android(安卓)| class | tree
  7. Android(安卓)选择图片裁剪,上传
  8. Android(安卓)显示富文本
  9. Android使用NIO开发客户端
  10. android Ongoing