使用SoundPool播放音效

针对应用程序经常需要播放密集、短促的音效,因为MediaPlayer存在如下缺点:

1.资源占用量较高、延迟时间较长。

2.不支持多个音效同时播放。

SoundPool使用音效池的概念来管理多个短促的音效,例如它可以开始就加在20个音效,以后在程序中按音效的ID进行播放。

SoundPool主要用于播放一些较短的声音片段,与MediaPlayer相比,SoundPool的优势在于CPU资源占用量低和反映延迟小。另外,SoundPool还支持自行设置声音的品质、音量、播放比率等参数。

SoundPool提供了一个构造器,该构造器可以指定它总共支持多少个声音(也就是池的大小)、声音的品质等。

SoundPool(int  maxStreams , int  streamType , int  srcQuality ):第一个参数指定支持多少个声音;第二个参数指定声音类型;第三个参数指定声音品质。

一旦得到了SoundPool对象之后,接下来就可以调用SoundPool的多个重载的load方法来加载声音了:

int  load(Context  context , int  resid , int  priority ):从resid所对应的资源加载声音。

int  load(FileDescriptor  fd , long  offset , long  length , int  priority):加载fd所对应的文件的offset开始、长度为length的声音。

int  load(AssetFileDescriptor  afd , int  priority):从afd所对应的文件中加载声音。

int  load(String  path , int  priority):从path对应的文件去加载声音。

上面4个方法中都有一个priority参数,该参数目前还没有任何作用,Android建议将该参数设为1,保持和未来的兼容性。

上面4个方法加载声音之后,都会返回该声音的ID,以后程序就可以通过该声音的ID来播放指定声音,SoundPool提供的播放指定声音的方法如下:

int  play(int  soundID  , float  leftVolume , float  rightVolume  , it  priority  ,  int  loop ,  fl1oat  rate):该方法的一个参数指定播放哪个声音;leftVolume、rightVolume指定左右的音量;priority指定播放声音的优先级,数值越大,优先级越高;loop指定是否循环,0为不循环,-1为循环;rate指定播放的比率,数值可从0.5到2,1为正常比率。

为了更好地管理SoundPool所加载的每个声音的ID,程序一般会使用一个HashMap<Integer  ,  Integer>对象来管理声音。

归纳起来,使用SoundPool播放声音的步骤如下:

1、调用SoundPool的构造器创建SoundPool对象。

2、调用SoundPool对象的load()方法从指定资源、文件中加载声音,最好使用HashMap<Integer   ,Integer>来管理所加载的声音。

3、调用SoundPool的play方法播放声音。

实际使用SoundPool播放声音时有如下几点需要注意:SoundPool虽然可以一次性加载多个声音,但由于内存限制,因此应该避免使用SoundPool来播放歌曲或者做游戏背景音乐,只有那些短促、密集的声音才考虑使用SoundPool进行播放。

虽然SoundPool比MediaPlayer的效率好,但也不是绝对不存在延迟问题,尤其在那些性能不太好的手机中,SoundPool的延迟问题会更严重。

时间: 2024-12-14 18:06:39

使用SoundPool播放音效的相关文章

android SoundPool播放音效

MediaPlayer的缺点: 资源占用量高,延时时间较长 不支持多个音效同时播放 SoundPool主要用于播放一些较短的声音片段,CPU资源占用率低和反应延时小,还支持自行色设置声音的品质,音量,播放比率等参数,避免使用SoundPool来播放歌曲或者做游戏背景音乐,只有那些短促的密集的声音才考虑使用SoundPool播放 构造器: public SoundPool (int maxStreams, int streamType, int srcQuality) Parameters max

Android 使用SoundPool播放音效

在Android开发中我们经常使用MediaPlayer来播放音频文件,但是MediaPlayer存在一些不足,例如:资源占用量较高.延迟时间较长.不支持多个音频同时播放等.这些缺点决定了MediaPlayer在某些场合的使用情况不会很理想,例如在对时间精准度要求相对较高的游戏开发中. 本文地址:http://www.cnblogs.com/wuyudong/p/5679191.html,转载请注明源地址. 在游戏开发中我们经常需要播放一些游戏音效(比如:子弹爆炸,物体撞击等),这些音效的共同特

安卓播放音效

public class MyActivity extends Activity {       /** Called when the activity is first created. */       SoundPool sp;                           //得到一个声音池引用       HashMap<Integer,Integer> spMap;           //得到一个map的引用       Button b1;               

Cocos2d 播放音效

Cocos2D对音乐/音效播放的封装已经很好了,下边是例子: 定义2个文件: [cpp] view plaincopy #define MUSIC_FILE        "LOLBgMusic.mp3" #define EFFECT_FILE      "Attack.wav" 在初始化的时候预加载音乐/音效文件: [cpp] view plaincopy //预加载 CocosDenshion::SimpleAudioEngine::sharedEngine()

Android设备 cocos2dx 骨骼动画注册事件播放音效,退到后台再返回黑屏问题

最近遇到一个cocos2dx 骨骼动画注册事件播放音效,在骨骼动画播放的时候,按HOME键退到桌面,再次打开游戏的时候,会黑屏. 解决办法如下,可能不是太完美,至少解决了大部分问题. 1.在org.cocos2dx.lib下的 Cocos2dxRenderer.java 中添加native方法 public static native void setIsPause(boolean isPause); 2.在Cocos2dxRenderer.java对应的Java_org_cocos2dx_li

iOS 播放音效

音效:通俗的说是短音频,音频文件必须满足下面的条件 1.播放的时间不能超过30秒 2.数据必须是 PCM或者IMA4流格式 3.必须被打包成下面三个格式之一:Core Audio Format (.caf), Waveform audio (.wav), 或者 Audio Interchange File (.aiff) 1.引入框架 1 #import <AudioToolbox/AudioToolbox.h> 2.播放音效 1 - (void)touchesEnded:(NSSet *)t

C#播放音效(web/winform)

[System.Runtime.InteropServices.DllImport("winmm.DLL", EntryPoint = "PlaySound", SetLastError = true)]        private static extern bool PlaySound(string szSound, System.IntPtr hMod, PlaySoundFlags flags); [System.Flags]        public

cocos2dx AudioEngine在Android7上播放音效卡顿问题处理

1.此问题在cocos2dx 3.13/3.14版本(其它版本没有测试过)在Android7中使用AudioEngine的play2d函数播放音效时出现. 调试时出现如下提示: 2.论坛中相关讨论帖地址:http://forum.cocos.com/t/android7/44119 3.解决办法: 将cocos2d-x\cocos\audio\android\AudioPlayerProvider.cpp中的getSystemAPILevel() < 17都改为getSystemAPILevel

按钮点击播放音效

1.引入音频管理文件 #import <AVFoundation/AVFoundation.h> 2.方法抽取 /************ 播放音效 *****************************/ - (void)playSoundEffect:(NSString *)name withType:(VoiceType)type { //播放扫描二维码的声音 SystemSoundID soundID; NSString *strSoundFile = [[NSBundle mai