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

时间:2019-02-23 03:24:35

标签: java android media-player runnable repeat

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

enter code here
%%time
df=dd.read_csv('DX_Code.csv')
print(df)
def grouping(dataframe_name,col_name,uni_col_name):
    df1=pd.DataFrame(columns=dataframe_name.columns)    
    g=dataframe_name[col_name].unique()#.compute()
    for i in (g):
        temp=dataframe_name[dataframe_name[col_name]==i]#.compute()
        df1=df1.append(temp.drop_duplicates([uni_col_name],keep='first'))
    return df1
#####################
a = delayed(grouping)(df.compute(),'Study_Visit_ID','DX_CODE').compute()
a

1 个答案:

答案 0 :(得分:0)

我最终解决了自己的问题,我决定在程序中编写一个带有处理程序的可运行函数,以适应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);
            }
        }
    };

希望这对遇到同样问题的人有帮助!