|
@@ -708,10 +708,22 @@ public class UserChannelContext {
|
|
|
if (musicXmlNote.getFrequency() == -1) {// 休止符
|
|
|
return chunkList.stream().filter(t -> t.getFrequency() > MIN_FREQUECY).count() <= 1;
|
|
|
}
|
|
|
-
|
|
|
+
|
|
|
ChunkAnalysis firstChunkAnalysis = chunkAnalysisList.get(0);
|
|
|
+ //取出前面忽略的块
|
|
|
+ List<ChunkAnalysis> ignoreHeaderList = chunkAnalysisList.subList(0, startIndex);
|
|
|
+ if(ignoreHeaderList != null && ignoreHeaderList.size() > 0){
|
|
|
+ for(ChunkAnalysis ca : ignoreHeaderList){
|
|
|
+ if(ca.getFrequency() < MIN_FREQUECY){
|
|
|
+ firstChunkAnalysis.setFrequency(-1);
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
|
|
|
- Optional<ChunkAnalysis> chunkAnalysisOptional = totalChunkAnalysisList.stream().filter(t -> Double.doubleToLongBits(t.getEndTime()) < Double.doubleToLongBits(firstChunkAnalysis.getStartTime())).findFirst();
|
|
|
+ double firstChunkStartTime = firstChunkAnalysis.getStartTime();
|
|
|
+
|
|
|
+ Optional<ChunkAnalysis> chunkAnalysisOptional = totalChunkAnalysisList.stream().filter(t -> Double.doubleToLongBits(t.getEndTime()) < Double.doubleToLongBits(firstChunkStartTime)).findFirst();
|
|
|
|
|
|
ChunkAnalysis lastChunkAnalysis = null;
|
|
|
if (chunkAnalysisOptional.isPresent()) {
|
|
@@ -773,7 +785,7 @@ public class UserChannelContext {
|
|
|
|
|
|
if (maxTimes / totalTimes < hardLevel.getIntegrityRange()) {
|
|
|
tempo = false;
|
|
|
- LOGGER.debug("节奏错误原因:不是同一个音");
|
|
|
+ LOGGER.debug("节奏错误原因:信号分堆后的最大数量不足指定的完成比例");
|
|
|
}
|
|
|
|
|
|
/**
|
|
@@ -817,7 +829,7 @@ public class UserChannelContext {
|
|
|
|
|
|
if (tempo) {
|
|
|
// 判断进入时间点
|
|
|
- if(firstPeakIndex * 100 /chunkAnalysisList.size() > hardLevel.getTempoEffectiveRange(musicXmlNote.getDenominator())){
|
|
|
+ if(firstPeakIndex * 100 /chunkList.size() > hardLevel.getTempoEffectiveRange(musicXmlNote.getDenominator())){
|
|
|
tempo = false;
|
|
|
LOGGER.debug("节奏错误原因:进入时间点太晚");
|
|
|
}else{
|