文档章节

SoundPool声音管理

40岁的青春
 40岁的青春
发布于 2015/06/17 11:23
字数 1038
阅读 1129
收藏 4

SoundPool(android.media.SoundPool),顾名思义是声音池的意思,主要用于播放一些较短的声音片段,支持从程序的资源或文件系统加载。与MediaPlayer相比,SoundPool的优势在于CPU资源占用量低和反应延迟小。另外,SoundPool还支持自行设置声音的品质、音量、播放比率等参数,支持通过ID对多个音频流进行管理。

SoundPool存在的缺陷
    1.SoundPool最大只能申请1M的内存空间,这就意味着我们只能用一些很短的声音片段,而不是用它来播放歌曲或者做游戏背景音乐。
  2.SoundPool提供了pause和stop方法,但这些方法建议最好不要轻易使用,因为有些时候它们可能会使你的程序莫名其妙的终止。建议使用这两个方法的时候尽可能多做测试工作,还有些朋友反映它们不会立即中止播放声音,而是把缓冲区里的数据播放完才会停下来,也许会多播放一秒钟。
  3.SoundPool的效率问题。其实SoundPool的效率在这些播放类中算是很好的了,但是有的朋友在G1中测试它还是有100ms左右的延迟,这可能会影响用户体验。也许这不能管SoundPool本身,因为到了性能比较好的Droid中这个延迟就可以让人接受了。
  在现阶段SoundPool有这些缺陷,但也有着它不可替代的优点,基于这些我们建议大在如下情况中多使用SoundPool:1.应用程序中的声效(按键提示音,消息等)2.游戏中密集而短暂的声音(如多个飞船同时爆炸)

import android.media.AudioManager;
import android.media.SoundPool;

 

SoundPool soundPool;//声明SoundPool对象


//soundPool实例化,第一个参数为soundPool可以支持的声音数量,这决定了Android为其开设多大的缓冲区,第二个参数为声音类型,在这里标识为系统声音,除此之外还有AudioManager.STREAM_RING以及AudioManager.STREAM_MUSIC等,系统会根据不同的声音为其标志不同的优先级和缓冲区,最后参数为声音品质,品质越高,声音效果越好,但耗费更多的系统资源。

soundPool= new SoundPool(10,AudioManager.STREAM_SYSTEM,5);

//系统为soundPool加载声音 第一个参数为上下文参数,第二个参数为声音的id,第三个参数为声音的优先级,当多个声音冲突而无法同时播放时,系统会优先播放优先级高的。一般我们将声音信息保存在res的raw文件夹下
//载入音频流,返回在池中的id
int sourceid = soundPool.load(this,R.raw.collide,1);

//播放,第一个参数为id,id即为放入到soundPool中的顺序,比如现在collide.wav是第一个,因此它的id就是1。第二个和第三个参数为左右声道的音量控制。第四个参数为优先级,由于只有这一个声音,因此优先级在这里并不重要。第五个参数为是否循环播放,0为不循环,-1为循环。最后一个参数为播放比率,从0.5到2,一般为1,表示正常播放。
soundPool.play(1,1, 1, 0, 0, 1);


注意:
如果SoundPool刚调完加载load函数之后,直接调用SoundPool的play函数可能出现
error "sample 1 not READY"
所以建议,调用加载资源函数load之后,实现资源加载结束的监听函数,在这个监听到资源加载结束之后,播放音频文件。
如:
     SoundPool soundPool = new SoundPool(10, AudioManager.STREAM_MUSIC, 5);
      //载入音频流,返回在池中的id 
      final int sourceid = soundPool.load(mContext, R.raw.move_sound, 0);
      //播放音频,第二个参数为左声道音量;第三个参数为右声道音量;第四个参数为优先级;第五个参数为循环次数,0不循环,-1循环;第六个参数为速率,速率最低0.5最高为2,1代表正常速度 
     soundPool.setOnLoadCompleteListener(new OnLoadCompleteListener() {
              
           public void onLoadComplete(SoundPool soundPool, int sampleId, int status) {
                    // TODO Auto-generated method stub
                    soundPool.play(sourceid, 2, 2, 0, 0, 1);
                   }
     });

