yonge 3 年之前
父節點
當前提交
d67d7a3fe9
共有 1 個文件被更改,包括 19 次插入16 次删除
  1. 19 16
      audio-analysis/src/main/java/com/yonge/netty/dto/UserChannelContext.java

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

@@ -354,12 +354,10 @@ public class UserChannelContext {
 				delayProcessed = true;
 				//计算延迟偏移值
 				//playTime = musicXmlNote.getTimeStamp() + durationTime;
-				dynamicOffset = chunkAnalysis.getStartTime();
+				dynamicOffset = chunkAnalysis.getStartTime() - musicXmlNote.getTimeStamp();
 			}
 			
-			musicXmlNote.setTimeStamp(musicXmlNote.getTimeStamp() + dynamicOffset);
-			
-			if (playTime >= (musicXmlNote.getDuration() + musicXmlNote.getTimeStamp())) {
+			if (playTime >= (musicXmlNote.getDuration() + musicXmlNote.getTimeStamp() + dynamicOffset)) {
 
 				if (musicXmlNote.getDontEvaluating()) {
 					noteAnalysis.setIgnore(true);
@@ -489,8 +487,8 @@ public class UserChannelContext {
 		
 		double floatingRange = musicXmlNote.getDuration() * hardLevel.getTempoEffectiveRange(musicXmlNote.getDenominator()) / 100;
 		
-		double endTime = musicXmlNote.getTimeStamp() + floatingRange;
-		double startTime = musicXmlNote.getTimeStamp() - floatingRange;
+		double endTime = musicXmlNote.getTimeStamp() + dynamicOffset + floatingRange;
+		double startTime = musicXmlNote.getTimeStamp() + dynamicOffset - floatingRange;
 		
 		List<ChunkAnalysis> chunkAnalysisList = totalChunkAnalysisList.stream().filter(t -> Double.doubleToLongBits(t.getStartTime()) >= Double.doubleToLongBits(startTime) && Double.doubleToLongBits(t.getEndTime()) <= Double.doubleToLongBits(endTime)).collect(Collectors.toList());
 		
@@ -596,8 +594,8 @@ public class UserChannelContext {
 		
 		double floatingRange = musicXmlNote.getDuration() * hardLevel.getTempoEffectiveRange(musicXmlNote.getDenominator()) / 100;
 		
-		double endTime = musicXmlNote.getTimeStamp() + floatingRange;
-		double startTime = musicXmlNote.getTimeStamp() - floatingRange;
+		double endTime = musicXmlNote.getTimeStamp() + dynamicOffset + floatingRange;
+		double startTime = musicXmlNote.getTimeStamp() + dynamicOffset - floatingRange;
 		
 		List<ChunkAnalysis> chunkAnalysisList = totalChunkAnalysisList.stream().filter(t -> Double.doubleToLongBits(t.getStartTime()) >= Double.doubleToLongBits(startTime) && Double.doubleToLongBits(t.getEndTime()) <= Double.doubleToLongBits(endTime)).collect(Collectors.toList());
 		
@@ -605,7 +603,10 @@ public class UserChannelContext {
 		double correctedEndTime = correctedStartTime + musicXmlNote.getDuration();
 		
 		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;
+		chunkAnalysisList = chunkAnalysisList.subList(0, elementSize);
 		if(chunkAnalysisList == null || chunkAnalysisList.size() == 0){
 			return -1;
 		}
@@ -639,8 +640,8 @@ public class UserChannelContext {
 		
 		double floatingRange = musicXmlNote.getDuration() * hardLevel.getTempoEffectiveRange(musicXmlNote.getDenominator()) / 100;
 		
-		double endTime = musicXmlNote.getTimeStamp() + floatingRange;
-		double startTime = musicXmlNote.getTimeStamp() - floatingRange;
+		double endTime = musicXmlNote.getTimeStamp() + dynamicOffset + floatingRange;
+		double startTime = musicXmlNote.getTimeStamp() + dynamicOffset - floatingRange;
 		
 		List<ChunkAnalysis> chunkAnalysisList = totalChunkAnalysisList.stream().filter(t -> Double.doubleToLongBits(t.getStartTime()) >= Double.doubleToLongBits(startTime) && Double.doubleToLongBits(t.getEndTime()) <= Double.doubleToLongBits(endTime)).collect(Collectors.toList());
 		
@@ -649,6 +650,10 @@ 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;
+		chunkAnalysisList = chunkAnalysisList.subList(0, elementSize);
+		
 		if(chunkAnalysisList == null || chunkAnalysisList.size() == 0){
 			return false;
 		}
@@ -672,8 +677,6 @@ public class UserChannelContext {
 		
 		List<ChunkAnalysis> chunkList = new ArrayList<ChunkAnalysis>(chunkAnalysisList);
 		
-		//根据完整度取部分有效信号
-		
 		if(chunkList.size() == 0){
 			return false;
 		}
@@ -735,8 +738,8 @@ public class UserChannelContext {
 
 		double floatingRange = musicXmlNote.getDuration() * hardLevel.getTempoEffectiveRange(musicXmlNote.getDenominator()) / 100;
 		
-		double endTime = musicXmlNote.getTimeStamp() + floatingRange;
-		double startTime = musicXmlNote.getTimeStamp() - floatingRange;
+		double endTime = musicXmlNote.getTimeStamp() + dynamicOffset + floatingRange;
+		double startTime = musicXmlNote.getTimeStamp() + dynamicOffset - floatingRange;
 		
 		List<ChunkAnalysis> chunkAnalysisList = totalChunkAnalysisList.stream().filter(t -> Double.doubleToLongBits(t.getStartTime()) >= Double.doubleToLongBits(startTime) && Double.doubleToLongBits(t.getEndTime()) <= Double.doubleToLongBits(endTime)).collect(Collectors.toList());
 		
@@ -825,7 +828,7 @@ public class UserChannelContext {
 			}
 		}
 
-		return musicXmlNote.getTimeStamp();
+		return musicXmlNote.getTimeStamp() + dynamicOffset;
 	}
 	
 	public static void main(String[] args) {