本文总结SoundPool的使用方法及注意事项,同时结合MediaPlayer分析两者的差异。
在Android应用开发中我们经常需要播放多媒体声音文件,一般会使用MediaPlayer类,但该类占用资源较多,对于游戏等应用可能不是很适合。SoundPool(声音池)类主要用来播放一些较短的声音片段,可以从程序的资源或文件系统加载,相对于MediaPlayer类占用较少的CPU资源并具备较短的反应延迟。
SoundPool和其他声音播放类相比,其特点是可行设置声音的以自品质、音量、播放比率等参等。它可以同时管理多个音频流,每个流都有独自的ID,通过ID对音频流进行管理。
SoundPool基本使用方法如下:
1.new一个实例
new SoundPool(int maxStreams, int streamType, int srcQuality);
/*
maxStream —— 同时播放的流的最大数量
streamType —— 流的类型,一般为STREAM_MUSIC(具体在AudioManager类中列出)
srcQuality —— 采样率转化质量,当前无效果,使用0作为默认值
比如说: new SoundPool(4, AudioManager.STREAM_MUSIC, 100);
创建了一个最多支持4个流同时播放的,类型标记为音乐的SoundPool。
*/
2.加载资源
一般把多个声音放到HashMap中去,比如:
soundPool = new SoundPool(4, AudioManager.STREAM_MUSIC, 100);
soundPoolMap = new HashMap<Integer, Integer>();
soundPoolMap.put(1, soundPool.load(this, R.raw.ring, 1));
当然,我们也可以加载单个的Music,那我们怎么实现播放指定的Music呢?
有关载入音效的方法,有以下几种方法:
// 从apk资源载入
Int load(Context context, int resId, int priority)
// 从FileDescriptor对象载入
Int load(FileDescriptor fd, long offset, long length, int priority)
// 从Assert对象载入
Int load(AssertFileDescriptor afd, int priority)
// 从完整路径名载入
Int load(String path, int priority)
在这里,最后一个参数priority是处理优先级,播放多个文件时,系统优先处理优先级高的文件
3.播放
play(int soundID, float leftVolume, float rightVolume, int priority, int loop, float rate);
//其中soundID,就是load方法得到的那个int型参数,leftVolume和rightVolume表示左右音量,priority表示优先级,loop表示循环次数,rate表示速率,速率最低0.5最高为2,1代表正常速度
4.停止
pause(int streamID) ; //这里的streamID和soundID均在构造SoundPool类的第一个参数中指明了总数量,而id从0开始
5.没有声音
没有就对了。因为在play(..)之前Soundpool没有初始化(load)完毕。那我们如何知道load已经完毕了呢?
Android提供了检测是否初始化完毕的方法,SoundPool.OnLoadCompleteListener(sdk 2.2)
-----------------------------------------------------------Hello World !---------------------------------------------------
下面分析下MediaPlayer与SoundPool的利弊:
@使用MediaPlayer来播放音频文件存在的一些不足:
例如:资源占用量较高、延迟时间较长、不支持多个音频同时播放等。
这些缺点决定了MediaPlayer在某些场合的使用情况不会很理想。游戏里面经常要同时播放几个音乐文件,用过MediaPlayer的朋友都该知道,它是不支持实时播放多个声音的,而且还会出现或多或少的延迟,尤其是在快速连续播放声音(比如连续猛点按钮)时,会非常明显,长的时候会出现3~5秒的延迟,因此一般游戏开发使用的都是Soundpool。
@使用SoundPool存在的一些问题:
<!--[if !supportLists]-->1. <!--[endif]-->SoundPool是为播放小文件而存在的。一般限定Soundpool播放文件的大小为1M。
2. SoundPool提供了pause和stop方法,但这些方法建议最好不要轻易使用,因为有些时候它们可能会使你的程序莫名其妙的终止。还有些朋友反映它们不会立即中止播放声音,而是把缓冲区里的数据播放完才会停下来,也许会多播放一秒钟。
3. 音频格式建议使用OGG格式。使用WAV格式的音频文件存放游戏音效,经过反复测试,在音效播放间隔较短的情况下会出现异常关闭的情况(有说法是SoundPool目前只对16bit的WAV文件有较好的支持)。
4.在使用SoundPool播放音频的时候,如果在初始化中就调用播放函数进行播放音乐那么根本没有声音,不是因为没有执行,而是SoundPool需要——准备时间!这就是刚刚我们说的用OnLoadCompleteListener来解决的问题。
5. 在现阶段SoundPool有这些缺陷,但也有着它不可替代的优点,基于这些我们建议大在如下情况中多使用SoundPool:
1.应用程序中的声效(按键提示音,消息等)
2.游戏中密集而短暂的声音(如多个飞船同时爆炸)
3. …
相关推荐
### Android SoundPool 使用案例及源码分析 #### 一、SoundPool简介与初始化 SoundPool是Android提供的一个音频播放类,特别适用于游戏等场景中播放短小的声音效果。相比于MediaPlayer,SoundPool支持同时播放多个...
在Android平台上,`SoundPool`是一个非常实用的类,它允许开发者轻松地管理和播放短期音频效果。本示例将深入探讨如何在Android应用中使用`SoundPool`来实现音效的加载与播放,以提高用户体验。 `SoundPool`是...
在Android平台上,声音的播放是通过多种方式实现的,其中之一就是使用`SoundPool`类。`SoundPool`是一个高效的声音管理器,适用于短小、重复的声音效果,如游戏中的音效。下面我们将深入探讨`SoundPool`的工作原理、...
在Android平台上,SoundPool是一个非常重要的工具类,主要用于管理和播放短小的音频文件,比如游戏中的音效。它能够高效地处理多个音频流,并且支持动态调整音量、播放速度等特性,使得开发者在实现游戏或者应用的...
SoundPool类是Android提供的一个音频管理工具,特别适合于需要快速响应和重复播放短音频片段的应用场景。本示例将深入探讨如何利用SoundPool来播放音乐,并提供一个基础的实现案例。 首先,我们需要了解SoundPool的...
在Android开发中,SoundPool是实现短音频播放的重要工具,尤其适用于游戏或应用程序中的音效管理。本Demo源码提供了一个完整的示例,演示如何有效利用SoundPool来播放和控制音效。以下将详细解析SoundPool的核心概念...
Android SoundPool 实现简短小音效 Android SoundPool 是 Android 平台上的一种音频处理机制,它使用音效池的概念来管理短促的音效,例如播放游戏中的音效、按钮点击音效等。SoundPool 的优势在于占用的 CPU 资源少...
我怀疑当前是否有主流手机出现Android SoundPool崩溃的问题。 原始自述文件: SoundPool似乎遭受了三星Galaxy S2(以及其他双核手机)崩溃的困扰。 在等待正式修复时,一些人建议作为一种解决方法,将OpenSL ES...
在Android平台上,`SoundPool` 是一个非常实用的类,用于播放小的音频剪辑,特别是在游戏开发中,它能够高效地管理和播放大量的短音频。`SoundPool` 的优势在于它可以预先加载音频到内存,从而实现快速响应的音频...
资源为一个专门处理短音效soundPool的工具类,使用起来很方便,封装的很好!使用方法: 1、你只需要在需要的地方调用这个方法进行类初始化 private void initSound() { soundPlay = new SoundPlay(); soundPlay....
"Android使用SoundPool实现播放音频" Android中使用SoundPool实现播放音频是一种常见的音频播放方式。SoundPool是一个音频管理器,主要用于播放短音频,例如游戏中的音效、提示音等。下面详细介绍了Android使用...
一个简单的sample , 用来理解及测试SoundPool的相关功能 相关博客 https://blog.csdn.net/qq_28261343/article/details/82818868
在Android开发中,实现背景音乐和音效是一个常见的需求,主要涉及到两个关键的类:`MediaPlayer`和`SoundPool`。这两个类都是Android系统提供的音频播放工具,但它们各自有其特性和适用场景。 首先,`MediaPlayer`...
本文将深入解析`Android SoundPool`的相关知识点,帮助开发者理解其工作原理及如何在实际项目中应用。 ### SoundPool基本概念 1. **SoundPool**:它是Android提供的一个音频缓存服务,可以预先加载多个音频资源到...
在开发的时候,可能会用到播放一些短暂声音。播放多媒体,最先想到的可能是MediaPlay这个类。... Soundpool的加载最好是放在程序初始化的时候,如果在用的时候才去加载的话,调用play的时候是会抛异常的
在Android平台上,实现语音顺序播放是一项常见的需求,特别是在开发教育应用、语音导航或者游戏时。本文将详细讲解如何使用Android Studio来实现这一功能,主要涉及的技术点包括`MediaPlayer`类和多线程处理。 首先...
在Android开发中,SoundPool是用于播放短暂音频效果的一个高效工具,特别适合处理游戏或应用中的声音反馈。本文将深入探讨SoundPool的工作原理、使用方法以及如何在实际项目中实现音效播放。 ### 1. SoundPool概述 ...
在Android开发中,当需要处理短暂、频繁的音效播放时,`SoundPool`是一个非常实用的工具。相比`MediaPlayer`,`SoundPool`在处理短促音效时具有更低的资源占用和更快的响应速度。以下是使用`SoundPool`在Android编程...
### Android的SoundPool类使用与利弊 #### 一、SoundPool 类简介 在Android开发过程中,音频播放是一项常见的需求,特别是在游戏开发中。对于简短的音效播放,`SoundPool`类提供了非常高效且实用的方法。相比于`...