`
void1898
  • 浏览: 15444 次
  • 性别: 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() {
		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);
		int streamVolume = mgr.getStreamVolume(AudioManager.STREAM_MUSIC);
		soundPool.play(soundPoolMap.get(sound), streamVolume, streamVolume, 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格式,问题得到了解决。
分享到:
评论
9 楼 菜鸟22 2014-03-05  
[i][/i]
8 楼 菜鸟22 2014-03-05  
7 楼 菜鸟22 2014-03-05  
[flash=200,200][/flash]
6 楼 菜鸟22 2014-03-05  
[url][/url]
5 楼 菜鸟22 2014-03-05  
[/img]
4 楼 菜鸟22 2014-03-05  
  • [list]
  • [*][list]
  • [*][*]
  • [*]
  • [/list]
  • [/list]
    3 楼 菜鸟22 2014-03-05  
    引用
    引用
    引用
    引用
    引用
    引用
    2 楼 菜鸟22 2014-03-05  
               
    1 楼 菜鸟22 2014-03-05  
    [i][i][i][i][i][i][i][u][/u][/i][/i][/i][/i][/i][/i][/i]

    相关推荐

      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