`
zxl_ong
  • 浏览: 129436 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

使用SoundPool播放游戏音效

阅读更多
在Android开发中我们经常使用MediaPlayer来播放音频文件,但是MediaPlayer存在一些不足,例如:资源占用量较高、延迟时间较长、不支持多个音频同时播放等。这些缺点决定了MediaPlayer在某些场合的使用情况不会很理想,例如在对时间精准度要求相对较高的游戏开发中。

        在游戏开发中我们经常需要播放一些游戏音效(比如:子弹爆炸,物体撞击等),这些音效的共同特点是短促、密集、延迟程度小。在这样的场景下,我们可以使用SoundPool代替MediaPlayer来播放这些音效。

        SoundPool(android.media.SoundPool),顾名思义是声音池的意思,主要用于播放一些较短的声音片段,支持从程序的资源或文件系统加载。与MediaPlayer相比,SoundPool的优势在于CPU资源占用量低和反应延迟小。另外,SoundPool还支持自行设置声音的品质、音量、播放比率等参数,支持通过ID对多个音频流进行管理。下面是SoundPool基本使用方法的例子代码:

 public static final int SOUND_EXPLOSION = 1;  
 public static final int SOUND_YOU_WIN = 2;  
 public static final int SOUND_YOU_LOSE = 3;  
   
 private SoundPool soundPool;  
 private HashMap<Integer, Integer> soundPoolMap;  
   
 private void initSounds() {  
     //这里指定声音池的最大音频流数目为4,音效质量100
     soundPool = new SoundPool(4, AudioManager.STREAM_MUSIC, 100);  
     soundPoolMap = new HashMap<Integer, Integer>();  
     soundPoolMap.put(SOUND_EXPLOSION, soundPool.load(getContext(),  
             R.raw.explosion, 1));  
 }  
   
 public void playSound(int sound) {  
     AudioManager mgr = (AudioManager) getContext().getSystemService(  
             Context.AUDIO_SERVICE);  
     float streamVolumeCurrent = mgr.getStreamVolume(AudioManager.STREAM_MUSIC);   
	    float streamVolumeMax = mgr.getStreamMaxVolume(AudioManager.STREAM_MUSIC);//设置最大音量       
	    float volume = streamVolumeCurrent/streamVolumeMax;   //设备的音量
	    //播放音频,可以对左右音量分别设置,还可以设置优先级,循环次数以及速率
	    //速率最低0.5最高为2,1代表正常速度
	    //soundPool.play(soundID, leftVolume, rightVolume, priority, loop, rate)
	    soundPool.play(soundPoolMap.get(sound), volume, volume, 1, 0, 1f);//播放
 }  
   
 public void update() {  
     if (isExploding()) {  
         playSound(SOUND_EXPLOSION);  
     }  
 } 


遗憾的是SoundPool目前存在的问题还比较多,我们需要谨慎使用,尽量避免程序在调用SoundPool过程中出现异常关闭的情况。相信 Google在Android的后续版本中会将这些问题修复(或者推出一个功能类似、健壮度更高的API),但是如果你现在就需要使用SoundPool 开发你的程序,也许你需要知道这些问题:
    1. SoundPool最大只能申请1M的内存空间,这就意味着我们只能使用一些很短的声音片段,而不是用它来播放歌曲或者游戏背景音乐(背景音乐可以考虑使用JetPlayer来播放)。
    2. SoundPool提供了pause和stop方法,但这些方法建议最好不要轻易使用,因为有些时候它们可能会使你的程序莫名其妙的终止。还有些朋友反映它们不会立即中止播放声音,而是把缓冲区里的数据播放完才会停下来,也许会多播放一秒钟。
    3. 音频格式建议使用OGG格式。在我的小游戏Agile Buddy中,我一开始使用WAV格式的音频文件存放游戏音效。经过反复测试,在音效播放间隔较短的情况下会出现异常关闭的情况(有说法是 SoundPool目前只对16bit的WAV文件有较好的支持)。后来将文件转成OGG格式,问题得到了解决。      

                                                                             
分享到:
评论

相关推荐

    Android用SoundPool播放音效

    本文将深入探讨SoundPool的工作原理、使用方法以及如何在实际项目中实现音效播放。 ### 1. SoundPool概述 SoundPool是一个音频缓存系统,它可以加载多个小音频文件并进行即时播放,尤其适用于需要快速响应的场景,...

    android 使用 SoundPool 播放音效

    `SoundPool`是Android系统提供的一个音频管理工具,它允许开发者快速播放短期的音频剪辑,如游戏中的按钮点击声或角色动作音效。`SoundPool`的特点在于它可以高效地管理和缓存多个小音频文件,确保在需要时能即时...

    Android使用SoundPool实现播放音效

    例如,在一个游戏中,我们可能需要播放多个音效,例如爆炸声、射击声、射箭声等,如果使用 MediaPlayer 来播放音效,可能会出现响应延迟和资源占用量高的问题,而使用 SoundPool 可以快速响应用户的操作,提高音效的...

    SoundPool音效播放

    它允许开发者加载多个声音文件,并在需要时快速、低延迟地播放它们,尤其适用于背景音乐、游戏音效等场景。本篇文章将深入探讨SoundPool的工作原理、使用方法以及如何通过源码分析来优化其性能。 首先,我们需要...

    android soundpool播放音乐

    总结,`SoundPool`是Android中用于播放短小音频的利器,特别适合游戏或应用中的音效处理。通过合理使用`SoundPool`,开发者可以实现高效、流畅的音频播放体验。在实际项目中,务必注意音频资源的管理,确保音频加载...

    Android游戏设计之-------游戏音效的播放 SoundPool

    本篇文章将深入探讨如何使用SoundPool类来实现游戏音效的播放,让玩家在游戏过程中感受到更加生动和真实的声音效果。 SoundPool是Android系统提供的一种高效的声音播放工具,特别适合用于短小、循环或需要快速响应...

    Android使用SoundPool播放音效实例

    Android 使用 SoundPool 播放音效实例 Android 使用 SoundPool 播放音效实例主要为大家详细介绍了 Android 使用 SoundPool 播放音效,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考...

    android使用SoundPool播放音效的方法

    在游戏开发中我们经常需要播放一些游戏音效(比如:子弹爆炸,物体撞击等),这些音效的共同特点是短促、密集、延迟程度小。在这样的场景下,我们可以使用SoundPool代替MediaPlayer来播放这些音效。 SoundPool...

    4-15-2(SoundPool音效).7z

    本资源“4-15-2(SoundPool音效).7z”可能包含了一系列与SoundPool相关的音频文件和示例代码,用于帮助开发者了解和实践如何在Android应用中使用SoundPool来实现音效的播放。 SoundPool是Android SDK中的一个类,它...

    Android多媒体功能开发-使用SoundPool播放音频的例子

    `SoundPool`主要用于效果流,它允许开发者同时播放多个短音频片段,比如游戏中的音效。 2. **预加载**:`SoundPool.load()`方法用于将音频文件加载到内存中。预加载可以减少音频播放时的延迟,因为文件已经准备就绪...

    Android应用源码之(SoundPool音效)-IT计算机-毕业设计.zip

    10. **应用实例**:在游戏开发中,SoundPool常用于播放玩家操作反馈声音、碰撞音效等。在UI交互中,也可以利用SoundPool播放点击音效,提升用户体验。 通过这个毕业设计项目,学生将有机会实践以上知识点,了解如何...

    Soundpool音乐播放控制练习

    在Android开发中,`Soundpool`是一个非常实用的类,用于播放短小的音频剪辑,比如游戏中的音效或简单的背景音乐。`Soundpool`的优势在于它能快速响应,即使在低内存环境下也能高效地处理音频播放。下面将详细讲解`...

    Android使用SoundPool实现播放音频

    SoundPool是一个音频管理器,主要用于播放短音频,例如游戏中的音效、提示音等。下面详细介绍了Android使用SoundPool实现播放音频的相关知识点。 SoundPool的基本概念 SoundPool是一个音频管理器,用于播放短音频...

    Android SoundPool音效使用Demo源码.rar

    在Android开发中,SoundPool是实现...通过这个SoundPool音效使用Demo源码,开发者可以学习如何在Android应用中集成和控制音效,提升用户体验。理解并掌握这些知识点,对于Android游戏开发或音视频应用开发都至关重要。

    Android编程实现使用SoundPool播放音乐的方法

    此时我们可以用SoundPool来播放音效,SoundPool使用音效池的概念来管理多个短促的音效,例如它可以开始就加载20个音效,以后在程序中按音效的ID进行播放 SoundPool主要用于播放一些较短的声音片段,优势在于CPU资源...

    Android下使用SoundPool的示例

    本示例将深入探讨如何在Android应用中使用`SoundPool`来实现音效的加载与播放,以提高用户体验。 `SoundPool`是Android为处理短暂、重复的音频而设计的。它通过内存映射技术,可以快速地加载和播放音频,特别适合...

    Android中播放声音的两种方法MediaPlayer 和SoundPool

    例如,如果应用需要播放背景音乐和音效,可以结合使用两者,即使用`MediaPlayer`播放背景音乐,`SoundPool`处理游戏音效。 以上是对`MediaPlayer`和`SoundPool`在Android中播放声音的详细介绍。在实际操作中,可以...

Global site tag (gtag.js) - Google Analytics