SoundPool与MediaPlayer的简介及使用

Android 提供了MediaPlayer和SoundPool两个API类来播放音频。

使用场景:如果应用程序经常需要播放固定的,密集的,短促的音效。这时需要使用SoundPool。SoundPool的 优势在于CPU的占用率低和反应延迟小。此外SoundPool还可以支持自行设置声音的品质、音量、播 放比率等参数。

其他的主要应用MediaPlayer于播放,

MediaPlayer局限:

①资源占用率较高、延迟时间较长。

②不支持多个音频同时播放。

SoundPool播放声音时需要注意:

①可以一次加载多个声音,但一定要注意内存限制。

②SoundPool比MediaPlayer的效果好,但也不是绝对不存在的延迟问题,尤其在那些性能不太好的手 机,SoundPool的延迟问题会更严重。

一、SoundPool的使用简介:

SoundPool播放声音的步骤如下。

①调用SoundPool的构造器创建SoundPool的对象。

②调用SoundPool对象的load()方法从指定资源、文件中加载声音。最好使用HashMap<Integer,Integer>来管理 所加载的声音。

③调用SoundPool的play方法播放声音。


[java]  view plain copy
  1. public class SoundTest extends Activity implements OnClickListener{

  2. private Button button1,button2,button3;
    //定义一个SoundPool
    private SoundPool soundpool;
    private HashMap<Integer,Integer> soundMaps = new HashMap<Integer,Integer>();
    @Override
    public void onCreate(Bundle saveInstanceState)
    {
    super.onCreate(saveInstanceState);
    setContentView(R.layout.main);
    button1 = (Button)findViewById(R.id.button1);
    button2 = (Button)findViewById(R.id.button2);
    button3 = (Button)findViewById(R.id.button3);
    //设置最多可以容纳10个音频流(即声音源)
    soundpool = new SoundPool(10, AudioManager.STREAM, 5);
    //load方法加载指定音频文件,并返回所有加载的音频为ID
    //此处使用HashMap来管理这些音频流

    soundMaps.put(1, soundpool.load(this, R.raw.soundMusic1, 1));
    soundMaps.put(2, soundpool.load(this, R.raw.soundMusic2, 1));
    soundMaps.put(3, soundpool.load(this, R.raw.soundMusic3, 1));
    button1.setOnClickListener(this);
    button2.setOnClickListener(this);
    button3.setOnClickListener(this);
    }

  3. @Override
  4. public void onClick(View view){
  5. // TODO Auto-generated method stub
  6. //判断哪个按钮单击
  7. switch(view.getId()){
  8. case R.id.button1:
  9. soundpool.play(soundMaps.get(1),1,1,0,0,1);
  10. break;
  11. case R.id.button2:
  12. soundpool.play(soundMaps.get(2),1,1,0,0,1);
  13. break;
  14. case R.id.button3:
  15. soundpool.play(soundMaps.get(3),1,1,0,0,1);
  16. break;
  17. }
  18. }
  19. }

SoundPool提供一个构造器,该构造器的可以指定她总共支持多少个声音文件、声音品质等,

SoundPool(int maxStream, int streamType,int srcQuality):maxStream指定支持声音文件的数量, streamType指定声音文件的类型,srcQuality指定声音的品质。

     得到soundPool对象之后,接下来就可以调用SoundPoold的4个重载的load方法来加载声音文件,如下:int load(Context context, int resId, int priority)、int load(FileDescriptor fd, long offset, long length, int priority)、int load(AssetFileDescriptor afd, int priority)、load(String path, int priority)。

加载声音文件之后,都会返回该声音的ID,以后通过该声音的ID来播放指定声音,SoundPool提供播放声音的方法如下:int play(int soundId, float leftVolume,float rightVolume, int priority,int loop,float rate);

二、MediaPlayer的使用简介:


   





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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值