Joburgess 4 anni fa
parent
commit
568ea23f62

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

@@ -16,7 +16,7 @@ public class SoundCompareHelper {
     private Integer musicScoreId;
 
     @ApiModelProperty(value = "小节开始时间")
-    private double measureStartTime;
+    private double measureStartTime = 0;
 
     @ApiModelProperty
     private RandomAccessFile accessFile;
@@ -39,7 +39,7 @@ public class SoundCompareHelper {
     private Map<Integer, Float> musicalNotePitchMap = new HashMap<>();
 
     @ApiModelProperty(value = "偏移时间量,解决客户端录音播放不同步导致的声音留白")
-    private int offsetTime;
+    private int offsetTime = -1;
 
     private List<MusicPitchDetailDto> musicXmlInfos;
 

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

@@ -140,10 +140,10 @@ public class WebSocketHandler extends AbstractWebSocketHandler {
                 createHeader(phone);
                 break;
             case SoundSocketService.PROXY_MESSAGE:
-                if(bodyObject.containsKey(SoundSocketService.OFFSET_TIME)){
-                    int offsetTime = bodyObject.getIntValue(SoundSocketService.OFFSET_TIME);
-                    calOffsetTime(phone, offsetTime);
-                }
+//                if(bodyObject.containsKey(SoundSocketService.OFFSET_TIME)){
+//                    int offsetTime = bodyObject.getIntValue(SoundSocketService.OFFSET_TIME);
+//                    calOffsetTime(phone, offsetTime);
+//                }
                 break;
             default:
                 break;
@@ -160,21 +160,16 @@ public class WebSocketHandler extends AbstractWebSocketHandler {
             userSoundInfoMap.get(phone).getAccessFile().write(message.getPayload().array());
         }
 
-        List<MusicPitchDetailDto> recordInfo = new ArrayList<>();
         AudioDispatcher dispatcher = AudioDispatcherFactory.fromByteArray(message.getPayload().array(), audioFormat, simpleSize, overlap);
         dispatcher.addAudioProcessor(silenceDetecor);
         dispatcher.addAudioProcessor(new PitchProcessor(algo, simpleRate, simpleSize, (pitchDetectionResult, audioEvent) -> {
             int timeStamp = (int) (userSoundInfoMap.get(phone).getMeasureStartTime() + audioEvent.getTimeStamp()*1000);
             float pitch = pitchDetectionResult.getPitch();
-            double cents = 0;
-            if (pitch > 0) {
-                cents = PitchConverter.hertzToAbsoluteCent(pitch);
+            if(pitch>0 && userSoundInfoMap.get(phone).getOffsetTime() == -1){
+                calOffsetTime(phone, (int) (CollectionUtils.isEmpty(userSoundInfoMap.get(phone).getRecordMeasurePithInfo())?0:userSoundInfoMap.get(phone).getRecordMeasurePithInfo().get(userSoundInfoMap.get(phone).getRecordMeasurePithInfo().size()-1).getTimeStamp()));
             }
 //            LOGGER.info("时间:{}, 频率:{}, 分贝:{}, 音分:{}", timeStamp, pitch, silenceDetecor.currentSPL(), cents);
-//            if (silenceDetecor.currentSPL() < -66){
-//                pitch = -1;
-//            }
-            recordInfo.add(new MusicPitchDetailDto(timeStamp, pitch, silenceDetecor.currentSPL()));
+            userSoundInfoMap.get(phone).getRecordMeasurePithInfo().add(new MusicPitchDetailDto(timeStamp, pitch, silenceDetecor.currentSPL()));
         }));
         dispatcher.run();
         if(Objects.isNull(userSoundInfoMap.get(phone).getAccessFile())){
@@ -183,13 +178,10 @@ public class WebSocketHandler extends AbstractWebSocketHandler {
 
         double recordTime = userSoundInfoMap.get(phone).getAccessFile().length()/(audioFormat.getFrameSize()*audioFormat.getFrameRate())*1000;
         userSoundInfoMap.get(phone).setMeasureStartTime(recordTime);
-        userSoundInfoMap.get(phone).getRecordMeasurePithInfo().addAll(recordInfo);
         for (Map.Entry<Integer, MusicPitchDetailDto> userMeasureEndTimeMapEntry : userSoundInfoMap.get(phone).getMeasureEndTime().entrySet()) {
             int ot = (int) (userMeasureEndTimeMapEntry.getValue().getDuration()*0.1);
             if(recordTime>(userMeasureEndTimeMapEntry.getValue().getEndTimeStamp()+ot)){
-//                LOGGER.info("频分开始{}:{}, {}, {}", recordTime, userSoundInfoMap.get(phone).getAccessFile().length(), ot, JSON.toJSONString(userMeasureEndTimeMapEntry.getValue()));
                 measureCompare(phone, userMeasureEndTimeMapEntry.getKey());
-//                measureCompare2(phone, userMeasureEndTimeMapEntry.getValue());
                 userSoundInfoMap.get(phone).getMeasureEndTime().remove(userMeasureEndTimeMapEntry.getKey());
                 break;
             }
@@ -279,6 +271,10 @@ public class WebSocketHandler extends AbstractWebSocketHandler {
      * @return void
      */
     private void measureCompare(String phone, int measureIndex) throws IOException {
+        if (userSoundInfoMap.get(phone).getOffsetTime() == -1){
+            userSoundInfoMap.get(phone).setOffsetTime(0);
+        }
+
         //相似度
         BigDecimal intonation = BigDecimal.ZERO;
         //节奏