【转】-wanzi215

游戏图形及逻辑部分开发完毕,但在音乐和音效的处理上真是费尽周折,好在最后完美解决了,在此共享给大家,共同提高!:)
最开始我使用的是普通的MediaPlayer的方式,但这个方法不适合用于游戏开发,因为游戏里面同时播放多个音效是常有的事,用过MediaPlayer的朋友都该知道,它是不支持实时播放多个声音的,会出现或多或少的延迟,而且这个延迟是无法让人忍受的,尤其是在快速连续播放声音(比如连续猛点按钮)时,会非常明显,长的时候会出现3~5秒的延迟~~-_-!~~
后来查了很多资料,最近在国外一家网站找到了解决方案: SoundPool
代码如下:
//音效的音量
int streamVolume;

//定义SoundPool 对象
 private SoundPool soundPool;
//定义HASH表
 private HashMap<Integer, Integer> soundPoolMap;
/***************************************************************
 * Function:     initSounds();
 * Parameters:   null
 * Returns:      None.
 * Description:  初始化声音系统
 * Notes:        none.
 ***************************************************************/
 public void initSounds() { 
       //初始化soundPool 对象,第一个参数是允许有多少个声音流同时播放,第2个参数是声音类型,第三个参数是声音的品质
      soundPool = new SoundPool(100, AudioManager.STREAM_MUSIC, 100); 
      //初始化HASH表
      soundPoolMap = new HashMap<Integer, Integer>(); 
      
      //获得声音设备和设备音量
      AudioManager mgr = (AudioManager)context.getSystemService(Context.AUDIO_SERVICE);
      streamVolume = mgr.getStreamVolume(AudioManager.STREAM_MUSIC);
 }
 
 /***************************************************************
 * Function:     loadSfx();
 * Parameters:   null
 * Returns:      None.
 * Description:  加载音效资源
 * Notes:        none.
 ***************************************************************/
 public void loadSfx(int raw, int ID) {
   //把资源中的音效加载到指定的ID(播放的时候就对应到这个ID播放就行了)
   soundPoolMap.put(ID, soundPool.load(context, raw, ID)); 
 }   
/***************************************************************
 * Function:     play();
 * Parameters:   sound:要播放的音效的ID, loop:循环次数
 * Returns:      None.
 * Description:  播放声音
 * Notes:        none.
 ***************************************************************/
 public void play(int sound, int uLoop) {      
   soundPool.play(soundPoolMap.get(sound), streamVolume, streamVolume, 1, uLoop, 1f); 
 }
需要注意的地方:
1.我测试过, SoundPool 只能用于播放音效,因为超过大约5.6秒的声音便播放不出来,而且加载超过大约5.6秒的音效还会导致其它声音播放的问题
2.我查过GOOGLE的SDK文档,里面虽然录入了 SoundPool的信息,但没有任何说明,连参数代表什么都没提,我在国外网站看到个别网友说这是测试API,可能会在正式SDK中取消,但至少1.0这个版本是保留了这个方法的,所以大家如果想在G1上开发游戏,随便使用吧~不用担心版本不支持的问题~~
3.关于MediaPlayer循环问题,我发现虽然MediaPlayer有提供自带的setLooping(true/false);这个方法,但在循环的间歇会有明显的停顿,应该是做了重新加载或者某些初始化的操作造成的吧,后来我决定不用它自带的循环函数来做循环,而是使用它的另一个函数:getCurrentPosition(),用它可以检测声音播放的偏移,我让它刚好放完或者快要放完的时候手动seekTo(position);这样就可以规避掉中间停顿的问题~~只不过因为要随时检测,程序效率上会稍微有点降低,为了声音的流畅循环,忍了!代码如下:
if (mMediaPlayer.getCurrentPosition() >= 15800)
{
      mMediaPlayer.seekTo(50);
}

