SoundPlayer
因为公司业务需要完成了一套短音效的处理框架.SoundPlayer是基于androidSoundPool进行一次上层的封装.封装的目的是简洁的调用,屏蔽google的Sndpool的bug,避免二次书写代码引起的问题风险.
我对于一个成熟框架的理解是得具有稳定的性能,简洁的调用,和高度的可配置性.所以我在考虑这套框架的设计,尽可能地往这些方面努力,如果有不完善的地方,希望读者能积极的issue我一下,我会在最快的时间内进行相应的修复和完善.Soundplayer实现了动态的音频资源回收管理,以及自动化的生命周期管理,支持本地文件,网络路径,本地assets播放.不说那么多了下面介绍下如何使用.
gradle集成配置
根节点的 gradle: maven{url'https://www.jitpack.io'}
app下 gradle:implementation 'com.github.cfw1992:SoundPlayer:1.0.0'
1.注册权限,6.0系统下文件相关权限记得申请
2.初始化player对象
soundPlayer=new SmallSoundPlayer.SoundPlayerBuilder(this).
setMaxWaitMusic(100). //设置最大的音乐播放队列,当超过这个限制后,直接丢弃
setMaxMusicLoadNum(10). //设置最大的音乐存储数
setLifeCycleModel(LifeMode.AUTO). // auto是自动化的生命周期管理,self是自己处理生命周期
setiFileDownLoader(new IFileDownLoader() {//您可以自定义下载管理,但需要实现相关接口
@Override
public void download(String s, String s1, FileListner fileListner) {
fileListner.success(s);
}
}).setBasePath("")//设置网络文件缓存路径
.build();
soundPlayer.start(); //监听队列,去取出队列数据播放
音视频的处理都是要严格的对生命周期进行处理的,所以这块是不变的,封装在框架中处理,可以解决重复代码的问题,也能防止因为软件人员疏忽对生命周期的处理从而引发风险;还有另一点在android开发中,你可以将soundplayer写在逻辑类里面而不用去在activiity里面持有Soundplayer对象,或者通过逻辑类去回调给activiy,降低了耦合性和复杂性,开发人员用心关注自己的业务部分就好。SoundPlayer也可以定义手动管理模式,用于一些不需要按照生命周期实现的业务场景;
您可以自定义下载处理,soundplayer库里面也有已经默认实现的,如果不配置的话,缓存管理已经实现好了,可以正常使用
3.播放音频
soundPlayer.play(new SoundResource("http://test.com/sound.mp3"));//播放网路路径
soundPlayer.play(new SoundResource("android路径/sound.map3")); //播放本地路径
soundPlayer.play(new SoundResource(new File("文件路径"))); //播放本地文件
soundPlayer.play(new SoundResource(getResources(),"sound.mp3"));//播放assets文件音乐
PlayConfig playConfig=PlayConfig.defaultConfig(this);
playConfig.setSoundListner(new SoundListner() {
@Override
public void state(int i) {
if(i==PLAYING){
//写上自己的逻辑,回调在主线程,可以处理UI
}
}
});
soundPlayer.play(new SoundResource("http://test.com/sound.mp3"),playConfig);//需要音频和逻辑代码同步的时候可以调用
PlayConfig配置音频播放相关的一些属性,也可自行配置,最后麻烦广大的开发同胞能去github给颗star
github地址: https://github.com/cfw1992/SoundPlayer