我正在尝试为媒体播放器编写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
答案 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);
}
}
};
希望这对遇到同样问题的人有帮助!