Android 音频播放之SoundPool的使用和封装
一般大家使用的是MediaPlayer来播放音频,它的创建和销毁都是非常消耗资源的,如果我们的需求是播放一些短促而且频繁播放的音频的话MediaPlayer就有些不合适了,我们来讲讲SoundPool来播放短促的音频:
SoundPool结构如下
初始化SoundPool
初始化SoundPool
我们直接new SoundPool (int maxStreams, int streamType, int srcQuality)
即可
参数解释:
参数 | 解释 |
---|---|
maxStreams | 最大的流的数量 |
streamType |
流的类型(看下图)建议AudioManager.STREAM_SYSTEM
|
srcQuality | 频的质量,默认是0,目前没有影响 |
重要方法
加载音频
在load
方法中我们一般是把音频文件放到res
的raw
文件夹下,然后使用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的使用和封装相关推荐
- Android 音频播放之SoundPool的使用和封装(自定义声音资源)
例如,现在在一个五子棋游戏中,我们需要在棋子落盘的时候播放一段声音.我们可以利用SoundPool,因为它时间很短,而且需要反复播放,并且我们不希望声音占用太大资源. 一般大家使用的是MediaPla ...
- 【Android进阶】20、音频播放:SoundPool 类、单元测试:Espresso框架
文章目录 20.1 创建 SoundPool 20.2 访问 assets 20.3 加载音频文件 20.4 播放音频 20.5 单元测试 20.6 创建测试类 20.7 配置测试类 20.8 编写测 ...
- android 音频播放总结 soundlPool,MediaPlay
soundlPool 用于小音频的播放多个同时播放. 使用步骤: 步骤一: 首先下载音频文件可以将其放入assets文件夹下或者res下的raw文件夹下,区别在于assets下可以再新建文件夹而raw ...
- Android音频播放(本地/网络)绘制数据波形,根据特征有节奏的改变颜色
上一期刚刚掀完桌子没多久<Android MP3录制,波形显示,音频权限兼容与播放>,就有小伙伴问我:"一个音频的网络地址,如何根据这个获取它的波形图?"··· WTF ...
- android声音播放之SoundPool的应用,让你的按钮从此有声有色
在实际项目中我们总会遇到要播放音频文件,其实一个MediaPlayer足够大家使用了,但是如果我们在点击按钮的时候要播放声音呢,这个在游戏中使用的非常普遍?当然其实也可以用MediaPlayer来做, ...
- Android音频播放
在Android中播放音频文件一般使用MediaPlayer类来实现,他对多种格式的音频文件提供了非常全面的控制方法,从而使得播放器变得十分简单. File file = new File(Envir ...
- android 音频播放过程,一种Android系统中的音频播放方法与流程
本申请涉及android系统技术,特别涉及一种android系统中的音频播放方法. 背景技术: 在android系统中,现有的使用audiotrack进行音频播放时,audiotrack应用与andr ...
- Android 音频播放器
一.核心功能 获取播放列表 播放网络音频 进度条及时间 切换及暂停 二.功能说明 播放列表后台实现 <?php // 连接数据库 include("conn.php"); / ...
- Android音频播放模式切换-外放、听筒、耳机
切换播放模式需要使用AudioManager. 默认音频播放使用的是外放(扬声器). AudioManager audioManager = (AudioManager)context.getSyst ...
最新文章
- 浅析_tmain()与main()的区别
- CNC加工中心刀柄类型
- react: menuService
- 【NOIP模拟题】“与”(位运算)
- 2012总结--第1篇--技术篇
- java数组随机抽取分布均匀_java利用数组随机抽取幸运观众
- java oracle数据库连接代码,java连接oracle数据库代码实例(注释详解)
- oracle 全文检索技术
- 商业模式匹配乃同质化产品竞争终极大杀器
- 阶段1 语言基础+高级_1-3-Java语言高级_1-常用API_1_第7节 Arrays工具类_17_Arrays练习:字符串倒序...
- Android模拟器安装apk应用程序
- 北京的一場演出-私人行程
- jpadao层继承什么_1岁英短蓝白母猫能卖多少钱,银渐层2岁公猫多少钱
- pom文件各标签解释
- 华为网络技术大赛笔记——数据库基础原理
- raw数据恢复之raw格式硬盘如何恢复数据?
- 网站建设-网站设计怎么样做的更好?
- uchar t 单片机C语言的注释是什么,uchar(单片机中uchar是什么意思)
- CentOS系统的安装
- BigDecimal如何保留小数位
热门文章
- 【装机】老毛桃的安装及使用教程
- uvalive 4413(梅涅劳斯定理)
- css如何导入特殊字体
- HTML元素居中定位与尺寸拉伸
- 最近 Github 上爆火的 Chrome 生产力神器 Omni 是什么鬼?
- IntelliJ IDEA的这个接口调试工具真是太太太太太好用了!
- IOS多线程使用GCD与信号量实现生产者与消费者模式
- JVM能够开启多少线程
- 简单明了的区分C++ C语言中声明(declaration)、定义(definition)、签名(signature)的区别
- CS61B sp2018笔记 | Efficient Programming