Joburgess 4 anni fa
parent
commit
2cc6cbe3fa

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

@@ -44,7 +44,10 @@ public class WebSocketHandler extends AbstractWebSocketHandler {
     //存储客户端链接
     public static final Map<String, WebSocketSession> WS_CLIENTS = new ConcurrentHashMap<>();
 
-    private BigDecimal oneHundred = new BigDecimal(100);
+    private final BigDecimal oneHundred = new BigDecimal(100);
+
+    private final BigDecimal tenPercent = new BigDecimal(0.1);
+
     private final float simpleRate = 44100;
     private int simpleSize = 1024;
 
@@ -53,6 +56,7 @@ public class WebSocketHandler extends AbstractWebSocketHandler {
 
     private static final String tmpDir = FileUtils.getTempDirectoryPath() + "/soundCompare/";
 
+    //用户对应评分信息
     private Map<String, SoundCompareHelper> userSoundInfoMap = new ConcurrentHashMap<>();
 
     @Autowired
@@ -146,7 +150,7 @@ public class WebSocketHandler extends AbstractWebSocketHandler {
         dispatcher.addAudioProcessor(new PitchProcessor(algo, simpleRate, simpleSize, (pitchDetectionResult, audioEvent) -> {
             int timeStamp = (int) (userSoundInfoMap.get(phone).getMeasureStartTime() + audioEvent.getTimeStamp()*1000);
             float pitch = pitchDetectionResult.getPitch();
-            LOGGER.info("频率:{}, {}", timeStamp, pitch);
+//            LOGGER.info("频率:{}, {}", timeStamp, pitch);
             recordInfo.add(new MusicPitchDetailDto(timeStamp, pitch));
         }));
         dispatcher.run();
@@ -266,8 +270,10 @@ public class WebSocketHandler extends AbstractWebSocketHandler {
             int totalCompareNum = userSoundInfoMap.get(phone).getMeasureXmlInfoMap().get(measureIndex).size();
 
             for (MusicPitchDetailDto musicXmlInfo : userSoundInfoMap.get(phone).getMeasureXmlInfoMap().get(measureIndex)) {
-                int startTimeStamp = musicXmlInfo.getTimeStamp();
-                int endTimeStamp = musicXmlInfo.getTimeStamp()+musicXmlInfo.getDuration();
+                int ignoreTime = (int) (musicXmlInfo.getDuration() * 0.1);
+
+                int startTimeStamp = musicXmlInfo.getTimeStamp() + ignoreTime;
+                int endTimeStamp = musicXmlInfo.getTimeStamp()+musicXmlInfo.getDuration() - ignoreTime;
 
                 //时间范围内有效音准数量
                 float recordValidIntonationNum = 0;
@@ -278,14 +284,14 @@ public class WebSocketHandler extends AbstractWebSocketHandler {
                 //时间范围内匹配次数
                 float compareNum = 0;
                 for (MusicPitchDetailDto recordInfo : userSoundInfoMap.get(phone).getRecordMeasurePithInfo()) {
-//                    LOGGER.info("频率:{}, {}", musicXmlInfo.getFrequency(), recordInfo.getFrequency());
                     //如果在时间范围之外直接跳过
                     if(recordInfo.getTimeStamp()<startTimeStamp||recordInfo.getTimeStamp()>endTimeStamp){
                         continue;
                     }
+                    LOGGER.info("{}频率({}-{}):{}, {}", recordInfo.getTimeStamp(), startTimeStamp, endTimeStamp, musicXmlInfo.getFrequency(), recordInfo.getFrequency());
                     compareNum++;
                     //如果在最低有效频率以下则跳过
-                    if(recordInfo.getFrequency()<minValidFrequency){
+                    if(recordInfo.getFrequency()<minValidFrequency&&musicXmlInfo.getFrequency()!=-1){
                         continue;
                     }
                     recordValidNum++;