android 的soundpool播放声音

在Android开发中我们经常使用MediaPlayer来播放音频文件,但是MediaPlayer存在一些不足,例如:资源占用量较高、延迟时间较长、不支持多个音频同时播放等。这些缺点决定了MediaPlayer在某些场合的使用情况不会很理想,例如在对时间精准度要求相对较高的游戏开发中。

   在游戏开发中我们经常需要播放一些游戏音效(比如:子弹爆炸,物体撞击等),这些音效的共同特点是短促、密集、延迟程度小。在这样的场景下,我们可以使用SoundPool代替MediaPlayer来播放这些音效。

SoundPool —— 适合短促且对反应速度比较高的情况(游戏音效或按键声等)一个SoundPool能同时管理多个音频,所以可以通过多次调用load函数来记载,如果记载成功将返回一个非0soundID ,用于播放时指定特定的音频。

1> 往项目的res/raw目录中放入音效文件。。例R.raw.alter,是我放入的音频

2> 新建SoundPool对象,然后调用SoundPool.load()加载音效,调用SoundPool.play()方法播放指定音效文件

 

private SoundPool soundPool

        //指定声音池的最大音频流数目为1,声音品质为0

        soundPool=new SoundPool(1, AudioManager.STREAM_SYSTEM,0);

        //通过指定的路径加载   其中的第三个参数目前没有效果,建议设置为1返回当前音频在音频池的id

      final int id=soundPool.load(this, R.raw.alter, 1);

     

        Button sound=(Button)findViewById(R.id.soundbutton);

        sound.setOnClickListener(new OnClickListener() {

       

        @Override

        public void onClick(View v) {

           // TODO Auto-generated method stub

           /*

             * 播放音频,

             * 第一个参数为声音池中音频的id

             * 第二个参数为左声道音量;

             * 第三个参数为右声道音量;

             * 第四个参数为优先级;

             * 第五个参数为循环次数,0不循环,-1循环;

             * 第六个参数为速率,速率最低0.5最高为21代表正常速度

             */

           soundPool.play(id, 1, 1, 0, 0,1);

        }

      });

你可能感兴趣的:(1.android)