yonge 2 years ago
parent
commit
3221c822cb

+ 29 - 14
audio-analysis/src/main/java/com/yonge/netty/dto/UserChannelContext.java

@@ -2,6 +2,7 @@ package com.yonge.netty.dto;
 
 import java.math.BigDecimal;
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.Comparator;
 import java.util.HashMap;
 import java.util.List;
@@ -742,7 +743,7 @@ public class UserChannelContext {
 		
 		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;
 		if (chunkAnalysisOptional.isPresent()) {
@@ -900,17 +901,17 @@ public class UserChannelContext {
 			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())).reduce((first, second) -> second);;
+		Optional<ChunkAnalysis> chunkAnalysisOptional = totalChunkAnalysisList.stream().filter(t -> Double.doubleToLongBits(t.getEndTime()) < Double.doubleToLongBits(firstChunkAnalysis.getEndTime())).reduce((first, second) -> second);;
 
-		ChunkAnalysis lastChunkAnalysis = null;
+		ChunkAnalysis lastChunkAnalysis = new ChunkAnalysis(0, 0, -1, 0, 0, 0);;
 		if (chunkAnalysisOptional.isPresent()) {
 			lastChunkAnalysis = chunkAnalysisOptional.get();
 		}
-		if(lastChunkAnalysis == null){
-			lastChunkAnalysis = new ChunkAnalysis(0, 0, -1, 0, 0, 0);
-		}
+		
+		reduceNoise(chunkList, EvaluationCriteriaEnum.AMPLITUDE);
 		
 		List<Integer> chunkAmplitudeList = chunkList.stream().map(ChunkAnalysis::getAmplitude).collect(Collectors.toList());
+		
 
 		chunkAmplitudeList.add(0, lastChunkAnalysis.getAmplitude());
 		
@@ -1034,16 +1035,30 @@ public class UserChannelContext {
 		//return chunkAnalysisList.get(chunkAnalysisList.size() - 1).getEndTime();
 		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) {
-		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]);
-		}
 		
 	}