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(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。
