|
|
@@ -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);
|