Forráskód Böngészése

Merge branch 'music_score'

Joburgess 4 éve
szülő
commit
460a8a5620

+ 41 - 7
mec-biz/src/main/java/com/ym/mec/biz/handler/WebSocketHandler.java

@@ -194,6 +194,13 @@ public class WebSocketHandler extends AbstractWebSocketHandler {
         return super.supportsPartialMessages();
     }
 
+    /**
+     * @describe 保存录音数据,并生成wav头信息
+     * @author Joburgess
+     * @date 2021/6/25 0025
+     * @param phone:
+     * @return void
+     */
     private void createHeader(String phone) throws IOException {
         if(!userSoundInfoMap.containsKey(phone)){
             return;
@@ -211,6 +218,14 @@ public class WebSocketHandler extends AbstractWebSocketHandler {
         userSoundInfoMap.remove(phone);
     }
 
+    /**
+     * @describe 数据比对,生成分数
+     * @author Joburgess
+     * @date 2021/6/25 0025
+     * @param phone:
+     * @param measureIndex:
+     * @return void
+     */
     private void measureCompare(String phone, int measureIndex) throws IOException {
         //总分
         BigDecimal score = BigDecimal.ZERO;
@@ -242,7 +257,7 @@ public class WebSocketHandler extends AbstractWebSocketHandler {
             //节奏匹配误差范围
             float cadenceErrRange = 100;
             //节奏有效阈值
-            float cadenceValidDuty = 0.7f;
+            float cadenceValidDuty = 0.5f;
 
             int totalCompareNum = userSoundInfoMap.get(phone).getMeasureXmlInfoMap().get(measureIndex).size();
 
@@ -332,16 +347,24 @@ public class WebSocketHandler extends AbstractWebSocketHandler {
         WS_CLIENTS.get(phone).sendMessage(new TextMessage(JSON.toJSONString(createPushInfo("measureScore", measureIndex, intonation, cadence, integrity))));
     }
 
+    /**
+     * @describe 计算最终评分
+     * @author Joburgess
+     * @date 2021/6/25 0025
+     * @param phone:
+     * @return void
+     */
     private void calTotalScore(String phone) throws IOException {
-        int totalCompareNum = userSoundInfoMap.get(phone).getMeasureXmlInfoMap().keySet().size()-userSoundInfoMap.get(phone).getMeasureEndTime().keySet().size();
+        int totalCompareNum = userSoundInfoMap.get(phone).getMeasureXmlInfoMap().keySet().size();
+        int currentCompareNum = totalCompareNum-userSoundInfoMap.get(phone).getMeasureEndTime().keySet().size();
         BigDecimal intonation = BigDecimal.ZERO;
         BigDecimal cadence = BigDecimal.ZERO;
         BigDecimal integrity = BigDecimal.ZERO;
 
         if(totalCompareNum>0){
-            intonation = userSoundInfoMap.get(phone).getUserScoreMap().get("intonation").divide(new BigDecimal(totalCompareNum), 0, BigDecimal.ROUND_DOWN);
-            cadence = userSoundInfoMap.get(phone).getUserScoreMap().get("cadence").divide(new BigDecimal(totalCompareNum), 0, BigDecimal.ROUND_DOWN);
-            integrity = userSoundInfoMap.get(phone).getUserScoreMap().get("integrity").divide(new BigDecimal(totalCompareNum), 0, BigDecimal.ROUND_DOWN);
+            intonation = userSoundInfoMap.get(phone).getUserScoreMap().get("intonation").divide(new BigDecimal(currentCompareNum), 0, BigDecimal.ROUND_DOWN);
+            cadence = userSoundInfoMap.get(phone).getUserScoreMap().get("cadence").divide(new BigDecimal(currentCompareNum), 0, BigDecimal.ROUND_DOWN);
+            integrity = new BigDecimal(currentCompareNum).divide(new BigDecimal(totalCompareNum), CommonConstants.DECIMAL_PLACE, BigDecimal.ROUND_DOWN).multiply(oneHundred).setScale(0, BigDecimal.ROUND_DOWN);
         }
 
         WS_CLIENTS.get(phone).sendMessage(new TextMessage(JSON.toJSONString(createPushInfo("overall", -1, intonation, cadence, integrity))));
@@ -350,11 +373,22 @@ public class WebSocketHandler extends AbstractWebSocketHandler {
         sysMusicCompareRecordService.saveMusicCompareData(phone, userSoundInfoMap.get(phone).getMusicScoreId(), userSoundInfoMap.get(phone).getUserMeasureScoreMap());
     }
 
-    private WebSocketInfo createPushInfo(String commond, Integer measureIndex,
+    /**
+     * @describe 生成评分结果
+     * @author Joburgess
+     * @date 2021/6/25 0025
+     * @param command:
+     * @param measureIndex:
+     * @param intonation:
+     * @param cadence:
+     * @param integrity:
+     * @return com.ym.mec.biz.dal.dto.WebSocketInfo
+     */
+    private WebSocketInfo createPushInfo(String command, Integer measureIndex,
                                          BigDecimal intonation, BigDecimal cadence, BigDecimal integrity){
         WebSocketInfo webSocketInfo = new WebSocketInfo();
         HashMap<String, String> header = new HashMap<>();
-        header.put("commond", commond);
+        header.put("commond", command);
         webSocketInfo.setHeader(header);
         Map<String, Object> result = new HashMap<>();
         BigDecimal score = intonation.multiply(new BigDecimal(0.5)).add(cadence.multiply(new BigDecimal(0.5))).setScale(0, BigDecimal.ROUND_HALF_UP);