| 
														
															@@ -2,6 +2,7 @@ package com.yonge.netty.dto; 
														 | 
													
												
											
												
													
														| 
														 | 
														
															  
														 | 
														
														 | 
														
															  
														 | 
													
												
											
												
													
														| 
														 | 
														
															 import java.math.BigDecimal; 
														 | 
														
														 | 
														
															 import java.math.BigDecimal; 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 import java.util.ArrayList; 
														 | 
														
														 | 
														
															 import java.util.ArrayList; 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+import java.util.Arrays; 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 import java.util.Comparator; 
														 | 
														
														 | 
														
															 import java.util.Comparator; 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 import java.util.HashMap; 
														 | 
														
														 | 
														
															 import java.util.HashMap; 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 import java.util.List; 
														 | 
														
														 | 
														
															 import java.util.List; 
														 | 
													
												
											
										
											
												
													
														 | 
														
															@@ -50,6 +51,8 @@ public class UserChannelContext { 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 	 
														 | 
														
														 | 
														
															 	 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 	private float offsetMS; 
														 | 
														
														 | 
														
															 	private float offsetMS; 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 	 
														 | 
														
														 | 
														
															 	 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+	private float micDelayMS; 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+	 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 	private double dynamicOffset; 
														 | 
														
														 | 
														
															 	private double dynamicOffset; 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 	 
														 | 
														
														 | 
														
															 	 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 	private String platform; 
														 | 
														
														 | 
														
															 	private String platform; 
														 | 
													
												
											
										
											
												
													
														 | 
														
															@@ -161,6 +164,14 @@ public class UserChannelContext { 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 		this.offsetMS = offsetMS; 
														 | 
														
														 | 
														
															 		this.offsetMS = offsetMS; 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 	} 
														 | 
														
														 | 
														
															 	} 
														 | 
													
												
											
												
													
														| 
														 | 
														
															  
														 | 
														
														 | 
														
															  
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+	public float getMicDelayMS() { 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+		return micDelayMS; 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+	} 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+ 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+	public void setMicDelayMS(float micDelayMS) { 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+		this.micDelayMS = micDelayMS; 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+	} 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+ 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 	public float getBeatDuration() { 
														 | 
														
														 | 
														
															 	public float getBeatDuration() { 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 		return beatDuration; 
														 | 
														
														 | 
														
															 		return beatDuration; 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 	} 
														 | 
														
														 | 
														
															 	} 
														 | 
													
												
											
										
											
												
													
														 | 
														
															@@ -377,16 +388,14 @@ public class UserChannelContext { 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 			} 
														 | 
														
														 | 
														
															 			} 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 			totalChunkAnalysisList.add(chunkAnalysis); 
														 | 
														
														 | 
														
															 			totalChunkAnalysisList.add(chunkAnalysis); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 			 
														 | 
														
														 | 
														
															 			 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-			boolean flag = false; //是否收到有效信号 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-			if(!StringUtils.equalsIgnoreCase(evaluationCriteria, EvaluationCriteriaEnum.FREQUENCY.getCode())){ 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-				flag = chunkAnalysis.getAmplitude() > hardLevel.getAmplitudeThreshold(); 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+			//是否收到有效信号 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+			/*if(!StringUtils.equalsIgnoreCase(evaluationCriteria, EvaluationCriteriaEnum.FREQUENCY.getCode())){ 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+				delayProcessed = chunkAnalysis.getAmplitude() > hardLevel.getAmplitudeThreshold(); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 			}else{ 
														 | 
														
														 | 
														
															 			}else{ 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-				flag = chunkAnalysis.getFrequency() > MIN_FREQUECY && chunkAnalysis.getFrequency() < MAX_FREQUECY; 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+				delayProcessed = chunkAnalysis.getFrequency() > MIN_FREQUECY && chunkAnalysis.getFrequency() < MAX_FREQUECY; 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 			} 
														 | 
														
														 | 
														
															 			} 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 			 
														 | 
														
														 | 
														
															 			 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-			if(delayProcessed == false && flag){ 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-				 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-				delayProcessed = true; 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+			if(delayProcessed){ 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 				 
														 | 
														
														 | 
														
															 				 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 				//计算延迟偏移值 
														 | 
														
														 | 
														
															 				//计算延迟偏移值 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 				//playTime = musicXmlNote.getTimeStamp() + durationTime; 
														 | 
														
														 | 
														
															 				//playTime = musicXmlNote.getTimeStamp() + durationTime; 
														 | 
													
												
											
										
											
												
													
														 | 
														
															@@ -394,9 +403,11 @@ public class UserChannelContext { 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 				if(100 * dynamicOffset / musicXmlNote.getDuration() > (100 - hardLevel.getTempoEffectiveRange(musicXmlNote.getDenominator(), musicXmlNote.getDuration()))){ 
														 | 
														
														 | 
														
															 				if(100 * dynamicOffset / musicXmlNote.getDuration() > (100 - hardLevel.getTempoEffectiveRange(musicXmlNote.getDenominator(), musicXmlNote.getDuration()))){ 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 					dynamicOffset = 0; 
														 | 
														
														 | 
														
															 					dynamicOffset = 0; 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 				} 
														 | 
														
														 | 
														
															 				} 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-			} 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+			}*/ 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 			 
														 | 
														
														 | 
														
															 			 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-			if (playTime >= (musicXmlNote.getDuration() + musicXmlNote.getTimeStamp() + dynamicOffset)) { 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+			if (playTime >= (musicXmlNote.getDuration() + micDelayMS + musicXmlNote.getTimeStamp() + dynamicOffset)) { 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+				 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+				musicXmlNote.setTimeStamp(musicXmlNote.getTimeStamp() + micDelayMS); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															  
														 | 
														
														 | 
														
															  
														 | 
													
												
											
												
													
														| 
														 | 
														
															 				if (musicXmlNote.getDontEvaluating()) { 
														 | 
														
														 | 
														
															 				if (musicXmlNote.getDontEvaluating()) { 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 					noteAnalysis.setIgnore(true); 
														 | 
														
														 | 
														
															 					noteAnalysis.setIgnore(true); 
														 | 
													
												
											
										
											
												
													
														 | 
														
															@@ -732,7 +743,7 @@ public class UserChannelContext { 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 		 
														 | 
														
														 | 
														
															 		 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 		double firstChunkStartTime = firstChunkAnalysis.getStartTime(); 
														 | 
														
														 | 
														
															 		double firstChunkStartTime = firstChunkAnalysis.getStartTime(); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 		 
														 | 
														
														 | 
														
															 		 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-		Optional<ChunkAnalysis> chunkAnalysisOptional = totalChunkAnalysisList.stream().filter(t -> Double.doubleToLongBits(t.getEndTime()) < Double.doubleToLongBits(firstChunkStartTime)).findFirst(); 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+		Optional<ChunkAnalysis> chunkAnalysisOptional = totalChunkAnalysisList.stream().filter(t -> Double.doubleToLongBits(t.getEndTime()) < Double.doubleToLongBits(firstChunkStartTime)).reduce((first, second) -> second); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															  
														 | 
														
														 | 
														
															  
														 | 
													
												
											
												
													
														| 
														 | 
														
															 		ChunkAnalysis lastChunkAnalysis = null; 
														 | 
														
														 | 
														
															 		ChunkAnalysis lastChunkAnalysis = null; 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 		if (chunkAnalysisOptional.isPresent()) { 
														 | 
														
														 | 
														
															 		if (chunkAnalysisOptional.isPresent()) { 
														 | 
													
												
											
										
											
												
													
														 | 
														
															@@ -879,6 +890,8 @@ public class UserChannelContext { 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 			return false; 
														 | 
														
														 | 
														
															 			return false; 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 		} 
														 | 
														
														 | 
														
															 		} 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 		 
														 | 
														
														 | 
														
															 		 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+		reduceNoise(chunkList, EvaluationCriteriaEnum.AMPLITUDE); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+		 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 		ChunkAnalysis firstChunkAnalysis = chunkAnalysisList.get(0); 
														 | 
														
														 | 
														
															 		ChunkAnalysis firstChunkAnalysis = chunkAnalysisList.get(0); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 		 
														 | 
														
														 | 
														
															 		 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 		LOGGER.debug("-------startTime:{}  endTime:{}------", firstChunkAnalysis.getStartTime(), chunkList.get(chunkList.size() - 1) 
														 | 
														
														 | 
														
															 		LOGGER.debug("-------startTime:{}  endTime:{}------", firstChunkAnalysis.getStartTime(), chunkList.get(chunkList.size() - 1) 
														 | 
													
												
											
										
											
												
													
														 | 
														
															@@ -890,18 +903,15 @@ public class UserChannelContext { 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 			return chunkList.stream().filter(t -> t.getAmplitude() > hardLevel.getAmplitudeThreshold()).count() <= 0; 
														 | 
														
														 | 
														
															 			return chunkList.stream().filter(t -> t.getAmplitude() > hardLevel.getAmplitudeThreshold()).count() <= 0; 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 		} 
														 | 
														
														 | 
														
															 		} 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 		 
														 | 
														
														 | 
														
															 		 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-		//Optional<ChunkAnalysis> chunkAnalysisOptional = totalChunkAnalysisList.stream().filter(t -> Double.doubleToLongBits(t.getEndTime()) < Double.doubleToLongBits(firstChunkAnalysis.getStartTime())).findFirst(); 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 		Optional<ChunkAnalysis> chunkAnalysisOptional = totalChunkAnalysisList.stream().filter(t -> Double.doubleToLongBits(t.getEndTime()) < Double.doubleToLongBits(firstChunkAnalysis.getStartTime())).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; 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+		ChunkAnalysis lastChunkAnalysis = new ChunkAnalysis(0, 0, -1, 0, 0, 0);; 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 		if (chunkAnalysisOptional.isPresent()) { 
														 | 
														
														 | 
														
															 		if (chunkAnalysisOptional.isPresent()) { 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 			lastChunkAnalysis = chunkAnalysisOptional.get(); 
														 | 
														
														 | 
														
															 			lastChunkAnalysis = chunkAnalysisOptional.get(); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 		} 
														 | 
														
														 | 
														
															 		} 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-		if(lastChunkAnalysis == null){ 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-			lastChunkAnalysis = new ChunkAnalysis(0, 0, -1, 0, 0, 0); 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-		} 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 		 
														 | 
														
														 | 
														
															 		 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 		List<Integer> chunkAmplitudeList = chunkList.stream().map(ChunkAnalysis::getAmplitude).collect(Collectors.toList()); 
														 | 
														
														 | 
														
															 		List<Integer> chunkAmplitudeList = chunkList.stream().map(ChunkAnalysis::getAmplitude).collect(Collectors.toList()); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+		 
														 | 
													
												
											
												
													
														| 
														 | 
														
															  
														 | 
														
														 | 
														
															  
														 | 
													
												
											
												
													
														| 
														 | 
														
															 		chunkAmplitudeList.add(0, lastChunkAnalysis.getAmplitude()); 
														 | 
														
														 | 
														
															 		chunkAmplitudeList.add(0, lastChunkAnalysis.getAmplitude()); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 		 
														 | 
														
														 | 
														
															 		 
														 | 
													
												
											
										
											
												
													
														 | 
														
															@@ -913,14 +923,17 @@ public class UserChannelContext { 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 		int firstPeakIndex = -1; 
														 | 
														
														 | 
														
															 		int firstPeakIndex = -1; 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 		int firstPeakValue = 0; 
														 | 
														
														 | 
														
															 		int firstPeakValue = 0; 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 		int peakSize = 0; 
														 | 
														
														 | 
														
															 		int peakSize = 0; 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+		 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+		//int range = hardLevel.getAmplitudeThreshold(); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+		int range = 10; 
														 | 
													
												
											
												
													
														| 
														 | 
														
															  
														 | 
														
														 | 
														
															  
														 | 
													
												
											
												
													
														| 
														 | 
														
															 		for (int i = 1; i < chunkAmplitudeList.size(); i++) { 
														 | 
														
														 | 
														
															 		for (int i = 1; i < chunkAmplitudeList.size(); i++) { 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-			if (chunkAmplitudeList.get(i - 1) + hardLevel.getAmplitudeThreshold() >= chunkAmplitudeList.get(i)) { 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+			if (chunkAmplitudeList.get(i - 1) + range >= chunkAmplitudeList.get(i)) { 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 				isContinue = false; 
														 | 
														
														 | 
														
															 				isContinue = false; 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 				continue; 
														 | 
														
														 | 
														
															 				continue; 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 			} 
														 | 
														
														 | 
														
															 			} 
														 | 
													
												
											
												
													
														| 
														 | 
														
															  
														 | 
														
														 | 
														
															  
														 | 
													
												
											
												
													
														| 
														 | 
														
															-			if(isContinue == false && chunkAmplitudeList.get(i - 1) + hardLevel.getAmplitudeThreshold() < chunkAmplitudeList.get(i)){ 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+			if(isContinue == false && chunkAmplitudeList.get(i - 1) + range < chunkAmplitudeList.get(i)){ 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 				isContinue = true; 
														 | 
														
														 | 
														
															 				isContinue = true; 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 				peakSize++; 
														 | 
														
														 | 
														
															 				peakSize++; 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 				 
														 | 
														
														 | 
														
															 				 
														 | 
													
												
											
										
											
												
													
														 | 
														
															@@ -966,7 +979,7 @@ public class UserChannelContext { 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 		 
														 | 
														
														 | 
														
															 		 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 		if (tempo) { 
														 | 
														
														 | 
														
															 		if (tempo) { 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 			// 判断进入时间点 
														 | 
														
														 | 
														
															 			// 判断进入时间点 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-			if((firstPeakIndex - 1) * 100 /chunkAmplitudeList.size() > hardLevel.getTempoEffectiveRange(musicXmlNote.getDenominator(), musicXmlNote.getDuration()) * 2){ 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+			if((firstPeakIndex - 1) * 100 /chunkAmplitudeList.size() > hardLevel.getTempoEffectiveRange(musicXmlNote.getDenominator(), musicXmlNote.getDuration())){ 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 				LOGGER.debug("超过范围:{}", (firstPeakIndex - 1) * 100 /chunkAmplitudeList.size()); 
														 | 
														
														 | 
														
															 				LOGGER.debug("超过范围:{}", (firstPeakIndex - 1) * 100 /chunkAmplitudeList.size()); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 				tempo = false; 
														 | 
														
														 | 
														
															 				tempo = false; 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 			} 
														 | 
														
														 | 
														
															 			} 
														 | 
													
												
											
										
											
												
													
														 | 
														
															@@ -1025,16 +1038,30 @@ public class UserChannelContext { 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 		//return chunkAnalysisList.get(chunkAnalysisList.size() - 1).getEndTime(); 
														 | 
														
														 | 
														
															 		//return chunkAnalysisList.get(chunkAnalysisList.size() - 1).getEndTime(); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 		return musicXmlNote.getTimeStamp() + dynamicOffset; 
														 | 
														
														 | 
														
															 		return musicXmlNote.getTimeStamp() + dynamicOffset; 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 	} 
														 | 
														
														 | 
														
															 	} 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+ 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+	private void reduceNoise(List<ChunkAnalysis> chunkAnalysisList, EvaluationCriteriaEnum criteria) { 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+ 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+		ChunkAnalysis chunkAnalysis = null; 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+ 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+		for (int i = 1; i < chunkAnalysisList.size(); i++) { 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+			if (i < chunkAnalysisList.size() - 1) { 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+				chunkAnalysis = chunkAnalysisList.get(i); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+ 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+				if (EvaluationCriteriaEnum.AMPLITUDE == criteria) { 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+					if (chunkAnalysisList.get(i - 1).getAmplitude() == 0 && chunkAnalysisList.get(i + 1).getAmplitude() == 0 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+							&& chunkAnalysis.getAmplitude() > 0) { 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+						 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+						chunkAnalysis.setAmplitude(0); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+						//chunkAnalysisList.set(i, chunkAnalysis); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+					} 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+				} 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+			} 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+		} 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+		 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+	} 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+	 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 	 
														 | 
														
														 | 
														
															 	 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 	public static void main(String[] args) { 
														 | 
														
														 | 
														
															 	public static void main(String[] args) { 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-		double[] midi = new double[128];; 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-		int standardPitch = 440; // a is 440 hz... 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-		for (int x = 0; x < midi.length; ++x) 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-		{ 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-			//转调 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-		   midi[x] = new BigDecimal(standardPitch).multiply(new BigDecimal(Math.pow(2, new BigDecimal(x-69).divide(new BigDecimal(12),6,BigDecimal.ROUND_HALF_UP).doubleValue()))).doubleValue(); 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-		   System.out.println("x=" + x +"  "+ midi[x]); 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-		} 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 		 
														 | 
														
														 | 
														
															 		 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 	} 
														 | 
														
														 | 
														
															 	} 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 	 
														 | 
														
														 | 
														
															 	 
														 |