精华内容
下载资源
问答
  • SoundPool

    2020-04-13 14:27:23
    1、SoundPool基本用法 2、Android SoundPool 的使用 3、Android SoundPool的简单使用 4、SoundPool的介绍和使用
    展开全文
  • soundpool

    2019-09-12 03:27:15
    可以用soundpool,用soundpool可以播一些短的反应速度要求高的声音, 比如游戏中的爆破声,而mediaplayer适合播放长点的。 1. SoundPool载入音乐文件使用了独立的线程,不会阻塞UI主线程的操作。但是这里如果音效...

    可以用soundpool,用soundpool可以播一些短的反应速度要求高的声音,
    比如游戏中的爆破声,而mediaplayer适合播放长点的。
    1. SoundPool载入音乐文件使用了独立的线程,不会阻塞UI主线程的操作。但是这里如果音效文件过大没有载入完成,我们调用play方法时可能产生严重的后果,这里Android SDK提供了一个SoundPool.OnLoadCompleteListener类来帮助我们了解媒体文件是否载入完成,我们重载 onLoadComplete(SoundPool soundPool, int sampleId, int status) 方法即可获得。
    2. 从上面的onLoadComplete方法可以看出该类有很多参数,比如类似id,是的SoundPool在load时可以处理多个媒体一次初始化并放入内存中,这里效率比MediaPlayer高了很多。
    3. SoundPool类支持同时播放多个音效,这对于游戏来说是十分必要的,而MediaPlayer类是同步执行的只能一个文件一个文件的播放。


    使用方法:
    1. 创建一个SoundPool

      public SoundPool(int maxStream, int streamType, int srcQuality)

      maxStream —— 同时播放的流的最大数量

      streamType —— 流的类型,一般为STREAM_MUSIC(具体在AudioManager类中列出)

      srcQuality —— 采样率转化质量,当前无效果,使用0作为默认值

      eg.

      SoundPool soundPool = new SoundPool(3, AudioManager.STREAM_MUSIC, 0);

      创建了一个最多支持3个流同时播放的,类型标记为音乐的SoundPool。


    2 一般把多个声音放到HashMap中去,比如
        soundPool = new SoundPool(4, AudioManager.STREAM_MUSIC, 100);
        soundPoolMap = new HashMap<Integer, Integer>();  
        soundPoolMap.put(1, soundPool.load(this, R.raw.dingdong, 1));

      soundpool的加载:
          int  load(Context context, int resId, int priority)  //从APK资源载入
      int  load(FileDescriptor fd, long offset, long length, int priority)  //从FileDescriptor对象载入
      int  load(AssetFileDescriptor afd, int priority)  //从Asset对象载入
      int  load(String path, int priority)  //从完整文件路径名载入
    最后一个参数为优先级。

    3 播放
    play(int soundID, float leftVolume, float rightVolume, int priority, int loop, float rate) ,其中leftVolume和rightVolume表示左右音量,priority表示优先级,loop表示循环次数,rate表示速率,如
    //速率最低0.5最高为2,1代表正常速度
    sp.play(soundId, 1, 1, 0, 0, 1);
      而停止则可以使用 pause(int streamID) 方法,这里的streamID和soundID均在构造SoundPool类的第一个参数中指明了总数量,而id从0开始。

    转载于:https://my.oschina.net/u/141726/blog/407872

    展开全文
  • 使用 SoundPool

    2018-09-18 18:13:46
    一个简单的sample , 用来理解及测试SoundPool的相关功能 https://blog.csdn.net/qq_28261343
  • 安卓soundpool案例

    2021-01-06 13:26:16
    安卓soundpool案例,音频播放
  • SoundPool demo

    热门讨论 2013-05-21 17:53:05
    android SoundPool使用范例
  • soundPool异常

    2020-12-09 03:01:52
    android.media.SoundPool$Builder', referenced from method com.meiqia.meiqiasdk.util.MQSoundPoolManager. 在android4.4.4的红米上会报这个错。原因是这个Builder的api level是21</p><p>该提问来源于开源项目...
  • SoundPool详解

    千次阅读 2018-10-07 11:06:57
    SoundPool工具类 public class SoundPoolUtil { private static SoundPool soundpool; private static SoundPoolUtil instance; private static Context context; public static SoundPoolUtil getI...

    SoundPool工具类

    public class SoundPoolUtil {
        private static SoundPool soundpool;
        private static SoundPoolUtil instance;
        private static Context context;
    
        public static SoundPoolUtil getInstance(Context mcontext) {
            if (instance == null) {
                instance = new SoundPoolUtil();
            }
            context = mcontext;
            if (Build.VERSION.SDK_INT > 21) {
                SoundPool.Builder builder = new SoundPool.Builder();
                //传入音频数量
                builder.setMaxStreams(20);
                //AudioAttributes是一个封装音频各种属性的方法
                AudioAttributes.Builder attrBuilder = new AudioAttributes.Builder();
                //设置音频流的合适的属性
                attrBuilder.setLegacyStreamType(AudioManager.STREAM_MUSIC);
                //加载一个AudioAttributes
                builder.setAudioAttributes(attrBuilder.build());
                soundpool = builder.build();
            } else {
    //        第一个参数为soundPool可以支持的声音数量,这决定了Android为其开设多大的缓冲区,第二个参数为声音类型,
    //        在这里标识为系统声音,除此之外还有AudioManager.STREAM_RING以及AudioManager.STREAM_MUSIC等
    //        系统会根据不同的声音为其标志不同的优先级和缓冲区,最后参数为声音品质,品质越高,声音效果越好,但耗费更多的系统资源
                soundpool = new SoundPool(20, AudioManager.STREAM_SYSTEM, 5);
            }
            //第二个参数资源文件,第三个参数为声音的优先级,当多个声音冲突而无法同时播放时,系统会优先播放优先级高的。
            soundpool.load(context, R.raw.closed, 1);
            soundpool.load(context, R.raw.closing, 1);
            soundpool.load(context, R.raw.opened, 1);
            soundpool.load(context, R.raw.opening, 1);
            soundpool.load(context, R.raw.opening2, 1);
            soundpool.load(context, R.raw.stop, 1);
            soundpool.load(context, R.raw.doerror, 1);
            soundpool.load(context, R.raw.beep, 1);
            soundpool.load(context, R.raw.bindcamera, 1);
            soundpool.load(context, R.raw.id, 1);
            soundpool.load(context, R.raw.login, 1);
            soundpool.load(context, R.raw.logined, 1);
            soundpool.load(context, R.raw.loginfail, 1);
            soundpool.load(context, R.raw.offline, 1);
            soundpool.load(context, R.raw.paizhao, 1);
            soundpool.load(context, R.raw.timeout, 1);
            soundpool.load(context, R.raw.wifi, 1);
    
    //监听加载资源完成的回调
    soundpool.setOnLoadCompleteListener(new SoundPool.OnLoadCompleteListener() {
        @Override
        public void onLoadComplete(SoundPool soundPool, int sampleId, int status) {
    
        }
    });
    
           
            return instance;
        }
    
    
        /*
         播放,你想要播放第几个就传入几
    play(资源号上面设置的顺序, 左声道音量 ,右声道音量,优先级,循环播放次数-1为一直循环,回放速度:该值在0.5-2.0之间 1为正常速度)
          */
        public void play(int pid) {
            soundpool.play(pid, 1, 1, 0, 0, 1);
        }
    }
    展开全文
  • SoundPool控件

    2016-08-18 14:32:27
    SoundPool控件

    上一篇文章之中提到了Mediaplyer来播放音频。但是Mediaplyer有很多不足之处,

    文章地址:http://blog.csdn.net/bobo8945510/article/details/52231162

    Mediaplyer的缺点:
    --》资源占用量较高,延迟时间较长。
    --》不支持多个音频同事播放

    那好吧,这一章咱们来看看SoundPool控件(
    SoundPool主要用于播放一些较短的声音片段,与Mediaplyer比较,SoundPool的优势在于CPU资源占用量低和反映延迟小。
    SoundPool提供了一个构造器,该构造器可以指定它共支持多少个声音(也就是池的大小),声音的品质等。构造器如下:

    --》SoundPool(int maxStreams,int streamType,int srcQuality):第一个参数指定支持多个声音,第二个参数指定声音的类型,第三个参数指定声音的品质!


    一旦得到了SoundPool对象之后,下面可以调用SoundPool的多个重载的load方法来加载声音。
    --》int load(Context context,int resld,int priority):从resld所对应的资源加载声音。
    --》int load(FileDescriptor fd,long offset,long length,int priority):加载fd所对应的文件的offset开始,长度为length的声音。
    --》int load(AssetFileDescriptor afd,int priority):从afd所对应的文件中加载声音。
    --》int load(String path,int priority):从path对应的文件去加载声音。


    上面4个load方法中有一个priprity参数,该参数目前没有任何作用,,Android 建议将该参数设置为1.保持和未来的兼容性。

    上面4个load方法加载声音之后,都会返回该声音的ID,以后程序就可以通过该声音的ID来播放指定声音,SoundPool提供播放指定声音的方法。


    int play(int soundID,float leftVolume,float rightVolume,int priority,int loop,float rate):该方法的第一个参数指定播放那个声音, leftVolume,float rightVolume,指定左、右的声音,priority指定播放声音的优先级,数值越大,优先级越高;loop指定是否循环。0为不循环,-1为循环;rate指定播放的比例,数值从0.5到2。  1为正常比例。


    为了更好的管理SoundPool所加载的每个声音的ID,程序一般会使用一个HashMap<Integer,Integer>对象来管理音!

    使用SoundPool播放声音步骤如下


    1、调用SoundPool的构造器创建SoundPool的对象。
    2、调用SoundPool对象的load()方法从指定资源、文件中加载声音,最好使用HashMap<>来管理所加载的声音。
    3、调用SoundPool的play方法播放声音

    代码图片如下



    实际使用SoundPool播放声音时有如下几点需要注意,SoundPool虽然可以一次性加载多个声音,但是由于内存限制,因此应该避免使用SoundPool来播放歌曲或者做游戏背景音乐,只有那些短促、密集的声音才考虑使SoundPool进行播放。

    虽然SoundPool比MediaPlayer的效率好,但也不是绝对不存在餐延迟问题,尤其那些不好的手机中。SoundPool的延迟问题会很严重。
    展开全文
  • SoundPool 的使用

    2018-09-23 22:04:27
    一个简单的sample , 用来理解及测试SoundPool的相关功能 相关博客 https://blog.csdn.net/qq_28261343/article/details/82818868
  • Android SoundPool

    2016-11-16 08:13:17
    SoundPool SoundPool 主要用于播放一些较短的声音片段,与 MediaPlayer 相比,  SoundPool 的优势在于 CPU 资源占用量低和反应延迟小。另外,  SoundPool 还支持自行设置声音的品质、音量、 播放比率等参数...
  • 音频soundpool

    2020-11-18 12:43:54
    soundPool:延迟短,且占用资源少,支持多个音频同时播放,但是只能播放短促的音频,如果过长将不能全部播放完毕。 布局文件: <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android=...
  • SoundPool实例Demo

    2018-03-11 21:53:10
    soundPool在Android5.0后Api有了改变,这个Demo就是为解决这种变化的,它可以在Android4.+----7.+系统正常播放音频文件!

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,294
精华内容 517
关键字:

soundpool