您可以使用下面的代码:
bt.setOnTouchListener(this);
@Override
public boolean onTouch(View arg0, MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
System.out.println("touch");
mp.setLooping(true);
mp.start();
break;
case MotionEvent.ACTION_UP:
System.out.println("up");
mp.pause();
break;
}
return true;
}
我做了一些研究,发现Android的Mediaplayer
有弹无间断的声音,而循环的问题..
看到这个:Gapless Playback with android MediaPlayer
我也发现几个解决方案:
- 使用OGG格式的声音文件(https://en.wikipedia.org/wiki/.ogg)
- 可以使用的Soundpool它有一个循环和缓存设备的媒体播放(https://developer.android.com/reference/android/media/SoundPool.html)
你也可以使用以下类别:看看它是否工作..
public class LoopMediaPlayer {
public static final String TAG = LoopMediaPlayer.class.getSimpleName();
private Context mContext = null;
private int mResId = 0;
private int mCounter = 1;
private MediaPlayer mCurrentPlayer = null;
private MediaPlayer mNextPlayer = null;
public static LoopMediaPlayer create(Context context, int resId) {
return new LoopMediaPlayer(context, resId);
}
private LoopMediaPlayer(Context context, int resId) {
mContext = context;
mResId = resId;
mCurrentPlayer = MediaPlayer.create(mContext, mResId);
mCurrentPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer mediaPlayer) {
mCurrentPlayer.start();
}
});
createNextMediaPlayer();
}
private void createNextMediaPlayer() {
mNextPlayer = MediaPlayer.create(mContext, mResId);
mCurrentPlayer.setNextMediaPlayer(mNextPlayer);
mCurrentPlayer.setOnCompletionListener(onCompletionListener);
}
private MediaPlayer.OnCompletionListener onCompletionListener = new MediaPlayer.OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mediaPlayer) {
mediaPlayer.release();
mCurrentPlayer = mNextPlayer;
createNextMediaPlayer();
Log.d(TAG, String.format("Loop #%d", ++mCounter));
}
};
}
t Ø使用它只需调用mp.setLooping(true);
感谢您的回复,循环工作,但我的声源是1秒,我举行1秒后,它有一个约0.1秒循环声音的间隔。如何将间隔时间设置为0? –
所以循环之间有一个GAP,你想把GAP时间设置为0 .. – rafsanahmad007
是的,差距时间 –