Android SoundPool实现简短小音效
一、SoundPool介绍
我们之前有用过MediaPlayer进行播放音频文件,但是当我们的应用程序需要经常的播放密集、短促的音效时,调用MediaPlayer则会占用系统的大量资源,且延时时间较长,不支持多个音频同时播放。这种简单的音乐的播放就运用到了我们的SoundPool,它使用音效池的概念来管理短促的音效,例如它可以开始就加载20个音效,通过他们的id进行管理与播放。SoundPool的优势在于占用的CPU资源少,反应延迟降低。另外它还支持自行设置声音的品质,音量,播放比率。
二、使用示例
注意:使用时我们需要在res目录下新建一个文件夹raw(这个名字是固定的,必须这样写),将音乐放在该文件夹下面。
使用:
publicclassMainActivityextendsActivityimplementsOnClickListener{ privateButtonmbtn_start; privateSoundPoolspool; privateintid; @Override protectedvoidonCreate(BundlesavedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mbtn_start=(Button)findViewById(R.id.bt_start); id=initSoundpool(); mbtn_start.setOnClickListener(this); } //@TargetApi(Build.VERSION_CODES.L) privateintinitSoundpool(){ //Sdk版本>=21时使用下面的方法 if(Build.VERSION.SDK_INT>=21){ SoundPool.Builderbuilder=newSoundPool.Builder(); //设置最多容纳的流数 builder.setMaxStreams(2); AudioAttributes.BuilderattrBuilder=newAudioAttributes.Builder(); attrBuilder.setLegacyStreamType(AudioManager.STREAM_MUSIC); builder.setAudioAttributes(attrBuilder.build()); pool=builder.build(); }else{ spool=newSoundPool(2,AudioManager.STREAM_MUSIC,0); } //加载音频文件,返回音频文件的id intid=spool.load(getApplicationContext(),R.raw.mali,1); returnid; } @Override publicvoidonClick(Viewv){ switch(v.getId()){ caseR.id.bt_start: //SoundPool的创建需要时间,因此不能将SoundPool初始化后直接start /*参数:(intsoundID,floatleftVolume,floatrightVolume,intpriority,intloop,floatrate)*/ spool.play(id,1,1,0,-1,1); break; default: break; } } }
注spool.play参数介绍(参考API):
Parameters
soundIDload方法返回的ID号
leftVolume leftvolumevalue(range=0.0to1.0)左声道
rightVolumerightvolumevalue(range=0.0to1.0)右声道
priority streampriority(0=lowestpriority)优先级
loop loopmode(0=noloop,-1=loopforever)是否循环播放
rate playbackrate(1.0=normalplayback,range0.5to2.0)属性设置或返回音频/视频的当前播放速度
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。