一般大家使用的是MediaPlayer来播放音频,它的创建和销毁都是非常消耗资源的,如果我们的需求是播放一些短促而且频繁播放的音频的话MediaPlayer就有些不合适了,我们来讲讲SoundPool来播放短促的音频:


SoundPool结构如下

初始化SoundPool

初始化SoundPool 我们直接new SoundPool (int maxStreams, int streamType, int srcQuality)即可

参数解释:

参数 解释
maxStreams 最大的流的数量
streamType 流的类型(看下图)建议AudioManager.STREAM_SYSTEM
srcQuality 频的质量,默认是0,目前没有影响

重要方法

加载音频

load方法中我们一般是把音频文件放到resraw文件夹下,然后使用load(Context context, int resId, int priority)方法来加载音频到SoundPool中:

参数解释:

参数 解释
context 上下文
resId 音频文件的地址:R.raw.deep
priority 优先级:都是短促音频无影响设置为1即可

播放音频

播放音频比较简单,使用play(int soundID, float leftVolume, float rightVolume, int priority, int loop, float rate)

参数解释:

参数 解释
soundID 声音的id(即:load到SoundPool的顺序,从1开始)
leftVolume\rightVolume 左\右声道的音量控制, 0.0 到 1.0
priority 优先级,0是最低优先级
loop 是否循环播放,0为不循环,-1为循环
rate 播放比率,从0.5到2,一般为1,表示正常播放

第一小结

总结一下播放一个音频的所需代码如下:

//初始化SoundPool
private SoundPool soundPool= newSoundPool(10,AudioManager.STREAM_SYSTEM,5);
//加载deep 音频文件
soundPool.load(this,R.raw.deep,1);
//播放deep
soundPool.play(1,1, 1, 0, 0, 1);

封装

如果我们在很多Activity中都要用到音频文件,比如给所有点击操作加上音效,那么我们每个Activity都要new ,然后load,在play,这样做是非常繁琐而且混乱的,那么我们做如下的分装:

/*** * @author zsl* @blog http://blog.csdn.net/yy1300326388**/
public class SoundPlayUtils {// SoundPool对象public static SoundPool mSoundPlayer = new SoundPool(10,AudioManager.STREAM_SYSTEM, 5);public static SoundPlayUtils soundPlayUtils;// 上下文static Context mContext;/*** 初始化* * @param context*/public static SoundPlayUtils init(Context context) {if (soundPlayUtils == null) {soundPlayUtils = new SoundPlayUtils();}// 初始化声音mContext = context;mSoundPlayer.load(mContext, R.raw.beng, 1);// 1mSoundPlayer.load(mContext, R.raw.click, 1);// 2mSoundPlayer.load(mContext, R.raw.diang, 1);// 3mSoundPlayer.load(mContext, R.raw.ding, 1);// 4mSoundPlayer.load(mContext, R.raw.gone, 1);// 5mSoundPlayer.load(mContext, R.raw.popup, 1);// 6mSoundPlayer.load(mContext, R.raw.water, 1);// 7mSoundPlayer.load(mContext, R.raw.ying, 1);// 8return soundPlayUtils;}/*** 播放声音* * @param soundID*/public static void play(int soundID) {mSoundPlayer.play(soundID, 1, 1, 0, 0, 1);}}

我们先把所有的文件都加载起来,用的时候直接查询看一下它是第几个加载的,然后直接调用play方法即可:


使用

第一步:在程序入口的Activity的onCreate方法中添加如下代码:

//初始化音效
SoundPlayUtils.init(this);

第二步:在任何地方播放时,直接使用如下代码:

  • 播放beng
//播放声音
SoundPlayUtils.play(1);
  • 播放water
//播放声音
SoundPlayUtils.play(7);

Android 音频播放之SoundPool的使用和封装相关推荐

  1. Android 音频播放之SoundPool的使用和封装(自定义声音资源)

    例如,现在在一个五子棋游戏中,我们需要在棋子落盘的时候播放一段声音.我们可以利用SoundPool,因为它时间很短,而且需要反复播放,并且我们不希望声音占用太大资源. 一般大家使用的是MediaPla ...

