Quellcode durchsuchen

feat:小节评分

Joburgess vor 4 Jahren
Ursprung
Commit
6a8ca9e119

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

@@ -306,10 +306,10 @@ public class WebSocketHandler extends AbstractWebSocketHandler {
 
             for (int i = 0; i < userSoundInfoMap.get(phone).getMeasureXmlInfoMap().get(measureIndex).size(); i++) {
                 MusicPitchDetailDto musicXmlInfo = userSoundInfoMap.get(phone).getMeasureXmlInfoMap().get(measureIndex).get(i);
-                int ot5 = (int) (musicXmlInfo.getDuration()*0.001);
+                int ot5 = (int) (musicXmlInfo.getDuration()*0.05);
                 int halfOt = (int) (musicXmlInfo.getDuration()*0.35);
-                int startTimeStamp = musicXmlInfo.getTimeStamp() + userSoundInfoMap.get(phone).getOffsetTime() - ot5;
-                int endTimeStamp = musicXmlInfo.getTimeStamp()  + userSoundInfoMap.get(phone).getOffsetTime() + musicXmlInfo.getDuration() + ot5;
+                int startTimeStamp = musicXmlInfo.getTimeStamp() + userSoundInfoMap.get(phone).getOffsetTime() + ot5;
+                int endTimeStamp = musicXmlInfo.getTimeStamp()  + userSoundInfoMap.get(phone).getOffsetTime() + musicXmlInfo.getDuration() - ot5;
 
                 //时间范围内有效节奏数量
                 float cadenceValidNum = 0;
@@ -423,7 +423,7 @@ public class WebSocketHandler extends AbstractWebSocketHandler {
                             recordCents = PitchConverter.hertzToAbsoluteCent(avgPitch);
                         }
                         double cents = PitchConverter.hertzToAbsoluteCent(musicXmlInfo.getFrequency());
-                        double score = 100 - Math.round(Math.abs(cents - recordCents)) + 10;
+                        double score = 100 - Math.round(Math.abs(cents - recordCents)) + 3;
                         if (score < 0){
                             score = 0;
                         }else if(score > 100){
@@ -446,9 +446,9 @@ public class WebSocketHandler extends AbstractWebSocketHandler {
 
             BigDecimal measureNum = new BigDecimal(totalCompareNum);
 
-            intonation = new BigDecimal(intonationScore).divide(measureNum, CommonConstants.DECIMAL_PLACE, BigDecimal.ROUND_DOWN).setScale(0, BigDecimal.ROUND_HALF_UP);
-            cadence = new BigDecimal(cadenceNum).divide(measureNum, CommonConstants.DECIMAL_PLACE, BigDecimal.ROUND_DOWN).multiply(oneHundred).setScale(0, BigDecimal.ROUND_HALF_UP);
-            integrity = new BigDecimal(integrityScore).divide(measureNum, CommonConstants.DECIMAL_PLACE, BigDecimal.ROUND_DOWN).multiply(oneHundred).setScale(0, BigDecimal.ROUND_HALF_UP);
+            intonation = new BigDecimal(intonationScore).divide(measureNum, CommonConstants.DECIMAL_PLACE, BigDecimal.ROUND_DOWN).setScale(0, BigDecimal.ROUND_UP);
+            cadence = new BigDecimal(cadenceNum).divide(measureNum, CommonConstants.DECIMAL_PLACE, BigDecimal.ROUND_DOWN).multiply(oneHundred).setScale(0, BigDecimal.ROUND_UP);
+            integrity = new BigDecimal(integrityScore).divide(measureNum, CommonConstants.DECIMAL_PLACE, BigDecimal.ROUND_DOWN).multiply(oneHundred).setScale(0, BigDecimal.ROUND_UP);
 
         } catch (ArithmeticException e){
             LOGGER.info("无musicXml信息");
@@ -690,7 +690,7 @@ public class WebSocketHandler extends AbstractWebSocketHandler {
         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);
-        BigDecimal score = intonation.add(cadence).add(integrity).divide(new BigDecimal(3), CommonConstants.DECIMAL_PLACE, BigDecimal.ROUND_DOWN).setScale(0, BigDecimal.ROUND_HALF_UP);
+        BigDecimal score = intonation.add(cadence).add(integrity).divide(new BigDecimal(3), CommonConstants.DECIMAL_PLACE, BigDecimal.ROUND_DOWN).setScale(0, BigDecimal.ROUND_UP);
 //        BigDecimal score = integrity.setScale(0, BigDecimal.ROUND_HALF_UP);
         result.put("score", score);
         result.put("intonation", intonation);