SoundPool
玩游戏,或者有信息来的时候手机发出的铃声都是简短的,如果还是用MediaPlayer播放的话,会消耗很多的内存。像游戏的话会有很多声音,有的贯穿始终,不要用MediaPlayer。Android系统中用SoundPool来播放简短的音频、铃声,一般不会超过1M。
铃声资源不能压缩的放在res文件夹下 新建一个文件夹。 提示音一般放在新建的raw中不能播放大音乐
API21之前步骤:
SoundPool对象直接创建
pool = new SoundPool(2, AudioManager.STREAM_MUSIC,0);
API21之后步骤:
先用SoundPool.Builder创建出一个builder
然后setMaxStreams()设置可以同时播放的同时流的最大数量。音效数
创建AudioAttributes.Builder的对象,
AudioAttributes.Builder audiobuilder = new AudioAttributes.Builder();
audiobuilder.setLegacyStreamType(AudioManager.STREAM_MUSIC);
播放时先调用load之后play
pool.load(getApplicationContext(),R.raw.outgoing,1)
public class MainActivity extends AppCompatActivity implements View.OnClickListener{
private Button mBtnSound;
private int soundId;
private SoundPool pool ;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mBtnSound = (Button) findViewById(R.id.button_sound);
soundId = initSoundPool();
mBtnSound.setOnClickListener(this);
}
private int initSoundPool(){
if (Build.VERSION.SDK_INT>=21){
SoundPool.Builder builder = new SoundPool.Builder();
builder.setMaxStreams(2);
AudioAttributes.Builder audio = new AudioAttributes.Builder();
audio.setLegacyStreamType(AudioManager.STREAM_MUSIC);
builder.setAudioAttributes(audio.build());
pool = builder.build();
}else {
pool = new SoundPool(2, AudioManager.STREAM_MUSIC,0);
}
return pool.load(getApplicationContext(),R.raw.outgoing,1);
}
@Override
public void onClick(View v) {
switch (v.getId()){
case R.id.button_sound:
pool.play(soundId,1,1,0,-1,1);
break;
}
}
}