yonge 3 tahun lalu
induk
melakukan
b522ecdc5d

+ 5 - 11
audio-analysis/src/main/java/com/yonge/netty/dto/UserChannelContext.java

@@ -654,9 +654,6 @@ public class UserChannelContext {
 		
 		ChunkAnalysis firstChunkAnalysis = chunkAnalysisList.get(0);
 		
-		LOGGER.info("***************startTime:{}  endTime:{}------", firstChunkAnalysis.getStartTime(), chunkAnalysisList.get(chunkAnalysisList.size() - 1)
-				.getEndTime());
-		
 		Optional<ChunkAnalysis> chunkAnalysisOptional = totalChunkAnalysisList.stream().filter(t -> Double.doubleToLongBits(t.getEndTime()) == Double.doubleToLongBits(firstChunkAnalysis.getStartTime())).findFirst();
 
 		ChunkAnalysis lastChunkAnalysis = null;
@@ -716,7 +713,7 @@ public class UserChannelContext {
 		
 		if (tempo) {
 			// 判断进入时间点
-			if(firstPeakIndex * 100 /chunkAnalysisList.size() > hardLevel.getTempoEffectiveRange(musicXmlNote.getDenominator()) * 2){
+			if(firstPeakIndex * 100 /chunkAnalysisList.size() > hardLevel.getTempoEffectiveRange(musicXmlNote.getDenominator())){
 				tempo = false;
 				LOGGER.info("节奏错误原因:进入时间点太晚");
 			}
@@ -834,13 +831,10 @@ public class UserChannelContext {
 	}
 	
 	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]);
-		}
+		
+		NoteFrequencyRange range = new NoteFrequencyRange(440, 466);
+		
+		System.out.println("Min:" + range.getMinFrequency() + "  Max:" + range.getMaxFrequency());
 		
 	}
 	

+ 8 - 3
audio-analysis/src/main/java/com/yonge/netty/dto/UserChannelContext3.java

@@ -703,12 +703,14 @@ public class UserChannelContext3 {
 							|| chunkAnalysis.getFrequency() > noteFrequencyRange.getMaxFrequency()) {
 						// 判断是否是同一个音
 						tempo = false;
+						LOGGER.info("节奏错误原因:不是同一个音[{}]:{}-{}", chunkAnalysis.getFrequency(), noteFrequencyRange.getMinFrequency(), noteFrequencyRange.getMaxFrequency());
 						break;
 					}
 					if (isContinue == false) {
 						if ((i + 1) / chunkAnalysisList.size() < hardLevel.getIntegrityRange()) {
 							if (unplayedSize > 0) {
 								tempo = false;
+								LOGGER.info("节奏错误原因:信号不连续");
 								break;
 							}
 						}
@@ -724,12 +726,14 @@ public class UserChannelContext3 {
 		
 		if (tempo) {
 			// 判断进入时间点
-			if(firstPeakIndex * 100 /chunkAnalysisList.size() > hardLevel.getTempoEffectiveRange(musicXmlNote.getDenominator()) * 2){
+			if(firstPeakIndex * 100 /chunkAnalysisList.size() > hardLevel.getTempoEffectiveRange(musicXmlNote.getDenominator())){
 				tempo = false;
+				LOGGER.info("节奏错误原因:进入时间点太晚");
 			}else{
 				//判断是否与上一个音延续下来的
 				if(firstChunkAnalysis.getFrequency() > 100 && lastChunkAnalysis.getFrequency() > 100){
-					return new NoteFrequencyRange(standardFrequecy, firstChunkAnalysis.getFrequency()).equals(new NoteFrequencyRange(standardFrequecy, lastChunkAnalysis.getFrequency())) == false;
+					tempo = new NoteFrequencyRange(standardFrequecy, firstChunkAnalysis.getFrequency()).equals(new NoteFrequencyRange(standardFrequecy, lastChunkAnalysis.getFrequency())) == false;
+					LOGGER.info("节奏错误原因:上一个音延续下来导致的");
 				}
 			}
 		}
@@ -835,7 +839,8 @@ public class UserChannelContext3 {
 			}
 		}
 
-		return chunkAnalysisList.get(chunkAnalysisList.size() - 1).getEndTime();
+		//return chunkAnalysisList.get(chunkAnalysisList.size() - 1).getEndTime();
+		return musicXmlNote.getTimeStamp() + dynamicOffset;
 	}
 	
 	public static void main(String[] args) {