编程音乐播放器A-B重复

问题描述 投票:0回答:1

我正在尝试为我的媒体播放器编写A-B重复功能。我已经尝试了一个具有条件if语句的Runnable函数,当它到达B标记时,它将通过使用mediaplayer.getCurrentPosition()函数保存音频流中的位置而返回到开始标记。我也尝试了一个while循环,在应用程序冻结时也产生了令人不满意的结果。这是我对此方法的当前代码。

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);
        }
    }
java android media-player runnable repeat
1个回答
0
投票

我最终解决了自己的问题我决定在程序中编写一个带有处理程序的runnable函数,以适应while循环而不必经历异常处理。我为音频流中的a和b拼接位置设置了计数器。我确保使用计数器aCount + = 1仅按下了两个按钮;和bCount + = 1.如果他们都被按下,程序会将控制传递给Runnable函数,该函数每隔100毫秒检查一次getCurrentPosition(),如果流是在停止位置或超过停止位置(在B按钮的开头定义)方法)它将寻找()在A按钮方法开始时定义的起始位置。然后,如果多次按下任一按钮,我设置恢复正​​常播放的方法。

以下代码显示了我对代码所做的更改:

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);
            }
        }
    };

希望这可以帮助人们解决同样的问题!

© www.soinside.com 2019 - 2024. All rights reserved.