© 著作权归作者所有

共有 人打赏支持
40岁的青春
粉丝 2
博文 71
码字总数 13985
作品 0
朝阳
私信 提问
Android SoundPool 的简单使用

之前只知道Android中可以用MediapLayer播放音乐,原来今天才发现可以用SoundPool,用SoundPool可以播一些短的反应速度要求高的声音,比如游戏中的爆破声,而MediapLayer适合播放长点的。 一般...

秀宇
2015/11/26
286
0
Android中的soundpool小结

之前只知道android中可以用mediaplayer播放音乐,原来今天才发现 可以用soundpool,用soundpool可以播一些短的反应速度要求高的声音, 比如游戏中的爆破声,而mediaplayer适合播放长点的。 1....

Carl_
2015/01/08
0
0
【Android游戏开发之八】游戏中添加音频-详解MediaPlayer与SoundPoo!并讲解两者的区别和游戏中的用途!

李华明Himi 原创,转载务必在明显处注明: 转载自【黑米GameDev街区】 原文链接: http://www.himigame.com/android-game/312.html 很多童鞋说我的代码运行后,点击home或者back后会程序异常,...

迷途d书童
2012/03/19
0
0
android开发中音频的使用

当进行android开发或游戏开发时,常常会涉及背景音乐的播放,以及短音效的使用 1.当涉及到背景音乐等长音乐播放时通常使用MediaPlayer类进行播放操作 MediaPlayer类常用方法: 1.public sta...

qq_38555940
05/28
0
0
安卓点击事件音效(增加+控制)

项目中遇到的问题,跟大家分享 开发环境:Android Studio 项目中用到的类(关键):SoundPool 项目github地址:https://github.com/zw21544182/BtMusicDemo 项目中所用到的关键知识: 1.基类抽...

掌上微科技
2017/09/08
0
0

没有更多内容

加载失败,请刷新页面

加载更多

js垃圾回收机制和引起内存泄漏的操作

JS的垃圾回收机制了解吗? Js具有自动垃圾回收机制。垃圾收集器会按照固定的时间间隔周期性的执行。 JS中最常见的垃圾回收方式是标记清除。 工作原理:是当变量进入环境时,将这个变量标记为“...

Jack088
昨天
10
0
大数据教程(10.1)倒排索引建立

前面博主介绍了sql中join功能的大数据实现,本节将继续为小伙伴们分享倒排索引的建立。 一、需求 在很多项目中,我们需要对我们的文档建立索引(如:论坛帖子);我们需要记录某个词在各个文...

em_aaron
昨天
13
0
"errcode": 41001, "errmsg": "access_token missing hint: [w.ILza05728877!]"

Postman获取微信小程序码的时候报错, errcode: 41001, errmsg: access_token missing hint 查看小程序开发api指南,原来access_token是直接当作parameter的(写在url之后),scene参数一定要...

两广总督bogang
昨天
18
0
MYSQL索引

索引的作用 索引类似书籍目录,查找数据,先查找目录,定位页码 性能影响 索引能大大减少查询数据时需要扫描的数据量,提高查询速度, 避免排序和使用临时表 将随机I/O变顺序I/O 降低写速度,占用磁...

关元
昨天
11
0
撬动世界的支点——《引爆点》读书笔记2900字优秀范文

撬动世界的支点——《引爆点》读书笔记2900字优秀范文: 作者:挽弓如月。因为加入火种协会的读书活动,最近我连续阅读了两本论述流行的大作,格拉德威尔的《引爆点》和乔纳伯杰的《疯传》。...

原创小博客
昨天
30
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部