Joburgess пре 4 година
родитељ
комит
29b62ba185

+ 11 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/SoundCompareHelper.java

@@ -35,6 +35,17 @@ public class SoundCompareHelper {
 
     private Map<Integer, Map<String, BigDecimal>> userMeasureScoreMap = new HashMap<>();
 
+    @ApiModelProperty(value = "偏移时间量,解决客户端录音播放不同步导致的声音留白")
+    private int offsetTime;
+
+    public int getOffsetTime() {
+        return offsetTime;
+    }
+
+    public void setOffsetTime(int offsetTime) {
+        this.offsetTime = offsetTime;
+    }
+
     public Integer getMusicScoreId() {
         return musicScoreId;
     }

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

@@ -269,11 +269,23 @@ public class WebSocketHandler extends AbstractWebSocketHandler {
 
             int totalCompareNum = userSoundInfoMap.get(phone).getMeasureXmlInfoMap().get(measureIndex).size();
 
-            for (MusicPitchDetailDto musicXmlInfo : userSoundInfoMap.get(phone).getMeasureXmlInfoMap().get(measureIndex)) {
-                int ignoreTime = (int) (musicXmlInfo.getDuration() * 0.1);
+            //如果是第一小节,需要计算出录音与播放不同步导致的空白时间偏移量
+            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;
+                    }
+                }
+            }
 
-                int startTimeStamp = musicXmlInfo.getTimeStamp() + ignoreTime;
-                int endTimeStamp = musicXmlInfo.getTimeStamp()+musicXmlInfo.getDuration() - ignoreTime;
+            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();
 
                 //时间范围内有效音准数量
                 float recordValidIntonationNum = 0;