Android中SoundPool放声音

      它适合播放那些需要反复播放,但时间较短的音效。它支持同时播放多种声音,这些声音在系统开始时会加载到列表中,按照这些声音的id,我们可以调用这些音效。

1、创建一个SoundPool对象:new SoundPool(int maxStreams, int streamType, int srcQuality);

第一个参数为soundPool可以支持的声音数量,这决定了Android为其开设多大的缓冲区,第二个参数为声音类型,最后参数为声音品质,品质越高,声音效果越好,但耗费更多的系统资源。

 

2、从资源或者文件载入音频流: 

       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)  //从完整文件路径名载入 
     
  priority为优先级

 

3、播放声音play (int soundID, float leftVolume, float rightVolume, int priority, int loop, float rate)

第一个参数为id,id即为放入到soundPool中的顺序,比如现在collide.wav是第一个,因此它的id就是1。第二个和第三个参数为左右声道的音量控制。第四个参数为优先级,由于只有这一个声音,因此优先级在这里并不重要。第五个参数为是否循环播放,0为不循环,-1为循环。最后一个参数为播放比率,从0.5到2,一般为1,表示正常播放。

 

 

代码如下:

  private SoundPool soundPool;

  soundPool = new SoundPool(4, AudioManager.STREAM_MUSIC, 5);
  final int load = soundPool.load(this, R.raw.wen, 1);
  soundPool.setOnLoadCompleteListener(new OnLoadCompleteListener() {
   public void onLoadComplete(SoundPool soundPool, int sampleId, int status) {
    soundPool.play(load, 1, 1, 0, 0, 1);
   }
  });

 

注意点:

  1. SoundPool最大只能申请1M的内存空间,这就意味着我们只能用一些很短的声音片段,
        而不是用它来播放歌曲或者做游戏背景音乐。
  
2. SoundPool提供了pause和stop方法,但这些方法建议最好不要轻易使用, 因为有些时候它们可能会使你的程序莫名其妙的终止。
  
3. SoundPool的效率问题。其实SoundPool的效率在这些播放类中算是很好的了,但是有的朋友在G1中测试它还是有100ms左右的延迟,这可能会影响用户体验。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值