单击 14 次后 Mediaplayer 停止工作

Mediaplayer stops working after clicking 14 times

我正在开发点击按钮时发出滴答声的应用程序。但点击 14 次后声音停止。代码在这里:

dTextVeiw.setOnClickListener(new View.onClickListener() {
  @Override
  public void onClick(View view){

    MediaPlayer mediaPlayer = MediaPlayer.create(getApplicationContext(), R.raw.tic_sound);
    mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
    mediaPlayer.start();
  }
});

无需每次点击按钮都初始化

private MediaPlayer _mediaPlayer;

@Override
protected void onResume()
{
    super.onResume();
    _mediaPlayer = MediaPlayer.create(getApplicationContext(), R.raw.tic_sound);
    _mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
}

@Override
protected void onCreate(@Nullable Bundle savedInstanceState)
{
    //...

    dTextVeiw.setOnClickListener(new View.onClickListener() {
        @Override
        public void onClick(View view) {
            _mediaPlayer.start();
        } 
    });
}

对于短音,我建议使用 SoundPool

Class SoundPlayer(){

private final static float leftVol = 1.0f;
private final static float rightVol = 1.0f;
private final static float rate  = 1.0f;
private final static int loop = 0;
private  int priority  = 1;
private int audioId = = -1;

AudioAttributes attributes = new AudioAttributes.Builder()
    .setUsage(AudioAttributes.USAGE_GAME)
    .setContentType(AudioAttributes.CONTENT_TYPE_SONIFICATION)
    .build();

 SoundPool soundPool= new SoundPool.Builder()
.setMaxStreams(2)
.setAudioAttributes(attributes)
.build();

public void loadSounds(Context context){
audioId = soundPool.load(context, R.raw.tic_sound, priority);
}

  public void playAudio() {  
   soundPool.play(audioId, leftVol, rightVol, priority, loop, rate) ;    
 }
} 

然后像这样使用它

private SoundPlayer soundPlayer;

 .... 
 ....
onCreate ...{
soundPlayer = SoundPlayer();
soundPLayer.loadSounds(this);


dTextVeiw.setOnClickListener(new View.onClickListener() {
@Override
public void onClick(View view){

 soundPLayer.playAudio();
}