Browse Source

feat:小节评分

Joburgess 4 years ago
parent
commit
e48780ca34
1 changed files with 32 additions and 19 deletions
  1. 32 19
      mec-biz/src/main/java/com/ym/mec/biz/handler/WebSocketHandler.java

+ 32 - 19
mec-biz/src/main/java/com/ym/mec/biz/handler/WebSocketHandler.java

@@ -46,7 +46,8 @@ public class WebSocketHandler extends AbstractWebSocketHandler {
 
     private final BigDecimal oneHundred = new BigDecimal(100);
 
-    private final BigDecimal tenPercent = new BigDecimal(0.1);
+    //检测偏移时长的最终时间
+    private final int endCheckOffsetTime = 500;
 
     private final float simpleRate = 44100;
     private int simpleSize = 1024;
@@ -157,18 +158,44 @@ public class WebSocketHandler extends AbstractWebSocketHandler {
         if(Objects.isNull(userSoundInfoMap.get(phone).getAccessFile())){
             return;
         }
+
         double recordTime = userSoundInfoMap.get(phone).getAccessFile().length()/(audioFormat.getFrameSize()*audioFormat.getFrameRate())*1000;
+
         userSoundInfoMap.get(phone).setMeasureStartTime(recordTime);
         userSoundInfoMap.get(phone).getRecordMeasurePithInfo().addAll(recordInfo);
+
+        //如果是第一小节,需要计算出录音与播放不同步导致的空白时间偏移量
+        if(userSoundInfoMap.get(phone).getOffsetTime()<=0&&recordTime<endCheckOffsetTime){
+            int hasPitchNum = 0;
+            for (MusicPitchDetailDto ri : userSoundInfoMap.get(phone).getRecordMeasurePithInfo()) {
+                if(hasPitchNum<=0){
+                    userSoundInfoMap.get(phone).setOffsetTime(ri.getTimeStamp());
+                }
+                if(ri.getFrequency()>0){
+                    hasPitchNum++;
+                }else{
+                    hasPitchNum=0;
+                }
+                if(hasPitchNum>=3){
+                    LOGGER.info("偏移时间:{}", userSoundInfoMap.get(phone).getOffsetTime());
+                    break;
+                }
+            }
+            if(hasPitchNum<3){
+                userSoundInfoMap.get(phone).setOffsetTime(0);
+            }
+        }
+
+        if(userSoundInfoMap.get(phone).getOffsetTime()<=0&&recordTime<endCheckOffsetTime){
+            return;
+        }
         for (Map.Entry<Integer, Integer> userMeasureEndTimeMapEntry : userSoundInfoMap.get(phone).getMeasureEndTime().entrySet()) {
-            if(recordTime>userMeasureEndTimeMapEntry.getValue()){
-//                LOGGER.info("评测时间:{}", recordTime);
+            if((recordTime - userSoundInfoMap.get(phone).getOffsetTime())>userMeasureEndTimeMapEntry.getValue()){
                 measureCompare(phone, userMeasureEndTimeMapEntry.getKey());
                 userSoundInfoMap.get(phone).getMeasureEndTime().remove(userMeasureEndTimeMapEntry.getKey());
                 break;
             }
         }
-
     }
 
     @Override
@@ -269,20 +296,6 @@ public class WebSocketHandler extends AbstractWebSocketHandler {
 
             int totalCompareNum = userSoundInfoMap.get(phone).getMeasureXmlInfoMap().get(measureIndex).size();
 
-            //如果是第一小节,需要计算出录音与播放不同步导致的空白时间偏移量
-            if(measureIndex==0){
-                int hasPitchNum = 0;
-                for (MusicPitchDetailDto recordInfo : userSoundInfoMap.get(phone).getRecordMeasurePithInfo()) {
-                    if(recordInfo.getFrequency()>0){
-                        hasPitchNum++;
-                    }
-                    if(hasPitchNum>3){
-                        userSoundInfoMap.get(phone).setOffsetTime(recordInfo.getTimeStamp());
-                        break;
-                    }
-                }
-            }
-
             for (MusicPitchDetailDto musicXmlInfo : userSoundInfoMap.get(phone).getMeasureXmlInfoMap().get(measureIndex)) {
                 int startTimeStamp = musicXmlInfo.getTimeStamp()-100 + userSoundInfoMap.get(phone).getOffsetTime();
                 int endTimeStamp = musicXmlInfo.getTimeStamp()+musicXmlInfo.getDuration()-100 + userSoundInfoMap.get(phone).getOffsetTime();
@@ -300,7 +313,7 @@ public class WebSocketHandler extends AbstractWebSocketHandler {
                     if(recordInfo.getTimeStamp()<startTimeStamp||recordInfo.getTimeStamp()>endTimeStamp){
                         continue;
                     }
-                    LOGGER.info("{}频率({}-{}):{}, {}", recordInfo.getTimeStamp(), startTimeStamp, endTimeStamp, musicXmlInfo.getFrequency(), recordInfo.getFrequency());
+//                    LOGGER.info("{}频率({}-{}):{}, {}", recordInfo.getTimeStamp(), startTimeStamp, endTimeStamp, musicXmlInfo.getFrequency(), recordInfo.getFrequency());
                     compareNum++;
                     //如果在最低有效频率以下则跳过
                     if(recordInfo.getFrequency()<minValidFrequency&&musicXmlInfo.getFrequency()!=-1){