yonge 3 anni fa
parent
commit
b1426b75be

+ 16 - 4
audio-analysis/src/main/java/com/yonge/netty/dto/UserChannelContext.java

@@ -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{