yonge 1 year ago
parent
commit
c6067a284d

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

@@ -669,12 +669,14 @@ public class UserChannelContext {
 		LOGGER.debug("------------ correctedStartTime:{}  correctedEndTime:{}------------", correctedStartTime, correctedEndTime);
 		
 		//根据完整度取部分有效信号
-		int elementSize = chunkAnalysisList.size() * hardLevel.getIntegrityRange() / 100;
+		int elementSize = chunkAnalysisList.size() * (100 - hardLevel.getTempoEffectiveRange(musicXmlNote.getDenominator(), musicXmlNote.getDuration())) / 100;
 		chunkAnalysisList = chunkAnalysisList.subList(0, elementSize);
 		if(chunkAnalysisList == null || chunkAnalysisList.size() == 0){
 			return -1;
 		}
 		
+		reduceNoise(chunkAnalysisList, EvaluationCriteriaEnum.FREQUENCY);
+		
 		ChunkAnalysis firstChunkAnalysis = chunkAnalysisList.get(0);
 		
 		LOGGER.debug("-------startTime:{}  endTime:{}------", firstChunkAnalysis.getStartTime(), chunkAnalysisList.get(chunkAnalysisList.size() - 1)
@@ -714,36 +716,23 @@ public class UserChannelContext {
 		
 		chunkAnalysisList = totalChunkAnalysisList.stream().filter(t -> Double.doubleToLongBits(t.getStartTime()) >= Double.doubleToLongBits(correctedStartTime) && Double.doubleToLongBits(t.getEndTime()) <= Double.doubleToLongBits(correctedEndTime)).collect(Collectors.toList());
 		
-		//根据完整度取部分有效信号,取中间的
-		int elementSize = chunkAnalysisList.size() * hardLevel.getIntegrityRange() / 100;
-		
-		int startIndex = (chunkAnalysisList.size() - elementSize) / 2 - 1;
-		startIndex = startIndex < 1 ? 0 : startIndex;
-		List<ChunkAnalysis> chunkList = chunkAnalysisList.subList(startIndex, elementSize + startIndex);
+		//根据完整度取部分有效信号
+		int elementSize = chunkAnalysisList.size() * (100 - hardLevel.getTempoEffectiveRange(musicXmlNote.getDenominator(), musicXmlNote.getDuration())) / 100;
+		List<ChunkAnalysis> chunkList = chunkAnalysisList.subList(0, elementSize);
 		
 		if(chunkList == null || chunkList.size() == 0){
 			return false;
 		}
 		
+		reduceNoise(chunkList, EvaluationCriteriaEnum.FREQUENCY);
+		
 		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;
-				}
-			}
-		}
-		
-		double firstChunkStartTime = firstChunkAnalysis.getStartTime();
 		
-		Optional<ChunkAnalysis> chunkAnalysisOptional = totalChunkAnalysisList.stream().filter(t -> Double.doubleToLongBits(t.getEndTime()) < Double.doubleToLongBits(firstChunkStartTime)).reduce((first, second) -> second);
+		Optional<ChunkAnalysis> chunkAnalysisOptional = totalChunkAnalysisList.stream().filter(t -> Double.doubleToLongBits(t.getEndTime()) < Double.doubleToLongBits(firstChunkAnalysis.getStartTime())).reduce((first, second) -> second);
 
 		ChunkAnalysis lastChunkAnalysis = null;
 		if (chunkAnalysisOptional.isPresent()) {
@@ -1054,6 +1043,13 @@ public class UserChannelContext {
 						chunkAnalysis.setAmplitude(0);
 						//chunkAnalysisList.set(i, chunkAnalysis);
 					}
+				}else if(EvaluationCriteriaEnum.FREQUENCY == criteria) {
+					if (chunkAnalysisList.get(i - 1).getFrequency() == -1 && chunkAnalysisList.get(i + 1).getFrequency() == -1
+							&& chunkAnalysis.getFrequency() > 0) {
+						
+						chunkAnalysis.setFrequency(-1);
+						//chunkAnalysisList.set(i, chunkAnalysis);
+					}
 				}
 			}
 		}
@@ -1061,8 +1057,4 @@ public class UserChannelContext {
 	}
 	
 	
-	public static void main(String[] args) {
-		
-	}
-	
 }