  2. 【Android进阶】20、音频播放:SoundPool 类、单元测试:Espresso框架

    文章目录 20.1 创建 SoundPool 20.2 访问 assets 20.3 加载音频文件 20.4 播放音频 20.5 单元测试 20.6 创建测试类 20.7 配置测试类 20.8 编写测 ...

  3. android 音频播放总结 soundlPool,MediaPlay

    soundlPool 用于小音频的播放多个同时播放. 使用步骤: 步骤一: 首先下载音频文件可以将其放入assets文件夹下或者res下的raw文件夹下,区别在于assets下可以再新建文件夹而raw ...

  4. Android音频播放(本地/网络)绘制数据波形,根据特征有节奏的改变颜色

    上一期刚刚掀完桌子没多久<Android MP3录制,波形显示,音频权限兼容与播放>,就有小伙伴问我:"一个音频的网络地址,如何根据这个获取它的波形图?"··· WTF ...

  5. android声音播放之SoundPool的应用,让你的按钮从此有声有色

    在实际项目中我们总会遇到要播放音频文件,其实一个MediaPlayer足够大家使用了,但是如果我们在点击按钮的时候要播放声音呢,这个在游戏中使用的非常普遍?当然其实也可以用MediaPlayer来做, ...

  6. Android音频播放

    在Android中播放音频文件一般使用MediaPlayer类来实现,他对多种格式的音频文件提供了非常全面的控制方法,从而使得播放器变得十分简单. File file = new File(Envir ...

  7. android 音频播放过程,一种Android系统中的音频播放方法与流程

    本申请涉及android系统技术,特别涉及一种android系统中的音频播放方法. 背景技术: 在android系统中,现有的使用audiotrack进行音频播放时,audiotrack应用与andr ...

  8. Android 音频播放器

    一.核心功能 获取播放列表 播放网络音频 进度条及时间 切换及暂停 二.功能说明 播放列表后台实现 <?php // 连接数据库 include("conn.php"); / ...

  9. Android音频播放模式切换-外放、听筒、耳机

    切换播放模式需要使用AudioManager. 默认音频播放使用的是外放(扬声器). AudioManager audioManager = (AudioManager)context.getSyst ...

最新文章

  1. 浅析_tmain()与main()的区别
  2. CNC加工中心刀柄类型
  3. react: menuService
  4. 【NOIP模拟题】“与”(位运算)
  5. 2012总结--第1篇--技术篇
  6. java数组随机抽取分布均匀_java利用数组随机抽取幸运观众
  7. java oracle数据库连接代码,java连接oracle数据库代码实例(注释详解)
  8. oracle 全文检索技术
  9. 商业模式匹配乃同质化产品竞争终极大杀器
  10. 阶段1 语言基础+高级_1-3-Java语言高级_1-常用API_1_第7节 Arrays工具类_17_Arrays练习:字符串倒序...
  11. Android模拟器安装apk应用程序
  12. 北京的一場演出-私人行程
  13. jpadao层继承什么_1岁英短蓝白母猫能卖多少钱,银渐层2岁公猫多少钱
  14. pom文件各标签解释
  15. 华为网络技术大赛笔记——数据库基础原理
  16. raw数据恢复之raw格式硬盘如何恢复数据?
  17. 网站建设-网站设计怎么样做的更好?
  18. uchar t 单片机C语言的注释是什么,uchar(单片机中uchar是什么意思)
  19. CentOS系统的安装
  20. BigDecimal如何保留小数位

热门文章

  1. 【装机】老毛桃的安装及使用教程
  2. uvalive 4413(梅涅劳斯定理)
  3. css如何导入特殊字体
  4. HTML元素居中定位与尺寸拉伸
  5. 最近 Github 上爆火的 Chrome 生产力神器 Omni 是什么鬼?
  6. IntelliJ IDEA的这个接口调试工具真是太太太太太好用了!
  7. IOS多线程使用GCD与信号量实现生产者与消费者模式
  8. JVM能够开启多少线程
  9. 简单明了的区分C++ C语言中声明(declaration)、定义(definition)、签名(signature)的区别
  10. CS61B sp2018笔记 | Efficient Programming