【移动应用开发技术】怎么在android中利用SoundPool播放音频_第1页
【移动应用开发技术】怎么在android中利用SoundPool播放音频_第2页
【移动应用开发技术】怎么在android中利用SoundPool播放音频_第3页
【移动应用开发技术】怎么在android中利用SoundPool播放音频_第4页
【移动应用开发技术】怎么在android中利用SoundPool播放音频_第5页
免费预览已结束,剩余1页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

【移动应用开发技术】怎么在android中利用SoundPool播放音频

怎么在android中利用SoundPool播放音频?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。SoundPool(android.media.SoundPool),顾名思义是声音池的意思,主要用于播放一些较短的声音片段,支持从程序的资源或文件系统加载。与MediaPlayer相比,SoundPool的优势在于CPU资源占用量低和反应延迟小。另外,SoundPool还支持自行设置声音的品质、音量、播放比率等参数,支持通过ID对多个音频流进行管理。1.SoundPool最大只能申请1M的内存空间,这就意味着我们只能用一些很短的声音片段,而不是用它来播放歌曲或者做游戏背景音乐。2.SoundPool提供了pause和stop方法,但这些方法建议最好不要轻易使用,因为有些时候它们可能会使你的程序莫名其妙的终止。建议使用这两个方法的时候尽可能多做测试工作,还有些朋友反映它们不会立即中止播放声音,而是把缓冲区里的数据播放完才会停下来,也许会多播放一秒钟。3.SoundPool的效率问题。其实SoundPool的效率在这些播放类中算是很好的了,但是有的朋友在G1中测试它还是有100ms左右的延迟,这可能会影响用户体验。也许这不能管SoundPool本身,因为到了性能比较好的Droid中这个延迟就可以让人接受了。在现阶段SoundPool有这些缺陷,但也有着它不可替代的优点,基于这些我们建议大在如下情况中多使用SoundPool:1.应用程序中的声效(按键提示音,消息等)2.游戏中密集而短暂的声音(如多个飞船同时爆炸)1.相关方法介绍:1)构造方法:SoundPool(intmaxStreams,intstreamType,intsrcQuality)参数依次是:①指定支持多少个声音,SoundPool对象中允许同时存在的最大流的数量。②指定声音类型,流类型可以分为STREAM_VOICE_CALL,STREAM_SYSTEM,STREAM_RING,STREAM_MUSIC和STREAM_ALARM四种类型。在AudioManager中定义。③指定声音品质(采样率变换质量),一般直接设置为0!在低版本中可以用上述构造方法,而API21(Android5.0)后这个构造方法就过时了!而用到一个SoundPool.Builder的东东,我们要实例化SoundPool只需调用:SoundPool.Builder

spb

=

new

SoundPool.Builder();

spb.setMaxStreams(10);

spb.setAudioAttributes(null);

//转换音频格式

SoundPool

sp

=

spb.build();

//创建SoundPool对象要使用上述代码的话,TargetSDK版本要设置大于等于21哦!而且如果minSDK版本小于21会出现下面的提醒:2)常用方法介绍:①加载声音资源:load(Contextcontext,intresId,intpriority)load(Stringpath,intpriority)load(FileDescriptorfd,longoffset,longlength,intpriority)load(AssetFileDescriptorafd,intpriority)上述方法都会返回一个声音的ID,后面我们可以通过这个ID来播放指定的声音参数介绍:context:上下文resId:资源idpriority:没什么用的一个参数,建议设置为1,保持和未来的兼容性path:文件路径FileDescriptor:貌似是流吧,这个我也不知道AssetFileDescriptor:从asset目录读取某个资源文件,用法:AssetFileDescriptor

descriptor

=

assetManager.openFd("biaobiao.mp3");②播放控制:play(int

soundID,

float

leftVolume,

float

rightVolume,

int

priority,

int

loop,

float

rate)参数依次是:soundID:Load()返回的声音ID号leftVolume:左声道音量设置rightVolume:右声道音量设置priority:指定播放声音的优先级,数值越高,优先级越大。loop:指定是否循环:-1表示无限循环,0表示不循环,其他值表示要重复播放的次数rate:指定播放速率:1.0的播放率可以使声音按照其原始频率,而2.0的播放速率,可以使声音按照其原始频率的两倍播放。如果为0.5的播放率,则播放速率是原始频率的一半。播放速率的取值范围是0.5至2.0。③资源释放:可以调用release()方法释放所有SoundPool对象占据的内存和资源,当然也可以根据声音ID来释放!3.使用代码示例:运行效果图:当点击按钮的时候会,"Duang"一下,这里演示了两种load的方法,分别是raw和assests!关键代码:MainActivity.java:private

void

initSP()

throws

Exception{

//设置最多可容纳5个音频流,音频的品质为5

mSoundPool

=

new

SoundPool(5,

AudioManager.STREAM_SYSTEM,

5);

soundID.put(1,

mSoundPool.load(this,

R.raw.duang,

1));

soundID.put(2

,

mSoundPool.load(getAssets().openFd("biaobiao.mp3")

,

1));

//需要捕获IO异常

soundID.put(3,

mSoundPool.load(this,

R.raw.duang,

1));

soundID.put(4,

mSoundPool.load(this,

R.raw.duang,

1));

soundID.put(5,

mSoundPool.load(this,

R.raw.duang,

1));

}

@Override

public

void

onClick(View

v)

{

switch

(v.getId()){

case

R.id.btn_play1:

mSoundPool.play(soundID.get(1),

1,

1,

0,

0,

1);

break;

case

R.id.btn_play2:

mSoundPool.play(soundID.get(2),

1,

1,

0,

0,

1);

break;

case

R.id.btn_play3:

mSoundPool.play(soundID.get(3),

1,

1,

0,

0,

1);

break;

case

R.id.btn_play4:

mSoundPool.play(soundID.get(4),

1,

1,

0,

0,

1);

break;

case

R.id.btn_play5:

mSoundPool.play(soundID.get(5),

1,

1,

0,

0,

1);

break;

case

R.id.btn_release:

mSoundPool.release();

//回收SoundPool资源

break;

}代码非常简单,另外如果你点击了最后一个按钮的话,SoundPool就会被释放,然后再其他按钮就不会Duang了哦~4.OnLoadCompleteListener监听声音文件是否加载完毕嗯,这个是临时想起的,写完在写另一篇的时候突然想起,用法也很简单,我们可以往上面的代码中添加OnLoadCompleteListener这个东东,然后重写onLoadComplete()方法,最后为SoundPool对象设置这个东东即可!mSoundPool.setOnLoadCompleteListener(new

SoundPool.OnLoadCom

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论