yonge 3 éve
szülő
commit
3b3f476929

+ 8 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/SoundCompareHelper.java

@@ -128,10 +128,18 @@ public class SoundCompareHelper implements PitchDetectionHandler {
         this.musicXmlInfos = musicXmlInfos;
         this.musicXmlInfos = musicXmlInfos;
     }
     }
 
 
+    /**
+     * xml中每个音符对应的频率
+     * @return
+     */
     public Map<Integer, Float> getMusicalNotePitchMap() {
     public Map<Integer, Float> getMusicalNotePitchMap() {
         return musicalNotePitchMap;
         return musicalNotePitchMap;
     }
     }
 
 
+    /**
+     * xml中每个音符对应的频率
+     * @return
+     */
     public void setMusicalNotePitchMap(Map<Integer, Float> musicalNotePitchMap) {
     public void setMusicalNotePitchMap(Map<Integer, Float> musicalNotePitchMap) {
         this.musicalNotePitchMap = musicalNotePitchMap;
         this.musicalNotePitchMap = musicalNotePitchMap;
     }
     }

+ 4 - 2
mec-biz/src/main/java/com/ym/mec/biz/service/impl/SoundCompareHandler.java

@@ -163,6 +163,7 @@ public class SoundCompareHandler implements WebSocketEventHandler {
                 }
                 }
                 try {
                 try {
                     if(!CollectionUtils.isEmpty(userSoundInfoMap.get(phone).getMeasureEndTime())){
                     if(!CollectionUtils.isEmpty(userSoundInfoMap.get(phone).getMeasureEndTime())){
+                    	//这是最后播放的一小节吗?
                         Integer lastMeasureIndex = userSoundInfoMap.get(phone).getMeasureEndTime().keySet().stream().min(Integer::compareTo).get();
                         Integer lastMeasureIndex = userSoundInfoMap.get(phone).getMeasureEndTime().keySet().stream().min(Integer::compareTo).get();
                         double recordTime = userSoundInfoMap.get(phone).getAccessFile().length()/(soundCompareConfig.audioFormat.getFrameSize()*soundCompareConfig.audioFormat.getFrameRate())*1000;
                         double recordTime = userSoundInfoMap.get(phone).getAccessFile().length()/(soundCompareConfig.audioFormat.getFrameSize()*soundCompareConfig.audioFormat.getFrameRate())*1000;
                         //如果结束时时长大于某小节,则此小节需要评分
                         //如果结束时时长大于某小节,则此小节需要评分
@@ -364,6 +365,7 @@ public class SoundCompareHandler implements WebSocketEventHandler {
                 int ot5 = (int) (musicXmlInfo.getDuration()*0.22<70?70:musicXmlInfo.getDuration()*0.22);
                 int ot5 = (int) (musicXmlInfo.getDuration()*0.22<70?70:musicXmlInfo.getDuration()*0.22);
                 int rightTimeRange = ot5>200?200:ot5;
                 int rightTimeRange = ot5>200?200:ot5;
 
 
+                // 待优化:结束时间应该是加偏移量
                 List<MusicPitchDetailDto> recordPitchs = userSoundInfoMap.get(phone).getRecordMeasurePitchInfos().stream().filter(m -> m.getTimeStamp()>=startTimeStamp-rightTimeRange && m.getTimeStamp() < endTimeStamp-rightTimeRange).collect(Collectors.toList());
                 List<MusicPitchDetailDto> recordPitchs = userSoundInfoMap.get(phone).getRecordMeasurePitchInfos().stream().filter(m -> m.getTimeStamp()>=startTimeStamp-rightTimeRange && m.getTimeStamp() < endTimeStamp-rightTimeRange).collect(Collectors.toList());
 
 
                 boolean cadenceRight = false;
                 boolean cadenceRight = false;
@@ -409,10 +411,10 @@ public class SoundCompareHandler implements WebSocketEventHandler {
 
 
                     intonationScore += score;
                     intonationScore += score;
                     musicXmlInfo.setAvgFrequency(avgPitch);
                     musicXmlInfo.setAvgFrequency(avgPitch);
-                    intonationRight = score>70;
+                    intonationRight = score>70; //大于70分音准才正确?????
 
 
                     integrityScore += integrityDuty;
                     integrityScore += integrityDuty;
-                    integrityRight = integrityDuty>0.7;
+                    integrityRight = integrityDuty>0.7;//大于70%完整性才正确????
                 }
                 }
 
 
                 //如果当前音符不需要演奏
                 //如果当前音符不需要演奏