|
@@ -669,12 +669,14 @@ public class UserChannelContext {
|
|
|
LOGGER.debug("------------ correctedStartTime:{} correctedEndTime:{}------------", correctedStartTime, correctedEndTime);
|
|
|
|
|
|
//根据完整度取部分有效信号
|
|
|
- int elementSize = chunkAnalysisList.size() * hardLevel.getIntegrityRange() / 100;
|
|
|
+ int elementSize = chunkAnalysisList.size() * (100 - hardLevel.getTempoEffectiveRange(musicXmlNote.getDenominator(), musicXmlNote.getDuration())) / 100;
|
|
|
chunkAnalysisList = chunkAnalysisList.subList(0, elementSize);
|
|
|
if(chunkAnalysisList == null || chunkAnalysisList.size() == 0){
|
|
|
return -1;
|
|
|
}
|
|
|
|
|
|
+ reduceNoise(chunkAnalysisList, EvaluationCriteriaEnum.FREQUENCY);
|
|
|
+
|
|
|
ChunkAnalysis firstChunkAnalysis = chunkAnalysisList.get(0);
|
|
|
|
|
|
LOGGER.debug("-------startTime:{} endTime:{}------", firstChunkAnalysis.getStartTime(), chunkAnalysisList.get(chunkAnalysisList.size() - 1)
|
|
@@ -714,36 +716,23 @@ 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;
|
|
|
-
|
|
|
- int startIndex = (chunkAnalysisList.size() - elementSize) / 2 - 1;
|
|
|
- startIndex = startIndex < 1 ? 0 : startIndex;
|
|
|
- List<ChunkAnalysis> chunkList = chunkAnalysisList.subList(startIndex, elementSize + startIndex);
|
|
|
+ //根据完整度取部分有效信号
|
|
|
+ int elementSize = chunkAnalysisList.size() * (100 - hardLevel.getTempoEffectiveRange(musicXmlNote.getDenominator(), musicXmlNote.getDuration())) / 100;
|
|
|
+ List<ChunkAnalysis> chunkList = chunkAnalysisList.subList(0, elementSize);
|
|
|
|
|
|
if(chunkList == null || chunkList.size() == 0){
|
|
|
return false;
|
|
|
}
|
|
|
|
|
|
+ reduceNoise(chunkList, EvaluationCriteriaEnum.FREQUENCY);
|
|
|
+
|
|
|
if (musicXmlNote.getFrequency() == -1) {// 休止符
|
|
|
return chunkList.stream().filter(t -> t.getFrequency() > MIN_FREQUECY).count() <= 1;
|
|
|
}
|
|
|
|
|
|
ChunkAnalysis firstChunkAnalysis = chunkAnalysisList.get(0);
|
|
|
- //取出前面忽略的块
|
|
|
- List<ChunkAnalysis> ignoreHeaderList = chunkAnalysisList.subList(0, startIndex);
|
|
|
- if(ignoreHeaderList != null && ignoreHeaderList.size() > 0){
|
|
|
- for(ChunkAnalysis ca : ignoreHeaderList){
|
|
|
- if(ca.getFrequency() < MIN_FREQUECY){
|
|
|
- firstChunkAnalysis.setFrequency(-1);
|
|
|
- break;
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- double firstChunkStartTime = firstChunkAnalysis.getStartTime();
|
|
|
|
|
|
- Optional<ChunkAnalysis> chunkAnalysisOptional = totalChunkAnalysisList.stream().filter(t -> Double.doubleToLongBits(t.getEndTime()) < Double.doubleToLongBits(firstChunkStartTime)).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;
|
|
|
if (chunkAnalysisOptional.isPresent()) {
|
|
@@ -1054,6 +1043,13 @@ public class UserChannelContext {
|
|
|
chunkAnalysis.setAmplitude(0);
|
|
|
//chunkAnalysisList.set(i, chunkAnalysis);
|
|
|
}
|
|
|
+ }else if(EvaluationCriteriaEnum.FREQUENCY == criteria) {
|
|
|
+ if (chunkAnalysisList.get(i - 1).getFrequency() == -1 && chunkAnalysisList.get(i + 1).getFrequency() == -1
|
|
|
+ && chunkAnalysis.getFrequency() > 0) {
|
|
|
+
|
|
|
+ chunkAnalysis.setFrequency(-1);
|
|
|
+ //chunkAnalysisList.set(i, chunkAnalysis);
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
}
|
|
@@ -1061,8 +1057,4 @@ public class UserChannelContext {
|
|
|
}
|
|
|
|
|
|
|
|
|
- public static void main(String[] args) {
|
|
|
-
|
|
|
- }
|
|
|
-
|
|
|
}
|