Android使用SoundPool播放短音效
作者:T9的第三个三角 发布时间:2022-03-02 12:33:00
标签:Android,SoundPool,短音效
前言
对于Android播放一些简短音效,例如提示音,或者铃声,相对于使用MediaPlayer,SoundPool可以节省更多资源,并且可以同时播放多个音效,而且可以针对不同音效设置不同播放品质
实现
SoundPool的具体作用,就不再阐述,直接贴代码
private SoundPool.Builder spBuilder;
private SoundPool soundPool;
private Integer[] fmSound = FmManager.getRawAudios();
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
if (null == spBuilder) {
spBuilder = new SoundPool.Builder();
AudioAttributes.Builder builder = new AudioAttributes.Builder();
builder.setLegacyStreamType(AudioManager.STREAM_MUSIC);
spBuilder.setAudioAttributes(builder.build());
spBuilder.setMaxStreams(10);
}
if (null == soundPool) {
soundPool = spBuilder.build();
}
} else {
if (null == soundPool) {
soundPool = new SoundPool(10, AudioManager.STREAM_MUSIC, 10); //最多播放10个音效,格式为Steam_music,音质为10
}
}
soundPool.setOnLoadCompleteListener(this);
if (null == fmArray) {
fmArray = new SparseIntArray();
}
if (null == streamArray) {
streamArray = new SparseIntArray();
}
for (int i = 0; i < fmSound.length; i++) {
fmArray.put(i + 1, soundPool.load(this, fmSound[i], 1)); //将需要播放的资源添加到SoundPool中,并保存返回的StreamID,通过StreamID可以停止某个音效
}
private void playFmByPosition(int resultId) {
if (null == soundPool || resultId < 0 || fmArray == null || fmArray.size() < 0 || streamArray == null)
return;
LogUtils.e(resultId + "------------" + fmArray.size());
if (resultId < fmArray.size()) {
if (!FmPlaying.isPlay(resultId)) {
int fmPlayId = soundPool.play(fmArray.get(resultId + 1), 1, 1, 0, -1, 1);
streamArray.put(resultId, fmPlayId);
FmPlaying.setPlay(resultId, true);
} else {
soundPool.stop(streamArray.get(resultId));
streamArray.removeAt(resultId);
FmPlaying.setPlay(resultId, false);
}
}
}
static class FmPlaying {
private static SparseBooleanArray playArray = new SparseBooleanArray();
public static boolean isPlay(int position) {
return playArray.get(position, false);
}
public static void setPlay(int position, boolean play) {
playArray.put(position, play);
}
}
来源:https://blog.csdn.net/dazhaoDai/article/details/73650589


猜你喜欢
- 本文实例为大家分享了java实现简单的猜数字的具体代码,供大家参考,具体内容如下题目描述:猜数字(又称 Bulls and Cows )是一
- 下面通过图文并茂的方式给大家讲解下Java开发环境配置,具体内容如下:对于JAVA新手来说,刚开始要学JAVA,而自己的电脑上毫无与JAVA
- session对象用于在会话范围内,记录每个客户端的访问状态,以便于跟踪每个客户端的操作状态,在会话存储的信息,在浏览器发出后续请求时可以获
- Java中有两种处理异常的方式,分别是用throws抛出异常、用try、catch捕获异常。try-catch在Javatry-catch语
- C#关于颜色值的表示:常用的颜色值表示方式有两种,一种是10进制的RGB值表示,如(0,113,255),三个值分别表示(红,绿,蓝);一种
- Spring Boot怎么实现热部署在Spring Boot实现代码热部署是一件很简单的事情,代码的修改可以自动部署并重新热启动项目。1、引
- Java裁剪压缩PNG图片,透明背景色变黑import java.awt.Graphics2D;import java.awt.Image;
- 一、说明在下载或者看别人的代码我们常会看见,每一个文件的上方有个所属者的备注。如果要是一个一个备注那就累死了。二、设置方法File >
- 本文实例讲述了Android软键盘弹出时的界面控制方法。分享给大家供大家参考,具体如下:有时候androidactivity弹出软键盘后布局
- 字段策略 0:”忽略判断”,1:”非 NULL 判断”),2:”非空判断”问题描述:当字段策略为 0 “忽略判断” 的时候,如果实体和数据库
- 1. 包装类的介绍针对八种基本数据类型定义相应的引用类型--包装类(封装类),有了类的热点后,就可以调用类中的方法2. 基本数据类型 --&
- API:即Application programming Interface,应用编程接口。Java中封装了许许多多的API供用户使用,Sc
- 属性(Attribute)是C#程序设计中非常重要的一个技术,应用范围广泛,用法灵活多变。本文就以实例形式分析了C#中属性的应用。具体入戏:
- 本文实例讲述了C#实现中英文混合字符串截取的方法,是C#字符串操作中非常常用的一个方法。分享给大家供大家参考之用。具体方法如下:具体功能代码
- 每次新项目的时候,都要从头去找一遍数据库工具类。这里分享一个简单实用的C#的通用DbHelper工具类,支持数据连接池。连接池配置<c
- 第一次写技术博客,写一下以前写的一个双色球抽奖随机算法。原理如下:1首先初始化一个待抽奖的数组nums,数组的长度k2. 随机一个1-k之间
- 一、队列简介队列是一个有序列表,遵循“先入先出”的原则,即先存入队列的数据要先取出,后存入的数据后取出。队列有两种存储表示,顺序表示和链式表
- 本文为个人理解,不保证完全正确。官方文档中将双冒号的用法分为4类,按照我的个人理解可以分成2类来使用。官方文档官方文档中将双冒号的用法分为了
- 本文实例讲述了Android中系统自带锁WalkLock与KeyguardLock用法。分享给大家供大家参考,具体如下:WalkLock -
- 本文中我将介绍一下我自己封装的一个小的工具类库:按钮点击事件类库。作用:该类库可以防止按钮重复点击,可以判断网络状态,可以判断用户登录状态,