|
@@ -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]);
|
|
|
- }
|
|
|
|
|
|
}
|
|
|
|