Java 编程音乐播放器A-B重复
我正在尝试为我的媒体播放器编写一个A-B重复函数。我已经尝试过一个带有条件if语句的可运行函数,当它到达B标记时,它将通过使用mediaplayer.getCurrentPosition函数保存音频流中的位置返回开始标记。我还尝试了一个while循环,该循环在应用程序冻结时也产生了不满意的结果。下面是我为这样一个方法编写的当前代码Java 编程音乐播放器A-B重复,java,android,media-player,runnable,repeat,Java,Android,Media Player,Runnable,Repeat,我正在尝试为我的媒体播放器编写一个A-B重复函数。我已经尝试过一个带有条件if语句的可运行函数,当它到达B标记时,它将通过使用mediaplayer.getCurrentPosition函数保存音频流中的位置返回开始标记。我还尝试了一个while循环,该循环在应用程序冻结时也产生了不满意的结果。下面是我为这样一个方法编写的当前代码 public void aButton() { start = mediaPlayer.getCurrentPosition(); }
public void aButton() {
start = mediaPlayer.getCurrentPosition();
}
public void bButton() {
pressedCount += 1;
System.out.println("AB Button Count: " + pressedCount);
stop = mediaPlayer.getCurrentPosition();
mediaPlayer.seekTo(start);
if(mediaPlayer.getCurrentPosition() == stop){
mediaPlayer.seekTo(start);
}
}
我最终解决了自己的问题,我决定在程序中编写一个带有处理程序的可运行函数,以适应while循环,而不必进行异常处理。我为音频流中的a和b拼接位置设置计数器。我使用计数器aCount+=1确保两个按钮只按下一次;和bCount+=1。如果两者都被按下,程序将把控制权传递给Runnable函数,该函数每100毫秒检查一次getCurrentPosition,如果流处于或超过在B按钮方法开始时定义的停止位置,它将查找到在按钮方法开始时定义的开始位置。然后我设置了恢复正常播放的方法,如果其中一个按钮被按下不止一次 下面是显示我对代码所做更改的代码:
public void aButton() {
start = mediaPlayer.getCurrentPosition();
if (aCount > 1 && bCount == 1) {
aCount = 0;
bCount = 0;
}
aCount += 1;
}
public void bButton() {
stop = mediaPlayer.getCurrentPosition();
if (bCount > 1 && aCount >= 1) {
bCount = 0;
aCount = 0;
}
if (aCount != 1) {
Toast.makeText(this, "Please press A first", Toast.LENGTH_SHORT).show();
bCount = 0;
}
if(bCount == 0 && aCount == 1){
bCount += 1;
}
System.out.println("AB Button Count: " + bCount);
/*mediaPlayer.seekTo(start);*/
abLoopHandler.removeCallbacks(abLoop);
abLoopHandler.postDelayed(abLoop, 100);
}
private Runnable abLoop = new Runnable() {
@Override
public void run() {
if (aCount == 1 && bCount == 1) {
int currPos = mediaPlayer.getCurrentPosition();
if (currPos >= stop) {
mediaPlayer.seekTo(start);
}
abLoopHandler.postDelayed(this, 100);
}
}
};
希望这能帮助人们解决同样的问题 你想在a的声音到达B时重复a的声音吗?是的。然后,当我按下a或b按钮时,我希望它清除停止和开始位置,并从音频流中的当前位置恢复播放。