我希望我的程序在没有任何启动延迟的情况下连续播放特定的音频片段,因为我已经创建了一个程序,但它不能按我的尺寸工作,所以请有人帮助我解决这个
代码
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);
}
});
}
}
在MediaPlayer上只播放setLooping(true)
,而不是再次播放onCompletion
。
http://developer.android.com/reference/android/media/MediaPlayer.html#setLooping(布尔值)
将播放器设置为循环播放或非循环播放。
有了循环,它会无限期地重复,不会中断,你不必担心自己处理它。
yourStereo = MediaPlayer.create(this, R.raw.pl);
yourStereo.setLooping(true);
yourStereo.start();
使用SoundPool进行低延迟媒体播放,而不是使用MediaPlayer。
我找到了其他解决方案:
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)的持续时间。