我希望我的程序能够连续播放特定的音频剪辑而没有任何启动延迟,因为我创建了一个程序,但它不能正常工作,所以有人请帮我解决这个问题
码
import android.app.Activity;
import android.media.MediaPlayer;
import android.media.MediaPlayer.OnCompletionListener;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
public class MainActivity extends Activity implements OnClickListener {
LocalService mService;
boolean mBound = false;
Button btn1;
Button btn2;
MediaPlayer yourStereo;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btn1=(Button)findViewById(R.id.a_button);
btn2=(Button)findViewById(R.id.b_button);
btn1.setOnClickListener(this);
}
@Override
public void onClick(View arg0) {
// play music here
btn1.setVisibility(Button.GONE);
btn2.setVisibility(Button.VISIBLE);
// TODO Auto-generated method stub
yourStereo = MediaPlayer.create(this, R.raw.pl);
yourStereo.start();
yourStereo.setOnCompletionListener(new OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mp) {
// TODO Auto-generated method stub
yourStereo.start();
}
});
// pause music here
btn2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
yourStereo.stop();
btn2.setVisibility(Button.GONE);
btn1.setVisibility(Button.VISIBLE);
}
});
}
}
答案 0 :(得分:2)
仅在MediaPlayer上setLooping(true)
而不是再次播放onCompletion
。
http://developer.android.com/reference/android/media/MediaPlayer.html#setLooping(boolean)
将播放器设置为循环或非循环。
循环播放它会无限期地无限重复,你不必担心自己处理它。
yourStereo = MediaPlayer.create(this, R.raw.pl);
yourStereo.setLooping(true);
yourStereo.start();
答案 1 :(得分:1)
使用SoundPool进行低延迟媒体播放,而不是使用MediaPlayer。
答案 2 :(得分:0)
我找到了其他解决方案:
afd = assetManager.openFd(nameSound);
player.setDataSource(afd.getFileDescriptor(),
afd.getStartOffset(), afd.getLength() - 1000);
afd.close();
player.prepare();
player.setLooping(true);
player.start();
您只需要将持续时间定义为1000(0.1ms),而不是总持续时间。