android游戏特效,直播中送礼物短音效实现(支持网络,本地,assets)

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

你可能感兴趣的:(框架)