关于游戏声音的解决方案[转]相关推荐

  1. Android 游戏声音解决方案

    SoundPool游戏声音的解决方案 游戏图形及逻辑部分开发完毕,但在音乐和音效的处理上真是费尽周折,好在最后完美解决了,在此共享给大家,共同提高! 最开始我使用的是普通的MediaPlayer的方式 ...

  2. 腾讯云游戏行业整体解决方案

    点击观看大咖分享 随着游戏行业的迅猛发展,游戏行业竞争日益加剧,好的用户体验度和快速反应能力成为游戏网站发展的关键.游戏行业整体解决方案将能够为游戏厂商提供优质全面便捷的服务. 腾讯云结合自身在云计算 ...

  3. win10 网络通的 网页视频一直缓冲 音乐软件无法播放 本地视频播放不出声音的解决方案

    win10下 多媒体设备播放不出声音的解决方案_墨晓白的博客-CSDN博客_win10播放mkv没有声音      最近win10系统更新后,经常会出现多媒体设备播放不出生意的情况,显示声卡服务器异常 ...

  4. python猜数字游戏简单-python猜数字游戏快速求解解决方案

    python猜数字游戏快速求解解决方案.使用方法: 1. 保存代码为guessall.py 2. 执行python guessall.py > result.txt 3. 打开result.tx ...

  5. 音视频开发(36)---麦克风阵列声音定位解决方案

    麦克风阵列声音定位解决方案 噪声源定位简介 噪声源定位意义 噪声源识别是指在同时有许多噪声源或包含许多振动发生部件的复杂声源情况下,为了确定各个声源或振动部件的声辐射的性能,区分噪声源,并根据他们对于 ...

  6. python猜数字游戏快速求解解决方案

    python猜数字游戏快速求解解决方案 参考文章: (1)python猜数字游戏快速求解解决方案 (2)https://www.cnblogs.com/lijianming180/p/12037940 ...

  7. python数字组合算法_python猜数字游戏快速求解解决方案

    python猜数字游戏快速求解解决方案.使用方法: 1. 保存代码为guessall.py 2. 执行python guessall.py > result.txt 3. 打开result.tx ...

  8. P2P、P2SP游戏更新下载解决方案。

    P2SP游戏更新下载解决方案说明   一.      游戏更新目前的状况: 随着网络游戏的发展,游戏目录越做越大,更新也越来越频繁,再加上游戏更新时的集中性,在短时间内要把更新文件推到用户的机器上以确 ...

  9. win11音频无声音排查解决方案

    win11音频无声音排查解决方案 可能的原因 1.默认播放设备不对 2."增强音频"影响 可能的原因 1.默认播放设备不对 2."增强音频"影响 1.默认播放设 ...

最新文章

  1. 算法了解:RCNN、SPP-Net、Fast-RCNN、Faster-RCNN
  2. MySQL 8.0 首个自适应参数横空出世
  3. Fedora 31安装RPMFusion源的方法
  4. TX Text Control文字处理教程
  5. 聊聊 HTTP 常见的请求方式
  6. 超越Linux!华为鸿蒙明年将成“第五大操作系统”,网友:何时超过iOS?
  7. db2存储结构换Oracle,DB2中实现Oracle的功能
  8. github语音识别对对_语音识别尝试方向
  9. html中select标签乱码,select 的过程中中文乱码有关问题求教
  10. Ubuntu 安装Oprofile
  11. 全国计算机等级考试专用辅导教程,全国计算机等级考试专用辅导教程:二级Visual FoxPro...
  12. Gram 矩阵及其主要性质
  13. Norton企业版防毒服务器
  14. 数据结构_静态链表(C语言)
  15. 51Nod 1228 序列求和
  16. 用手写板向计算机输入汉字是什么技术,使用手写板输入文字的简单介绍
  17. C# Xamarin For Android移动开发项目实战篇
  18. java课程培训中心
  19. 安卓系统怎么连接服务器数据库,安卓端如何与服务器端数据库连接
  20. 【分布式任务调度】(三)XXL-JOB调度中心对执行器的上下线感知实现原理

热门文章

  1. 遍历数组的方法和数组的遍历方法(3+10种)(下)
  2. iperf2网络测速工具
  3. 计算机基础B卷答案,计算机基础期中试卷B及答案
  4. 40款奇特的透明名片设计作品欣赏(上篇)
  5. 深扒“微信乞丐” 教你如何不乞讨就赚大钱!
  6. 十大排序算法详解(一)冒泡排序、选择排序、插入排序、快速排序、希尔排序
  7. 对接第三方接口(短信,支付)
  8. 原链落地应用之仓单金融
  9. 图像jpg转.bgr二进制文件_海思开发
  10. CAD图纸怎么转换成清晰的JPG格式图片