|
@@ -356,7 +356,7 @@ public class UserChannelContext {
|
|
|
|
|
|
if (noteAnalysis.getMusicalNotesIndex() >= 0 && noteAnalysis.getMusicalNotesIndex() <= getTotalMusicNoteIndex(null)) {
|
|
|
|
|
|
- LOGGER.info("user:{} delayProcessed:{} dynamicOffset:{} Frequency:{} splDb:{} amplitude:{} time:{}", user, delayProcessed, dynamicOffset, playFrequency, splDb, amplitude, playTime);
|
|
|
+ LOGGER.debug("user:{} delayProcessed:{} dynamicOffset:{} Frequency:{} splDb:{} amplitude:{} time:{}", user, delayProcessed, dynamicOffset, playFrequency, splDb, amplitude, playTime);
|
|
|
|
|
|
ChunkAnalysis chunkAnalysis = new ChunkAnalysis(playTime - durationTime, playTime, playFrequency, splDb, power, amplitude);
|
|
|
|
|
@@ -406,7 +406,7 @@ public class UserChannelContext {
|
|
|
|
|
|
evaluateForNote(musicXmlNote, noteAnalysis);
|
|
|
|
|
|
- LOGGER.info("当前音符下标[{}] 预计频率:{} 实际频率:{} 节奏:{}", noteAnalysis.getMusicalNotesIndex(), musicXmlNote.getFrequency(), noteAnalysis.getPlayFrequency(),
|
|
|
+ LOGGER.debug("当前音符下标[{}] 预计频率:{} 实际频率:{} 节奏:{}", noteAnalysis.getMusicalNotesIndex(), musicXmlNote.getFrequency(), noteAnalysis.getPlayFrequency(),
|
|
|
noteAnalysis.isTempo());
|
|
|
|
|
|
doneNoteAnalysisList.add(noteAnalysis);
|
|
@@ -462,7 +462,7 @@ public class UserChannelContext {
|
|
|
sectionAnalysis.setDurationTime(noteAnalysisList.stream().mapToDouble(t -> t.getDurationTime()).sum());
|
|
|
sectionAnalysis.setScore(score);
|
|
|
|
|
|
- LOGGER.info("小节评分:{}",sectionAnalysis);
|
|
|
+ LOGGER.debug("小节评分:{}",sectionAnalysis);
|
|
|
doneSectionAnalysisList.add(sectionAnalysis);
|
|
|
}
|
|
|
|
|
@@ -474,6 +474,7 @@ public class UserChannelContext {
|
|
|
Map<String, Integer> result = new HashMap<String, Integer>();
|
|
|
|
|
|
result.put("playTime", (int) doneNoteAnalysisList.stream().mapToDouble(t -> t.getDurationTime()).sum());
|
|
|
+ result.put("recordId", recordId.intValue());
|
|
|
|
|
|
// 取出需要评测的音符
|
|
|
List<NoteAnalysis> noteAnalysisList = doneNoteAnalysisList.stream().filter(t -> t.isIgnore() == false).collect(Collectors.toList());
|
|
@@ -498,7 +499,6 @@ public class UserChannelContext {
|
|
|
result.put("cadence", tempoScore);
|
|
|
result.put("intonation", intonationScore);
|
|
|
result.put("integrity", integrityScore);
|
|
|
- result.put("recordId", recordId.intValue());
|
|
|
|
|
|
int score = socre / noteAnalysisList.size();
|
|
|
|
|
@@ -507,6 +507,11 @@ public class UserChannelContext {
|
|
|
score = tempoScore;
|
|
|
}
|
|
|
result.put("score", score);
|
|
|
+ } else {
|
|
|
+ result.put("cadence", 0);
|
|
|
+ result.put("intonation", 0);
|
|
|
+ result.put("integrity", 0);
|
|
|
+ result.put("score", 0);
|
|
|
}
|
|
|
return result;
|
|
|
}
|
|
@@ -570,10 +575,10 @@ public class UserChannelContext {
|
|
|
|
|
|
if (playDurationTime * 100 / durationTime < hardLevel.getNotPlayRange()) {
|
|
|
noteAnalysis.setMusicalErrorType(NoteErrorType.NOT_PLAY);
|
|
|
- LOGGER.info("未演奏:{}", playDurationTime * 100 / durationTime);
|
|
|
+ LOGGER.debug("未演奏:{}", playDurationTime * 100 / durationTime);
|
|
|
} else if (playDurationTime * 100 / durationTime < hardLevel.getIntegrityRange()) {
|
|
|
noteAnalysis.setMusicalErrorType(NoteErrorType.INTEGRITY_WRONG);
|
|
|
- LOGGER.info("完整度不足:{}", playDurationTime * 100 / durationTime);
|
|
|
+ LOGGER.debug("完整度不足:{}", playDurationTime * 100 / durationTime);
|
|
|
} else if (!noteAnalysis.isTempo()) {
|
|
|
noteAnalysis.setMusicalErrorType(NoteErrorType.CADENCE_WRONG);
|
|
|
} else if (notePlayResult.getStatus() == false) {
|
|
@@ -628,7 +633,7 @@ public class UserChannelContext {
|
|
|
double endTime = musicXmlNote.getTimeStamp() + dynamicOffset + floatingRange;
|
|
|
double startTime = musicXmlNote.getTimeStamp() + dynamicOffset - floatingRange;
|
|
|
|
|
|
- LOGGER.info("------------TimeStamp:{} Duration:{} floatingRange:{} StartTime:{} EndTime:{}------------", musicXmlNote.getTimeStamp(), musicXmlNote.getDuration(), floatingRange, startTime, endTime);
|
|
|
+ LOGGER.debug("------------TimeStamp:{} Duration:{} floatingRange:{} StartTime:{} EndTime:{}------------", musicXmlNote.getTimeStamp(), musicXmlNote.getDuration(), floatingRange, startTime, endTime);
|
|
|
|
|
|
List<ChunkAnalysis> chunkAnalysisList = totalChunkAnalysisList.stream().filter(t -> Double.doubleToLongBits(t.getStartTime()) >= Double.doubleToLongBits(startTime) && Double.doubleToLongBits(t.getEndTime()) <= Double.doubleToLongBits(endTime)).collect(Collectors.toList());
|
|
|
|
|
@@ -637,7 +642,7 @@ 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());
|
|
|
|
|
|
- LOGGER.info("------------ correctedStartTime:{} correctedEndTime:{}------------", correctedStartTime, correctedEndTime);
|
|
|
+ LOGGER.debug("------------ correctedStartTime:{} correctedEndTime:{}------------", correctedStartTime, correctedEndTime);
|
|
|
|
|
|
//根据完整度取部分有效信号
|
|
|
int elementSize = chunkAnalysisList.size() * hardLevel.getIntegrityRange() / 100;
|
|
@@ -648,7 +653,7 @@ public class UserChannelContext {
|
|
|
|
|
|
ChunkAnalysis firstChunkAnalysis = chunkAnalysisList.get(0);
|
|
|
|
|
|
- LOGGER.info("-------startTime:{} endTime:{}------", firstChunkAnalysis.getStartTime(), chunkAnalysisList.get(chunkAnalysisList.size() - 1)
|
|
|
+ LOGGER.debug("-------startTime:{} endTime:{}------", firstChunkAnalysis.getStartTime(), chunkAnalysisList.get(chunkAnalysisList.size() - 1)
|
|
|
.getEndTime());
|
|
|
|
|
|
List<ChunkAnalysis> chunkList = new ArrayList<ChunkAnalysis>(chunkAnalysisList);
|
|
@@ -737,7 +742,7 @@ public class UserChannelContext {
|
|
|
if(!((noteFrequencyRange.getMinFrequency() < chunkAnalysis.getFrequency() * 2 && chunkAnalysis.getFrequency() * 2 < noteFrequencyRange.getMaxFrequency())
|
|
|
|| (noteFrequencyRange.getMinFrequency() < chunkAnalysis.getFrequency() / 2 && chunkAnalysis.getFrequency() / 2 < noteFrequencyRange.getMaxFrequency()))){
|
|
|
tempo = false;
|
|
|
- LOGGER.info("节奏错误原因:不是同一个音[{}]:{}-{}", chunkAnalysis.getFrequency(), noteFrequencyRange.getMinFrequency(), noteFrequencyRange.getMaxFrequency());
|
|
|
+ LOGGER.debug("节奏错误原因:不是同一个音[{}]:{}-{}", chunkAnalysis.getFrequency(), noteFrequencyRange.getMinFrequency(), noteFrequencyRange.getMaxFrequency());
|
|
|
break;
|
|
|
}
|
|
|
}
|
|
@@ -745,7 +750,7 @@ public class UserChannelContext {
|
|
|
if ((i + 1) / chunkAnalysisList.size() < hardLevel.getIntegrityRange()) {
|
|
|
if (unplayedSize > 0) {
|
|
|
tempo = false;
|
|
|
- LOGGER.info("节奏错误原因:信号不连续");
|
|
|
+ LOGGER.debug("节奏错误原因:信号不连续");
|
|
|
break;
|
|
|
}
|
|
|
}
|
|
@@ -763,13 +768,13 @@ public class UserChannelContext {
|
|
|
// 判断进入时间点
|
|
|
if(firstPeakIndex * 100 /chunkAnalysisList.size() > hardLevel.getTempoEffectiveRange(musicXmlNote.getDenominator())){
|
|
|
tempo = false;
|
|
|
- LOGGER.info("节奏错误原因:进入时间点太晚");
|
|
|
+ LOGGER.debug("节奏错误原因:进入时间点太晚");
|
|
|
}else{
|
|
|
//判断是否与上一个音延续下来的
|
|
|
if(firstChunkAnalysis.getFrequency() > MIN_FREQUECY && lastChunkAnalysis.getFrequency() > MIN_FREQUECY){
|
|
|
tempo = new NoteFrequencyRange(standardFrequecy, firstChunkAnalysis.getFrequency()).equals(new NoteFrequencyRange(standardFrequecy, lastChunkAnalysis.getFrequency())) == false;
|
|
|
if(tempo == false){
|
|
|
- LOGGER.info("节奏错误原因:上一个音[{}]延续下来导致的", lastChunkAnalysis.getFrequency());
|
|
|
+ LOGGER.debug("节奏错误原因:上一个音[{}]延续下来导致的", lastChunkAnalysis.getFrequency());
|
|
|
}
|
|
|
}
|
|
|
}
|
|
@@ -785,7 +790,7 @@ public class UserChannelContext {
|
|
|
double endTime = musicXmlNote.getTimeStamp() + dynamicOffset + floatingRange;
|
|
|
double startTime = musicXmlNote.getTimeStamp() + dynamicOffset - floatingRange;
|
|
|
|
|
|
- LOGGER.info("------------TimeStamp:{} floatingRange:{} StartTime:{} EndTime:{}------------", musicXmlNote.getTimeStamp(), floatingRange, startTime, endTime);
|
|
|
+ LOGGER.debug("------------TimeStamp:{} floatingRange:{} StartTime:{} EndTime:{}------------", musicXmlNote.getTimeStamp(), floatingRange, startTime, endTime);
|
|
|
|
|
|
List<ChunkAnalysis> chunkAnalysisList = totalChunkAnalysisList.stream().filter(t -> Double.doubleToLongBits(t.getStartTime()) >= Double.doubleToLongBits(startTime) && Double.doubleToLongBits(t.getEndTime()) <= Double.doubleToLongBits(endTime)).collect(Collectors.toList());
|
|
|
|
|
@@ -804,12 +809,12 @@ public class UserChannelContext {
|
|
|
|
|
|
ChunkAnalysis firstChunkAnalysis = chunkAnalysisList.get(0);
|
|
|
|
|
|
- LOGGER.info("-------startTime:{} endTime:{}------", firstChunkAnalysis.getStartTime(), chunkList.get(chunkList.size() - 1)
|
|
|
+ LOGGER.debug("-------startTime:{} endTime:{}------", firstChunkAnalysis.getStartTime(), chunkList.get(chunkList.size() - 1)
|
|
|
.getEndTime());
|
|
|
|
|
|
if (musicXmlNote.getFrequency() == -1) {// 休止符
|
|
|
|
|
|
- LOGGER.info("--Amplitude:{} Denominator:{}",chunkList.stream().map(t -> t).collect(Collectors.toList()), musicXmlNote.getDenominator());
|
|
|
+ LOGGER.debug("--Amplitude:{} Denominator:{}",chunkList.stream().map(t -> t).collect(Collectors.toList()), musicXmlNote.getDenominator());
|
|
|
return chunkList.stream().filter(t -> t.getAmplitude() > hardLevel.getAmplitudeThreshold()).count() <= 0;
|
|
|
}
|
|
|
|
|
@@ -827,7 +832,7 @@ public class UserChannelContext {
|
|
|
|
|
|
chunkAmplitudeList.add(0, lastChunkAnalysis.getAmplitude());
|
|
|
|
|
|
- LOGGER.info("--Amplitude:{} Denominator:{}",chunkAmplitudeList.stream().map(t -> t).collect(Collectors.toList()), musicXmlNote.getDenominator());
|
|
|
+ LOGGER.debug("--Amplitude:{} Denominator:{}",chunkAmplitudeList.stream().map(t -> t).collect(Collectors.toList()), musicXmlNote.getDenominator());
|
|
|
|
|
|
// 检测是否有多个波峰
|
|
|
boolean tempo = false;
|
|
@@ -867,7 +872,7 @@ public class UserChannelContext {
|
|
|
if (tempo) {
|
|
|
// 判断进入时间点
|
|
|
if((firstPeakIndex - 1) * 100 /chunkAmplitudeList.size() > hardLevel.getTempoEffectiveRange(musicXmlNote.getDenominator()) * 2){
|
|
|
- LOGGER.info("超过范围:{}", (firstPeakIndex - 1) * 100 /chunkAmplitudeList.size());
|
|
|
+ LOGGER.debug("超过范围:{}", (firstPeakIndex - 1) * 100 /chunkAmplitudeList.size());
|
|
|
tempo = false;
|
|
|
}
|
|
|
}
|
|
@@ -878,17 +883,17 @@ public class UserChannelContext {
|
|
|
private double queryFirstNoteStartTime(List<ChunkAnalysis> chunkAnalysisList, MusicXmlNote musicXmlNote) {
|
|
|
|
|
|
if(chunkAnalysisList == null || chunkAnalysisList.size() == 0){
|
|
|
- LOGGER.info("找不到数据,correctedStartTime:{}", musicXmlNote.getTimeStamp() + dynamicOffset);
|
|
|
+ LOGGER.debug("找不到数据,correctedStartTime:{}", musicXmlNote.getTimeStamp() + dynamicOffset);
|
|
|
return musicXmlNote.getTimeStamp() + dynamicOffset;
|
|
|
}
|
|
|
|
|
|
if (percussionList.contains(subjectId)) {
|
|
|
Optional<ChunkAnalysis> optional = chunkAnalysisList.stream().filter(t -> t.getAmplitude() > hardLevel.getAmplitudeThreshold()).findFirst();
|
|
|
if(optional.isPresent()){
|
|
|
- LOGGER.info("范围内查询到信号,correctedStartTime:{}", optional.get().getStartTime());
|
|
|
+ LOGGER.debug("范围内查询到信号,correctedStartTime:{}", optional.get().getStartTime());
|
|
|
return optional.get().getStartTime();
|
|
|
}else{
|
|
|
- LOGGER.info("范围内未查询到信号,correctedStartTime:{}", musicXmlNote.getTimeStamp() + dynamicOffset);
|
|
|
+ LOGGER.debug("范围内未查询到信号,correctedStartTime:{}", musicXmlNote.getTimeStamp() + dynamicOffset);
|
|
|
return musicXmlNote.getTimeStamp() + dynamicOffset;
|
|
|
}
|
|
|
}
|
|
@@ -899,10 +904,10 @@ public class UserChannelContext {
|
|
|
if((int)preMusicXmlNote.getFrequency() == (int)musicXmlNote.getFrequency()){
|
|
|
Optional<ChunkAnalysis> optional = chunkAnalysisList.stream().filter(t -> t.getFrequency() <= MIN_FREQUECY).findFirst();
|
|
|
if(optional.isPresent()){
|
|
|
- LOGGER.info("与上一个音同音,有断开,correctedStartTime:{}", optional.get().getStartTime());
|
|
|
+ LOGGER.debug("与上一个音同音,有断开,correctedStartTime:{}", optional.get().getStartTime());
|
|
|
return optional.get().getEndTime();
|
|
|
}else{
|
|
|
- LOGGER.info("与上一个音同音,未断开,correctedStartTime:{}", musicXmlNote.getTimeStamp() + dynamicOffset);
|
|
|
+ LOGGER.debug("与上一个音同音,未断开,correctedStartTime:{}", musicXmlNote.getTimeStamp() + dynamicOffset);
|
|
|
return musicXmlNote.getTimeStamp() + dynamicOffset;
|
|
|
}
|
|
|
}
|
|
@@ -915,12 +920,12 @@ public class UserChannelContext {
|
|
|
for (ChunkAnalysis ca : chunkAnalysisList) {
|
|
|
noteFrequencyRange = new NoteFrequencyRange(standardFrequecy, ca.getFrequency());
|
|
|
if (standardNote.equals(noteFrequencyRange)) {
|
|
|
- LOGGER.info("范围内查询到信号,correctedStartTime:{}", ca.getStartTime());
|
|
|
+ LOGGER.debug("范围内查询到信号,correctedStartTime:{}", ca.getStartTime());
|
|
|
return ca.getStartTime();
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- LOGGER.info("范围内未查询到信号,correctedStartTime:{}", musicXmlNote.getTimeStamp() + dynamicOffset);
|
|
|
+ LOGGER.debug("范围内未查询到信号,correctedStartTime:{}", musicXmlNote.getTimeStamp() + dynamicOffset);
|
|
|
|
|
|
//return chunkAnalysisList.get(chunkAnalysisList.size() - 1).getEndTime();
|
|
|
return musicXmlNote.getTimeStamp() + dynamicOffset;
|